Merhabalar;
Arkadaşlar bir proje gelişitiriyoruz ama işin içinden çıkamdık. Sistem şu şekilde çalışacak: Önce sisteme 40 dereceye kadar ısıtılacak sonra fan devreye girecek 10 sn çalışıp duracak ve soğutucu devreye girecek.Sistem 0 dereceye gelene kadar soğutulacak 0 olduğunda fan devreye girecek 10 sn çalışıp duracak ve ısıtıcı devreye girecek.Bu şekilde sistem sürekli çalışacak.Takıldığımız nokta ilk ısıtma kısmı. c0=soğutma rölesi
c1=ısıtma rölesi
c2=fan
Program bu şekilde:
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
#define use_portb_lcd TRUE // LCD B portuna bağlı
#include <lcd.c> // lcd.c dosyası tanıtılıyor
unsigned long int bilgi; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj,sicaklik; // ondalıklı tipte değişkenler tanıtılıyor
sogut()
{
output_low(pin_c1);
output_high(pin_c2);
delay_ms(10000);
output_high(pin_c0);
output_low(pin_c2);
if(sicaklik==0){
goto x;}
}
isit()
{
output_low(pin_c0);
output_high(pin_c2);
delay_ms(10000);
output_low(pin_c2);
output_high(pin_c1);
if(sicaklik==40){
goto x;}}
//********** ANA PROGRAM FONKSİYONU*******
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı
set_tris_a(0x01); // RA0 Giriş olarak yönlendiriliyor
setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32
setup_adc_ports(AN0); //RA0/AN0 girişi analog
lcd_init(); // LCD hazır hale getiriliyor
set_adc_channel(0); // RA0/AN0 ucundaki sinyal A/D işlemine tabi tutulacak
delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir
printf(lcd_putc,"\fSicaklik="); // LCD'ye yazı yazdırılıyor
while(1) // sonsuz döngü
{
bilgi=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor
voltaj=(0.0048828125*bilgi)*1000; // Dijitale çevirme işlemine uğrayan sinyalin mV olarak gerilimi hesaplanıyor
sicaklik=(voltaj/10)+2; // Her 10mV'ta 1 derece artma
output_high(pin_b0);
x:
output_high(pin_c1);
if(sicaklik>40){sogut();
}
if(sicaklik<0){isit();
}
lcd_gotoxy(10,1); // İmleç 1. satır 10.sütunda
printf(lcd_putc,"%5.1f'C",sicaklik); // LCD'ye sıcaklık değeri yazdırılıyor
// Gösterilecek ondalıklı değerin toplam basamak sayısı 5 olacak.
// Gösterilecek değerin ondalıklı kısmı ise 1 basamak olacak. %5.1f
// komutu ile bu işlemler yaptırılmıştır.
delay_ms(100); // 100 msn gecikme
}
}