Termo metre devresi pic16f88 üzerine kurulu 2 adet lm35 ısı sensörü ile sıcaklık bilgisini kc0108 128×64 grafik lcd üzerinde görüntülüyor. LCD termometre PIC16F88, iki LM35 sensör ve KS0108 grafik LCD ile çok basit termometre.
Kod, CCS C derleyicisi için yazılmıştır. Ayrıca Proteus VSM simülasyon dosyası ve derlenmiş hex dosyası da bulunmaktadır.
LCD thermometer Very simple thermometer with PIC16F88, two LM35 sensors and KS0108 graphic LCD. Here’s video where I’m heating sensors with soldering iron. Screenshot from Proteus VSM. Note that almost every pin of PIC16F88 is used. Here’s the source code, I’m sorry it isn’t commented very well. The code is written for CCS C compiler. There’s also Proteus VSM simulation file and compiled hex file.
KS0108 pic16f88 lm35 devre şeması
Grafik lcd termometre çalışma görüntüleri
main.c ccs c yazılım içeriği
#include <16F88.h> #fuses INTRC_IO,NOWDT,NOPUT,NOMCLR,BROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG,NOPROTECT,CCPB3 #use delay (clock=8000000) #byte PORTA = 0x0005 #byte PORTB = 0x0006 #byte TRISA = 0x0085 #byte TRISB = 0x0086 #byte ANSEL = 0x009B #byte ADCON0 = 0x001F #byte ADCON1 = 0x009F #byte ADRESH = 0x001E #byte ADRESL = 0x009E #bit ADON = ADCON0.0 #bit GO_DONE = ADCON0.2 #define ON 1 #define OFF 0 #include "KS0108.c" #include "graphics.c" #includefloat get_temperature(int1 channel); void main() { float temp; int8 length, str[5]={}; TRISA=0b00000011; //set RA0 and RA1 to input ANSEL=0b00000011; //set RA0 and RA1 to analog ADCON1=0b11000000; //setup adc glcd_init(on); glcd_fill(OFF); draw_background(); glcd_char(0, 26, 11, 1); glcd_char(0, 32, 12, 1); while(true) { temp=get_temperature(0); //get adc value from ADC channel 0 and convert it to temperature sprintf(str,"%4.1f",temp); //convert float value to string glcd_string(0,4,str,1); //and draw it on the screen length=(int8)((temp*2))+24; //then draw some graphics if(length>124) length=124; if(length<24) length=24; glcd_rect(24, 6, length, 19, 1, 1); glcd_rect(length+1, 6, 125, 19, 1, 0); temp=get_temperature(1); //same things to channel 1 sprintf(str,"%4.1f",temp); glcd_string(0,40,str,1); length=(int8)((temp*2))+24; if(length>124) length=124; if(length<24) length=24; glcd_rect(24, 44, length, 57, 1, 1); glcd_rect(length+1, 44, 125, 57, 1, 0); } } float get_temperature(int1 channel) { int16 value, sum1, sum2; int8 i, j; if(channel==0) ADCON0=0b01000000; //select adc channel 0 else ADCON0=0b01001000; //select adc channel 1 ADON=true; delay_us(100); sum2=0; for(j=0; j<8; j++) { sum1=0; for(i=0; i<8; i++) { GO_DONE=true; while(GO_DONE); value=make16(adresh,adresl); sum1+=value; delay_us(100); } sum1/=8; sum2+=sum1; } sum2/=8; ADON=false; return (float)sum2/2; }
Şifre-Pass: 320volt.com
Yayım tarihi: 2009/11/21 Etiketler: ccs c projeleri, GLCD, grafik lcd, KS0108, lm35, microchip pic projeleri, PIC16F88 örnekleri, termometre devresi
Merhaba hocam devre çok güzel görünüyor fakat lm35 sensörünün ds18b20 kadar hassas olmadığını duymuştum bu devreyi ds18b20 ile çalışacak şekilde tasarlayabilirmisiniz