zengyunming 发表于 2010-12-22 19:41:05

用M16做了一把数显控温烙铁,拿来晒晒

最近自学单片机,搞了个控温烙铁来用,温度不是很准,本来信号想用LM358放大的,后来因为搞不定(基础差啊),就改用m16的差分方式,解决了温度信号
调零的问题,下面给几张图来晒晒,程序由于写的太垃圾了,就不拉出来了,见谅。另外手柄是采用白光的。用了一个24v的变压器,电路比较简单所以就没画,也不拉出来了。见谅
http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_606483KYZQYM.jpg
(原文件名:22122010274.jpg)

http://cache.amobbs.com/bbs_upload782111/files_35/ourdev_606484ZZ6XWA.jpg
旁边是黑色手柄 (原文件名:22122010275.jpg)

bj-stm8 发表于 2010-12-22 19:46:03

ding好东西

plc_avr 发表于 2010-12-22 19:57:23

索性贴子也不发了,不是更省事,呵呵.

zengyunming 发表于 2010-12-22 20:03:06

哎 写的不好啊,不敢拿到你们高手这儿来啊。

plc_avr 发表于 2010-12-22 20:09:05

哥不是什么高手,呵呵.菜鸟一个,在这里学到不少东西.不管写的好坏,晾出来没有人说你不好的.

zengyunming 发表于 2010-12-22 20:31:28

哎,是写的太乱了,今天刚加了eeprom程序进去,想让它每次设定的值保存,好不用每次设定,但不知为什么没用,还要查查。

以下就是,写的很乱,莫见怪。

#include<avr/io.h>
#include<avr/interrupt.h>
#define K1 PORTB|=(1<<PB2);//anjian2
#define K1OUT DDRB&=~(1<<PB2);
#define K2 PORTB|=(1<<PB3);//anjian1
#define K2OUT DDRB&=~(1<<PB3);
#define K3 PORTB|=(1<<PB1);
#define K3OUT

char tab = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc0,0xff};
volatile unsigned char /*temp,temp1,*/ge,shi,bai,biao,bl,bh;
volatile unsigned int temp,temp1,adl,adh,radd,can,chan=5800, cnt=0,cnt1=5000,al,ah;
void InitADC(void)//adccushihua
{
        ADMUX =0X0D;//(1<<ADLAR)|(1<<MUX0);//左对齐,外部参考电压。
        ADCSRA |= (1<<ADEN)|(1<<ADSC)|(1<<ADATE);//|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
       
}
//
void delay(unsigned int chan1)//yan shi han shu
{
        while(--chan1);
}
//////////////
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* 等待上一次写操作结束 */
while(EECR & (1<<EEWE))
;
/* 设置地址和数据寄存器 */
EEAR = uiAddress;
EEDR = ucData;
/* 置位EEMWE */
EECR |= (1<<EEMWE);
/* 置位EEWE以启动写操作 */
EECR |= (1<<EEWE);
}
//////////////
unsigned char EEPROM_read(unsigned int uiAddress)
{
/* 等待上一次写操作结束 */
while(EECR & (1<<EEWE))
;
/* 设置地址寄存器 */
EEAR = uiAddress;
/* 设置EERE以启动读操作 */
EECR |= (1<<EERE);
/* 自数据寄存器返回数据 */
return EEDR;
}
//////////////

void xianshi(bai,shi,ge)//xian shi han shu
{       
        DDRC=0XFF;
        DDRD=0XFF;
        unsigned char a;
        a=1;
        while(a)
                {
                       
                       
                       
                       
                        PORTD=0x80;PORTC=tab;
                        delay(3);PORTC=0XFF;
                       
                       
                        PORTD=0x40;PORTC=tab;
                        delay(3);PORTC=0XFF;
               
                       
                        PORTD=0x20;PORTC=tab;
                        delay(3);PORTC=0XFF;
                        --a;
                       
       
                }
       
}


int main()
{       
        InitADC();
//        MCUCR |=(1<<ISC11)|(ISC00<<1)|(ISC01<<1);//kai wai bu zhong duan
//    GICR |=(1<<INT1)|(1<<INT0);
/////
        al=EEPROM_read(3);//du eprom 16wei
        ah=EEPROM_read(4);//
        ah=ah<<8;//
        temp=ah|al;//
        ///////
        K1;K2;K3;K1OUT;K2OUT;K3OUT;DDRB|=(1<<PB0);
//        ge=0;
//        shi=0;
//        bai=0;
        biao=0;
        temp=0;
        TCCR0 |=(1<<CS00);
        TCNT0=1;
        TIMSK |=(1<<TOIE0);
        SREG |= (1<<7);
        while(1)
        {               

        //        delay(5000);
       //        temp=ADCH;\
       //        bai=temp;
        //        bai = temp / 100 ;                                    // 得到 1
        //        shi = ( temp - bai*100 ) / 10 ;                // 得到 2
        //        ge =temp % 10 ;   
        //        xianshi(ge,shi,bai);
        //ge=3;
        //bai=8;                       


        if(biao==1){if(!(PINB & (1<<PB3))) {/*while(!(PINB & (1<<PB3)))*/delay(500);if(!(PINB & (1<<PB3))){while(!(PINB & (1<<PB3)));biao=0;}/*TIMSK &=~(1<<TOIE0);*/}}
       
       
       
        if(biao==0){
                                if(!(PINB & (1<<PB1))) {/*while(!(PINB & (1<<PB1)))*/delay(15500);if(!(PINB & (1<<PB1)))can++;if(can>800)can=1;bl=can;bh=can>>8;EEPROM_write(4,bl);EEPROM_write(3,bh);}
                                if(!(PINB & (1<<PB2))) {/*while(!(PINB & (1<<PB2)))*/delay(15500);if(can<1)can=801;if(!(PINB & (1<<PB2)))can--;bl=can;bh=can>>8;EEPROM_write(4,bl);EEPROM_write(3,bh);}
                                if(!(PINB & (1<<PB3))) {/*while(!(PINB & (1<<PB3)))*/delay(500);if(!(PINB & (1<<PB3))){while(!(PINB & (1<<PB3)));biao=1;}/*TIMSK |=(1<<TOIE0);*/}
                                //temp=can;
                       
                       PORTB&=~(1<<PB0);
                //        bai = temp / 100 ;                                    //
                //        shi = ( temp - bai*100 ) / 10 ;                //
                //        ge =temp % 10 ;//xianshi(ge,shi,ba
                                                }


                //xianshi(1,2,3);
        }

}


SIGNAL(SIG_OVERFLOW0)//ding shi qi 0 zhong duan cheng xu
{
    TCNT0=1;       
       
        xianshi(ge,shi,bai);
    cnt1++;
        cnt++;
    if( cnt1>= chan ){
                               
                                adl=ADCL;
                                adh=ADCH&0X03;
                                adh=adh<<8;
                                radd=adh|adl;
                        if(cnt>=chan){
                                        if(biao==1){                      
                                        temp=radd;
                                       temp1=can;
                                        if(temp>=temp1)PORTB&=~(1<<PB0);
                                if(temp<=temp1)PORTB|=(1<<PB0);cnt=0;
                                        }
                                        }
                       
                        if(biao==0)
                           temp=can;
                        bai = temp / 100 ;                                    //
                        shi =(temp - bai*100 ) / 10 ;                //
                        ge =temp % 10 ;

        //                if(biao==0){
        //                                        temp=can;
       
        //                bai = temp / 100 ;                                    //
        //                shi = ( temp - bai*100 ) / 10 ;                //
        //                ge =temp % 10 ;PORTB&=~(1<<PB0); }
               
               
        //       
               
                       
             

      cnt1=5000;}
}

logics 发表于 2010-12-22 20:36:05

关注。有空研究

88488848 发表于 2010-12-22 20:48:49

标记一下。等楼主不断改进。

skynet 发表于 2010-12-22 20:54:06

mark

wblqx 发表于 2010-12-22 21:00:28

关注,手头有M16芯片。希望LZ继续完善。

tangwei039 发表于 2010-12-22 21:09:08

都把程序上上来,你就的原理图也传上大家互相学习

renpeng009 发表于 2010-12-22 21:10:56

hdd961140543 发表于 2010-12-22 22:04:04

有原理图就更好了,不知楼主用的什么传感器

arvidwen 发表于 2010-12-22 22:12:00

简单的东西实现目的。新手向楼主学习。

format 发表于 2010-12-22 22:15:16

这个烙铁里ms

自带传感器

weq12345 发表于 2010-12-22 22:31:07

楼主上原理图,看看

b54wco 发表于 2010-12-22 23:13:35

不错,就是应该上原理图

fy024 发表于 2010-12-22 23:23:31

楼主 我看驱动的管子用的是可控硅啊? 是扫描型号的我的老是关不断,

zengyunming 发表于 2010-12-23 12:44:56

我这个,用的白光976的手柄,他是发热,感温是在一块的。17楼的关不断是怎么回事

atg525 发表于 2012-12-11 15:49:24

学习了{:lol:}

mynah 发表于 2012-12-12 09:59:34

请问lz温度测量用的什么器件、?测量范围和误差是多少?

liudaolunhui 发表于 2012-12-12 11:55:50

3楼所言极是!!!!!!

lmt50211 发表于 2012-12-12 13:13:38

白光铬铁手柄有两种传感器:1)国产是采用K型热电偶;2)日本生产是PT46的热电阻
页: [1]
查看完整版本: 用M16做了一把数显控温烙铁,拿来晒晒