Aralıklarla yanıp sönen display sorunu.

Başlatan Recep METE, 20 Kasım 2013, 23:28:20

Recep METE

7 segment displaylerle, ds18b20 kullanarak sıcaklık ölçümü yapmak istiyorum.Sistemde şöyle bir sorun meydana geldi.7 segment display sürekli yanmıyor.Sıcaklığı gösterip kayboluyor,sonra tekrar yanıp sönüyor.Ancak görüntü eşit aralıklarla gelmiyor.Burada anlatamamış olabilirim.Videoyu paylaşıyorum:http://youtu.be/qISIdVer46Y


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

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_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);





   output_a(0x00);
   output_b(0x00);
   output_d(0x00);  
   delay_ms(2);
  
   while(1)                
   { 
   sicaklik = ds1820_read();  //Sıcaklık bilgisi okunuyor ve çevriliyor
  
   
   
      for(i=0;i<=100;i++){
       display1_birler=sicaklik%10;
       display1_onlar=(sicaklik/10)% 10;
       
       
       sicaklik_tara();
       delay_ms(2);
       }
       }                   
            
       
   }
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

sadogan

Bu çok olağan.
Display leriniz multiplex bağlı multiplex bağlantılarda display leri
sürekli eş zamanlı taramanız gerekiyor.
Sizin programda 18b20 okurken display ler sürülemiyor(18b20 yaklaşık 700ms de cevap veriyor).
Ya 18b20 yi okurken sıcaklık ölçüm çevrimini başlatıp cevrim sürecini beklemeyip
çevrim bitmiş mi diye bakıp bitmemişse diğer işleri yapmaya devam edip tekrar çevrim bittimi
diye kontrol şeklinde çalışması yada  tmr kesmesi kullanıp display sürme işlerini orada
yapmalısınız.
Bence bu 2 yöntemi bir arada kullanarak sonra ilave edeceğiniz işlerde yaşayacağınız buna benzer problemleri de ortadan kaldırmış olursunuz.

Recep METE

#2
Alıntı yapılan: sadogan - 21 Kasım 2013, 00:24:42
"Ya 18b20 yi okurken sıcaklık ölçüm çevrimini başlatıp cevrim sürecini beklemeyip
çevrim bitmiş mi diye bakıp bitmemişse diğer işleri yapmaya devam edip tekrar çevrim bittimi
diye kontrol şeklinde çalışması yada  tmr kesmesi kullanıp display sürme işlerini orada
yapmalısınız.


Hocam ben bu işlerde acemiyimde, şunu sormak istiyorum;Programı çevrim bitti mi diye kontrol eden programı nasıl yazılacak.Küçük bir örnek verir misiniz? Ben şöyle düşünüyorum acaba olur mu: 

sicaklik = ds1820_read();  //Sıcaklık bilgisi okunuyor ve çevriliyor
 
  if(sicaklik=1);// sicaklik değişkeni 1 olursa for döngüsünü çalıştır.(Bunu eklersem olur mu acaba!!!!!!)
   {
      for(i=0;i<=100;i++){
       display1_birler=sicaklik%10;
       display1_onlar=(sicaklik/10)% 10;


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

Recep METE

Arkadaşlar,Haftalardır şu problemi çözemedim Yardımlarınızı bekliyorum.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Gökhan BEKEN

Timer konusunu araştırmanız gerekiyor, anlamadığınız yer olursa yardımcı oluruz.
Özel mesaj okumuyorum, lütfen göndermeyin.

selimkoc

7 segment displaylerde tarama kesme ile yapılmalı. Aksi taktide görüntüde kesilmeler ve bozukluklar oluşabilir. Kesmelerle ilgili bakınız:

http://elektrokod.wordpress.com/2013/10/18/timer0-zamanlama-uygulamasi/


Kabil ATICI

ds1820 gibi malzemelerde işlem yaparken kesme iptal edilmesi gerekir. Yoksa iletişim esnasında kesme gelirse zaten iletişimin sıkı zamanlamaya bağlı bir sistemde hataya yol açar.
ambar7

Gökhan BEKEN

Siz en iyisi 74hc595 kullanın. Tam bu işlerin chip'i...
Özel mesaj okumuyorum, lütfen göndermeyin.

selimkoc