用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) ding好东西 索性贴子也不发了,不是更省事,呵呵. 哎 写的不好啊,不敢拿到你们高手这儿来啊。 哥不是什么高手,呵呵.菜鸟一个,在这里学到不少东西.不管写的好坏,晾出来没有人说你不好的. 哎,是写的太乱了,今天刚加了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;}
} 关注。有空研究 标记一下。等楼主不断改进。 mark 关注,手头有M16芯片。希望LZ继续完善。 都把程序上上来,你就的原理图也传上大家互相学习 顶 有原理图就更好了,不知楼主用的什么传感器 简单的东西实现目的。新手向楼主学习。 这个烙铁里ms
自带传感器 楼主上原理图,看看 不错,就是应该上原理图 楼主 我看驱动的管子用的是可控硅啊? 是扫描型号的我的老是关不断, 我这个,用的白光976的手柄,他是发热,感温是在一块的。17楼的关不断是怎么回事 学习了{:lol:} 请问lz温度测量用的什么器件、?测量范围和误差是多少? 3楼所言极是!!!!!! 白光铬铁手柄有两种传感器:1)国产是采用K型热电偶;2)日本生产是PT46的热电阻
页:
[1]