Real Time Clock

Başlatan fm, 05 Mayıs 2013, 00:32:23

fm

Merhaba, ds130s real time clock kullanarak, kurduğum bir devreye tarih ve zaman ayarlarını eklemek istiyorum. Anlamadığım bir nokta var. RTC entegresinin tarih ve zaman ayarlarını o anki zamanla nasıl eşleştireceğim. Sitede araştırdım buton ile yapılan bir kaç örnek var. Ancak butonların kullanım mantığını anlamadığım için kod mantınıda anlamadım. Açıklayablirseniz çok sevinirim. Herkese kolay gelsin..

Saygılarımla..

Kabil ATICI

Birkaç yolu var...
yol1:
Her parametre içi nayrı buton atama (saat, dakika, gün,ay, yıl,haftanın günü)
butona bastıkça örneğin saat 1 artar ve 24'e  gelince 00'a döner..
tabii ki diğer butonlarda kendi parametreleri uygun.
Her ayardan sonra yapılan ayarı DS1302'ye gönderir.

yol2:
1 tane buton saat, dakika, gün,ay, yıl,haftanın günü için parametre seçimi yapar,
2. buton seçilen parametreyi artırır
3. buton seçilen paramtereyi azaltır.
ilk butonun normal gösterime geçtiği zaman yapılan ayarı DS1302'ye gönderir.

normalde saniye ayarı gerekmez...
dakika 0-59
saat =0-24
gün=1-31
ay=1-12
yıl=00-99
haftanının günü,=pazar,...,cumartesi

not:ayar esnasında RTC'de okuma yapma...
ambar7

fm

Hocam cevap verdiğiniz için teşekkür ederim. Sormak istediğim bir şey var. Kurduğum devre ve kodu aşşağıda ekledim. Sorum bu devreye master pice  butonlarla ayarlanabilen rtc entegresi eklemek. Ancak kodda bunun nasıl yapıalacağını anlayamadım. Birde programda nereye eklemeliyim ki ana programda aksaklık yaratmasın.



MASTER KODU:

// BU PROGRAMDA KESMEYE GEREK YOKTUR.

#include <16F877A.h>
#include <string.h>

#FUSES NOWDT                    
#FUSES XT                       
#FUSES NOBROWNOUT               
#FUSES NOLVP                    
#FUSES NOPUT
#FUSES NODEBUG
#FUSES WRT_50%
#FUSES NOCPD
#FUSES NOPROTECT

#use delay(clock=4000000)

#use fast_io(a)
#use fast_io(b)
#use fast_io(d)

#define use_portb_lcd TRUE
#include <lcd.c>

#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1) // iletişimleri ayarlamak için isim verildi.

char giris[80]; 
int i,kb;

void main()
{
   setup_adc_ports (NO_ANALOGS) ;
   setup_adc (ADC_OFF) ;
   setup_psp (PSP_DISABLED) ;
   setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1) ;
   setup_timer_1 (T1_DISABLED) ;
   setup_timer_2 (T2_DISABLED, 0, 1) ;
   setup_comparator (NC_NC_NC_NC) ;
   setup_vref (FALSE) ;
   setup_CCP1 (CCP_OFF) ;
   setup_CCP2 (CCP_OFF) ;
     
   set_tris_b (0x00);
   output_b (0x00) ;
   
   set_tris_c (0x80);
   
   set_tris_d (0x03);
   output_d (0x00);
   
   lcd_init();
   
   i=0;
   kb=0;
   
   printf(lcd_putc,"\fLutfen");
   printf(lcd_putc,"\nBekleyiniz");
   delay_ms(900);
   printf(lcd_putc,"\fOkuma Yapiliyor");
   delay_ms(2);

   while (1)
   {
      putc(i);
       
      kb=kbhit(); 
      if(kb==1)
      {    
         gets(giris);
         delay_ms(100);
         
         printf(lcd_putc,"\f%d numarali",i);
         printf(lcd_putc,"\nslave okunuyor");
         delay_ms(500);
         printf(lcd_putc,"\f%s",giris);
         delay_ms(500);

         //i++;
         kb=0;
       }
       
      //if(i==2)
      //{
      //i=0;
      //}
      
    
   }   
}

 


SLAVE KODU:
#include <16F877A.h>
#include <ds18b20.c>  

#FUSES NOWDT                    
#FUSES XT                       
#FUSES NOBROWNOUT               
#FUSES NOLVP                    
#FUSES NOPUT
#FUSES NODEBUG
#FUSES WRT_50%
#FUSES NOCPD
#FUSES NOPROTECT

#use delay(clock=4000000)

#use fast_io(a)
#use fast_io(b)

//!#define use_portb_lcd TRUE // kapatılmış ise bu komutlar devrede lcd yoktur
//!#include <lcd.c>

#use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)

char bayrak;
float sicaklik_ust,sicaklik_alt;
int secici;

#int_rda //seri haberleşme kesmesi
void seri_haberlesme()
{  
   enable_interrupts(int_rda);
   secici=getc();
   if (secici == 0) // giris ve veriye atanan string ifadeler aynı ise sonuc 0 döndürür.
   {
      bayrak = 1;
   }
}

void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc (adc_off) ;
   
   setup_psp (PSP_DISABLED) ;
   setup_timer_0 (RTCC_INTERNAL | RTCC_DIV_1) ;
   setup_timer_1 (T1_DISABLED) ;
   setup_timer_2 (T2_DISABLED, 0, 1) ;
   setup_comparator (NC_NC_NC_NC) ;
   setup_vref (FALSE) ;
   setup_CCP1 (CCP_OFF) ;
   setup_CCP2 (CCP_OFF) ;
   
   
   set_tris_a(0xFF);
 
   set_tris_b(0x00);
   output_b (0x00);
   
   set_tris_c (0x80);
   
   set_tris_d (0x00);
   output_d (0x00);
  
  
//!   lcd_init ();   // kapatılmış ise bu komutlar devrede lcd yoktur
   
   
   enable_interrupts (int_rda);
   enable_interrupts (GLOBAL);
   
//!   printf(lcd_putc,"\fTest Olcumu Icin"); // kapatılmış ise bu komutlar devrede lcd yoktur
//!   printf(lcd_putc,"\nButona Basin");
//!   delay_ms(250);
   
   while (1)
   {

      sicaklik_ust=ds1820_read();
      delay_ms(1);
      sicaklik_alt=ds1820_read1();
      delay_ms(1);
 
      
     if (bayrak == 1)
      {
       delay_ms(20);
     
//!      printf(lcd_putc,"\fSicaklik1=%1.1f%cC",sicaklik_ust,223);   // kapatılmış ise bu komutlar devrede lcd yoktur
//!      printf(lcd_putc,"\nSicaklik2=%1.1f%cC",sicaklik_alt,223);
//!      delay_ms(500);
     
      printf("%f,%f\n\r",sicaklik_ust,sicaklik_alt);
         
//!      sprintf(data,"%f,%f",sicaklik_ust,sicaklik_alt); //bilgiyi paket haline getirdik.   
//!      k = data; // yukarda veri1'e "data" stringi atandı. Burada k="data" oluyor.  
//!      do
//!      {
//!         putc(*k);   // veri dizisinin tüm elemanlarını yolla
//!      }while(*(++k) != '\0');  
//!       putc(13); // gets için sonlandırma kodu. klavyedeki Enter tuşu  
       
      }
      bayrak=0;
  }

}

fm

Acaba bilen birileri butonlar ile ds1302 rtc entegresinin nasıl set edilip ayarlanacağını anlatabilir mi?

pwm.c

örnek kod versek yeterli olmaz mı?
bu kodları tek tek anlatmak çok uzun sürer.

#include <16F877A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=4000000)

#include <DS1302.C>
#define LCD_RS_PIN      PIN_D1 
#define LCD_RW_PIN      PIN_D0
#define LCD_ENABLE_PIN  PIN_D2 
#define LCD_DATA4       PIN_D4 
#define LCD_DATA5       PIN_D5 
#define LCD_DATA6       PIN_D6 
#define LCD_DATA7       PIN_D7
#include <LCD.C>
#use fast_io(a)
#use fast_io(c)

int8 saniye,dakika,saat=1,gun=1,ay=1,yil=1,haftanin_gunu=1,durum=0,x=0;

void lcd(){
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%02u/%02u/%02u",gun,ay,yil);  
   lcd_gotoxy(9,1);
   lcd_send_byte(0x08,0x7e);
   lcd_gotoxy(1,2);
   printf(lcd_putc,"%02u:%02u:%02u  ",saat,dakika,saniye);
   
}
void haftagunu(){
   lcd_gotoxy(10,1);
    switch(haftanin_gunu)  
      {                     
         case 1: printf(lcd_putc,"PAZAR     "); break; // Eğer "1" ise LCD'ye PAZAR yaz
         case 2: printf(lcd_putc,"P.TESI    "); break; // Eğer "2" ise LCD'ye P.TESI yaz
         case 3: printf(lcd_putc,"SALI      "); break; // Eğer "3" ise LCD'ye SALI yaz
         case 4: printf(lcd_putc,"CARS      "); break; // Eğer "4" ise LCD'ye CARS yaz
         case 5: printf(lcd_putc,"PERS      "); break; // Eğer "5" ise LCD'ye PERS yaz
         case 6: printf(lcd_putc,"CUMA      "); break; // Eğer "6" ise LCD'ye CUMA yaz
         case 7: printf(lcd_putc,"C.TESI    "); break; // Eğer "7" ise LCD'ye C.TESI yaz
      }
}
void ayar(){
   if(input(pin_c1)){
      durum++;
      while(input(pin_c1));}
   if(durum==1){
   lcd_gotoxy(4,1);
   lcd_send_byte(0x03,0x0d);
   lcd_gotoxy(5,1);
   lcd_send_byte(0x04,0x0d);}
   if(input(pin_c0)&&durum==1){
      ay++;
      while(input(pin_c0));}
   if(input(pin_c2)&&durum==1){
      ay--;
      while(input(pin_c2));}
   
   if(durum==2){
   lcd_gotoxy(1,1);
   lcd_send_byte(0x01,0x0d);
   lcd_gotoxy(2,1);
   lcd_send_byte(0x01,0x0d);}
   if(input(pin_c0)&&durum==2){
      gun++;
      while(input(pin_c0));}
   if(input(pin_c2)&&durum==2){
      gun--;
      while(input(pin_c2));}
   
   if(durum==3){
   lcd_gotoxy(7,1);
   lcd_send_byte(0x06,0x0d);
   lcd_gotoxy(8,1);
   lcd_send_byte(0x07,0x0d);}
   if(input(pin_c0)&&durum==3){
      yil++;
      while(input(pin_c0));}
   if(input(pin_c2)&&durum==3){
      yil--;
      while(input(pin_c2));}
   
   if(durum==4){
   lcd_gotoxy(9,1);
   lcd_send_byte(0x08,0x0d);}
   if(input(pin_c0)&&durum==4){
      haftanin_gunu++;
      while(input(pin_c0));}
   if(input(pin_c2)&&durum==4){
      haftanin_gunu--;
      while(input(pin_c2));}
   
   if(durum==5){
   lcd_gotoxy(1,2);
   lcd_send_byte(0x40,0x0d);
   lcd_gotoxy(2,2);
   lcd_send_byte(0x41,0x0d);}
   if(input(pin_c0)&&durum==5){
      saat++;
      while(input(pin_c0));}
   if(input(pin_c2)&&durum==5){
      saat--;
      while(input(pin_c2));}
   
   if(durum==6){
   lcd_gotoxy(4,2);
   lcd_send_byte(0x43,0x0d);
   lcd_gotoxy(5,2);
   lcd_send_byte(0x44,0x0d);}
   if(input(pin_c0)&&durum==6){
      dakika++;
      while(input(pin_c0));}
   if(input(pin_c2)&&durum==6){
      dakika--;
      while(input(pin_c2));}
   
   if(durum==8){
   durum=0;
   printf(lcd_putc,"\f");}
      
   
   
}
void main()
{

   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   delay_ms(10);
   set_tris_a(0b00000001);
   set_tris_c(0b00000111);
   lcd_init();
   rtc_init();
   delay_ms(250);
   
   while(TRUE){
      lcd();
      ayar();
      haftagunu();
      
      if(durum==7){
      rtc_set_datetime(gun,ay,yil,haftanin_gunu,saat,dakika);
      delay_ms(10);
      printf(lcd_putc,"\f    AYARLAR\n   YUKLENIYOR");
      delay_ms(1000);
      durum=8;}
      if(durum==0){
      rtc_get_time(saat,dakika,saniye);
      rtc_get_date(gun,ay,yil,haftanin_gunu);}
      
      if(saat==24)saat=0;
      if(saat==255)saat=23;      
      if(dakika==60)dakika=0;
      if(dakika==255)dakika=59;
      if(ay==13)ay=1;
      if(ay==0)ay=12;
      if(yil==0)yil=0;
      if(haftanin_gunu==8)haftanin_gunu=1;
      if(haftanin_gunu==0)haftanin_gunu=7;
      if(ay==4||ay==6||ay==9||ay==11){
         if(gun==31)gun=1;
         if(gun==0)gun=30;}
      if(ay==1||ay==3||ay==5||ay==7||ay==8||ay==10||ay==12){
         if(gun==32)gun=1;
         if(gun==0)gun=31;}
         x=yil/4;
      if((x==1||x==2||x==3||x==4||x==5||x==6||x==7||x==8||x==9||x==10)&&ay==2){
         if(gun==30)gun=1;
         if(gun==0)gun=29;}
      
      
   }
}
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

fm

Hocam Allah senden razı olsun. Birşey sormak istiyorum. Ayarlar Yükleniyor yazısından sonra yapılan ayarları set etmiyor. Bi kontrol edebilir misiniz?