Haberler:

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

Ana Menü

rtc ds1302 sorunu

Başlatan akasya, 12 Mayıs 2008, 20:29:15

akasya

Merhaba arkadaşlar,
ds1302 kullanıyorum, yalnız şöyle bir sorunum var, ds1302 bcd değer döndürüyor bunu decimale dönüştürmem gerekmekte, dönüştüremedim. Bu yüzden saniye 0dan 90a kadar sayıyor, dönüşüm için bir kod ekledim (Bcd2Int) ancak doğru dönüşüm yapamadım, ekranda dakika bilgisi yanlış görünüyor, arada geriye atlamalar filan oluyor. (örneğin dakika 9dan 16ye, 25ten 32ye,41den 48e) Saat kısmı artmıyor. Bunu nasıl düzeltebilirim, yardımcı olursanız çok sevinirim...

#include <16F877A.H>
#fuses XT,NOWDT,NOPROTECT,BROWNOUT,PUT,NOLVP
#use delay (clock=4000000)
#define RTC_SCLK PIN_c4
#define RTC_IO   PIN_c5
#define RTC_RST  PIN_c3
#include <ds1302.c>
#include <lcd.c>

int saniye,dakika,saat,gun,ay,yil,haftanin_gunu;
int saniye_bcd,dakika_bcd,saat_bcd,gun_bcd,ay_bcd,yil_bcd,haftanin_gunu_bcd;

int8 Bcd2Int(int8 BCD)
{return (10 * (BCD >> 4)) + (BCD & 0x0F);}

void main()
{
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_1(T1_DISABLED);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);

   lcd_init();

   rtc_init();

   rtc_set_datetime(12,5,8,1,19,59);

  while(1)
{
rtc_get_time(saat_bcd,dakika_bcd,saniye_bcd);
   rtc_get_date(gun_bcd,ay_bcd,yil_bcd,haftanin_gunu_bcd);
 
   saat=Bcd2Int(saat_bcd);
   dakika=Bcd2Int(dakika_bcd);
   saniye=Bcd2Int(saniye_bcd);
   
   gun=Bcd2Int(gun_bcd);
   ay=Bcd2Int(ay_bcd);
   yil=Bcd2Int(yil_bcd);
   haftanin_gunu=Bcd2Int(haftanin_gunu_bcd);

   lcd_gotoxy(1,1);
   printf(lcd_putc,"%02d/%02d/%02d %02d:%02d:02d",gun,ay,yil,saat,dakika,saniye);

}
}

KIRIKDR

Konunun üzerinden cok geçmiş ama bir bakan olur da işine yarar diye yazıyorum..ds1302.c hazır kütüphanesindeki fonksiyonları aşağıda yazıyorum..

////  rtc_init()                                   Call after power up////
////                                                                  ////
////  rtc_set_datetime(day,mth,year,dow,hour,min)  Set the date/time  ////
////                                                                  ////
////  rtc_get_date(day,mth,year,dow)               Get the date       ////
////                                                                  ////
////  rtc_get_time(hr,min,sec)                     Get the time       ////
////                                                                  ////
////  rtc_write_nvr(address,data)                  Write to NVR       ////
////                                                                  ////
////  data = rtc_read_nvr(address)                 Read from NVR      ////
////                                                                  ////
////  get_bcd(data)                              Convert data to BCD  ////
////                                                                  ////
////  rm_bcd(data)                               Convert data to int  ////

bu fonksiyonlardan "get_bcd(data);"  fonksiyonu data değişkeni içeriğini BCD formatına çevirir.
"rm_bcd(data);" fonksiyonu ise data değişkeninin içeriğini tam sayı formatına çevirir.

sanırım arkadaş fonksiyonları yanlış kullanmış.Ayrıntılı bilgi için bakınız CCS-C İLE PIC PROGRAMLAMA (serdar çiçek- altaşş yayıncılık)