Регулятор для паяльника на Atmega8 +24


Радиолюбительство — мое хобби, поэтому постоянного рабочего места нет. Обычно приходится каждый раз доставать все причендалы из шкафа, раскладывать на столе или на полу, затем каждый раз убирать. Розетка при этом в зоне работы обычно одна, сделать удлинтель все время лень, да его тоже нужно где-то хранить. А с одной розеткой напрягает проведя тест устройства питающегося от розетки, потом снова ждать минут 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
    /#9149752 / +1

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

    • alexhott
      /#9150254 / +1

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

      • tesla254
        /#9153976

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

  2. devprodest
    /#9149766 / +1

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

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

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

    • alexhott
      /#9150252 / +1

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

  3. istui
    /#9149772

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

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

    • tandzan
      /#9150242

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

      • Yadro
        /#9151528

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

        • Yadro
          /#9151614

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

        • tandzan
          /#9151622

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

          • Yadro
            /#9151856

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

            • istui
              /#9151909

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

      • svi0105
        /#9151530

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

        • alexhott
          /#9151532

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

    • JerleShannara
      /#9152440

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

      • istui
        /#9156342

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

      • alexhott
        /#9156690 / +1

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

  4. ClearAirTurbulence
    /#9149796 / +1

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

    • asdfghjk12
      /#9150272 / +1

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

  5. holomen
    /#9149798 / +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);

    }

    • alexhott
      /#9150244

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

      • holomen
        /#9152744

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

  6. Andy_Big
    /#9149828

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

    • alexhott
      /#9150258 / +1

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

      • Andy_Big
        /#9150660

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

  7. Zlyton
    /#9150192

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

  8. kellakilla
    /#9150194

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

    • alexhott
      /#9150246

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

    • schetilin
      /#9150260

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

      • kellakilla
        /#9150266

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

      • alexhott
        /#9150304

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

  9. serafims
    /#9150494 / +1

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

    • Inkvizitor66
      /#9152354

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

  10. Carry
    /#9150670

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

    • alexhott
      /#9151544

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

  11. KeyDach1717
    /#9150914 / +1

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

  12. Alexeyslav
    /#9151068 / +1

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

    • alexhott
      /#9151582 / +1

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

      • Alexeyslav
        /#9152136

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

        • alexhott
          /#9152336

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

          • Alexeyslav
            /#9153550

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

            • alexhott
              /#9153654 / +1

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

  13. mazayats
    /#9151130

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

    • alexhott
      /#9152348

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

  14. Delsian
    /#9151500

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

    • Rumlin
      /#9151592

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

    • alexhott
      /#9151598

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

      • Rumlin
        /#9151985

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

        фрагменте статьи
        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$

        • alexhott
          /#9152382 / +2

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

      • AngusMetall
        /#9152007 / +1

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

  15. AVKinc
    /#9152015 / +1

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

  16. delvin-fil
    /#9152350

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

    • alexhott
      /#9152388

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

      • delvin-fil
        /#9152436

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

        • alexhott
          /#9152526

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

          • delvin-fil
            /#9152642

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

            • alexhott
              /#9153660

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

              • delvin-fil
                /#9153762

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

                • alexhott
                  /#9154924

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