Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

ds1302 saat devresi CCS C

Başlatan kostebek, 07 Kasım 2008, 10:58:03

kostebek

Arkadaşlar http://ccspic.com/projeler/ds18b20-ve-ds1302-ile-lcd-termometre-saat.html  şurada bulduğum devreyi 16F628 e uyarlamak istedim. Sıcaklık entegrem olmadığı için onu gösteremiyeceğim şimdilik.

Ancak problem şu ekrana sürekli 000.. yazıyor.   Yarni alacağı bütün değerler 0 olarak görünüyor.

Kodları şu şekilde değiştirdim.

#include <16f628a.h>            //Kullanılacak pic
#use delay(CLOCK=4000000)         //Fosc=4Mhz
#fuses INTRC,NOMCLR,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT  // Denetleyici konfigürasyon ayarları
#define use_portb_lcd TRUE         //B portu lcd için ayrılıyor
#define RTC_SCLK PIN_A6            //DS1302 için pin tanımlamaları
#define RTC_IO   PIN_A7
#define RTC_RST  PIN_A5            //
#include "ds1302.c"               //ds1302 ait fonksiyonlar programa eklenir
#include "lcd.c"                 //lcd ait fonksiyonlar programa eklenir
//Global değişkenler
int saniye,dakika,saat,gun,ay,yil,haftanin_gunu;   //ds1302 değişkenleri

///PROGRAM
void main(void){
float temp;
   lcd_init();  // LCD başlangıç ayarları yapılıyor
   rtc_init();  // DS1302 başlangıç ayarları yapılıyor

   rtc_set_datetime(6,5,8,2,22,52); // Tarih ve Saat ayarları yapılıyor

   while(1)
   { //Sıcaklık bilgisi okunuyor ve çevriliyor
      temp = 0;
      // DS1302?den saat,dakika,saniye bilgileri alınıyor
      rtc_get_time(saat,dakika,saniye);
     // DS1302?den gün,ay,yil ve günün isim bilgisi alınıyor
      rtc_get_date(gun,ay,yil,haftanin_gunu);
      //LCD'ye sıcaklık,gün,ay,yıl bilgileri yazdırılıyor
      printf(lcd_putc,"\f%3.1f%cC  %02d/%02d/%02d\n",temp,223,gun,ay,yil); 

      switch(haftanin_gunu)  // DS1302?den sayısal olarak alınan haftanın günü bilgisine
      {                      // metin olarak karşılık atanıyor
         case 0: printf(lcd_putc,"HATA"); break; // Eğer "0? ise LCD'ye PAZ yaz
         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
      printf(lcd_putc,"     %02d:%02d:%02d",saat,dakika,saniye);
      delay_ms(1000); // 1 sn gecikme veriliyor
   }
}



Mesela ben switch döngüsüne bir case ekledim 0 olarak onu da 0 gördüğü için ekrana HATA yazıyor  :oops:

Acaba ds1302 nin değişik bir bağlanış biçimi mi var. Ben direk şu şekilde bağladım.

#define RTC_SCLK PIN_A6          
#define RTC_IO   PIN_A7
#define RTC_RST  PIN_A5    

Resim de şu şekilde:


Problem nerede sizce ?





kostebek

Arkadaşlar hallettim RX TX e bağlamamız gerekiyormuş.Çünkü simulasyon da çalışmadı . Bende LCD sürdüğüm için o pinlerle bağlamamıştım. Şimdi flexy_lcd driver'i ile LCD bağlantı kablolarını değiştirip , ds1302 yi RX TX e bağladım simulasyonda çalışıyor.

Devreyide akşama yaparım artık :)


mucit07

hic bir ilgisi yok ama yinede kendince halletmişsin

kostebek

İlginç o zaman niye çalışmadı merak ediyorum açıkçası ?

Devre resimleri :






zfer

güzel çalışma eline sağlı. peki ds1302 ye sati ve tarihi nasıl unutturmuyorsun.

Tagli

Alıntı yapılan: "zfer"güzel çalışma eline sağlı. peki ds1302 ye sati ve tarihi nasıl unutturmuyorsun.
Yaklaşık 3 V'luk bir hafıza pili takılır. Ayrıntılı bilgi için ilgili datasheet'e bakınız.
Gökçe Tağlıoğlu