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

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

    Поделиться публикацией
    Никаких подозрительных скриптов, только релевантные баннеры. Не релевантные? Пиши на: adv@tmtm.ru с темой «Полундра»

    Зачем оно вам?
    Реклама
    Комментарии 66
    • +1
      Корпус шикарен. Может стоило БП от ноутбука применять? Освободилось бы место в кейсе.
      • +1
        от ноутбука максимум 19 вольт, не удалось бы максимальный разгон сделать.
        • 0
          Можно настроить на 24в заменив пару резисторов.
      • +1
        из предложений:
        1. 7805 греется из-за большой разницы напряжений вход выход, стоило бы посмотреть на другие стабилизаторы.
        2. Индикатор хорошо бы через резисторы включать.
        3. Я бы разъем питания перевернул на 180 градусов(отразил зеркально) проще была бы разводка

        В итоге замечательная получилась вещь. Долгой работы и хороших электронных поделок с новым инструментом.
        • +1
          1 Это понятно но альтернативы проще и дешевле нет, только ШИМ. Но так как не критично оставил этую
          2 Обязательно там их целых 4, правда вместо 7.
          3 Пытался, но вообще не получилось развести
          • 0
            Спасибо на добром слове
          • 0
            Интересная реализация и хорошая идея с корпусом.
            Лично мне тоже был нужен компактный паяльник, но особых требований к точной температуре нет.
            Я использую ZD-927 - вдруг кому пригодится
            Цена пару лет назад была около 500р.

            • 0
              Я же пару лет назад приобрел
              CXG DS90T, очень приятный в использовании.
              • 0
                Слишком уж маломощный
                • 0
                  не та ветка, а этот выглядит неплохо
                  • 0
                    Это сарказм или как? Без тэга не понятно. В линейке продукции у них есть 60, 90 и 110 Вт паяльники. Взял 90 Вт исключительно для того, чтоб быстрее нагревался. Выставленную температуру запоминает.
                    • 0
                      я не под тем комментарием написал. ZD-927, им паять просто нереально.
                      • 0
                        смотря что паять и в каком объеме… Для моих задач его чаще всего более чем достаточно.
                  • 0
                    А он запоминает последнюю выставленную температуру после выключения?
                    • 0
                      Да запоминает, каждый раз при изменении настройки
                  • 0
                    И что кроме мелких SMD, которые не подпаяны к земляным/силовым полигонам им можно паять?
                    • 0
                      Любую мелочевку, небольшие провода, PTH элементы вполне хорошо паяются. Для других задач есть другие паяльники.
                      • +1
                        Че угодно можно паять, температуру побольше и нормально пропаивает ногу трансформатора на большом полигоне.
                        Поменьше — и аккуратно мелкие элементы поаяются
                    • +1
                      Это замечательно, и сделано на высоком уровне. Но мне кажется, что даже для нечастого использования (скажем, >=10 раз в год) уже лучше взять хороший инструмент. Goot PX-501 за $85 (а) не нужно изготавливать и (б) наверняка нагревается быстрее. Хотя ели хочется крафтить, то почему бы и нет.
                      • +1
                        Для нечастого использования лучше взять китайскую станцию подешевле, а если есть $85, то лучше ещё столько же доложить и взять самый дешёвый индукционный типа Квик 202D — он за 5...7 секунд разогревается… И дури в нём достаточно даже для материнок и АТХ БП. С жалами правда нюанс, но в Москве они есть и доступна доставка
                      • +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);

                        }
                        • 0
                          Согласен, но на СИ пишу первый раз и изучать для одного проекта было лень. Но подучу в следующем проекте.
                          • 0
                            Да здесь ничего особенного нет совсем, все не дальше начала букваря.
                        • 0
                          Такие жала — уже вчерашний день, на мой взгляд. Если делать, то на жалах T-12, после них на паяльники с 900-ми жалами возвращаться уже нет никакого желания :)
                          • +1
                            Эти изношу посмотрю на Т-12, сейчас их использовать не проблема, купить паяльник и разъем перепаять
                            • 0
                              Схемотехнику придется менять, там термопара включена последовательно с нагревателем :)
                          • 0
                            Выглядит неплохо.
                            А не слишком ли много кода в обработчиках прерываний?
                            • 0
                              при компиляции у меня компилятор ругнулся на эту строчку:
                              if(butt1==200){if(edit==0){edit=1;tempvar=-1;} else {edit=0; eeprom_write_byte(¶m1eeprom[params], param1[params]);} }
                              Не могли бы Вы код вставить не спойлером, а файлом среды?
                              • 0
                                Пытался выложить в специальном теге для кода, но он не сворачивается, а такая партянка в сообщении мне не нравится.
                                Выложил ссылку на проект для атмел студии.
                                • 0
                                  if(butt1==200){if(edit==0){edit=1;tempvar=-1;} else {edit=0; eeprom_write_byte(¶m1eeprom[params], param1[params]);} }
                                  жирным — ошибка
                                  что-то лишнее скопировалось.
                                  • 0
                                    Я тоже несколько удивился от увиденного. Так скопировалось из тега спойлер, и это не одна такая ошибка, при использовании данного тега внезапно в рендомных местах дописывается подобные хинты.
                                    • 0
                                      там вместо должно быть… &m1eeprom...
                                  • +1
                                    Эх, ну как без схемы-то? Или хотя бы ссылки, которыми вдохновлялись.
                                    Наверное, кто-нибудь подсказал бы сразу, что в ней можно улучшить.
                                    А по коду — незначащие нули хорошо бы гасить…
                                    А так очень неплохая реализация!
                                    • 0
                                      Присоединяюсь, тоже хотел бы посмотреть на схему, посмотреть, возможно свою такую сделать… заодно потренироваться разводить
                                    • 0
                                      Интересная реализация. Спасибо!
                                      Хороший пинок для меня. Валяется несколько паяльников с дохлыми высокоомными нагревателями, есть несколько низкоомных термоэлементов.
                                      Давно хотел сделать мобильный вариант паяльника с родным конструктивом, но теперь понял что можно сделать гораздо лучше.
                                      Только я буду с двумя питаниями делать: 220 и 12.
                                      • 0
                                        Эта схема на 12 вольт прекрасно работает, только чуть дольше нагревается.
                                      • +1
                                        Автор молодец! Подобное, конечно, продают и китайцы (легко ищется по словам «Digital Soldering Iron Station Temperature Controller for T12 Heating Core», например), но созданное самостоятельно, да еще и качественно, достойно уважения. Спасибо за идею встраивания паяльной станции в ящик с инструментами.
                                        • +1
                                          Общая шина в виде дорожки у вас огибает ВСЮ плату целиком, причем дорожка-то силовая. Отличный контур получается для излучения помех. Удивительно, что никаких проблем при этом у схемы не возникает, это как раз тот случай когда схема работает без глюков вопреки всему. Всё-таки сделать одну перемычку и провести общий провод к паяльнику СЛЕВА(на изображении платы) по кратчайшему пути было бы предпочтительней.
                                          Кстати, по этой причине возле данного паяльника в радиусе 50см нельзя держать дискеты и магнитные кассеты иначе МОГУТ размагнитится, а так же расположить подальше от ЭЛТ-монитора.
                                          • +1
                                            Это не силовая дорога, питание нагревателя это номера 2 и 5 на фишке, 1 и 3 это земля и минус термопары, 4 — плюс термопары, через нее питается сам контроллер.
                                            Но и при том. что дорога не силовая глюки были, усилитель термопары видите как от 1 ноги запитан, а сначала был запитан от конденсатора, при этом сильно смещая ноль.
                                            • 0
                                              Ежели так то ладно. Помехи по термопаре можно и программно убрать, если они вообще будут этим контуром ловится, хотя чего там… конечно будут, речь ведь идёт о милливольтах. Интересно а что будет если мобильный телефон поднести? Операционник то будет нормально работать, поскольку привязан ближе к термопаре, а вот относительно общего провода выход операционника будет прыгать синхронно с наведённым в контуре дорожки напряжением, а там запросто десятки-сотни милливольт от мобилки…
                                              • 0
                                                На мобилке частоты большие, а там кондерик на фходе в мегу, чегнибудь сгладит.
                                                Да и программно делается сотня замеров потом усредняется. Я и шим не отключаю на время замера, а от него помехи на термопару побольше.
                                                • 0
                                                  Не стоит пренебрегать СВЧ-излучением. У большинства конденсаторов ESR на этих частотах совсем фиговый и там они уже не работают, зато полупроводники начинают работать как детекторные приёмники… появляется НЧ составляющая для которой конденсаторы уже работают и т.д. и т.п.
                                                  Мой ИБП начинает с ума сходить всего от 0.5Вт на 433Мгц на расстоянии в 20см… благо, глючит только схема индикации, а схема управления и инвертора защищена лучше, может быть за счёт удачной разводки а может и за счет расстояния… нетрудно представить что будет если от такой наводки начнут произвольно открываться транзисторы полумоста инвертора…
                                                  • +1
                                                    Насчет возникновения НЧ составляющей один раз и навсегда запомнил когда сидя за пультом на дискотеке телефон на пульт положил.
                                          • 0
                                            Спасибо за интересную статью. Очень интересно еще было бы почитать о простой самодельной станции для фена.
                                            • 0
                                              С феном чуток посложнее, надо два ключа для нагрева и турбины.
                                              ну и мощность побольше.
                                            • 0
                                              Посчитать затраченное время и соизмерить с этим. Прослезиться...
                                              • 0
                                                Как раз утром посмотрел обзоры на mysku по таким конструкторам (поиск по T12). Народ в комментариях хотел бы лучше. У этой конструкции есть преимущество — можно допилить напильником.
                                                • 0
                                                  У меня раза в два дешевле по деталям вышло чем у китайцев покупать. И циферки у них очень мелкие.
                                                  Ну и самое главное удовольствие от процесса.
                                                  • 0
                                                    Для полноты картины действительно не хватает списка с затратами, наподобие как в этом
                                                    фрагменте статьи
                                                    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$
                                                    • +2
                                                      Примерно так
                                                      Резисторы — 10 шт — 10 рублей
                                                      7805 1шт 15 рублей
                                                      80NF70 1 шт 25 рублей (покупал десяток на али)
                                                      Два конденсатора — 15 рублей
                                                      Индикатор — 70 рублей
                                                      Atmega816pu — 120 рублей
                                                      разъем — 50 рублей
                                                      Паяльник — 250 рублей2
                                                      блок питания — 800 рублей
                                                      Энкодер — 20 рублей
                                                      Кейс — 250 рублей
                                                      Итого 1625 рублей
                                                  • +1
                                                    По моему главное преимущество своих решений лёгкость ремонта и кастомизации. Ну да, это после удовольствия от «рукоделия» конечно.
                                                • +1
                                                  Чувак, ты реально крут!
                                                  Вот пример как нужно делать девайсы.
                                                  Красота в лаконичности и простоте. Идеально!
                                                  • 0
                                                    Спасибо за статью.
                                                    Но схема не помешала бы. Возможно, на мой взгляд, некоторое упрощение, как следствие удешевление и «на поток».
                                                    • 0
                                                      Намекните где еще можно упростить, никак не смог от единственной перемычки избавиться.
                                                      • 0
                                                        Реверсингом еще не занялся. Схему бы… Восьмая Mega из-за количества ног выбрана?
                                                        • 0
                                                          Выбрана была атимега8 потомучто была в наличии.
                                                          • 0
                                                            И все-же, как насчет схемы? Можно в личку.
                                                            • 0
                                                              Да я бы с удовольствием ее и в статью вставил, если б она была
                                                              Но как-то такие простые устройства уже приноровился сразу печатку рисовать без схемы.
                                                              • 0
                                                                Ладно, на выходных "реверсну". Вот только как выложить сюда, понятия не имею.
                                                                • 0
                                                                  Буду рад, Вставьте картинку в комментарий я скопирю в статью
                                                    • 0
                                                      Собрали девайс, прошивка из архива не работает.
                                                      Хотелось бы получить рабочий hex т.к ставить студию и вкуривать в нее не хотелось бы.
                                                      • 0
                                                        Пардон, дисплей не тот поставили.
                                                        Нужен с общим катодом.
                                                        Прийдется таки студию ставить, щорт.
                                                        • 0
                                                          фотку готового девайса покажете?

                                                          • 0
                                                            Типа вот
                                                            http://www.panoramio.com/photo/129665476
                                                            Делалось под конкретный корпус, поэтому сила и стабилизатор вынесены
                                                            • 0
                                                              Отлично получилось, разводку только всю поменяли как вижу

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