Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

ds1307 gecikme sorunu

Başlatan mktrnk, 08 Mayıs 2009, 18:26:06

mktrnk

Herkese merhabalar,

Dönem projesi olarak PIC16F877 kullanarak GLCD de sıcaklık ve zaman gösteren bir devre hazırlamam gerekiyor.Zaman için elimde ds1307, sıcaklık için ise ds18b20 var.

Şu anki tek problemim zamanda gecikme yaşanması. Bunun sebebi nedir? Nasıl çözebilirim?



#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları
#use delay (clock=20000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#include <HDM64GS12.c> // HDM64GS12.c dosyası programa ekleniyor
#include <graphics.c>  // graphics.c dosyası programa ekleniyor
#include "ds1307.c"    // ds1307.c dosyası programa ekleniyor
#include "ds18b20.c"   // ds18b20.c dosyası programa ekleniyor




char saat[10];        
char tarih[10];
char yazi1[]="KOU";
char yazi2[]="MEKATRONIK";
char yazi3[]="SAAT  :";
char yazi4[]="TARIH :";
char yazi5[]="SICAKLIK:";
char temp[10];
int8 sec,min,hour,day,date,month,year;
float sicaklik;




/********* ANA PROGRAM FONKSİYONU********/

void main( )
{
  
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   init_ds1307();          // initial DS1307
   write_ds1307(0,sec & 0x7F); // enable oscillator(bit 7 =0)
  

   
   //glcd_text57(43, 15, yazi1, 2 , ON);  // GLCD'de yazı yazdırılıyor
  // glcd_text57(10, 34, yazi2, 2 , ON);  // GLCD'de yazı yazdırılıyor
   delay_ms(500);
   glcd_init(ON);
    
  
  

   while(1)
   {
     glcd_rect(0, 0, 127, 63, NO, ON);
     glcd_rect(118,40,122,51,YES,ON);
     glcd_circle(120, 56,5, YES,ON);
     glcd_circle(86,37,1,NO,ON);
     glcd_line(118, 27, 118, 51, ON);
     glcd_line(122, 27, 122, 51, ON);
     glcd_line(118, 27, 120, 25, ON);
     glcd_line(122, 27, 120, 25, ON);
     glcd_text57(3,5,yazi3,1,on);
     glcd_text57(3,20,yazi4,1,on);
     glcd_text57(3,37,yazi5,1,on);
     
     
      
   
      
     
     sec=read_ds1307(0);   // read second
     min=read_ds1307(1);   // read minute
     hour=read_ds1307(2);  // read hour
     day=read_ds1307(3);   // read day
     date=read_ds1307(4);  // read date
     month=read_ds1307(5); // read month
     year=read_ds1307(6);  // read year
     sicaklik=ds1820_read()/8.0;
     
     sprintf(temp,"%3.1f C",sicaklik);
     glcd_text57(58, 37,temp, 1, ON);
     delay_ms(300);
   

  
     sprintf(saat,"%2X:%2X:%2X" hour,min,sec);
     glcd_init(ON); // Ekran siliniyor
     glcd_text57(45, 5, saat, 1, ON);  // GLCD'de saat yazdırılıyor
     
      switch(day)  // DS1307'den sayısal olarak alınan haftanın günü bilgisi yazı karakterine dönüştürülüyor
      {                     
         case 1: sprintf(tarih,"%2X.%2X.%2X PZR" date,month,year); break; // Eğer "1" ise LCD'ye PAZ yaz
         case 2: sprintf(tarih,"%2X.%2X.%2X PZT" date,month,year); break; // Eğer "2" ise LCD'ye PZT yaz
         case 3: sprintf(tarih,"%2X.%2X.%2X SALI" date,month,year); break; // Eğer "3" ise LCD'ye SAL yaz
         case 4: sprintf(tarih,"%2X.%2X.%2X CARS" date,month,year); break; // Eğer "4" ise LCD'ye CRS yaz
         case 5: sprintf(tarih,"%2X.%2X.%2X PERS" date,month,year); break; // Eğer "5" ise LCD'ye PER yaz
         case 6: sprintf(tarih,"%2X.%2X.%2X CUMA" date,month,year); break; // Eğer "6" ise LCD'ye CUM yaz
         case 7: sprintf(tarih,"%2X.%2X.%2X CMT" date,month,year); break; // Eğer "7" ise LCD'ye CTS yaz
      }
     glcd_text57(45, 20, tarih, 1,ON);
   }
}

debi

Gecikme olacağını zannetmiyorum fakat hala devam ediyorsa,, kristal ve entegre çevresinin datasheette gösterdiği üzere topraklanmasına dikkat ediniz..

ahmet2004

Ds18b20.c içinde

...
while (busy == 0)
...


satırını iptal et.

murataltas