PIC 16F877 ile Ayarlanabilir 2 Nokta Arası Sıcaklık Kontrolü
2 Yorum Kategori: Projelerim || Etiketler: lcd, lm35, pic 16f877, pic basic, Projelerim, sıcaklık kontrolü || Tarih: Ekim 23rd, 2008Uludağ üniversitesi 2. sınıf 1. dönem mikro işlemciler dersinde yapmış olduğum proje.
Ne iş yapar bu devre;
PIC16F877’nin A0 portuna bağlı olan LM35 elemanının sıcaklığa bağlı olarak Vout çıkışından gönderdiği analog sinyallerin okunarak sıcaklık ölçümünün yapılması. Belirlenen alt ve üst değerlerin iki sıcaklık noktası arası kontrol yapması ve okunan sıcaklığın bu değerler arasındaki bağıntıya göre değişik çıkışların aktif olması. Devrede bulunan 3 buton ile sıcaklık alt ve üst değerlerini ayarlayabiliyoruz. 1. buton menuler arası gezmek için diğer 2 buton ise sıcaklığı arttırıp yada azaltmak için. Devrede lm35 yerine herhangi bir sıcaklık sensörü kullanılabilir, yapısı basit olduğundan ben bunu kullanmıştım.
Devre Böyle Birşey;

16f877 ile iki ayarlanabilir 2 nokta arası sıcaklık kontrolü
Nasıl Çalışırmış Bu Şey;
Uygulamaya ilk enerji verildiğinde LCD’nin ekranında o anki sıcaklığı gösteren bilgiler vardır. O anki sıcaklık bizim belirlediğimiz iki nokta arasında ise Q2 çıkışı aktif olur. Bizim belirlediğimiz üst değerden fazla ise Q1 çıkışı düşük ise Q3 çıkışı aktif olur. S1 butonuna bastığımızda LCD ekranında UST DEGER butona tekrar basarsak ALT DEGER menuleri ekrana gelir, bu sırada S2 ve S3 butonlarıyla sıcaklık sınır değerleri değiştirilebilir. Hiçbir işlem yapılmazsa (yaklaşık 0.5sn) program menuden çıkar sıcaklık bilgilerinin gösterildiği ekrana gelir.
Bu projeyle pc kasa sıcaklığı ayarlanabilir aslınada. sıcaklık üst değerden fazlaysa fanları yüksek devirde çalıştır, sıcaklık üst değer ile alt değer arasındaysa fanları orta devirde çalıştır sıcaklık düşük değerde ise fanları çalıştırma gibi. Böylelikle enerji tasarrufu sağlanır ve sıcaklık çok yüksek değilse kasamız aşırı sessiz bile olabilir.Tabi bu işlem için çıkışlara bir kaç devre eklemek gerekir. Yada pic in analog çıkışları kullanılabilir.
Devrenin PicBasic Kodu:
|
Define LCD_DREG PORTD Define LCD_DBIT 4 Define LCD_RSREG PORTE Define LCD_RSBIT 0 Define LCD_EREG PORTE Define LCD_EBIT 2 DEFINE LCD_BITS 4 DEFINE LCD_RWREG PORTE DEFINE LCD_RWBIT 1
Define ADC_BITS 8 Define ADC_CLOCK 3 Define ADC_SAMPLEUS 50
ANDGR VAR BYTE ONANDGR VAR BYTE BKLE VAR BYTE MENU VAR BYTE DGRUST VAR BYTE DGRALT VAR BYTE MENUACIK VAR BYTE DRMPORTD VAR BYTE CIKIS VAR BYTE DRMCIKIS VAR BYTE PORT_C0_KONT VAR BIT
TRISD = %00000000 TRISC = %11111111 TRISB = %00000000 TRISA = %11111111 ADCON1 = %00000010
PAUSE 100 DGRUST = 70 DGRALT = 30 PORTD = 255 DRMPORTD = 1 DRMCIKIS = 255 ONANDGR = ANDGR + 1
BASLA: ;++++++
MENU = 0 GOTO LCDOKU
DEVAM: ;++++++
IF PORT_C0_KONT = 1 THEN GOTO PORT_C0_ATLA BKLE = 0 ;******************************************************************************** IF PORTC.0 = 0 OR MENUACIK = 1 THEN PORT_C0_KONT = 1 MENUACIK = 1 MENU = MENU + 1
IF MENU = 1 THEN LCDOUT $FE , 1 , “UST DEGER” PAUSE 50
IF PORTC.1 = 0 OR PORTC.2 = 1 THEN USTARTI: ;++++++ BKLE=0 IF PORTC.1 = 0 THEN DGRUST = DGRUST + 1 PAUSE 50 ENDIF USTEKSI: ;++++++ BKLE =0 IF PORTC.2 = 0 THEN DGRUST = DGRUST – 1 PAUSE 50 ENDIF ENDIF
IF DGRUST >= 100 THEN DGRUST= 100 IF DGRUST <= DGRALT + 1 THEN DGRUST= DGRALT+1 IF DGRUST >= 99 THEN LCDOUT $FE , 1 , “UST DEGER” IF DGRUST = 100 THEN LCDOUT $FE ,$C0 , #DGRUST ,” DERECE (MAX)” ELSE LCDOUT $FE , $C0 , #DGRUST ,” DERECE” ENDIF ENDIF
IF MENU = 2 THEN LCDOUT $FE , 1 , “ALT DEGER” PAUSE 50
IF PORTC.1 = 0 OR PORTC.2 = 1 THEN ALTARTI: ;++++++ BKLE=0 IF PORTC.1 = 0 THEN DGRALT = DGRALT + 1 PAUSE 50 ENDIF ALTEKSI: ;++++++ BKLE =0
IF PORTC.2 = 0 THEN DGRALT = DGRALT – 1 PAUSE 50 ENDIF
ENDIF |
IF DGRALT = 0 THEN DGRALT=0 IF DGRALT > 100 THEN DGRALT = 0 IF DGRALT >= DGRUST-1 THEN DGRALT = DGRUST -1 IF DGRALT <= 1 THEN LCDOUT $FE , 1 , “ALT DEGER” IF DGRALT = 0 THEN LCDOUT $FE , $C0 , #DGRALT ,” DERECE (MIN)” ELSE LCDOUT $FE , $C0 , #DGRALT ,” DERECE” ENDIF ENDIF
IF MENU = 3 THEN LCDOUT $FE , 1 , “HASANSAMA.COM” LCDOUT $FE , $C0 , “SICAKLIK KONTROLU” ;PAUSE 50 ENDIF
PORT_C0_ATLA: ;++++++ IF PORTC.0 = 1 THEN PORT_C0_KONT = 0
IF MENU = 4 THEN GOTO BASLA
GOTO BEKLE
ENDIF GOTO BASLA
;********************************************************************************
BEKLE: ;++++++ IF PORTC.0 = 0 THEN MENUACIK = 1 GOTO DEVAM ENDIF
IF PORTC.1 = 0 THEN IF MENU = 1 THEN GOTO USTARTI IF MENU = 2 THEN GOTO ALTARTI ENDIF
IF PORTC.2 = 0 THEN IF MENU = 1 THEN GOTO USTEKSI IF MENU = 2 THEN GOTO ALTEKSI ENDIF
BKLE= BKLE + 1 PAUSE 10 IF BKLE = 255 THEN ONANDGR = ANDGR + 1 LCDOUT $FE , 1 GOTO BASLA ENDIF
GOTO BEKLE
;********************************************************************************
LCDOKU: ;++++++ ADCIN 0, ANDGR
IF ANDGR = ONANDGR THEN GOTO LCDATLA Lcdout $fe, 1 Lcdout “SICAKLIK: ” , DEC ANDGR ,” C” LCDOUT $FE , $C0 , #CIKIS , “. CIKIS AKTIF” ONANDGR= ANDGR PAUSE 10
LCDATLA: ;++++++ MENUACIK = 0 GOTO KONTROL
;********************************************************************************
KONTROL: ;++++++ IF ANDGR > DGRUST THEN PORTB = %11111110 PAUSE 50 CIKIS = 1 ENDIF IF ANDGR >= DGRALT AND ANDGR <= DGRUST THEN PORTB = %11111101 PAUSE 50 CIKIS = 2 ENDIF IF ANDGR < DGRALT THEN PORTB = %11111011 PAUSE 50 CIKIS = 3 ENDIF
IF DRMCIKIS = CIKIS THEN GOTO KNTATLA
LCDOUT $FE , $C0 , #CIKIS , “. CIKIS AKTIF” DRMCIKIS =CIKIS PAUSE 10
KNTATLA: ;++++++ MENUACIK = 0 GOTO DEVAM END |
Devre ile ilgili dosyalar ( Proteus Çizimi ve Benzetimi, Pic Basic Kodu, .hex dosyası): Tıklayın…

merhaba kolay gelsin..
yukarda verdiğiniz kodu çalıştıramadım. picbasic ve microcode studio kullanıyorum. siz acaba hangi programı kullandınız.
açık konuşmak gerekirse buna benzer bir odevim var. kodun üzerinde biraz oynayarak kendi odevimi yapabileceğimi düşünüyorum.
yardımcı olursanız sevinirim.
teşekkürler.
sorun halledildi.
tekrar kolay gelsin..