Bilgi ve Uygulama

CCS C ve PIC 16F877 ile Akvaryum Devresi

Yazar: Samet Yüzügüllü
Tarih: 01.02.2013
Türkçe

Pic 16F877A mikrokontrolör entegresi kullanılarak yapılmış akvaryum projesi

Uygulamanın Devre Şeması:


Ekler: akvaryum.zip

Uygulamanın CCS C kodları:

#include <16F877A.h>
#device adc=16

#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected

#use delay(clock=4000000)
#include "new_lcd.c"
#use fast_io(a)
#use fast_io(b)
int1 oto=0;
int8 saat=0,dakika=0,saniye=0,say=0,asaat=0,adakika=0,durum=1,yem=30,balik=0,sonuc=0;
int16 bilgi=0;
#int_TIMER1
void TIMER1_isr(void)
{set_timer1(3036);
say++;
if(say==2){
say=0;
saniye++;}}

void lcd(){
lcd_gotoxy(1,1);
printf(lcd_putc,"%02u:%02u:%02u %02u:%02u",saat,dakika,saniye,asaat,adakika);
lcd_gotoxy(14,1);
printf(lcd_putc,"%02uC",sonuc);
if(durum==0&&oto==1){
lcd_gotoxy(9,1);
printf(lcd_putc,"-ON ");}
if(durum==0&&oto==0){
lcd_gotoxy(9,1);
printf(lcd_putc,"-OFF");}}

void ayar(){

//dakika ayarı
if(durum==1){
lcd_gotoxy(6,2);
printf(lcd_putc,"-Dakika ");}
if(input(pin_b1)&&durum==1){
dakika++;
while(input(pin_b1));}
if(input(pin_b2)&&durum==1){
dakika--;
while(input(pin_b2));}
//saat ayarı
if(durum==2){
lcd_gotoxy(6,2);
printf(lcd_putc,"-Saat ");}
if(input(pin_b1)&&durum==2){
saat++;
while(input(pin_b1));}
if(input(pin_b2)&&durum==2){
saat--;
while(input(pin_b2));}
//yem için dakika ayarı
if(durum==3){
lcd_gotoxy(6,2);
printf(lcd_putc,"-Yem Dakika ");}
if(input(pin_b1)&&durum==3){
adakika++;
while(input(pin_b1));}
if(input(pin_b2)&&durum==3){
adakika--;
while(input(pin_b2));}
//yem için saat ayarı
if(durum==4){
lcd_gotoxy(6,2);
printf(lcd_putc,"-Yem Saat ");}
if(input(pin_b1)&&durum==4){
asaat++;
while(input(pin_b1));}
if(input(pin_b2)&&durum==4){
asaat--;
while(input(pin_b2));}
//yemin kaç dakika verileceğini ayarlama
if(durum==5){
lcd_gotoxy(6,2);
printf(lcd_putc,"-%02usn-Yem ",yem);}
if(input(pin_b1)&&durum==5){
yem++;
while(input(pin_b1));}
if(input(pin_b2)&&durum==5){
yem--;
while(input(pin_b2));}

//balıkların belirlenmesi
if(durum==6&&balik==0){
lcd_gotoxy(6,2);
printf(lcd_putc,"-Balik Sec ");}
if(input(pin_b1)&&durum==6){
balik++;
while(input(pin_b1));}
if(input(pin_b2)&&durum==6){
balik--;
while(input(pin_b2));}

if(durum==7){
output_b(0);
durum=0;
printf(lcd_putc," ");}
}

void balikler(){
if(durum==0||durum==6){
switch(balik){
case 1:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Lepistes ");
if(sonuc<18){
output_high(pin_b6);}
if(sonuc==22)output_low(pin_b6);
break;}
case 2:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Tetra ");
if(sonuc<20){
output_high(pin_b6);}
if(sonuc==24)output_low(pin_b6);
break;}
case 3:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Zebra ");
if(sonuc<18){
output_high(pin_b6);}
if(sonuc==22)output_low(pin_b6);
break;}
case 4:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Plati ");
if(sonuc<20){
output_high(pin_b6);}
if(sonuc==24)output_low(pin_b6);
break;}

case 5:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Moli ");
if(sonuc<20){
output_high(pin_b6);}
if(sonuc==42)output_low(pin_b6);
break;}
case 6:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Rasbora ");
if(sonuc<22){
output_high(pin_b6);}
if(sonuc==24)output_low(pin_b6);
break;}
case 7:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Beta ");
if(sonuc<24){
output_high(pin_b6);}
if(sonuc==27)output_low(pin_b6);
break;}
case 8:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Yunus ");
if(sonuc<24){
output_high(pin_b6);}
if(sonuc==25)output_low(pin_b6);
break;}
case 9:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Melek ");
if(sonuc<24){
output_high(pin_b6);}
if(sonuc==27)output_low(pin_b6);
break;}
case 10:{lcd_gotoxy(6,2);
printf(lcd_putc,"-Tetrazon ");
if(sonuc<20){
output_high(pin_b6);}
if(sonuc==24)output_low(pin_b6);
break;}

}}}

void main()
{

setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_2);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_timer_2(T2_DISABLED,0,1);
setup_ccp1(CCP_OFF);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);

set_tris_a(1);
set_tris_b(0b00001111);
set_timer1(3036);
lcd_init();
delay_ms(10);
lcd_gotoxy(5,1);
printf(lcd_putc,"AKVARYUM KONTROLU ");
delay_ms(1500);
printf(lcd_putc," ");
lcd_gotoxy(6,1);
printf(lcd_putc,"SAMET YUZUGULLU");
delay_ms(1500);
printf(lcd_putc," ");
while(1){
lcd();//lcd alt programına gönderir
ayar();//ayar alt programına gönderir
balikler();
//sıcaklık ölçümü
set_adc_channel(0);
delay_us(10);
bilgi=read_adc();
sonuc=bilgi/131;

//saat sınırlandırmaları
if(saniye>=60){
dakika++;
saniye=0;}
if(dakika==60){
saat++;
dakika=0;}
if(saat==24)saat=0;

//balıkların değişimi
if(balik==11)balik=0;
if(balik==255)balik=10;

//ayar için durum değişkeninin artması
if(input(pin_b0)){
durum++;
while(input(pin_b0));}

//sınırlandırmalar
if(asaat==255)asaat=23;
if(saat==255)saat=23;
if(asaat==24)asaat=0;
if(saat==24)saat=0;
if(dakika==255)dakika=59;
if(adakika==255)adakika=59;
if(adakika==60)adakika=0;
if(yem==255)yem=59;
if(yem==60)yem=0;

//timer1 kesmesinin ayar yaparken pasif olması
if(durum>0){
setup_timer_1(T1_DISABLED);
lcd_gotoxy(9,1);
printf(lcd_putc,"-AYAR");}
if(durum==0)setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

//oto değişkeninin ayarlanması
if(input(pin_b3)&&oto==0&&durum==0){
oto=1;

while(input(pin_b3));}
if(input(pin_b3)&&oto==1&&durum==0){
oto=0;

while(input(pin_b3));}

//yem için ayarlanan zamanda röle çıkısının aktif olması
if(asaat==saat&&adakika==dakika&&oto==1&&yem>=saniye&&durum==0)output_high(pin_b7);
else(output_low(pin_b7));
}
}


Yorumlarınız

Hiç yorum yapılmamış, ilk yorumu siz yapabilirsiniz.

Bir yorum ekleyin

İsim:
E-posta:
Yorumunuz:
Güvenlik Kodu:
 
Tüm alanları doldurmak zorunludur. Yorumunuz kontrol edilince yayınlanacaktır. E-posta adresi yayınlanmaz.
Konular