Mikrodenetleyici tabanlı zamanlayıcı ve kontrol (ccs c )

| Mayıs 31, 2023 Tarihinde güncellendi
Mikrodenetleyici tabanlı zamanlayıcı ve kontrol (ccs c )

Mikrodenetleyici tabanlı zamanlayıcı ve kontrol projesi bir çok konu hakkında faydalı bilgiler içeriyor kontrol devresi PIC16F877A üzerine kurulu proteus ares ile hazırlanmış baskı devresi şematik çizimi ve kaynak CCS C yazılımı var. Hazırlayan: Hüsnü Onur BOYRAZ – Emeği geçen hazırlayan kişilere teşekkürler

PCBway Türkiye PCB Manufacturer PCB Assembly

Günümüzde ev otomasyon sistemleri gittikçe yaygınlaşmakta olup yeni teknolojilerle bu sistemler desteklenmektedir. Bu projede farklı tiplerdeki elektronik cihazları, aydınlatmaları gibi aletlerin zamanla açılıp kapanması kontrol etmek amaçlanmıştır. Kontrol hem basit bir tuş takımıyla hem seri haberleşme ile bilgisayarla hem de istenilen zamanın ayarlanmasıyla otomatik olarak yapılmıştır.

Donanım kısmında mikrodenetleyici türlerinden PIC 16F877A, zamanlayıcı olarak DS1302 rtc, bilgisayar ile seri haberleşmeyi sağlaması için MAX232 ve yapılan işlemleri göstermek için 16X2 LCD kullanılmış olup hazırlanan yazılım CCS-C programlama dili ile yapılmıştır.

Bu çalışma günümüzde sıklıkla kullanılan PIC mikrodenetleyici tabanlı bir zamanlayıcı saat tasarımı ve buna bağlı istenilen çıkışların belirlenen zamanda açılıp kapanmasının kontrol edilmesini amaçlanmaktadır. Yapılan sistem ile istenilen farklı bir aygıt veya donanım rahatlıkla kontrol edilebilir. Kontrol tuş takımıyla ve bilgisayarla sağlanmaktadır. Ayrıca kontrol istenilen çıkış belirlenen bir zamanda da sağlanılabilir.

Bu işlemleri yaparken bir mikrodenetleyiciye ihtiyaç duyulur. Bu çalışmada kullanılan mikrodenetleyici PIC16F877A’ dır. Bunun nedeni hem PIC16F877A’ nın çok yaygın kullanılması ve uygulama geliştirmek için sunduğu kolaylıklar hem de PIC16F877A’ yı yeteri kadar çıkış portuna sahip olmasıdır (Şahin v.d. 2006). Mikrodenetleyicide kullanılan yazılımda ise CCS-C programlama tercih edilmiştir.

CCS-C tercih edilmesinin sebebi derleyicisi içinde bulunan hazır fonksiyonların yanında çevresel birimler ve iletişim protokolleri için hazır birçok kütüphane dosyası bulunmaktadır (Çiçek 2009).

ccs-c-akis-diagrami

CCS C derleyicisi ayrıca diğer C derleyicilerine nazaran daha kolay bir şekilde programlama yapmaya imkan vermektedir. Kullanılan denetleyicinin donanım yapısını detaylı olarak bilmeden bile ileri düzeyde programlar yazılabilmektedir. Bu çalışmada LCD de kullanıllarak bilgisayar bağlantısı olmadan da LCD de hazırlanan menü üzerinden sistemin kontrol edilmesi ve zamanlayıcı buradan ayarlanabilmektedir.

Öncelikle tasarlanan sistemin tanıtımı Bölüm 2’de verildikten sonra sistem donanımı ve yazılımı sırasıyla Bölüm 3 ve Bölüm 4’de verilmektedir. Hazırlanan devrenin simülasyonu da Bölüm 5’de verilmiş ve elde edilen sonuçlar tartışılmıştır.

Hazırlanan bu projede bilgisayardan (RS 232 üzerinden) ve devre üzerinden kontrol edilebilen bir ev otomasyonu projesinin ana kontrol bölümü gerçekleştirilmiştir. Projenin amacı bilgisayar bağlantısı gerçekleştiğinde kullanıcının sisteme bağlanması ve sistemi kontrol edebilmesidir. Ayrıca bilgisayar bağlantısı olmadan da LCD’de hazırlanan menü üzerinden sistemi kontrol edebilmesini sağlamaktır.

Proje kapsamında tasarlanan elektronik donanım, RS-232 seri haberleşme protokolünü kullanarak kişisel bilgisayar ile haberleşmekte ve hazırlanan devrede ilgili çıkışları aktif veya deaktif edebilmektedir.

Projenin gerçekleştirilmesinde öncelikle ev otomasyonu ve akıllı evler hakkında araştırma yapılmıştır. Devre tasarımı yapılırken proje birkaç modül halinde düşünülmüştür. Bunlar kullanılacak mikrodenetleyicinin gerekli donanımının(Reset devresi, osilatör devresi ) öğrenilmesi ve oluşturulması, RS 232 seri haberleşme protokolü için MAX 232 entegresi ve gerekli donanımın araştırılması ve kurulması, bilgisayarla haberleşmede gerekli hyperterminal’ in öğrenilmesi, çıkışların kontrolü için LCD mikrodenetleyici bağlantısının gerçekleştirilmesi ve çıkışların gözlemlenmesi için ledlerdir.


program CCS-C.c yazılım içeriği;



//Mikrodenetleyici Temelli Kontrol Ve Zamanlayıcı
//Hüsnü Onur BOYRAZ

#include <16f877A.h>	 // 16F877A.h dosyası programa ekleniyor
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD    // Denetleyici konfigürasyon ayarları
#use delay (clock=20000000)	// Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor
#define use_portd_lcd TRUE	// LCD D portuna bağlı
#use rs232(baud=9600, xmit=PIN_c6, rcv=PIN_c7, UART1)   //RS232 bağlantısı tanımlamaları
#include <lcd.c>			// LCD.c dosyası programa ekleniyor
#define RTC_SCLK PIN_c1		// DS1302 için pin tanımlamaları
#define RTC_IO   PIN_c2
#define RTC_RST  PIN_c0
#include <DS1302.c>			// DS1302.c dosyası programa ekleniyor
#use fast_io(a)			// A ve D portu hızlı giriş çıkışa ayarlandı
#use fast_io(d)
#define ayar	pin_e0 // saati ayarlama
#define art		pin_a0	// artırma
#define azal	pin_a1	// azaltma
#define onay	pin_a2	// onaylama
#define alarm	pin_e1	// alarmı ayarlama
#define aonoff	pin_e2	// alarmı açma kapama
byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu,menu,ekledakika,eklesaat,i;  // byte türünde değişkenler tanımlanıyor
int alarmt[8][3];
int alarm_off[8][2];

#SEPARATE	// ROM bölümüne (segment) sığmayan uzun fonksiyonlar için derleyiciye bölme parametresi veriliyor.
void husnu()      // Saat gösterimi,ayarı ve Alarm ayarı
{
//rtc_set_datetime(5,5,9,5,5,5);  // Tarih ve Saat ayarları yapılıyor bu satır test aşaması için gerekli
menu=1;
while(input(aonoff))
{
//lcd_putc("\f");//ekranı temizle
// saatin gösterilmesi kısmı
rtc_get_time(saat,dakika,saniye);             // DS1302'den saat,dakika,saniye bilgileri alınıyor
rtc_get_date(gun,ay,yil,haftanin_gunu);       // DS1302'den gün,ay,yil ve günün isim bilgisi alınıyor
// LCD'ye gün,ay,yıl bilgileri yazdırılıyor
lcd_gotoxy(1,1);  // 9.sütun 1 satıra git
printf(lcd_putc,"        %02d/%02d/%02d"gun,ay,yil);  // gün ay yıl yazdır
lcd_gotoxy(1,2);          // gün yazılacak yere gir 2. satır 1. sütun
switch(haftanin_gunu)     // DS1302'den sayısal olarak alınan haftanın günü bilgisine metin olarak karşılık atanıyor
{
case 1: printf(lcd_putc,"PAZ     "); break;    // Eğer "1" ise LCD'ye PAZ yaz
case 2: printf(lcd_putc,"PZT     "); break; // Eğer "2" ise LCD'ye PZT yaz
case 3: printf(lcd_putc,"SAL     "); break;    // Eğer "3" ise LCD'ye SAL yaz
case 4: printf(lcd_putc,"CRS     "); break;    // Eğer "4" ise LCD'ye CRS yaz
case 5: printf(lcd_putc,"PER     "); break;    // Eğer "5" ise LCD'ye PER yaz
case 6: printf(lcd_putc,"CUM     "); break;    // Eğer "6" ise LCD'ye CUM yaz
case 7: printf(lcd_putc,"CTS     "); break;    // Eğer "7" ise LCD'ye CTS yaz
}
// LCD'ye saat,dakika ve saniye değerlerini yaz
lcd_gotoxy(9,2);   // 2 . satır 9. sütuna git
printf(lcd_putc,"%02d:%02d:%02d",saat,dakika,saniye);      // saat dakika saniye yazdır aralarında : var

// alarmlar test ediliyor
for(i=0;i<8;i++)
{
//alarm kontrol
if(input(aonoff)&&(alarmt[i][0]==saat)&&(alarmt[i][1]==dakika)&&(!alarmt[i][2]))
{
//i. alarm çalışıyor
switch(i)
{
case 0: output_bit(48,1); break;
case 1: output_bit(49,1); break;
case 2: output_bit(50,1); break;
case 3: output_bit(51,1); break;
case 4: output_bit(52,1); break;
case 5: output_bit(53,1); break;
case 6: output_bit(54,1); break;
case 7: output_bit(55,1);
}
alarmt[i][2]=1;
lcd_gotoxy(1,1);printf(lcd_putc,"  %u. led acildi ",i+1);delay_ms(1000);
//i. led için kapanma süresi belirleniyor (saat, dakika)
eklesaat=0; ekledakika=1;
if(dakika+ekledakika>59)
{
alarm_off[i][0]=(saat+eklesaat+1)%24;
alarm_off[i][1]=dakika+ekledakika-60;
}
else
{
alarm_off[i][0]=(saat+eklesaat)%24;
alarm_off[i][1]=dakika+ekledakika;
}
}

//alarm off - led kapama
if(input(aonoff)&&(saat==alarm_off[i][0])&&(dakika==alarm_off[i][1])&&(alarmt[i][2]))
{
switch(i)
{
case 0: output_bit(48,0); break;
case 1: output_bit(49,0); break;
case 2: output_bit(50,0); break;
case 3: output_bit(51,0); break;
case 4: output_bit(52,0); break;
case 5: output_bit(53,0); break;
case 6: output_bit(54,0); break;
case 7: output_bit(55,0);
}
alarmt[i][2]=0;
}
}

// saat ayarlama döngüsü
while(input(ayar))    // saat ayar
{
lcd_putc("\f");
switch(menu)  // menu hangi basamakta
{
case 1:    // dakika ayarı
printf(lcd_putc,"Dakika");
lcd_gotoxy(12,2);
printf(lcd_putc,"%d",dakika);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);
if(input(art))
{
dakika=dakika+1;
delay_ms(200);
}
if(input(azal))
{
dakika=dakika-1;
delay_ms(200);
}
if(input(onay))
{
menu=menu+1;
delay_ms(200);
}
if((dakika==60))
{
dakika=0;
}
if((dakika==-1))
{
dakika=59;
}
break;

case 2:    // saat ayarı
printf(lcd_putc,"Saat");
lcd_gotoxy(9,2);
printf(lcd_putc,"%d",saat);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);
if(input(art))
{
saat=saat+1;
delay_ms(200);
}
if(input(azal))
{
saat=saat-1;
delay_ms(200);
}
if(input(onay))
{
menu=menu+1;
delay_ms(200);
}
// saat kontrol
if((saat==24))
{
saat=0;
}
if((saat==-1))
{
saat=23;
}
break;

case 3:    // gün ayarı
printf(lcd_putc,"Gun");
lcd_gotoxy(15,1);
printf(lcd_putc,"%d",gun);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);
if(input(art))
{
gun=gun+1;
delay_ms(200);
}
if(input(azal))
{
gun=gun-1;
delay_ms(200);
}
if(input(onay))
{
menu=menu+1;
delay_ms(200);
}
//   gün kontrolü
if((gun==32))
{
gun=1;
}
if((gun==0))
{
gun=31;
}
break;

case 4:   // ay ayarı
printf(lcd_putc,"Ay");
lcd_gotoxy(12,1);
printf(lcd_putc,"%d",ay);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);
if(input(art))
{
ay=ay+1;
delay_ms(200);
}
if(input(azal))
{
ay=ay-1;
delay_ms(200);
}
if(input(onay))
{
menu=menu+1;
delay_ms(200);
}
// ay kontrolü
if((ay==13))
{
ay=1;
}
if((ay==0))
{
ay=12;
}
break;

case 5:   // yıl ayarı
printf(lcd_putc,"yil");
lcd_gotoxy(9,1);
printf(lcd_putc,"%d",yil);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);
if(input(art))
{
yil=yil+1;
delay_ms(200);
}
if(input(azal))
{
yil=yil-1;
delay_ms(200);
}
if(input(onay))
{
menu=menu+1;
delay_ms(200);
}
break;

case 6:    // haftanın gün ayarı
printf(lcd_putc,"haftanin gunu");
lcd_gotoxy(1,2);
printf(lcd_putc,"%d",haftanin_gunu);
rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);
if(input(art))
{
haftanin_gunu=haftanin_gunu+1;
delay_ms(200);
}
if(input(azal))
{
haftanin_gunu=haftanin_gunu-1;
delay_ms(200);
}
if(input(onay))
{
menu=1;
delay_ms(200);
}
// haftanin_gunu kontrolü
if((haftanin_gunu==8))
{
haftanin_gunu=1;
}
if((haftanin_gunu==0))
{
haftanin_gunu=7;
}
break;
}
}
// Alarm ayar kısmı
i=0;
while(input(alarm))      // alarm ayar
{
if(menu>2)
{
menu=1;
i++;
if(i>7) i=0;
}
switch(menu)  // menu hangi basamakta
{

case 1:    // dakika ayarı
printf(lcd_putc,"\f%u. Alarm Dakika\n",i+1);
lcd_gotoxy(12,2);
printf(lcd_putc,"%u",alarmt[i][1]);
write_eeprom(8+i,alarmt[i][1]);
delay_ms(20);
if(input(art))
{
alarmt[i][1]=alarmt[i][1]+1;
delay_ms(200);
}
if(input(azal))
{
alarmt[i][1]=alarmt[i][1]-1;
delay_ms(200);
}
if(input(onay))
{
menu=menu+1;
delay_ms(200);
}
if((alarmt[i][1]==60))
{
alarmt[i][1]=0;
}
if((alarmt[i][1]>60))
{
alarmt[i][1]=59;
}
break;

case 2:    // saat ayarı
printf(lcd_putc,"\f%u. Alarm Saat\n",i+1);
lcd_gotoxy(9,2);
printf(lcd_putc,"%u",alarmt[i][0]);
write_eeprom(i,alarmt[i][0]);
delay_ms(20);
if(input(art))
{
alarmt[i][0]=alarmt[i][0]+1;
delay_ms(200);
}
if(input(azal))
{
alarmt[i][0]=alarmt[i][0]-1;
delay_ms(200);
}
if(input(onay))
{
menu=menu+1;
delay_ms(200);
}
//   saat kontrol
if((alarmt[i][0]==24))
{
alarmt[i][0]=0;
}
if((alarmt[i][0]>24))
{
alarmt[i][0]=23;
}
break;

}
}
}
}

int g;
#SEPARATE
void pccon()      // PC Kontrol
{
switch(g)
{
case '1':output_bit( PIN_B0, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led1 Acildi   ");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case 'q':output_bit( PIN_B0, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led1 Kapatildi");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case '2':output_bit( PIN_B1, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led2 Acildi   ");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case 'w':output_bit( PIN_B1, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led2 Kapatildi");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case '3':output_bit( PIN_B2, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led3 Acildi   ");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case 'e':output_bit( PIN_B2, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led3 Kapatildi");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case '4':output_bit( PIN_B3, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led4 Acildi   ");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case 'r':output_bit( PIN_B3, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led4 Kapatildi");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case '5':output_bit( PIN_B4, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led5 Acildi   ");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case 't':output_bit( PIN_B4, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led5 Kapatildi");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case '6':output_bit( PIN_B5, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led6 Acildi   ");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case 'y':output_bit( PIN_B5, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led6 Kapatildi");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case '7':output_bit( PIN_B6, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led7 Acildi   ");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case 'u':output_bit( PIN_B6, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led7 Kapatildi");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case '8':output_bit( PIN_B7, 1);lcd_gotoxy(1,2);printf(lcd_putc,"Led8 Acildi   ");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
case 'ı':output_bit( PIN_B7, 0);lcd_gotoxy(1,2);printf(lcd_putc,"Led8 Kapatildi");
lcd_gotoxy(1,1);
printf(lcd_putc,"PC'den KONTROL");
break;
}
}

int m,k;
void menua()      // Tuşlarla Kontrol
{
switch(m)
{
case 1:printf(lcd_putc,"\f      Led1      ");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=1;
break;
case 2:printf(lcd_putc,"\f      Led2      ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=2;
break;
case 3:printf(lcd_putc,"\f      Led3      ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=3;
break;
case 4:printf(lcd_putc,"\f      Led4      ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=4;
break;
case 5:printf(lcd_putc,"\f      Led5      ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=5;
break;
case 6:printf(lcd_putc,"\f      Led6      ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=6;
break;
case 7:printf(lcd_putc,"\f      Led7      ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");lcd_gotoxy(10,2);printf(lcd_putc,"ileri>>");delay_ms(300);k=7;
break;
case 8:printf(lcd_putc,"\f      Led8      ");lcd_gotoxy(1,2);printf(lcd_putc,"<<geri");delay_ms(300);k=8;
break;
}
}

byte a,b,c,d;
#SEPARATE
void onur()         // PC ve tuşlarla kontrol
{
asd:
lcd_init();
basla:
lcd_gotoxy(1,1);
printf(lcd_putc,"    <<MENU>>    ");
lcd_gotoxy(1,2);
printf(lcd_putc,"<<geri   ");
lcd_gotoxy(10,2);
printf(lcd_putc,"ileri>>");

while(!input(aonoff))
{
// Butonlar Tanımlanıyor
a=input(pin_A0);     //   Sağ
b=input(pin_A1);     //   Sol
c=input(pin_A2);     //   Ac
d=input(pin_A3);     //   Kapa

//Seri portta veri varmi kontrol ediliyor
if(kbhit())
{
g = getc();
}
if(g=='A')
{
lcd_gotoxy(1,1);
printf(lcd_putc," PC BAGLANTISI  ");
delay_ms(20);
lcd_gotoxy(1,2);
printf(lcd_putc,"     HAZIR       ");
for(;;)
{
// Butonlar Tanımlanıyor
a=input(pin_A0);     // Sağ
b=input(pin_A1);     // Sol
c=input(pin_A2);     // Ac
d=input(pin_A3);     // Kapa
if(kbhit())
{
g = getc();
}
if(g=='B')
{
lcd_gotoxy(1,1);
printf(lcd_putc," PC BAGLANTISI  ");
delay_ms(20);
lcd_gotoxy(1,2);
printf(lcd_putc,"    KESILDI      ");
delay_ms(1000);
goto asd;
}
pccon();
if(a||b||c||d)
{
break;
}
}
}

if (a)
{
m=m+1;
if(m>8)
{
m=8;
}
menua();
}
if (b)
{
m=m-1;
if(m<1)
{
m=1;
}
menua();
}
if(k==1)
{
if(c)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"< Led1 Acildi  >");
output_bit( PIN_B0, 1);
delay_ms(2000);
k=0;
m=0;
break;
}
if(d)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"<Led1 Kapatildi>");
output_bit( PIN_B0, 0);
delay_ms(2000);
k=0;
break;
}
}
if(k==2)
{
if(c)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"< Led2 Acildi  >");
output_bit( PIN_B1, 1);
delay_ms(2000);
k=0;
m=0;
break;
}
if(d)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"<Led2 Kapatildi>");
output_bit( PIN_B1, 0);
delay_ms(2000);
k=0;
break;
}
}
if(k==3)
{
if(c)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"< Led3 Acildi  >");
output_bit( PIN_B2, 1);
delay_ms(2000);
k=0;
m=0;
break;
}
if(d)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"<Led3 Kapatildi>");
output_bit( PIN_B2, 0);
delay_ms(2000);
k=0;
break;
}
}
if(k==4)
{
if(c)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"< Led4 Acildi  >");
output_bit( PIN_B3, 1);
delay_ms(2000);
k=0;
m=0;
break;
}
if(d)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"<Led4 Kapatildi>");
output_bit( PIN_B3, 0);
delay_ms(2000);
k=0;
break;
}
}
if(k==5)
{
if(c)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"< Led5 Acildi  >");
output_bit( PIN_B4, 1);
delay_ms(2000);
k=0;
m=0;
break;
}
if(d)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"<Led5 Kapatildi>");
output_bit( PIN_B4, 0);
delay_ms(2000);
k=0;
break;
}
}
if(k==6)
{
if(c)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"< Led6 Acildi  >");
output_bit( PIN_B5, 1);
delay_ms(2000);
k=0;
m=0;
break;
}
if(d)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"<Led6 Kapatildi>");
output_bit( PIN_B5, 0);
delay_ms(2000);
k=0;
break;
}
}
if(k==7)
{
if(c)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"< Led7 Acildi  >");
output_bit( PIN_B6, 1);
delay_ms(2000);
k=0;
m=0;
break;
}
if(d)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"<Led7 Kapatildi>");
output_bit( PIN_B6, 0);
delay_ms(2000);
k=0;
break;
}
}
if(k==8)
{
if(c)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"< Led8 Acildi  >");
output_bit( PIN_B7, 1);
delay_ms(2000);
k=0;
m=0;
break;
}
if(d)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"<Led8 Kapatildi>");
output_bit( PIN_B7, 0);
delay_ms(2000);
k=0;
break;
}
}
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
}
}

void main()         // PC,tuş ve saat kontrol (ana program)
{
// Giriş-Çıkış ayarları
set_tris_a(0x0F);
set_tris_d(0x00);
set_tris_e(0x06);
output_d(0x00);
output_e(0x00);
lcd_init();     // LCD başlangıç ayarları yapılıyor
rtc_init();     // DS1302 başlangıç ayarları yapılıyor
// Giriş
printf(lcd_putc," H. Onur BOYRAZ ");
lcd_gotoxy(1,2);
printf(lcd_putc,"DiplomaCalismasi");
delay_ms(3000);
// Hafızadaki alarm değerlerinin alınması
for(i=0;i<8;i++)
{
alarmt[i][0]=read_eeprom(i);
alarmt[i][1]=read_eeprom(8+i);
alarmt[i][2]=0;
}

while(TRUE)
{
husnu();
onur();
}
}

EV OTOMASYONU VE AKILLI EVLER

Akıllı bina tanımı genel olarak “her şeyiyle kontrol edilebilen, servis kontrol sistemine sahip olan binadır. Yine “The Intelligent Building Institution” akıllı evi şu şekilde tanımlamaktadır; “akıllı bir ev, çeşitli sistemleri bir arada koordineli bir şekilde kullanarak teknik performansı, yatırımları ve işletim maliyetlerini düşürmeyi, esneklik kazandırmayı en üst seviyeye taşıyan yapıdır”. Şekil 2.1. de basit bir akıllı ev sisteminde olabilecek uygulamalar görülmektedir.

Binalar için akıllı kelimesi ilk olarak Amerika birleşik devletlerinde 1980 yılının başlarında kullanıldı. Türkiye’deki ilk uygulama ise 1984 yılında yapıldı. Tasarlanan bu sistem yalnızca izlemeye yönelikti. Geçen yıllar içinde teknolojinin gelişmesine paralel olarak yaşantımızın her alanında ciddi değişimler oldu. Bu dönem içinde bina otomasyon sistemleri de yerinde saymadı ve firmalar sürekli yeni nesil sistemler üreterek gelişen teknolojiyi takip ettiler. Mekatronik sistemlerdeki gelişmeler daha hızlı, daha yüksek kapasiteli kontrol cihazlarının kullanılmasına imkân verdi.

ev-otomasyonu-akilli-evler-elektronik

Akıllı evlerden beklentiler: Genel olarak akıllı evlerden beklentiler dört ana başlık altında toplanabilir. Bunlar: Güvenlik ve emniyetin artırılmasına yönelik sistemler, konfora yönelik sistemler, basitlik ve kullanım kolaylığı, enerji tasarrufuna yönelik sistemlerdir.

Akıllı evlerin Kullanıcıya sağlayacağı faydalar: Akıllı Evler size sınırsız konfor olanağı sunar, örneğin; ısınma konusunda gelişen teknoloji hayatımızı kolaylaştırırken eski alışkanlıklarımızdan da bizi vazgeçirmiyor. Evinizde şömine keyfini çok daha güvenli ve konforlu olarak yaşayabilirsiniz, evinizdeki tüm elektrikli cihazlar otomatik kontrole geçer ve böylece gereksiz enerji sarfiyatı önlenir(Işık kontrol, TV/DVD, ısıtıcı, beyaz eşya vb. ).

Evde bulunmadığınız zamanlarda veya gece modunda tüm alarm sistemleri (hırsız ve yangın gibi.) aktif hale geçerek sizden habersiz eviniz koruma altına alınır(Pencere veya kapılar zorlandığında kamera kontrol devreye girerek kayıt yapılır, siren çalınarak ev sakinleri ve hırsız uyarılır ve son olarak istenilen numara (polis vaya itfaiye merkezi) aranılarak gerekli mesaj otomatik olarak gönderilir). Evin temizliği, bahçelerin sulanması, ev sıcaklığı veya güneş yoğunluğuna göre perdelerin açılıp kapanması gibi monoton ev işleri yine akıllı ev sistemlerinde belirlenmiş zaman veya gerektiği durumlarda otomatik olarak yapılabilmektedir.

Temizlik yapmakta zorlanıyor ya da zamanınızı daha verimli işlerde kullanmak istiyorsanız belli zamanlara programlanmış, odanızın şeklini ve eşyaların yerini bilen, kırıp dökmeden temizlik yapan robot size yardımcı olabilir. Yukarıda saydığımız tüm işlemleri ve daha fazlasını ev içindeyken sesli komutlarla veya küçük dokunuşlarla yaptırabiliriz. Eğer dışarıdaysanız cep telefonu veya internet erişimli bir bilgisayar sayesinde evinizi kontrol edebilirsiniz. (Cep telefonumuzdan evin sıcaklığını 23 dereceye ayarlayabileceğimiz gibi evdeki çocuk bakıcınızı işyerimizdeki internet erişimli bilgisayarımızdan gözetleyebiliriz.) Şekil 2.2. de yapılabilecek örnek proje görülmektedir.

.

yukarıda özetler verildi;

mikrodenetleyici-tabanli-zamanlayici-ve-kontrol-ccs-c

Şifre-Pass: 320volt.com

Yayım tarihi: 2010/05/16 Etiketler: , , , , , ,



3 Yorum “Mikrodenetleyici tabanlı zamanlayıcı ve kontrol (ccs c )

  1. kzmkzm

    gevv hocam öncelikle bu çalışma için çok teşekkürler size bir sorum olacak devreyi proteusta yapıp çalıştırdım fakat akış şemasında olduğu gibi alarm on off butonuna basıldığı zaman devre alarm ayarlamaya geçmiyor sadece saat gösteriyor ve menüye geçiş yapıyor ne yapmam gerekir ilginiz için şimdiden teşekkürler

    CEVAPLA
  2. sametsamet

    devre bilgisayar kontrollü demişsiniz acaba bilgisayar programınıda paylaşırmısınız….

    CEVAPLA
  3. ömürömür

    iyi günler,
    ccs c de yeniyim.
    Bu kısmı açarmısınız?
    48,49…
    ne anlama geliyor.
    //i. alarm çalışıyor
    switch(i)
    {
    case 0: output_bit(48,1); break;
    case 1: output_bit(49,1); break;
    case 2: output_bit(50,1); break;
    case 3: output_bit(51,1); break;
    case 4: output_bit(52,1); break;
    case 5: output_bit(53,1); break;
    case 6: output_bit(54,1); break;
    case 7: output_bit(55,1);
    }

    CEVAPLA

kzm için bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir