Ds1302 saat saymıyor

Başlatan 94onur94, 25 Mayıs 2013, 20:46:23

94onur94

Arkadaşlar ds1302 sadece pic'e voltaj verdiğimde saniye sayıyor ama voltajı kestiğimde saniye aynı yerde kalıyor bunun nedeni nedir?

#include <16f877.h>
#device ADC=10
#FUSES NOWDT,HS,NOPUT,NOPROTECT
#use delay(clock=4000000)
#use fast_io(c)
#use fast_io(b)
#define btn1  PIN_C2 
#define btn2  PIN_C3 
#define LCD_ENABLE_PIN  PIN_B3 
#define LCD_RW_PIN      PIN_B2              
#define LCD_RS_PIN      PIN_B1                
#define LCD_DATA4       PIN_B4                               
#define LCD_DATA5       PIN_B5                                
#define LCD_DATA6       PIN_B6                    
#define LCD_DATA7       PIN_B7           
#include <lcd.c>
#include <saat.c>
int saniye,dakika,saat,gun,ay,yil,hafta,x=0;
unsigned long int bilgi;
float voltaj,sicaklik;
#int_ext
void ext_kesme() // Ayar buton
{
x=x+1;
if (x==8)
{x=0;}
output_high(pin_c0);
delay_ms(100);
output_low(pin_c0);
}
void main()
{
set_tris_a(0x01);
output_a(0x00);
set_tris_b(0x01);
output_b(0x00);
set_tris_c(0x08);
output_c(0x00);
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0);
ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
lcd_init();
rtc_init();
printf(lcd_putc,"\f     Sistem");   
printf(lcd_putc,"\n   Yukleniyor");  
set_adc_channel(0);
delay_us(20);
while(1)
{
if (x==0) // Ana gösterge
{
bilgi=read_adc();
voltaj=(0.0048828125*bilgi)*1000;
sicaklik=(voltaj/10)+2;
rtc_get_time(saat,dakika,saniye);
rtc_get_date(gun,ay,yil,hafta);
printf(lcd_putc,"\f%02d:%02d:%02d %2.1f'C",saat,dakika,saniye,sicaklik);
printf(lcd_putc,"\n   %02d/%02d/20%02d "gun,ay,yil); 
}
if (x==1) // Saat tarih ayar
{
printf(lcd_putc,"\f---Saat-Tarih---");
printf(lcd_putc,"\n---Ayar Menusu--");   
delay_ms(2000);
x=2;
}
if (x==2) // Saat ayar
{
printf(lcd_putc,"\f    %02d:%02d:%02d",saat,dakika,saniye);
printf(lcd_putc,"\n----Saat Ayar---");
delay_ms(50);
if (input(btn2))
{
delay_ms(150);
saat=saat+1;
if (saat==24);{saat=0;}
rtc_set_datetime(gun,ay,yil,hafta,saat,dakika,saniye);
}
}
if (x==3) // Dakika ayar
{
printf(lcd_putc,"\f    %02d:%02d:%02d",saat,dakika,saniye);
printf(lcd_putc,"\n---Dakika Ayar--");
delay_ms(50);
if (input(btn2))
{
delay_ms(150);
dakika=dakika+1;
if (dakika==60);{dakika=0;}
rtc_set_datetime(gun,ay,yil,hafta,saat,dakika,saniye);
}
}
if (x==4) // Saniye ayar
{
printf(lcd_putc,"\f    %02d:%02d:%02d",saat,dakika,saniye);
printf(lcd_putc,"\n---Saniye Ayar--");
delay_ms(50);
if (input(btn2))
{
delay_ms(150);
saniye=saniye+1;
if (saniye==60);{saniye=0;}
rtc_set_datetime(gun,ay,yil,hafta,saat,dakika,saniye);
}
}
if (x==5) // Gün ayar
{
printf(lcd_putc,"\f   %02d/%02d/20%02d "gun,ay,yil);  
printf(lcd_putc,"\n----Gun Ayar----");
delay_ms(50);
if (input(btn2))
{
delay_ms(150);
gun=gun+1;
if (gun==32);{gun=0;}
rtc_set_datetime(gun,ay,yil,hafta,saat,dakika,saniye);
}
}
if (x==6) // Ay ayar
{
printf(lcd_putc,"\f   %02d/%02d/20%02d "gun,ay,yil);  
printf(lcd_putc,"\n-----Ay Ayar----");
delay_ms(50);
if (input(btn2))
{
delay_ms(150);
ay=ay+1;
if (ay==13);{ay=0;}
rtc_set_datetime(gun,ay,yil,hafta,saat,dakika,saniye);
}
}
if (x==7) // Yıl Ayar
{
printf(lcd_putc,"\f   %02d/%02d/20%02d "gun,ay,yil);  
printf(lcd_putc,"\n----Yil Ayar----");
delay_ms(50);
if (input(btn2))
{
delay_ms(150);
yil=yil+1;
rtc_set_datetime(gun,ay,yil,hafta,saat,dakika,saniye);
}
}
}
}

polleme

DS1302'nin kendi besleme pili var mı?

94onur94

Evet 3voltluk kendi pili var pic'de voltaj yokken saati tarihi hafızada tutuyor ama zamanı kendi içinde saymıyor çok garip bi durum ne zaman pic'e voltaj veriyim o zaman saymaya devam ediyor

Kabil ATICI

Yada pil yerine kullanılan süper kondansatörü...
ambar7

polleme

Pic'e bağlı 5 veya 7 nolu bacaklardaki sinyallerle ilgili bir durum olabilir. Bir kontrolde fayda var.