ds1302 rtc derleme hatası

Başlatan Emre MERMİ, 09 Aralık 2014, 01:01:17

Emre MERMİ

merhaba arkadaşlar.
bir tane ds1302 örneği buldum bununla bir devre yapacağım fakat ekranda görünen sıcaklık değerini silmem gerekiyor. sildikten sonra da derleyemiyorum koda eklenen dosyalarla ilgili hatalar yaşıyorum ama hataları aşamıyorum. yardım ederseniz sevinirim.

kod;

#include <16F877A.h>
#device adc=16

#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>
#include "new_lcd.c"
#use fast_io(a)
#use fast_io(c)
int16 bilgi,sicaklik=0;
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,"u/u/u",gun,ay,yil);  
   lcd_gotoxy(9,1);
   lcd_send_byte(0x08,0x7e);
   lcd_gotoxy(1,2);
   printf(lcd_putc,"u:u:u  lu",saat,dakika,saniye,sicaklik);
   lcd_gotoxy(13,2);
   lcd_send_byte(0x4a,0xdf);
   lcd_gotoxy(14,2);
   printf(lcd_putc,"C");
}
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_adc_ports(AN0);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_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);
   rtc_set_datetime(01,01,12,01,01,00);
   delay_ms(10);
   set_tris_a(0b00000001);
   set_tris_c(0b00000111);
   lcd_init();
   rtc_init();
   delay_ms(10);
   
   
   
   while(1){
      lcd();
      ayar();
      haftagunu();
      
      set_adc_channel(0);
      delay_us(10);
      bilgi=read_adc();
      sicaklik=bilgi/128;
      
      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;}
      
      
   }
}


http://www.teknomerkez.net/ek/629/ccs-c-takvim-saat-isi.zip

şimdiden teşekkürler.


baran123

Sanırım böyle olacak
1.satırda tarih
2.satırda saat
gösterecek şekilde düzenledim.Denemedim bu arada
void lcd(void)
{
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%u/%u/%u",gun,ay,yil);  
   lcd_gotoxy(1,2);
   printf(lcd_putc,"%u:%u:%u",saat,dakika,saniye);
}

pea

#2
Ne yapmak istiyorsunuz, ne yaptınız da ne oldu ben anlamadım.

Ayrıca main döngüsündeki o if karmaşasına hiç gerek yok. RTC entegrelerinin içerisinde zaten bir takvim bulunur, sayaç mantığıyla yapılmaz.

Ekleme: Baran printf parametrelerindeki hatayı görüp düzeltmiş.

baran123

Kodun tamamını görmedim o kadar if ne yapıyor orada ya :D
Bu eski yaptıgım bir proje sımdı toparladımda eksıklerı cıkarsa duzeltırsım

#include <16F877A.h>
#device adc=16
#fuses NOWDT,XT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOWRT,NOPROTECT,NODEBUG
#use delay(clock=4M)

#include "lcd.c" 
#include "ds1302.c"

BYTE second,minute,hour,day,mounth,year,dow;

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

   while(TRUE)
   {
            rtc_get_time(hour,minute,second);
            rtc_get_date(day,mounth,year,dow);
            printf(lcd_putc,"\f%02d:%02d:%02d  ",hour,minute,second);

            switch(dow)
            {
               case 1: printf(lcd_putc,"P.TESI");  break;
               case 2: printf(lcd_putc,"SALI");    break;
               case 3: printf(lcd_putc,"ÇRŞ.");    break;
               case 4: printf(lcd_putc,"PRŞ.");    break;
               case 5: printf(lcd_putc,"CUMA");    break;
               case 6: printf(lcd_putc,"C.TESI");  break;
               case 7: printf(lcd_putc,"PAZAR");   break;
            }
            
            printf(lcd_putc,"\n%02d:%02d:%02d",day,mounth,year);
   }
}

Emre MERMİ

#4
Alıntı yapılan: Baran Ekrem - 09 Aralık 2014, 01:22:14
Kodun tamamını görmedim o kadar if ne yapıyor orada ya :D
Bu eski yaptıgım bir proje sımdı toparladımda eksıklerı cıkarsa duzeltırsım

#include <16F877A.h>
#device adc=16
#fuses NOWDT,XT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOWRT,NOPROTECT,NODEBUG
#use delay(clock=4M)

#include "lcd.c" 
#include "ds1302.c"

BYTE second,minute,hour,day,mounth,year,dow;

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

   while(TRUE)
   {
            rtc_get_time(hour,minute,second);
            rtc_get_date(day,mounth,year,dow);
            printf(lcd_putc,"\f%02d:%02d:%02d  ",hour,minute,second);

            switch(dow)
            {
               case 1: printf(lcd_putc,"P.TESI");  break;
               case 2: printf(lcd_putc,"SALI");    break;
               case 3: printf(lcd_putc,"ÇRŞ.");    break;
               case 4: printf(lcd_putc,"PRŞ.");    break;
               case 5: printf(lcd_putc,"CUMA");    break;
               case 6: printf(lcd_putc,"C.TESI");  break;
               case 7: printf(lcd_putc,"PAZAR");   break;
            }
            
            printf(lcd_putc,"\n%02d:%02d:%02d",day,mounth,year);
   }
}


çok teşekkür ederim hocam yardımınız için ama 3 buton kullanarak ayar yapılabilen bir devre yapıyorum. kodun tamamını kendim yazmadım. ne de olsa aynı mantık diye hazır projeden ekledim. if döngüleri ise ayar yapımında kullanılıyor

mesaj birleştirme:: 09 Aralık 2014, 01:46:01

Alıntı yapılan: pea - 09 Aralık 2014, 01:10:14
Ne yapmak istiyorsunuz, ne yaptınız da ne oldu ben anlamadım.

Ayrıca main döngüsündeki o if karmaşasına hiç gerek yok. RTC entegrelerinin içerisinde zaten bir takvim bulunur, sayaç mantığıyla yapılmaz.

Ekleme: Baran printf parametrelerindeki hatayı görüp düzeltmiş.

hocam ayar kısmı o if kısımları. 3 butonla tarih saat ayarı yapmaya çalışıyorum  tüm dosyaları yollayayım daha açık olur.

http://www.dosya.tc/server36/QgnG2Q/saat.rar.html

mesaj birleştirme:: 09 Aralık 2014, 01:47:51

amacım sadece ekrandan sıcaklığı silmek ama eklenen dosyalar yüzünden hata alıyorum herhalde.

vitruvius

Eklediğiniz dosyalarda new_lcd.c yok. Bundan dolayı hata alıyorsunuzdur. Sıcaklığı silmek istiyorsanız

int16 bilgi,sicaklik=0;


Bu satırı silip derleyin. Program birkaç yerde bu değşikenleri bulamadığından hata verecek. Hata verdiği yerleri de silerseniz sıcaklıktan kurtulursunuz. ADC'yi de kapatabilirsiniz zira sıcaklık almak için kullanılmış.

Emre MERMİ

Hocam işte sıcaklığı silmek sorun değilde ben ds1302 nin dosyasında bile takıldım daha lcd dosyasına geçemedim. Anlamadım hala nerde hata veriyor.

vitruvius

Aldığınız hatanın ekran görüntüsünü paylaşır mısınız.

Recep METE

Alıntı Yaphocam ayar kısmı o if kısımları. 3 butonla tarih saat ayarı yapmaya çalışıyorum  tüm dosyaları yollayayım daha açık olur.

http://www.dosya.tc/server36/QgnG2Q/saat.rar.html


Son gönderdiğin dosyadaki programı derledim, hiç sorunsuz derledi. Hehangi bir hata yok.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Emre MERMİ

#9
derlemeye çalıştğımda birde yan sekme açıp hata veriyor.









mesaj birleştirme:: 09 Aralık 2014, 11:53:22

yok hocam site gönderdiğim şeyi indirip tekrar denedim olmadı. bu arada ilkkodda görünen new_lcd.c yi bulamadım oraya lcd.c yazdım bağlantılar aynı gibiydi sorun olur mu

mesaj birleştirme:: 09 Aralık 2014, 11:55:57

Alıntı yapılan: semfero - 09 Aralık 2014, 11:47:27

Son gönderdiğin dosyadaki programı derledim, hiç sorunsuz derledi. Hehangi bir hata yok.


hocam o zaman sizden şu dosyada lcd ye yazdırılan sıcaklık kısmını silmenizi rica etsem derleyip tekrar bana yollarmısnız ?

http://www.dosya.tc/server36/SqKd4n/main.rar.html

vitruvius

#10
Hocam o eklediğiniz ds1302.C başlı başlına ayrı bir proje. Onu eklemenize gerek yok. Onu projeden çıkartın ve bulunduğu dosyadan silin. Size CCS C'nin kendi lcd ve ds1302 kütüphanesi yeter.

#include <ds1302.c>
#include <lcd.c>


Şu şekilde ekleyin, ancak o var olan ds1302.c'yi çıkartın projeden.


mesaj birleştirme:: 09 Aralık 2014, 12:02:13

printf'lerin içini düzeltip bilinmeyenlerden önce % koyarsanız sorun olmaz.

Emre MERMİ

#11
hala aynı hata hocam kafayı yiyecem  acaba kütüphanemde mi bir hata var benim
ds1302 ile ilgili hata alıyorum hala

mesaj birleştirme:: 09 Aralık 2014, 12:38:40

@vitruvius hocam lcd ye yazdırılan sıcaklık kısmını silmenizi rica etsem derleyip tekrar bana yollarmısnız  hex ve c kodunu?


vitruvius

Hocam yeni bir klasör oluşturun ve yeni bir proje başlatın. Her şeyden önce File'dan "Close All" yapın. Yeni oluşturduğunuz klasöre de dışarıdan hiçbir şey eklemeyin. Sonra ilk mesajınızda yazdığınız kodu kopyala yapıştır yaparak derleyin. Tabi new_lcd.c'yi      lcd.c olarak değiştirin.

Emre MERMİ

aynen dediğiniz gibi yaptım lcd ye yazı yazdırırkenki değişiklikleri de yaptım hala aynı hata

vitruvius