Радиолюбительство — мое хобби, поэтому постоянного рабочего места нет. Обычно приходится каждый раз доставать все причендалы из шкафа, раскладывать на столе или на полу, затем каждый раз убирать. Розетка при этом в зоне работы обычно одна, сделать удлинтель все время лень, да его тоже нужно где-то хранить. А с одной розеткой напрягает проведя тест устройства питающегося от розетки, потом снова ждать минут 5 пока разогреется паяльник. Почитав интернет решил что мне нужна паяльная станция, но тратить 5-10 т.р. ради увлечения пока оказался не готов. Решение — самодельная пальная станция.
Кому интересно что получилось — прошу под кат.


Для начала за 250 рублей купил на али вот такой паяльник
image

Паяльник так себе но для дома пойдет, пришлось правда жало сразу заменить, благо сейчас их на выбор по 100р штука.
Блок питания купил готовый на 60Вт 24 вольта.

Схемы опять не будет, но на печатке подписал все номиналы.
image
Плата в формате lay

Цель была все собрать на одной плате и как можно компактнее. Стабилизатор питания и полевик установил лежа. Устройство питается от 5 вольт и как оказалось 7805 при этом греется до 70-80 градусов, поставил небольшой радиатор, полевик не греется совсем.

Плату делал ЛУТом, получилось почти идеально:
До протравки:
image
И после сборки:
image

Готовый регулятор в сборе выглядит на мой взгляд даже симпатично
image

Если разъем для программатора не устанавливать, то плата без единой перемычки.
Как видим и деталей минимум, даже резисторов по минимуму, только на общие выводы индикатора.
Индикатор красный с большими цифрами, управление энкодером (валкодером).
Первое включение:
image

От классического ПИД отказался, сделал некое его подобие, цель — минимальное время нагрева.
Если нажать вал энкодера и подержать 3 секунды можно настроить режим отображения, шаг настройки и корректировку температуры (термопары все разные).
Снял видео на телефон, качество не очень, но принцип работы понятен


Корпус, корпус… и тут родилась отличная мысль
image

А когда пора убирать в шкаф:
image

Исходники кода для желающих повторить.
Скачать проект для атмел студии
Код проекта
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/eeprom.h>

unsigned char display_on, registr, butt1,butt2,butt3, butt3s, zamer,rezhim,mode,param,params, edit, redit, blink, wait2, wait3, wait5, wait6, wait7, rdisp, encoder_r, encoder_l, right, left, prewmode;
unsigned char ind[4],tempvar, tempmem;
float measureint, voltage_ADC,tmp;
unsigned int stop_h, stop_m, pwm_d, measure, pmeasure;
int pwm,tempch;
//unsigned int voltage_ADC;
unsigned char param1[10]; 
unsigned char param1eeprom[10] EEMEM;
uint16_t tempset,measure; uint16_t tem EEMEM;
unsigned char pwm_m[455] EEMEM;

ISR (TIMER0_OVF_vect)
{
		 if(display_on==1)  
			 {
				 PORTB |= (1 << PB6); PORTD |= (1 << PD7); PORTD |= (1 << PD3); PORTC |= (1 << PC2);
				
				 PORTB &=~ (1 << PB0); //1
				 PORTC &=~ (1 << PC1); //2
				 PORTD &=~ (1 << PD4); //3
				 PORTD &=~ (1 << PD2); //4
				 PORTD &=~ (1 << PD5); //5
				 PORTB &=~ (1 << PB7); //6
				 PORTD &=~ (1 << PD6); //7
			 }
			 
		 if(display_on==37)
			 {
				
				if(ind[registr]==0 || ind[registr]==6 || ind[registr]==9) {display_on=display_on+20;} //6 сегментов
					if(ind[registr]==2 || ind[registr]==3 || ind[registr]==5 || ind[registr]=='P') {display_on=display_on+25;} //5 сегментов
					 if(ind[registr]==4 || ind[registr]=='g') {display_on=display_on+35;} //4 сегмента	
						if(ind[registr]==7) {display_on=display_on+40;} // 3 сегмента
						 if(ind[registr]==1) {display_on=display_on+45;} //2 сегмента
							 if(ind[registr]=='-') {display_on=display_on+50;} //2 сегмента
				 				 
				 if(registr==0) { PORTB &=~ (1 << PB6);}
				 if(registr==1) { PORTD &=~ (1 << PD3);}
				 if(registr==2) { PORTC &=~ (1 << PC2);}
				 if(registr==3) { PORTD &=~ (1 << PD7);}
								
					 if (ind[registr]==0) {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTB |= (1 << PB7);}//0
					 if (ind[registr]==1) {PORTD |= (1 << PD2);PORTD |= (1 << PD5);}//1
					 if (ind[registr]==2) {PORTB |= (1 << PB0);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//2
					 if (ind[registr]==3) {PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//3
					 if (ind[registr]==4) {PORTC |= (1 << PC1);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTD |= (1 << PD6);}//4
					 if (ind[registr]==5) {PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//5
					 if (ind[registr]==6) {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//6
					 if (ind[registr]==7) {PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);}//7
					 if (ind[registr]==8) {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//8
					 if (ind[registr]==9) {PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD5);PORTB |= (1 << PB7); PORTD |= (1 << PD6);}//9
					 if (ind[registr]=='P') {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2);PORTD |= (1 << PD6);}//P
					 if (ind[registr]=='g') {PORTC |= (1 << PC1);PORTD |= (1 << PD4);PORTD |= (1 << PD2); PORTD |= (1 << PD6);}//g	
					 if (ind[registr]=='-') {PORTD |= (1 << PD6);}//- 
					  if (ind[registr]=='F') {PORTB |= (1 << PB0);PORTC |= (1 << PC1);PORTD |= (1 << PD4); PORTD |= (1 << PD6);}//F
					  if (ind[registr]=='n') {PORTB |= (1 << PB0);PORTD |= (1 << PD5); PORTD |= (1 << PD6);}//n	 
						 
				 registr++;
				 if (registr>3){registr=0;}
			 }
			 
			 display_on++;
			 if (display_on>100){display_on=1;blink++; if(blink>250){blink=0;} ADCSR |= (1<<ADSC);}
				 if(blink==250){wait2++; if(wait2>250){wait2=0;}}
				  if(wait2==250){wait3++; if(wait3>250){wait3=251;}; butt3s++; if(butt3s>250){butt3s=251;}; wait5++;wait6++;}	 
				   if(wait3==3 && mode==1){mode=0;}
					   if(wait5==20){wait5=0;}
						   if(wait5==51){wait5=0;}
							   if(wait5==50){wait6++; if(wait6==250){wait6=0;};if(wait6==param1[3]){rezhim=0;}}
				   
}

void init_pwm (void)
{
	TCCR1A|=(1<<COM1A0);
	TCCR1A|=(1<<COM1A1);
	TCCR1B|=(1<<CS10);
	//TCCR1A|=(1<<WGM10);
	TCCR1A|=(1<<WGM11); 
	//TCCR1B|=(1<<WGM12);
	TCCR1B|=(1<<WGM13);
		
	//Установка начальных значений счетчиков
	OCR1A=27000;
	//OCR1B=10000; //Выключен 0 от 200/170 до 250/215
	ICR1=27000;
}

ISR (ADC_vect)//прерывание по завершению преобразования АЦП
{
	voltage_ADC = voltage_ADC+ADCW;//считываем значение АЦ преобразования
	if (zamer==100) 
	 {
	   measureint=voltage_ADC/zamer;
	   measure=measureint*param1[2]/100;
	   
	   if(rezhim==1)
	    {   
	     if(mode==0)
		  {
			if(param1[0]>0) {ind[0]=measure/100;ind[1]=measure%100/10;ind[2]=measure%10;ind[3]='g';}
			if(param1[0]==0) 
			    {
				  if(tempset<100){ind[0]=-1;} else {ind[0]=tempset/100;}
					 if(tempset<10) {ind[1]=-1;} else {ind[1]=tempset%100/10;}
						 ind[2]=tempset%10;ind[3]='g';
				}
	      }
		 if(mode==1)
		    {  
			  if(blink<170)
			   {if(tempset<100){ind[0]=-1;} else {ind[0]=tempset/100;}
			    if(tempset<10) {ind[1]=-1;} else {ind[1]=tempset%100/10;}
			    ind[2]=tempset%10;ind[3]='g';
			   }
				  if(blink>170){ind[0]=-1;ind[1]=-1;ind[2]=-1;ind[3]=-1;}
			}
	    }
	 
	  	  
	  if(tempmem==0)
	    {
	         if(wait5==10)//5=10 секунд
	         {
		          if(tempch==0 && tempset==measure && eeprom_read_byte(&pwm_m[tempset])!=pwm)
		          {eeprom_write_byte(&pwm_m[tempset],pwm); tempmem=1; ind[0]='g';ind[1]='g';ind[2]='g';}
									  					  
				 if(tempset!=measure) 
		         {
			         pwm_d=tempset-measure;
			         pwm=pwm+pwm_d;
		         }
		         wait5=0;tempch=0;
		     }
		
		    if(pmeasure<measure && tempset<measure) //температура больше установленно и наблюдается рост
			  {
				pwm_d=measure-tempset; tempch++;
				pwm=pwm-pwm_d;
				pmeasure=measure;
			  }
			  
			  if(pmeasure>measure && tempset>measure) //температура меньше установленно и наблюдается снижение
			  {
				pwm_d=tempset-measure; tempch++;
				pwm=pwm+pwm_d*measure/100; 
				pmeasure=measure;
			  }	
			  	  
		  }
		
		 
		 if(wait5==10 && tempmem==1)//5=10 секунд
		   {  
					
			 if(tempset<measure){pwm=pwm-1;}
			 if(tempset>measure){pwm=pwm+1;}
			 if(tempset==measure && eeprom_read_byte(&pwm_m[tempset])>pwm && eeprom_read_byte(&pwm_m[tempset])-pwm>5){eeprom_write_byte(&pwm_m[tempset],pwm);}
			 if(tempset==measure && eeprom_read_byte(&pwm_m[tempset])>pwm && eeprom_read_byte(&pwm_m[tempset])-pwm>5){eeprom_write_byte(&pwm_m[tempset],pwm);}	 
			 wait5=0;
			 if(tempset==measure && tempmem==1 && (int)(voltage_ADC*param1[2]/100)%zamer<50){tmp=tmp-10;}
			 if(tempset==measure && tempmem==1 && (int)(voltage_ADC*param1[2]/100)%zamer>50){tmp=tmp+10;}
							 
		   }	
			 
		if(pwm>250){pwm=250;} if(pwm<0){pwm=0;}
		if(tempset-10>measure && tempmem==1){OCR1A=0;wait5=0;wait6=0;} else {OCR1A=27000+tmp-pwm*108;}   
	  voltage_ADC=0;zamer=0;		
	}
	zamer++; 
		
	if (rezhim!=1) {OCR1A=27000;} 
		if (measure>480) {OCR1A=27000;rezhim=0;OCR1A=27000;}
	
	
	//ADCSR |= (1<<ADSC);//запускаем очередное преобразование
}


//Основная программа
int main(void)
{

TIMSK |= (1 << TOIE0); // Разрешаем прерывание по переполнению Т2
TCCR0|=(0<<CS02)|(1<<CS00);
init_pwm(); //Инициализация ШИМ каналов


//ads
ADMUX|= (1<<REFS0); //ВНУТРЕННЕЕ ОПОРНОЕ
ADCSRA |= (1<<ADEN) | (1<<ADSC) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
sei(); // Глобально разрешаем прерывания

PORTB=0b00000000; PORTC=0b00101000; PORTD=0b00000001;//Включаем подтягивающий резистор
DDRB=0b11111111; DDRC=0b11010110; DDRD=0b11111110;
			 
butt1=0;butt2=0;butt3=0;rezhim=0;mode=0;params=0;edit=0;redit=0;blink=0;tempmem=0;tempch=0;
encoder_l=40; encoder_r=0; right=0; left=0;butt3s=0;wait3=0;wait2=0;mode=0;prewmode=0;pwm_d=0;

tempset = eeprom_read_word(&tem); if(tempset>500){tempset=100;}	
param1[0] = eeprom_read_byte(¶m1eeprom[0]); if(param1[0]>1){param1[1]=1;}
param1[1] = eeprom_read_byte(¶m1eeprom[1]); if(param1[1]>10){param1[1]=5;}	
param1[2] = eeprom_read_byte(¶m1eeprom[2]); if(param1[2]>250){param1[2]=75;}
param1[3] = eeprom_read_byte(¶m1eeprom[3]); if(param1[3]>250){param1[3]=10;}
	
pwm=eeprom_read_byte(&pwm_m[tempset]); if (pwm<255){tempmem=1;}

while (1) //Вечный цикл
{
if(tempset<100){tempset=100;}	if(tempset>450){tempset=450;}
	
//кнопка энкодера
if ((PINC&(1<<PC5))==0x00){butt1++; if(butt1>200){butt1=201;}} else {butt1=0;}
 if(butt1==200 && rezhim==0){butt3s=0; rezhim=1; butt1=201;}
 if(butt1==200 && rezhim==1){butt3s=0; rezhim=0; butt1=201;}
 if(butt1==200) {butt3s=0;}
	
	if (butt1==201 && butt3s==2 && rezhim!=2){rezhim=2;butt3s=10;}
	if (butt1==201 && butt3s==2 && rezhim==2){rezhim=0;butt3s=10;}	
    
//Поворот энкодера	
if ((PIND&(1<<PD0))==0x00){butt2++; if(butt2>encoder_l){butt2=encoder_l+1;}} else {butt2=0;}
if ((PINC&(1<<PC3))==0x00){butt3++; if(butt3>encoder_l){butt3=encoder_l+1;}} else {butt3=0;}

if(right==1 || left==1){right=0; left=0;}
if(encoder_r==0) 
  {
	  if(butt2==encoder_l+1 && butt3==encoder_l) {encoder_r=encoder_l*5;mode=1;wait3=0;right=1;}
	  if(butt3==encoder_l+1 && butt2==encoder_l) {encoder_r=encoder_l*5;mode=1;wait3=0;left=1;}
  }
if(encoder_r==0){encoder_r=1;} encoder_r--;

if(mode!=prewmode){prewmode=mode; eeprom_write_word(&tem, tempset);} 

if(rezhim==0)
{
	if(blink<170){ind[0]=-1; ind[1]=-1; ind[2]=-1; ind[3]=-1;}
	if(blink>170){ind[0]='-'; ind[1]='-'; ind[2]='-'; ind[3]='-';}
}

if(rezhim==1)
  {
	 if(right==1) {tempset=tempset+param1[1];pwm=eeprom_read_byte(&pwm_m[tempset]); if (pwm<255){tempmem=1;tmp=0;}else{tempmem=0;pwm=1;tmp=0;} } 
	 if(left==1){tempset=tempset-param1[1];pwm=eeprom_read_byte(&pwm_m[tempset]); if (pwm<255){tempmem=1;tmp=0;}else{tempmem=0;pwm=1;tmp=0;} }
  }
  

if(rezhim==2)
 {
	if(butt1==200){if(edit==0){edit=1;tempvar=-1;} else {edit=0; eeprom_write_byte(¶m1eeprom[params], param1[params]);} }
	
	if(edit==0)
	 {
		  ind[0]='P'; ind[1]=params; ind[2]=-1; ind[3]=-1;
		  if(right==1){params++;}; if(left==1){params--;}
			  if(params<0){params=0;}; if(params>3){params=3;}
	 }
	
	if(edit==1)
	{
	 if(blink==1 || tempvar!=param1[params])
		 {
			
		 if(param1[params]<100){ind[0]=-1;} else {ind[0]=param1[params]/100;}
		 if(param1[params]<10) {ind[1]=-1;} else {ind[1]=param1[params]%100/10;}
		 ind[2]=param1[params]%10;
	     }
	     if(blink>170){ind[0]=-1;ind[1]=-1;ind[2]=-1;ind[3]=-1;}
		tempvar=param1[params];
		if(right==1){param1[params]++;};if(left==1){param1[params]--;}
			if(param1[params]<0){param1[params]=0;} if(param1[params]>250){param1[params]=1;}
		if(params==0) {if(param1[params]<0){param1[params]=0;} if(param1[params]>1){param1[params]=1;}}	
			if(params==1) {if(param1[params]<1){param1[params]=1;} if(param1[params]>50){param1[params]=50;}}	
				if(params==2) {if(param1[params]<0){param1[params]=0;} if(param1[params]>250){param1[params]=250;}}	
					if(params==3) {if(param1[params]<0){param1[params]=0;} if(param1[params]>250){param1[params]=250;}}	
    }
	 
 }
 

 } //loop
} //main


<spoiler />

Комментарии (61)


  1. Rumlin
    03.04.2016 14:11
    +1

    Корпус шикарен. Может стоило БП от ноутбука применять? Освободилось бы место в кейсе.


    1. alexhott
      03.04.2016 18:35
      +1

      от ноутбука максимум 19 вольт, не удалось бы максимальный разгон сделать.


      1. tesla254
        05.04.2016 13:53

        Можно настроить на 24в заменив пару резисторов.


  1. devprodest
    03.04.2016 14:26
    +1

    из предложений:

    1. 7805 греется из-за большой разницы напряжений вход выход, стоило бы посмотреть на другие стабилизаторы.
    2. Индикатор хорошо бы через резисторы включать.
    3. Я бы разъем питания перевернул на 180 градусов(отразил зеркально) проще была бы разводка

    В итоге замечательная получилась вещь. Долгой работы и хороших электронных поделок с новым инструментом.


    1. alexhott
      03.04.2016 18:34
      +1

      1 Это понятно но альтернативы проще и дешевле нет, только ШИМ. Но так как не критично оставил этую
      2 Обязательно там их целых 4, правда вместо 7.
      3 Пытался, но вообще не получилось развести


    1. alexhott
      03.04.2016 19:25

      Спасибо на добром слове


  1. istui
    03.04.2016 14:34

    Интересная реализация и хорошая идея с корпусом.
    Лично мне тоже был нужен компактный паяльник, но особых требований к точной температуре нет.

    Я использую ZD-927 - вдруг кому пригодится
    Цена пару лет назад была около 500р.


    1. tandzan
      03.04.2016 18:22

      Я же пару лет назад приобрел
      CXG DS90T, очень приятный в использовании.


      1. Yadro
        04.04.2016 13:26

        Слишком уж маломощный


        1. Yadro
          04.04.2016 13:53

          не та ветка, а этот выглядит неплохо


        1. tandzan
          04.04.2016 13:57

          Это сарказм или как? Без тэга не понятно. В линейке продукции у них есть 60, 90 и 110 Вт паяльники. Взял 90 Вт исключительно для того, чтоб быстрее нагревался. Выставленную температуру запоминает.


          1. Yadro
            04.04.2016 14:55

            я не под тем комментарием написал. ZD-927, им паять просто нереально.


            1. istui
              04.04.2016 15:13

              смотря что паять и в каком объеме… Для моих задач его чаще всего более чем достаточно.


      1. svi0105
        04.04.2016 13:26

        А он запоминает последнюю выставленную температуру после выключения?


        1. alexhott
          04.04.2016 13:27

          Да запоминает, каждый раз при изменении настройки


    1. JerleShannara
      04.04.2016 19:09

      И что кроме мелких SMD, которые не подпаяны к земляным/силовым полигонам им можно паять?


      1. istui
        06.04.2016 13:50

        Любую мелочевку, небольшие провода, PTH элементы вполне хорошо паяются. Для других задач есть другие паяльники.


      1. alexhott
        06.04.2016 16:20
        +1

        Че угодно можно паять, температуру побольше и нормально пропаивает ногу трансформатора на большом полигоне.
        Поменьше — и аккуратно мелкие элементы поаяются


  1. ClearAirTurbulence
    03.04.2016 15:03
    +1

    Это замечательно, и сделано на высоком уровне. Но мне кажется, что даже для нечастого использования (скажем, >=10 раз в год) уже лучше взять хороший инструмент. Goot PX-501 за $85 (а) не нужно изготавливать и (б) наверняка нагревается быстрее. Хотя ели хочется крафтить, то почему бы и нет.


    1. asdfghjk12
      03.04.2016 18:57
      +1

      Для нечастого использования лучше взять китайскую станцию подешевле, а если есть $85, то лучше ещё столько же доложить и взять самый дешёвый индукционный типа Квик 202D — он за 5...7 секунд разогревается… И дури в нём достаточно даже для материнок и АТХ БП. С жалами правда нюанс, но в Москве они есть и доступна доставка


  1. holomen
    03.04.2016 15:12
    +2

    Что-то уж сильно наворочено отображение.

    #define segPORT PORTA //порт сегментов
    #define segDDR DDRA
    #define segA 6
    … остальные аналогично
    #define segMASK ((1<<segA) | (1<<segB) | (1<<segC) | (1<<segD) | (1<<segE) | (1<<segF) | (1<<segG))

    #define digPORT PORTB //порт цифр
    #define digDDR DDRB
    #define dig0 0
    … остальные аналогично
    #define digMASK ((1<<dig0) | (1<<dig1) | (1<<dig2) | (1<<dig3) | (1<<dig4) | (1<<dig5))

    #define sym0 ((0<<segA)|(0<<segB)|(0<<segC)|(0<<segD)|(0<<segE)|(0<<segF)|(1<<segG)) //0x00
    остальные символы аналогично

    static const uchar symb[] = {
    sym0, sym1, sym2, sym3, sym4, sym5, sym6, sym7, sym8, sym9,
    symA, symB, symC, symD, symE, symF,… и остальные символы
    }; //первые 16 отводим под цифры и соотв. буквы чтобы прямо записывать

    static uchar led_data[7]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
    static uchar led_dig[] = {
    (1<<dig0), (1<<dig1), (1<<dig2), (1<<dig3), (1<<dig4), (1<<dig5)};

    ISR(TIMER0_COMP_vect)
    {
    static uchar segs_counter = 0;

    segs_counter++;
    segPORT |= segMASK;
    if (segs_counter == 7) segs_counter=0x00;

    if (segs_counter < 6)
    {
    OFF(SYM);
    digPORT = led_dig[segs_counter];
    }
    else if (segs_counter == 6)
    {
    ON(SYM);
    digPORT &= ~(digMASK);
    }
    segPORT=led_data[segs_counter];

    if (buzz==1) TOGGLE(BUZZ);

    }


    1. alexhott
      03.04.2016 18:30

      Согласен, но на СИ пишу первый раз и изучать для одного проекта было лень. Но подучу в следующем проекте.


      1. holomen
        04.04.2016 21:50

        Да здесь ничего особенного нет совсем, все не дальше начала букваря.


  1. Andy_Big
    03.04.2016 15:47

    Такие жала — уже вчерашний день, на мой взгляд. Если делать, то на жалах T-12, после них на паяльники с 900-ми жалами возвращаться уже нет никакого желания :)


    1. alexhott
      03.04.2016 18:39
      +1

      Эти изношу посмотрю на Т-12, сейчас их использовать не проблема, купить паяльник и разъем перепаять


      1. Andy_Big
        04.04.2016 00:46

        Схемотехнику придется менять, там термопара включена последовательно с нагревателем :)


  1. Zlyton
    03.04.2016 17:34

    Выглядит неплохо.
    А не слишком ли много кода в обработчиках прерываний?


  1. kellakilla
    03.04.2016 17:34

    при компиляции у меня компилятор ругнулся на эту строчку:
    if(butt1==200){if(edit==0){edit=1;tempvar=-1;} else {edit=0; eeprom_write_byte(¶m1eeprom[params], param1[params]);} }
    Не могли бы Вы код вставить не спойлером, а файлом среды?


    1. alexhott
      03.04.2016 18:32

      Пытался выложить в специальном теге для кода, но он не сворачивается, а такая партянка в сообщении мне не нравится.
      Выложил ссылку на проект для атмел студии.


    1. schetilin
      03.04.2016 18:39

      if(butt1==200){if(edit==0){edit=1;tempvar=-1;} else {edit=0; eeprom_write_byte(¶m1eeprom[params], param1[params]);} }
      жирным — ошибка
      что-то лишнее скопировалось.


      1. kellakilla
        03.04.2016 18:53

        Я тоже несколько удивился от увиденного. Так скопировалось из тега спойлер, и это не одна такая ошибка, при использовании данного тега внезапно в рендомных местах дописывается подобные хинты.


      1. alexhott
        03.04.2016 19:27

        там вместо должно быть… &m1eeprom...


  1. serafims
    03.04.2016 22:22
    +1

    Эх, ну как без схемы-то? Или хотя бы ссылки, которыми вдохновлялись.
    Наверное, кто-нибудь подсказал бы сразу, что в ней можно улучшить.
    А по коду — незначащие нули хорошо бы гасить…
    А так очень неплохая реализация!


    1. Inkvizitor66
      04.04.2016 18:31

      Присоединяюсь, тоже хотел бы посмотреть на схему, посмотреть, возможно свою такую сделать… заодно потренироваться разводить


  1. Carry
    04.04.2016 00:59

    Интересная реализация. Спасибо!
    Хороший пинок для меня. Валяется несколько паяльников с дохлыми высокоомными нагревателями, есть несколько низкоомных термоэлементов.
    Давно хотел сделать мобильный вариант паяльника с родным конструктивом, но теперь понял что можно сделать гораздо лучше.
    Только я буду с двумя питаниями делать: 220 и 12.


    1. alexhott
      04.04.2016 13:29

      Эта схема на 12 вольт прекрасно работает, только чуть дольше нагревается.


  1. KeyDach1717
    04.04.2016 08:58
    +1

    Автор молодец! Подобное, конечно, продают и китайцы (легко ищется по словам «Digital Soldering Iron Station Temperature Controller for T12 Heating Core», например), но созданное самостоятельно, да еще и качественно, достойно уважения. Спасибо за идею встраивания паяльной станции в ящик с инструментами.


  1. Alexeyslav
    04.04.2016 10:23
    +1

    Общая шина в виде дорожки у вас огибает ВСЮ плату целиком, причем дорожка-то силовая. Отличный контур получается для излучения помех. Удивительно, что никаких проблем при этом у схемы не возникает, это как раз тот случай когда схема работает без глюков вопреки всему. Всё-таки сделать одну перемычку и провести общий провод к паяльнику СЛЕВА(на изображении платы) по кратчайшему пути было бы предпочтительней.
    Кстати, по этой причине возле данного паяльника в радиусе 50см нельзя держать дискеты и магнитные кассеты иначе МОГУТ размагнитится, а так же расположить подальше от ЭЛТ-монитора.


    1. alexhott
      04.04.2016 13:46
      +1

      Это не силовая дорога, питание нагревателя это номера 2 и 5 на фишке, 1 и 3 это земля и минус термопары, 4 — плюс термопары, через нее питается сам контроллер.
      Но и при том. что дорога не силовая глюки были, усилитель термопары видите как от 1 ноги запитан, а сначала был запитан от конденсатора, при этом сильно смещая ноль.


      1. Alexeyslav
        04.04.2016 17:07

        Ежели так то ладно. Помехи по термопаре можно и программно убрать, если они вообще будут этим контуром ловится, хотя чего там… конечно будут, речь ведь идёт о милливольтах. Интересно а что будет если мобильный телефон поднести? Операционник то будет нормально работать, поскольку привязан ближе к термопаре, а вот относительно общего провода выход операционника будет прыгать синхронно с наведённым в контуре дорожки напряжением, а там запросто десятки-сотни милливольт от мобилки…


        1. alexhott
          04.04.2016 18:28

          На мобилке частоты большие, а там кондерик на фходе в мегу, чегнибудь сгладит.
          Да и программно делается сотня замеров потом усредняется. Я и шим не отключаю на время замера, а от него помехи на термопару побольше.


          1. Alexeyslav
            05.04.2016 11:26

            Не стоит пренебрегать СВЧ-излучением. У большинства конденсаторов ESR на этих частотах совсем фиговый и там они уже не работают, зато полупроводники начинают работать как детекторные приёмники… появляется НЧ составляющая для которой конденсаторы уже работают и т.д. и т.п.
            Мой ИБП начинает с ума сходить всего от 0.5Вт на 433Мгц на расстоянии в 20см… благо, глючит только схема индикации, а схема управления и инвертора защищена лучше, может быть за счёт удачной разводки а может и за счет расстояния… нетрудно представить что будет если от такой наводки начнут произвольно открываться транзисторы полумоста инвертора…


            1. alexhott
              05.04.2016 12:02
              +1

              Насчет возникновения НЧ составляющей один раз и навсегда запомнил когда сидя за пультом на дискотеке телефон на пульт положил.


  1. mazayats
    04.04.2016 10:55

    Спасибо за интересную статью. Очень интересно еще было бы почитать о простой самодельной станции для фена.


    1. alexhott
      04.04.2016 18:30

      С феном чуток посложнее, надо два ключа для нагрева и турбины.
      ну и мощность побольше.


  1. Delsian
    04.04.2016 13:20

    Посчитать затраченное время и соизмерить с этим. Прослезиться...


    1. Rumlin
      04.04.2016 13:48

      Как раз утром посмотрел обзоры на mysku по таким конструкторам (поиск по T12). Народ в комментариях хотел бы лучше. У этой конструкции есть преимущество — можно допилить напильником.


    1. alexhott
      04.04.2016 13:50

      У меня раза в два дешевле по деталям вышло чем у китайцев покупать. И циферки у них очень мелкие.
      Ну и самое главное удовольствие от процесса.


      1. Rumlin
        04.04.2016 15:48

        Для полноты картины действительно не хватает списка с затратами, наподобие как в этом

        фрагменте статьи
        http://mysku.ru/blog/china-stores/39310.html
        Затраты:
        — ручка HAKKO FX-9501 + жало – 12.99$
        — контроллер + LCD индикатор + энкодер – 9.7$
        — блок питания – 6,55$ (с купоном по акции 11.11)
        — кабель – 12.86$ за 5 метров, использую 1,5м – 3.86$
        — разъем GX16-5pin (комплект мама + папа) – 1.50$
        — датчик положения SW-200D – 1.20$
        — корпус – 50грн., на момент покупки приблизительно 2$
        Суммируем – 37.80$


        1. alexhott
          04.04.2016 18:42
          +2

          Примерно так
          Резисторы — 10 шт — 10 рублей
          7805 1шт 15 рублей
          80NF70 1 шт 25 рублей (покупал десяток на али)
          Два конденсатора — 15 рублей
          Индикатор — 70 рублей
          Atmega816pu — 120 рублей
          разъем — 50 рублей
          Паяльник — 250 рублей2
          блок питания — 800 рублей
          Энкодер — 20 рублей
          Кейс — 250 рублей
          Итого 1625 рублей


          1. Rumlin
            05.04.2016 08:07

            бюджетно


      1. AngusMetall
        04.04.2016 16:00
        +1

        По моему главное преимущество своих решений лёгкость ремонта и кастомизации. Ну да, это после удовольствия от «рукоделия» конечно.


  1. AVKinc
    04.04.2016 16:03
    +1

    Чувак, ты реально крут!
    Вот пример как нужно делать девайсы.
    Красота в лаконичности и простоте. Идеально!


  1. delvin-fil
    04.04.2016 18:31

    Спасибо за статью.
    Но схема не помешала бы. Возможно, на мой взгляд, некоторое упрощение, как следствие удешевление и «на поток».


    1. alexhott
      04.04.2016 18:43

      Намекните где еще можно упростить, никак не смог от единственной перемычки избавиться.


      1. delvin-fil
        04.04.2016 19:07

        Реверсингом еще не занялся. Схему бы… Восьмая Mega из-за количества ног выбрана?


        1. alexhott
          04.04.2016 20:02

          Выбрана была атимега8 потомучто была в наличии.


          1. delvin-fil
            04.04.2016 20:59

            И все-же, как насчет схемы? Можно в личку.


            1. alexhott
              05.04.2016 12:04

              Да я бы с удовольствием ее и в статью вставил, если б она была
              Но как-то такие простые устройства уже приноровился сразу печатку рисовать без схемы.


              1. delvin-fil
                05.04.2016 12:33

                Ладно, на выходных "реверсну". Вот только как выложить сюда, понятия не имею.


                1. alexhott
                  05.04.2016 19:45

                  Буду рад, Вставьте картинку в комментарий я скопирю в статью