Ynt: 7segmentte sıcaklığın eksi değerini okutamıyorum.

Başlatan Recep METE, 26 Aralık 2013, 22:47:40

Recep METE

Arkadaşlar, 7 segmentte ds18b20 ile sıcaklık değeri okutuyorum.Ancak eksi değeri okumuyor.  "0" da kalıyor eksi değeri göstermiyor.Aşağıda verdiğim kodlara nasıl bir ekleme ve düzenleme yapmam gerekir.Yardımlarınızı bekliyorum.


#include <16f877.h>  
#device *=16
#device adc=10
#fuses XT,NOWDT,NOPROTECT    
#use delay (clock=20000000)                   
#include <ds18b20.c>                                       
               
char display1_onlar,display1_birler,temp;  
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
  
   temp = sicaklik;
   if(temp>=85){
       temp=0;}

      for(i=0;i<=100;i++){
       display1_birler=temp%10;
       display1_onlar=(temp/10)% 10;
       
       
       sicaklik_tara();
       delay_ms(2);
       }
       }                   
            
       
   }


mesaj birleştirme:: 26 Aralık 2013, 23:09:40

Hocam cok acil lazim.

mesaj birleştirme:: 26 Aralık 2013, 23:10:35

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

Kabil ATICI

  if(temp>=85)
{  temp=0;}<<<< işte burası 85'den büyükse  sıfır olacak şekilde ayarlanmış. Negatif sayılar için işte buraya gerekli düzenleme yapman gerek.

http://www.micropik.com/PDF/ds1820.pdf veri kağıdının
"TEMPERATURE/DATA RELATIONSHIPS Table 1" başlığının altındaki  tablo negatif sayılar için fikir verecektir.

En azından 1 tane daha LED ekran ekleyeceksin ki " - " gösterilsin.
Yazılım konusunda fazla yardımcı olamam...
ambar7

Recep METE

Hocam, 7 segment displayle yapılmış, eksi sıcaklık değeri gösteren örnek kodları olan varsa ve burada paylaşırsa çok memnun olacağım.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

selimkoc

eksi dereceler 2'nin komplementeri alınarak yapılır. Datasheetinden inceleyiniz.

xoom

*sicak_ondalik=0;
 isaret=0;
 *sicak_tam=(msb<<4)+(lsb>>4);   
                                 
      if(*sicak_tam & 0x80)     
      {
         isaret=1;
         *sicak_tam=~*sicak_tam;        // okunan değerin tümleyeni alınıyor... 
         lsb=~lsb & 0x0F;
         
      }

selimkoc

#5
sicak_tam int tipinde, 0x80 byte bu işlemde sıkıntı var.

sıcak_tam&0x8000 olması gerekiyor.


Recep METE

Alıntı yapılan: selimkoc - 28 Aralık 2013, 01:11:50
linkteki yazı hesaplamanın nasıl yapılacağı anlatılıyor inceleyiniz.

http://elektrokod.wordpress.com/2013/12/28/ds18b20-sicaklik-sensorunden-veri-okuma/
Hocam cok tesekkur ediyorum. Gerçekten tam istediğim bilgiler var.Acaba devamı gelecek mi?
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

selimkoc

7segment ve LCD'li uygulama koymayı planlıyorum.


Recep METE

Bu konuda bilgi veren tüm arkadaşlara çok teşekkür ederim.Ancak ben hala neyi nasıl yapacağımı bilemedim.Yukarıda verdiğim kodda bazı başarısız denemeler yaptım o kadar.Yukarıdaki kod üstünde neyi nasıl yapmalıyım.Yardımlarınızı bekliyorum.Bu site benim birçok soruma cevap oldu.Bunu da çözeceğimizi biliyorum.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

LukeSkywalker

http://mikrodunya.wordpress.com/2013/05/27/not-21-ds18b20-1-wire-isi-sensoru/
Buradan sensörle bütün sıcaklık değerlerinin nasıl kolayca okunup lcd ekrana basıldığını görebilirsiniz.
Saygılar.


Recep METE

Alıntı yapılan: selimkoc - 28 Aralık 2013, 21:26:04
http://elektrokod.wordpress.com/2013/12/28/negatif-sicaklik-gosterebilen-lcd-termometre/

yukarıdaki linkteki negatif sıcaklık değerlerini gösteren projeyi inceleyiniz.

Hocam bunun 7 segment ve ccs c ile yapılmış olanı var mı? Saygilarimla
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

selimkoc

Programlama dili önemli değildir. Lütfen mantığını anlayınız. Benim gayretim insanımız tekniğin mantığını anlasın.

Mantığını anladıktan sonra çözüm çok basittir.

Kolay gelsin...