16F628A Ayarlı Saat Termometre Devresi [Pcp + schematic + ccs c kodları]

Başlatan Extreme, 12 Temmuz 2013, 15:34:36

Extreme



Recep METE

printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

deblekeli

@by_deblekeli

Extreme

Link ölmüş özel mesajla gelen istek üzerine kodları aşağıda veriyorum.

#include <16f628a.h>                               // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses INTRC_IO,NOWDT,NOBROWNOUT,NOLVP,NOPUT,NOCPD // Fuses ayarları
#use delay (clock=4000000)                         //4mhz delay süresi

#include "flexy_lcd.c"                            //lcd c dosyası
#include "ds18b20.c"                              //termometre entegresi c dosyası
#include "ds1302.C"                               //saat entegresi c dosyasi

int8 sicak,saniye,dakika,saat,gun,ay,hafta,yil,ayar=0;

void lcd()
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%02d/%02d/%02d",gun,ay,yil);  
   lcd_gotoxy(1,2);
   printf(lcd_putc,"%02d:%02d:%02d",saat,dakika,saniye);
   lcd_gotoxy(11,1);
   switch(hafta)  
      {                     
         case 1: printf(lcd_putc,"Pzts"); break; 
         case 2: printf(lcd_putc,"SALI"); break; 
         case 3: printf(lcd_putc,"CARS"); break; 
         case 4: printf(lcd_putc,"PERS"); break;
         case 5: printf(lcd_putc,"CUMA"); break; 
         case 6: printf(lcd_putc,"Cmts"); break; 
         case 7: printf(lcd_putc,"Pzar"); break; 
      }
}
void sicaklik()
{
   sicak=ds1820_read();                                  //termometre entegresindeki değeri sicak değişkenine aktar
   lcd_gotoxy(11,2);printf(lcd_putc,"%02d",sicak);
   lcd_gotoxy(13,2);lcd_send_byte(0x4a,0xdf);lcd_gotoxy(14,2);printf(lcd_putc,"C");
}
void ayaryap(){
//(0x0d) lcd belirtilen konumun yanıp sönmesi

   if(input(pin_b0)==0){ayar++;delay_ms(20);printf(lcd_putc,"\f AYAR MODU");delay_ms(450);printf(lcd_putc,"\f");}

   while(ayar==1){
   lcd();lcd_gotoxy(1,1);lcd_send_byte(0x01,0x0d);lcd_gotoxy(2,1);lcd_send_byte(0x02,0x0d);   
   if(input(pin_a3)==0){gun++;delay_ms(20);if(gun==32){gun=1;}while(input(pin_a3)==0);}
   if(input(pin_a4)==0){gun--;delay_ms(20);if(gun==0){gun=31;}while(input(pin_a4)==0);}
   if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}
   
   while(ayar==2){
   lcd();lcd_gotoxy(4,1);lcd_send_byte(0x04,0x0d);lcd_gotoxy(5,1);lcd_send_byte(0x05,0x0d);
   if(input(pin_a3)==0){ay++;delay_ms(20);if(ay==13){ay=1;}while(input(pin_a3)==0);}
   if(input(pin_a4)==0){ay--;delay_ms(20);if(ay==0){ay=12;}while(input(pin_a4)==0);}
   if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}
   
 
   while(ayar==3){
   lcd();lcd_gotoxy(7,1);lcd_send_byte(0x07,0x0d);lcd_gotoxy(8,1);lcd_send_byte(0x08,0x0d);
   if(input(pin_a3)==0){yil++;delay_ms(20);while(input(pin_a3)==0);}
   if(input(pin_a4)==0){yil--;delay_ms(20);if(yil==-1)yil=99;while(input(pin_a4)==0);}
   if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}
   
   while(ayar==4){
   lcd_gotoxy(11,1);lcd_send_byte(0x11,0x0d);lcd();delay_us(5);
   if(input(pin_a3)==0){hafta++;delay_ms(20);if(hafta==8){hafta=1;}while(input(pin_a3)==0);}
   if(input(pin_a4)==0){hafta--;delay_ms(20);if(hafta==0){hafta=7;}while(input(pin_a4)==0);}
   if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}
   
   while(ayar==5){
   lcd_gotoxy(1,2);lcd_send_byte(0x40,0x0d);lcd_gotoxy(2,2);lcd_send_byte(0x41,0x0d);lcd();
   if(input(pin_a3)==0){saat++;delay_ms(20);if(saat==24){saat=0;}while(input(pin_a3)==0);}
   if(input(pin_a4)==0){saat--;delay_ms(20);if(saat==-1){saat=23;}while(input(pin_a4)==0);}
   if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}
   
   while(ayar==6){
   lcd_gotoxy(4,2);lcd_send_byte(0x43,0x0d);lcd_gotoxy(5,2);lcd_send_byte(0x44,0x0d);lcd();
   if(input(pin_a3)==0){dakika++;delay_ms(20);if(dakika==60){dakika=0;}while(input(pin_a3)==0);}
   if(input(pin_a4)==0){dakika--;delay_ms(20);if(dakika==-1){dakika=59;}while(input(pin_a4)==0);}
   if(input(pin_b0)==0){ayar++;delay_ms(200);while(input(pin_b0)==0);}}
   
   
   while(ayar==7){rtc_set_datetime(gun,ay,yil,hafta,saat,dakika);    //değişkenleri saat entegresine aktar.
   delay_ms(20);
   printf(lcd_putc,"\f    AYARLAR\n   YUKLENIYOR");
   delay_ms(1000);printf(lcd_putc,"\f");
   ayar=0;}
}   
void main()
{  
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   lcd_init();       //lcd yi hazırla
   rtc_init();       //saat entegresini hazırla
   delay_ms(5);
   printf(lcd_putc,"\fAIBU");
   delay_ms(3000);
   printf(lcd_putc,"\f");
   delay_ms(5);    
   
while(1)
{
      if(ayar==0){rtc_get_time(saat,dakika,saniye);rtc_get_date(gun,ay,yil,hafta);}
      sicaklik();
      lcd();
      ayaryap();
}
}

subram

http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

veliusta

ds1302.c , ds18b20.c , flexy_lcd.c   Dosyalarına da paylaşabilirmisin? derleyemedim

sasen

Emeğine sağlık arkadaşım devreyi çalıştırdım ancak bir sıkıntım var.ds18b20 devreye bağlıyken saatteki saniye de belli aralıklarla durma oluyor .Devreden ds180b20 yi çıkartıp  programdan da kaldırınca saat ve takvim olarak çalışırken bir sıkıntı olmuyor.Ds180b20 okunurken oluşan bu saniyedeki bekleme sorununu nasıl çözebilirim?Teşekkürler.

veliusta


xoom

istediğin kütüphanelerden zaten ds18b20.c  ile ds1302.c  CCS C  derleyicisinin kendi driver klasöründe var. Diğeri ise kendi kullandığın LCD'ye göre uygun kütüphaneyi kullanmalısın. yok ben aynısını kullanıcam diyorsan flexy_lcd.c google bir sürü var.
C:\Program Files (x86)\PICC\Drivers\ds18b20.c
C:\Program Files (x86)\PICC\Drivers\DS1302.C

flexy_lcd.c
http://picmania.garcia-cuervo.net/recursos/flex_lcd.c

veliusta

Alıntı yapılan: xoom - 05 Şubat 2014, 21:35:10
istediğin kütüphanelerden zaten ds18b20.c  ile ds1302.c  CCS C  derleyicisinin kendi driver klasöründe var. Diğeri ise kendi kullandığın LCD'ye göre uygun kütüphaneyi kullanmalısın. yok ben aynısını kullanıcam diyorsan flexy_lcd.c google bir sürü var.
C:\Program Files (x86)\PICC\Drivers\ds18b20.c
C:\Program Files (x86)\PICC\Drivers\DS1302.C

flexy_lcd.c
http://picmania.garcia-cuervo.net/recursos/flex_lcd.c

ds18b20.c dosyasını driver'imde bulamadım. Sende neden var. Herhangi bir eklentimi yüklemem gerekiyor?

mesaj birleştirme:: 05 Şubat 2014, 22:26:03

PCM Compiler V4.068

WorldWideWeb

Pic ile LCD menusu tasarlamak için biraz fikir gerekiyordu, aklımdaki şablon iyice oturdu. Farklı açılardan bakmak lazım :)

veliusta


cengav4r

bu devreyi bende yapmak istedim ancak bende veliusta ile aynı hatayı aldım. Sorunsuz çalıştıranlar nasıl çalıştırdı? ds18b20.c, DS1302 ve flexy_lcd dosyalarımız farklı olabilir!..

veliusta