ds18b20 ve timer kullanımı ????

Başlatan mstbzr, 18 Kasım 2014, 12:09:21

mstbzr

Sayın ustalar timer ve ds18b20 yi aynı anda kullanamıyorum? Geri sayım tarafı sayma yapmıyor...

#include <16f877A.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)

#define USE_PORTD_LCD TRUE
#include <4x20 LCD.c>
#include <DS1302.C>
#include <DS18B20.c>

int saniye,dakika,saat,gun,ay,yil,haftanin_gunu;
int8 sadise1=0,saniye1=0,dakika1=0,saat1=0,ayr=0,durum=0; 
float sicaklik_degeri=0;


#int_TIMER1 //GERÇEK ZAMANLI SAYIM İÇİN TIMER1 KESMESİ
void  TIMER1_isr(void) 
{
set_timer1(15510);
sadise1--;

}

//GERI SAYMASI ICIN ALT PROGRAM
void geri(){
   if(sadise1==255){
   saniye1--;
   sadise1=9;
   }
      else if(saniye1==255){
      dakika1--;
      saniye1=59;
      }
      
      else if(dakika1==255){
      saat1--;
      dakika1=59;
      }
      else if(saat1==255)saat1=23;
         
         
}


//SAAT, DAKİKA, SANİYE AYARLAMA İÇİN ALT PROGRAM
void ayar(){
   if(input(pin_a2)&&durum==0){
      ayr++;
      while(input(pin_a2));}
      
   
   if(ayr==1){
   lcd_gotoxy(1,1);
   printf(lcd_putc,"---SANIYE  AYARLA---");}
   if(input(pin_a3)&&ayr==1){
   saniye1++;
   while(input(pin_a3));}
   
   if(input(pin_a4)&&ayr==1){
   saniye1--;
   while(input(pin_a4));}

   if(ayr==2){
   lcd_gotoxy(1,1);
   printf(lcd_putc,"---DAKIKA  AYARLA---");}
   if(input(pin_a3)&&ayr==2){
   dakika1++;
   while(input(pin_a3));}
   
   if(input(pin_a4)&&ayr==2){
   dakika1--;
   while(input(pin_a4));}
   
   
   if(input(pin_a3)&&ayr==3){
   saat1++;
   while(input(pin_a3));}
   
   if(input(pin_a4)&&ayr==3){
   saat1--;
   while(input(pin_a4));}
   
   if(ayr==3){
   lcd_gotoxy(1,1);
   printf(lcd_putc,"----SAAT  AYARLA----");}
   
   if(ayr==4){
   ayr=0;
   printf(lcd_putc,"\f");}
}

//LCDDE GÖSTERMEK İÇİN ALT PROGRAM
void lcd(){

lcd_gotoxy(1,1);
printf(lcd_putc,"ZAMAN=%02d:%02d:%02d"saat1,dakika1,saniye1);
lcd_gotoxy(1,4);
printf(lcd_putc,"%02d:%02d:%02d    %02d/%02d/%02d",saat,dakika,saniye,gun,ay,yil);
lcd_gotoxy(1,2);
printf(lcd_putc,"SICAKLIK=%1.1F%cC",sicaklik_degeri,223);

}

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ışı

   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);

set_tris_a(255);
output_a(0);


lcd_init();
rtc_init();
   
   delay_ms(10);
   lcd_gotoxy(5,2);
   printf(lcd_putc,"Sayıcı Ve Sıcaklık");
   lcd_gotoxy(7,3);
   printf(lcd_putc,"DENEME");
   delay_ms(1000);
   lcd_gotoxy(9,1);
   printf(lcd_putc,"\f");//EKRAN TEMİZLEME
   set_timer1(15510);

//rtc_set_datetime(13,11,14,4,14,49);

while(TRUE)
{
geri();
lcd();
ayar();


sicaklik_degeri=ds1820_read();
rtc_get_time(saat,dakika,saniye);
rtc_get_date(gun,ay,yil,haftanin_gunu);

//SAYMA İŞLEMİNİ BAŞLATMAK İÇİN
   if(input(pin_a0)&&ayr==0&&durum==0){
      setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
      durum=1;
      while(input(pin_a0));}
      //SAYDIRMA İŞLEMİNİ DURDURMAK İÇİN
      if(input(pin_a0)&&durum==1){
     setup_timer_1(T1_DISABLED);
      durum=0;
      while(input(pin_a0));}
      //RESETLEMEK İÇİN
      if(input(pin_a1)){
      setup_timer_1(T1_DISABLED);
      durum=0;
      sadise1=0;
      saniye1=0;
      dakika1=0;
      saat1=0;
      while(input(pin_a1));}
      //DURUMLARIN HEPSİ AYNI OLDUGUNDA PROGRAMIN DURMASI
      if(saat1==0&&dakika1==0&&saniye1==0&&sadise1==0){
      setup_timer_1(T1_DISABLED);
      durum=0;
      }
      //SINIRLANDIRMALAR
      if(saniye1==60)saniye1=0;
      if(dakika1==60)dakika1=0;
      if(saat1==24)saat1=0;
   
   
   }
}

mstbzr


RaMu

Geri sayım tarafı dediğin kısım
ds18b20 olmadan güzel güzel sayıyor mu?

Geri sayım kısmını çıkarınca ds18b20 doğru çalışıyor mu?

İkisi ayrı ayrı düzgün çalışıyorlarsa ona göre inceleyelim.

Devreyi nerede deniyorsun
isis çizimini yaptıysan onuda paylaş ki
üzerinde deneyip bakabilelim,
simulasyonda problem çözmek daha kolay oluyor.

Birde halihazırda kullandığın ds18b20 kütüphanesi yerine
şunu kullan;
(proje klasörüne bunu ds18b20_beklemesiz.c olarak kaydedip ekle)
(program içinde #include <ds18b20_beklemesiz.c> olarak dahil et)

ds18b20_beklemesiz.c :
//beklemesiz DS18B20 kütüphanesi
//RaMu
//picproje.org
float ds1820_read() 
{ 
 int8 busy=0, temp1, temp2; 
 signed int16 temp3; 
 float result;
 
 static int one_read,busy_2;


if(one_read==0)      //b
{

 onewire_reset(); 
 onewire_write(0xCC); 
 onewire_write(0x44); 
one_read=1;         //b
}

// while (busy == 0) 
//  busy = onewire_read();


   while (busy_2 == 0) 
   {
  busy_2 = onewire_read();
   return(result);         //b
   }
one_read=0;      //b




 onewire_reset(); 
 onewire_write(0xCC); 
 onewire_write(0xBE); 
 temp1 = onewire_read(); 
 temp2 = onewire_read(); 
 temp3 = make16(temp2, temp1); 
  
// result = (float) temp3 / 2.0;   //Calculation for DS18S20 with 0.5 deg C resolution 
 result = (float) temp3 / 16.0;  //Calculation for DS18B20 with 0.1 deg C resolution 
  
 delay_ms(200); 
 return(result); 
}


Şu konuda 13. mesajda bu kodları paylaşmıştım;
bu kodu kullanan örnek bir program ve isis şeması
https://www.dropbox.com/s/lnwzohlnpbb0zch/Ramu_CCSC_DS18B20_beklemesiz.rar
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

mstbzr

hocam dediğinizi yaptım ds18b20 okuma sistemi baya rahatlattı fakat timer ilk seferde sayıyor tekrar sayma yapmıyor timer da sıkıntılı galiba size zahmet bi kontrol edebilirmisiniz hocam yada bu ikisi bir arada başka hangi yöntemle yapılabilir...ilginiz için teşekkürler...

RaMu

Yukarıdaki mesajdaki soruları yanıtlarsan ona göre bakabilirim,
ve sadece timer kullanan programı doğru çalıştıramadıysan
öncelikle sadece timer doğru çalışan bir program yazman lazım
ondan sonra saat ds18b20 vs. eklenir
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

mstbzr

hocam her biri ayrı ayrı çalışıyor ama birleştirince timer çalışmıyor...

isis ve c dosyası...

https://yadi.sk/d/wepmeBUics2Fb