Display sürme ile sıcaklık ölçmede ds18b20 verisi okunmuyor

Başlatan Recep METE, 21 Kasım 2013, 23:41:10

Recep METE

Merhabalar,7 segment display sürerek ds18b20 ile sıcaklık ölçmek istiyorum.Timer 0 kullanarak display sürüyorum.Ancak ds18b20 deki veriyi display görmüyor,sürekli "0" derecede.Programda nasıl bir değişiklik yapacağımı bulamadım.Yardımlarınızı bekliyorum.



Hocam ccs c dosyası ve İsis dosyası bir dener misiniz?
http://s3.dosya.tc/server13/LXzQti/ds18b207segmentdisplays_cakl_k_l_me.rar.html





program:
  
           
#include <16f877.h>  
#device *=16

#fuses XT,NOWDT,NOPROTECT    
#use delay (clock=20000000)                   
#include <ds18b20.c>                                       
               
char display1_onlar,display1_birler,temp,sayi;  
const int display_digit[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};  // ortak anotlu için              
float sicaklik;  


#int_timer0
void timer_kesme(void)
{
      set_timer0(0);



output_d(0b00000100);       
output_b(display_digit[display1_onlar]);    
delay_ms(2);            
output_d(0b00001000);                   
output_b(display_digit[display1_birler]);     
delay_ms(2);                
output_d(0b00010000);
output_b(0x9c); // derece simgesi    
delay_ms(2);            
output_d(0b00100000);
output_b(0xc6); // C harfi   
delay_ms(2); 
output_d(0b00000000);

}

 
//------- ana program ----------------------------------------------------------
void main ()                                 
{  
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1|T0_8_BIT);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);


   set_timer0(0);

   enable_interrupts(int_timer0);
   enable_interrupts(global);

   output_b(0x00);
   output_d(0x00);  
   delay_ms(20);
   

while(1)                
   { 
sicaklik = ds1820_read();
   temp = sicaklik;

       display1_birler=temp%10;
       display1_onlar=(temp/10)% 10;
    

     
   }
}



[IMG]http://img585.imageshack.us/img585/3043/iwmc.png[/img]

Uploaded with ImageShack.us



capture 1
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d


Kabil ATICI

Şemanda DS18b20 PortC0  bağlı olarak görünüyor. DS18b20.c'de hangi bacağa bağlı olarak görünüyor bir kontrol edebilir misin?
ambar7

Recep METE

Alıntı yapılan: ambar7 - 22 Kasım 2013, 00:05:55
Şemanda DS18b20 PortC0  bağlı olarak görünüyor. DS18b20.c'de hangi bacağa bağlı olarak görünüyor bir kontrol edebilir misin?




Hocam bacak bağlantısını kontrol ettim doğru.

hocam dosyaları yükledim bilgisayarınızda bir kontrol eder misiniz?http://s3.dosya.tc/server13/LXzQti/ds18b207segmentdisplays_cakl_k_l_me.rar.html

printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Kabil ATICI

Evet gönderdiğin isis programında PortC0 kullanılıyor.
Sadece dirençlerin analog olarak işaretlenmesi dikkatimi çekti. Bunları dijital olarak işaretlersen ( direnç elemanı üzerinde iken sağ fare butonu ile Edit Properties seçip Model Type) ekranın yanıp sönme sorunu ortadan kalkar. (belki daha önceki sorununda bu idi.)

Tabii burada ekranı göstermek için timer kullanmışsın, bu 1 wire bağlantıdan veri okuma veya yazma esnasında  timer kesmesi gelirse sorun olacağı anlamını taşır. Çünkü 1 wire iletişim protokolü tamamen zamana bağlı bir yöntem içerir. Sıkı bir zaman kontrolu gerekir. Burada 1 wire bağlantısı esnasında timer'ı kapatman  işlem sonunda timer'ı tekrar açman gerekir.
ambar7

Recep METE

Alıntı yapılan: ambar7 - 22 Kasım 2013, 01:22:29


Burada 1 wire bağlantısı esnasında timer'ı kapatman  işlem sonunda timer'ı tekrar açman gerekir.


İşte hocam bunu nasıl yapacağım.Küçük bir örnek verir misiniz? Ben bunu yapamıyorum bir türlü.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Kabil ATICI

programında bunun örneği var aslında.
setup_timer_1(T1_DISABLED);
sicaklik = ds1820_read();
setup_timer_2(T2_DISABLED,0,1);

ambar7