Akvaryum Sistemi
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Eğer çok gelişmiş bir proje yapmak isterisen, kullanacağın PİC programı çok büyük olur, Pic16f*** serisi zayıf gelir Pic18*** serisinden kullanman lazım.. Bana PİC programlama az geliyor çok fazlasını isterim dersen, arduino kullanman lazım..
Bu arada ben elektronikten pek anlamam, ama balıklar için iki dakikada devreleri hemen yakarım.
Akvaryum otomasyonu ile ilgili linkler :
http://www.akvaryum.com/forum/akvaryum_%28pic%29_control_sistemi_k314608.asp
http://www.akvaryum.com/forum/otomatik_hava_motoru_kontrolu_k389967_sn1.asp
http://www.akvaryum.com/forum/akvaryum_otomasyonu_%28isi-isik-havalandirma%29_k597462.asp
http://www.akvaryum.com/forum/sogutma_projem_resimli_yapim_asamalari_k163991_sn1.asp
http://www.akvaryum.com/forum/full_kontrol_aquamatic_fc914_k121823.asp
http://www.akvaryum.com/forum/ogrenci_isi_otomatik_yemleme_sistemi__k415234_sn1.asp
http://www.teknomerkez.net/sayfa.php?git=628
http://320volt.com/akvaryum-kontrol-otomasyon-pic16f877-hi-tech-picc/
http://elektrobilim.org/forum/pic-uygulamalari/7268-akvaryum-kontrol-projesi-oneri-ve-yardimlariniz.html
http://www.picproje.org/index.php?topic=31163.0
http://www.elektrotekno.com/about57694.html
http://proelectronic.wordpress.com/2011/11/04/akvaryum-otomasyonu/
http://www.elektrotekno.com/about21051.html
http://www.next.gr/microcontrollers/pic/aquarium-auto-controller-using-pic18f4520-l6873.html
http://forums.netduino.com/index.php?/topic/7586-my-aquarium-controller-led-lighting-controller/
http://alan-parekh.com/projects/fish-tank-lights-and-temperature-sensor/
http://www.pcbheaven.com/circuitpages/PIC_Thermometer_and_Thermostat/
http://compudoc97.com/SWNDIY3.html
http://www.reefprojects.com/wiki/Main_Page
http://www.marineaquariumsa.com/anything-diy-related/26372-arduino-powered-aquarium-controller-project.html
http://www.masa.asn.au/phpBB3/viewtopic.php?t=190763
http://www.nano-reef.com/topic/196161-reefbuddy-diy-aquarium-controller-89/
http://www.plantedtank.net/forums/showthread.php?p=3051946
http://www.masa.asn.au/phpBB3/viewtopic.php?t=216544&p=997116
http://www.reefcentral.com/forums/showthread.php?t=1987110
http://www.ultimatereef.net/forums/showthread.php?t=657458
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
Üye imzalarını sadece giriş yapan üyelerimiz görebilir
PROJE RAPORU
-ÖN BİLGİ-
1-) AKVARYUM TARİHİ
Arkeolojik kazıntılar bize
balıkların, ırmak ve göl kenarında yaşayan insanlarla deniz kıyısında yerleşmiş
kabileler için prehistorik zamandan beri önemli bir besin kaynağı olduğunu
göstermektedir. Sığ-yüzücü balıklar kaba mızrak ve sopalarla, derin-yüzücü
balıklar ise ağlarla avlanmaktaydı. Eski Mısır'la birlikte balıkların yanlızca
besin kaynağı olarak değil, akvaryumcular açısından için önemli olan süslü
özellikleri için de yetiştirildiklerini görüyoruz.
Mısırlılar besin kaynağı
olarak tilapia türlerini, güzellikleri için ise kutsal olduğuna inandıkları
mormyrid'leri besliyorlardı.
Avrupa'nın japon
balıklarıyla tanışması nedense biraz gecikmiş ve bu balıklar İngiltereye ancak
17. yüzyılda, 1691 civarında gelmiştir. İzleyen yüzyıllar içinde ise süs olarak
kullanılan gölcük ve göllere yayılmıştır. Birleşik Devletlere ise 1859 tarihli
'Suyun Altındaki Yaşam' adlı kitabından kısa bir süre önce ulaştığı
sanılmaktadır.
Bu arada, 19 yüzyılın
ortalarından itibaren balık beslemek ve dolayısıyla akvaryumculuk Avrupa'da
ciddi bir uğraş halini almaya başlamıştır. 1853'te Londra Zooloji Derneği,
içinde su bitkileri ve balıklar bulunan 'Dengeli Akvaryum' kavramını yaratmak
için uğraşan Philips Gosse'nin desteği ile bir gösteri akvaryumu kurmuş ve
bunu, 1859 Paris ve 1864 Hamburg'da açılan başka akvaryumlar izlemiştir. Bu
tarihten hemen sonra Alman akvaryum meraklıları, süs balıkları üretmeye
başlamış ve Birleşik Devletlere yönelik olarak bugünde süren ticari bir
faaliyetin ilk adımlarını atmıştır.
Gosse'nin dengeli akvaryum
kavramı, bugün bilinen anlamdaki balık besleme anlayışının gelişmesini büyük
ölçüde etkilemiştir. İlk akvaryum örneklerinin pek çoğunda çevredeki ırmak ve
kaya göletlerinden yakalanan balıklar ağırlanmaktaydı. Bunlar tek bir yaşam ortamına
ait ya da biotop - tek bir yaşam ortamına dayalı - ılıman akvaryumlardı. Hava
aktarımının gelişmesi ile dünyadaki egzotik balıkların tümünü besleme olanağı
doğmuş ve böylece de karışık akvaryum kavramı gelişmiştir.
2-)AKVARYUMUN İDEALLİĞİ
Aynı zamanda satılan ilaçlar yardımıyla bu suyun içindeki ağır metalleri
nötr hale getirmeniz gerekmektedir. Besleyeceğiniz balık çeşidine göre de
akvaryum sıcaklığını ayarlamanız gerekmektedir. Genel olarak akvaryum balıkları
20-26 °C arası sıcaklıkta yaşarlar. Yine de hangi balık beslenecekse ısı ona
göre ayarlanması gerekmektedir. Özel durumlar haricinde (hastalık, bazı
balıklarda üreme, vs…) ısı sabit tutulmalıdır. Bunun içinde yine piyasada
satılan çok çeşitli ısıtıcılardan alınabilir.
Bu şartlar sağlandıktan sonra akvaryum balık için idealliğe kavuşmuş
olacaktır. Balığın yaşamını sürdürebilmesi için zaman içinde kirlenen
akvaryumun temizlenmesi gerekmektedir. Bu temizlik yine beslenecek balığa göre
değişmektedir. Yukarıdaki işlemleri her seferde yapmak yorucu ve masraflıdır.
-PROJENİN AMACI-
Projemizde yukarıda suyun idealliği için anlatılan bu işlemlerin
tekrarına gerek duymaksızın suyu filtreleyerek temizlemeyi hedefledik. Amacımız
suyun sadece temizlenmesi değil suyun sıcaklığının kimyasal yapısının
bozulmadan su ilavesi olmaksızın suyun temizlenmesini sağlamak.
-PROJENİN ÖNEMİ VE ÇALIŞMASI-
1-) Su önce elyaftan çekilip kaba pisliği temizlenecektir.
2-) Biyolojik filtrelemeye yardımcı olarak mavi süngerden
geçecektir.
3-)Suyu sertleştirmesi için mercan kırığından geçecektir.
4-)son olarak da biobalden geçerek su temizlenecektir.
Temizlenen su pompası ile tekrardan
akvaryuma aktarılarak akvaryum temizliği sağlanmış olacaktır.
Bu proje
kapsamında picimizin kodları C18 dilinde programlayarak derlemiş bulunmaktayız.
Devremizde zaman entegresi olan DS1302 de kullanılmaktadır. Saat lcd ekran
üzerinde yazılacak zamanı geldiğinde su çekildiği veya suyun verildiği işlem
sonunda da suyun temizlendiği yazılacaktır. DS1302 BIOS pili ile beslenen bir
entegre olmaktadır. Elektrik gittiğinde de entegre zaman saymasına devam
etmektedir. Tekrar elektrik geldiğinde işlem kaldığı yerden devam etmektedir.
-KULLANILAN MALZEMELER-
1-)DS 1302
DS1302 entegresi mikro denetleyicilerle kullanılan bünyesinde
tarih ve zaman bilgilerini barındıran entegredir. Entegre 2100 yılına kadar
olan tarih bilgilerinin tamamını belleğinde kayıt altına tutar. DS1302 kristal
bağlantısı bildiğimiz kristaller ile çalışmaz. Kullanmamız gereken kristal
32.768 KHz’ lik bir kristaldir. Bunu piyasadan satın alabiliriz gerekirse
kendimizde oluşturabiliriz. 1. Bacaktan(Vcc2) stabil 2-5V arası beslenebilir
yada 8. Bacaktan(Vcc1) saat piliyle besleyebilir. Bu picin çalışmadığı zamanda
bile ds1302 nin arka planda hatasız zamanı saymasını sağlar. Bizim devremizde
picimizin her zaman çalışma garantisi olmadığı için 8. Bacaktan besleme
vereceğiz.
2-) PİC 18F452
Bacak Yapısı:
PIC18F452
mikrodenetleyicisinde A,B,C,D ve E olmak üzere beş farklı port bulunmaktadır.
Tüm portlar digital giriş / çıkış
olarak kullanılabilir.
* A portu 6 giriş/çıkışa sahiptir ve dijital
giriş çıkış olarak kullanılabilir.
* B portu 8 giriş/çıkışa sahiptir. Bu portun
0,1,2,3,4 nolu pinleri harici kesme girişi olarak kullanılabilir.
* C portu 8 giriş/çıkışa sahiptir. Pwm,
capture/compare, bilgisayar ile seri iletişim kurma gibi işlevleri vardır.
* D portu 8 giriş/çıkışa sahiptir. Paralel
slave port ile mikroişlemci portu olarak kullanılabilir.
* E portu 3 giriş/çıkışa sahiptir.
Analog/dijital çevirici olarak kullanılabilir.
Genel Özellikleri:
* 40 Mhz’ye kadar işlemci saat hızı
* 75 Adet komut
* Tüm komutlar 1 çevrim (cycle) sürer (4 komut
hariç:call,goto,btfss ve incfsz komutları 2 çevrim)
* 18 kaynaktan kesme yapılabilir.
* 8 bitlik data yolu vardır.
* Enerji verildiğinde sistemi resetleme
özelliği (Power-on Reset)
* Power-up Zamanlayıcı (Power-up-Timer PWRT)
* Osilatör başlatma zamanlayıcısı (Osilatör
Start-up Timer)
* Özel tip zamanlayıcı (Watch-dog Timer),
devre içi RC osilatör
* Hata ayıklamada kullanılanabilecek modül
(devre içi Debugger)
* Programlanabilen kod koruma
* Enerji tasarrufu için uyku (SLEEP) modu
* Program kodunun güvenliğini sağlayabilme
* Seçimli osilatör özellikleri: 4X Phase Lock
Loop (birincil osilatör), İkincil osilatör (32 kHz) clock girişi
* Sadece 5 V giriş ile devre içi seri
programlanabilir.
* 2 pinle programlanabilir.
* Düşük güç tüketimi, yüksek hızlı
FLASH/EEPROM teknolojisi
* Tamamen statik dizayn
* 2,0 V ile 5,0 V arasında değişen geniş
işletim aralığına sahiptir.
* Kaynak akımı 25 mA dir.
3-) 16*2 LCD
DİSPLAY
·
Back Lighting özelliğine sahiptir.
·
LCD arka fon ışığı olmadan 4mA akım
çekmektedir.
·
Boyutları 80x36x9.4mm'dir
·
Çalışma sıcaklığı -20 ile +70 derece
arasıdır.
4-)
5V’LUK RÖLE
"Röle",
başka bir elektrik devresinin açılıp kapanmasını sağlayan bir elektriksel
anahtardır. Bu anahtar bir elektromıknatıs tarafından kontrol edilir. 1835'te
Joseph Henry tarafından icat edilmiştir.
Rölenin
kontakları normalde açık ("Normally Open - NO"), normalde kapalı
("Normally Closed - NC") veya kontakta değişen cinsten olabilir.
Röleler
transistör görevi gibi görürler örneğin basit bir 3 bacaklı rölede akım
verdiğiniz zaman şasedeki kol diğer taraftaki akımı açar yani kontrol için
kullanılabilir.
Yalnızca transistörlerden bir farkları vardır:direnç ile
kulanmak gerekmez. Bobin iki kontağı mıknatısladığı zaman rölenin bir kontağı
açılır bir kontağı kapanır.
Röleler
düşük akımlar ile çalışan elektromanyetik bir anahtardır. Üzerinde bulunan
elektromanyetik bobine rölenin türüne uygun olarak bir gerilim uygulandığında
bobin mıknatıs özelliği kazanır ve karşısında duran metal bir paleti kendine
doğru çekerek bir veya daha fazla kontağı birbirine irtibatlayarak bir anahtar
görevi yapar.
-KODLAR-
akvaryum.c
#include <p18f452.h> //PİC'imizin
kütüphanesi
#include <xlcd.h> //LCD
komutlarının kütüphanesi
#include <math.h> //matematik
komutları kütüphanesi
#include <delays.h> //Bekleme
komutunun kütüphanesini
#include <timers.h> //timer
kütüphanesi
#include <stdlib.h> //değişken
değer dönüşüm kütüphanesi
#include "ds1302.h"
#include "Delay.h"
#pragma config OSC = XT, PWRT = ON, WDT = OFF, LVP = OFF, DEBUG =
OFF //stanndart
tanımlamalar
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF,CP3 = OFF, CPB =
OFF, CPD = OFF
#pragma config WRT0 = OFF, WRT1 = OFF, WRT2 = OFF, WRT3 = OFF,
WRTB = OFF,WRTC = OFF, WRTD = OFF
#pragma config EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF, EBTR3 = OFF,
EBTRB = OFF
void putrsXLCD(const rom
char *buffer)//putrsXLCD komutunu kullanabilmek için gerekli fonksiyon
tanımlandı
while(*buffer) // Write data to LCD up to
null
{
while(BusyXLCD()); // Wait
while LCD is busy
WriteDataXLCD(*buffer); // Write character to LCD
buffer++; //
Increment buffer
}
return;
}
//kullanılan değişkenler tanımlandı
unsigned char veri1,saniye,saat,dakika;
unsigned int sn,dk,sa,tut;
char yazi;
int deger1;
void DelayFor18TCY(void)
{
Nop();Nop();Nop();
Nop();Nop();Nop();
Nop();Nop();Nop();
Nop();Nop();Nop();
}
void DelayPORXLCD(void)
{
Delay1KTCYx(60);
return;
}
void bekle (void) //bekle
isminde bir fonksiyon tanımladım ve program içerisinde gerek oldukça çağırdım
{
Delay10KTCYx(50); //500000*4/4MHz=0.5sn
bekle
return;
}
void ds1302verial(){
saat=get_hr(); // saat degıskenıne
ds1302'den saat bilgisini al
dakika=get_min();// dakika degıskenıne ds1302'den dakika bilgisini
al
veri1=saniye;// veri 1 degıskenıne ds1302'den saniye bilgisini al
saniye=get_sec();// saniye degıskenıne ds1302'den saniye bilgisini
al
}
void main(void)
{
TRISB=0x00;
TRISC=0x00;
TRISD=0b11111100;
PORTC=0;
PORTD=0;
OpenXLCD(FOUR_BIT & LINES_5X7); //lcd 4bit modda ve 5x7 çözünürlükte çalıştırıldı
WriteCmdXLCD( CURSOR_OFF & BLINK_OFF); // imleci ve cursorü kapat
OpenTimer2(TIMER_INT_ON &T0_PS_1_16&T2_POST_1_16 ); //timer2 zamanlayıcımızı
tanımladık
while(BusyXLCD()); //LCD hazır olana kadar
bekle
WriteCmdXLCD(0x01); //Ekranı temizle ve
kursörü başa getir komutu gönderiliyor
while(BusyXLCD()); //LCD hazır olana
kadar bekle
while(1)
{
ds1302verial(); //ds1302
den zaman verisini oku
deger1=fmod(dakika, 10 ); //her
10 dk da bir temizleme yapması için 1 ler basamağı deger1 e atanıyor
if(deger1==0) //eğer
10. dk dolmuş ise alt işlemleri yap
{
PORTDbits.RD0=1; //su çekme motorunu/rölesini aktif et
while(BusyXLCD()); //LCD hazır olana kadar bekle
WriteCmdXLCD(0xC0); //lcd nin alt satırına geç
putrsXLCD("K.SU
CEKILIYOR"); //ekrana yazıyı yaz
bekle();
}
else if(deger1==1) //11.
dk da alt işlemleri yap
{
PORTD=0; //su
çekme motorunu durdur
PORTDbits.RD1=1; //se verme
motorunu/rölesini aktif et
while(BusyXLCD()); //LCD hazır olana kadar bekle
WriteCmdXLCD(0xC0); //lcd nin alt
satırına geç
putrsXLCD("T.SU
VERILIYOR"); //ekrana
yazıyı yaz
bekle();
}
else if(deger1==2) //12.
dk da alt işlemleri yap
{
PORTD=0; //motorları durdur
while(BusyXLCD()); //LCD hazır olana kadar bekle
WriteCmdXLCD(0xC0); //lcd nin alt satırına geç
putrsXLCD("SU
TEMIZLENDI"); //ekrana yazıyı yaz
bekle();
} //diğer
dk larda sadece lcd de zamanı yaz
while(BusyXLCD()); //LCD hazır olana kadar bekle
WriteCmdXLCD(0xC0); //lcd nin alt satırına geç
putrsXLCD("
"); //ekranın 2.
satırını temizle
if(PORTDbits.RD6)
{
while(PORTDbits.RD6); // eger portd0 teki butona baslırse
donguye gir
saat++;
//sati 1 arttır
if(saat==24) { //
eger saat 24'se yeni saat 0
saat=0;
}
write_ds1302(0x84,get_bcd(saat));
//ds1302'den saat bilgisi ıcın gerekli veriyi gonder
}
if(PORTDbits.RD7) //
eger portd1 teki butona baslırse donguye gir
{
while(PORTDbits.RD7); //butona basma bırakılınca donguye
gir
saat--; // saati 1 azalt
if(saat==0) // eger
saat 0'sa yeni saat 24
{ saat=24;}
write_ds1302(0x84,get_bcd(saat)); //ds1302'den saat bilgisi ıcın gerekli
veriyi gonder
}
if(PORTDbits.RD4) //
eger portd2 teki butona baslırse donguye gir
{
while(PORTDbits.RD4);//butona
basma bırakılınca donguye gir
dakika++;
if(dakika==60) //eger dakika 60'sa yeni dakikayı 0 yap
{dakika=0; }
write_ds1302(0x82,get_bcd(dakika));
//ds1302'den dakika bilgisi ıcın gerekli veriyi gonder
}
if(PORTDbits.RD5) // eger portd3 teki butona baslırse
donguye gir
{
while(PORTDbits.RD5);//butona basma bırakılınca donguye gir
if(dakika==0) //
eger dakika 0'sa dakikayı 60 yap
dakika=60;
dakika--; //dakikayı
1 azalt
write_ds1302(0x82,get_bcd(dakika)); //ds1302'den dakika bilgisi ıcın gerekli
veriyi gonder
}
if(saniye!=veri1) //
eger saniye veriye esit degılse donguye gir
{
//lm35'den veri okuyup adc ile convert etme ve saniye,dakika,saat
bilgilerini ekrana basma fonksiyonu
WriteCmdXLCD(0x01); //Ekranı temizle ve kursörü başa getir
komutu gönderiliyor
while(BusyXLCD());
putcXLCD(saat/10+48);putcXLCD(saat%10+48);//Saati ekrana yazdırma
putcXLCD(58); //":" nın ASCI kodu
putcXLCD(dakika/10+48);putcXLCD(dakika%10+48);//dakikayı
ekrana yazdırma
putcXLCD(58); //":" nın ASCI kodu
putcXLCD(saniye/10+48);putcXLCD(saniye%10+48); //saniyeyi ekrana
yazdırma
}
}
CloseTimer2();
}
Delay.c
#include "Delay.h"
#if __18CXX
void DelayMs(unsigned
short int ms)
{
unsigned char i;
while(ms--)
{ i=4;
while(i--)
{ Delay10us(25); }
}
}
void DelayUs(unsigned
short int us) //word tipi
{
while(us--) //us
degiskeni sifir olana kadar say, yani sifir olmadıgi surece say
{
Delay1TCY();
}
}
#endif
ds1302.c
#include "ds1302.h"
#if defined (__18CXX)
#include
"Delay.h"
#endif
void iki_mikro_saniye(void)
{
#if defined (__18CXX)
DelayUs(2);
#elif defined (__XC8)
__delay_us(2);
#endif
}
void write_byte(unsigned char Byte)
{
unsigned char i;
TRIS_IO=0;
for(i=0;i<=7;++i)
{
IO=Byte&0x01;
Byte>>=1;
SCLK=1;
SCLK=0;
}
}
void write_ds1302(unsigned char Byte,unsigned char Data)
{
RST=1;
write_byte(Byte);
write_byte(Data);
RST=0;
}
unsigned char read_ds1302(unsigned char Byte)
{
unsigned char i,Data;
TRIS_SCLK=0;
TRIS_RST=0;
RST=1;
write_byte(Byte);
TRIS_IO=1;
Data=0;
for(i=0;i<=6;i++)
{
if(PORT_IO==1){Data+=0x80;}
Data>>=1;
SCLK=1;
iki_mikro_saniye();
SCLK=0;
iki_mikro_saniye();
}
RST=0;
return(Data);
}
void ds1302_init(void)
{
unsigned char j;
TRIS_IO=0;
TRIS_SCLK=0;
TRIS_RST=0;
RST=0;
iki_mikro_saniye();
SCLK=0;
iki_mikro_saniye();
write_ds1302(0x8E,0);
write_ds1302(0x90,0xA4);
j=read_ds1302(0x81);
if((j & 0x80)!=0)
{
write_ds1302(0x80,0);
}
}
unsigned char get_bcd(unsigned char Data)
{
unsigned char
NibleH,NibleL;
NibleH=Data/10;
NibleL=Data-(NibleH*10);
NibleH<<=4;
return(NibleH|NibleL);
}
unsigned char rm_bcd(unsigned char Data)
{
unsigned char i;
i=Data;
Data=((i>>4)&0x0F)*10;
Data=Data+(i&0x0F);
return(Data);
}
void set_datetime(unsigned char day,unsigned char mth,unsigned
char year,unsigned char dow,unsigned char hr,unsigned char min, unsigned char
sec)
{
TRIS_SCLK=0;
TRIS_RST=0;
write_ds1302(0x86,get_bcd(day));
write_ds1302(0x88,get_bcd(mth));
write_ds1302(0x8c,get_bcd(year));
write_ds1302(0x8a,get_bcd(dow));
write_ds1302(0x84,get_bcd(hr));
write_ds1302(0x82,get_bcd(min));
write_ds1302(0x80,get_bcd(sec));
}
unsigned char get_day(void)
{
return(rm_bcd(read_ds1302(0x87)));
}
unsigned char get_mth(void)
{
return(rm_bcd(read_ds1302(0x89)));
}
unsigned char get_year(void)
{
return(rm_bcd(read_ds1302(0x8D)));
}
unsigned char get_dow(void)
{
return(rm_bcd(read_ds1302(0x8B)));
}
unsigned char get_hr(void)
{
return(rm_bcd(read_ds1302(0x85)));
}
unsigned char get_min(void)
{
return(rm_bcd(read_ds1302(0x83)));
}
unsigned char get_sec(void)
{
return(rm_bcd(read_ds1302(0x81)));
}
void rtc_ram_write(unsigned char address, unsigned char data)
{ write_ds1302(address, data);}
unsigned char rtc_ram_read(unsigned char address)
{
return(read_ds1302(address));
}
Delay.h
#if defined __18CXX
// #include
<p18f4685.h>
#include <delays.h>
#endif
#define __DELAY_C
#define GetSystemClock() (4000000ul)
#define GetInstructionClock() (GetSystemClock()/4)
#if !defined(GetInstructionClock)
#error GetInstructionClock() tanimlamasi yapilmamis
#endif
#define Delay10us(us) Delay10TCYx(((GetInstructionClock()/1000000)*(us)))
#define Delay1TCY()
Nop()
#if __18CXX
void DelayMs(unsigned
short int ms);
void DelayUs(unsigned
short int us);
#endif
ds1302.h
#if defined __18CXX
#include
<p18f452.h>
#include
<delays.h>
#elif defined __XC8
#include
<pic18f4685.h>
#include <xc.h>
//bekleme fonksiyonlari için
#define _XTAL_FREQ
4000000 //Bekleme fonksiyonlarini 4mhz
kristal için ayarlar
#endif
#define TRIS_RST TRISCbits.TRISC0
#define TRIS_SCLK
TRISCbits.TRISC1
#define TRIS_IO
TRISCbits.TRISC2
#define PORT_IO
PORTCbits.RC2
#define RST
LATCbits.LATC0
#define SCLK
LATCbits.LATC1
#define IO
LATCbits.LATC2
void write_byte(unsigned char Byte);
void write_ds1302(unsigned char Byte,unsigned char Data);
unsigned char read_ds1302(unsigned char Byte);
void ds1302_init(void);
unsigned char get_bcd(unsigned char Data);
unsigned char rm_bcd(unsigned char Data);
void set_datetime(unsigned char day,unsigned char mth,unsigned
char year,unsigned char dow,unsigned char hr,unsigned char min, unsigned char
sec);
unsigned char get_day(void);
unsigned char get_mth(void);
unsigned char get_year(void);
unsigned char get_dow(void);
unsigned char get_hr(void);
unsigned char get_min(void);
unsigned char get_sec(void);
void rtc_ram_write(unsigned char address, unsigned char data);
unsigned char rtc_ram_read(unsigned char address);
Not:c18 dili ile proglandı pic18f452
Üye imzalarını sadece giriş yapan üyelerimiz görebilir