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

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


Recep METE

Hocam ds18b20 ile 7 segmentte eksi değer sıcaklık göstermeyi henüz başaramadım.Ancakşöyle bir çalışma yaptım.

for(i=0;i<=100;i++){
       display1_birler=temp%10;
       display1_onlar=(temp/10)% 10;
     
       if(temp<0){
       display1_birler=~temp%10;
       display1_onlar=~(temp/10)% 10;


değilini aldım.Şimdide 0 dercenin altını 55 ve 55'ten küçük sayılar gösteriyor.  Eksi 1'i 55,eksi 2'yi 54 vb gösteriyor.Ben bunu nasıl normalleştirebilirim.Yardımlarınızı bekliyorum.
       }
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

xoom

Sıcaklık okuma fonksiyonu 16 bit okuma yapıyor.. 12.bit 1 olursa bu sıcaklığın negatif olduğunu ifade ediyor.. siz temp<0 yaparak bu işi yapamazsınız.
kontrol edeceğiniz temp değişkeninin 12. bitin bir olup olmadığı..

Recep METE

Alıntı yapılan: xoom - 30 Aralık 2013, 19:37:26
Sıcaklık okuma fonksiyonu 16 bit okuma yapıyor.. 12.bit 1 olursa bu sıcaklığın negatif olduğunu ifade ediyor.. siz temp<0 yaparak bu işi yapamazsınız.
kontrol edeceğiniz temp değişkeninin 12. bitin bir olup olmadığı..

Onu nasıl yapacağız işte, sıkıntı orada.Amatör bilgilerle ancak bu kadar yapabiliyorum.O yüzden değerli yardımlarınıza açığım.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

Kabil ATICI

12.bit değer karşlığı olan sayıyı buluyorsun. bilgisayardaki hesap makinesini kullanabilirsin.

12.bit 1 olduğunu bulmak için

if(okunan_değer& 12_bit_değeri==12_bit_değeri)
en fazla buna benzer birşey...
okunan_değer ile 12_bit_değeri VE işlemi uygula.   0b100 000 000 000 ikilik sayı sistemindeki karşılığı
sonuç ile 12_bit_değeri eşitliğini kontrol et.
ambar7

xoom

   int tamsicaklik; 
   int16 kusurat; 
   int16 okunansicaklik; 

    if (bit_test(okunansicaklik,11))  //12.bit kontrol ediliyor.
   { 
        okunansicaklik= ~okunansicaklik+ 1 ; // Tümleyeni alınıyor.
   } 

   tamsicaklik= ((okunansicaklik>> 4) & 0x7F); // tam kısmı
   kusurat= ((okunansicaklik& 0x000F) * 625); // virgülden sonrası

 


Recep METE

Alıntı yapılan: xoom - 30 Aralık 2013, 20:04:58
   int tamsicaklik; 
   int16 kusurat; 
   int16 okunansicaklik; 

    if (bit_test(okunansicaklik,11))  //12.bit kontrol ediliyor.
   { 
        okunansicaklik= ~okunansicaklik+ 1 ; // Tümleyeni alınıyor.
   } 

     



Hocm çok teşekkür ederim.Bu iş kısmen oldu.Artık şu yukarıdaki kısmı benim koda uyguladım.0 dercenin altına isiste iniyor.Fakat -(eksi) işaret gözükmüyor.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

xoom

- işareti için ya 5.digiti eklemelisiniz veya -9 dereceye kadar 4 digitle işi götürebilirsiniz.

Recep METE

Alıntı yapılan: xoom - 30 Aralık 2013, 20:58:26
- işareti için ya 5.digiti eklemelisiniz veya -9 dereceye kadar 4 digitle işi götürebilirsiniz.


Hocam 5. digiti ekledim ama hala eksi işareti gösteremedim.Eksi işaretinin 7 segmentte kodu nedir acaba.LCD karakter matik programında eksi işaretinin kodu var ama eksi işaretini doğru vermiyor.Yardımlarınızı bekliyorum,arkadaşalr.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

selimkoc

eksi işareti displayin g segmentidir. G segmentini yaktığında (ortak bağlantıya göre ) eksi işaretini vermiş olursun.


mehmet

Rakam tanımları yaptığınız bölüme sadece "G" segmentini yakacak bir
tanımlama ekleyin. Eksi değer aldğınızda ilk displaya bu kodu
gönderirisiniz. İlk hane - işaretini gösterecektir...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

Recep METE

Alıntı yapılan: mehmet - 31 Aralık 2013, 00:20:52
Rakam tanımları yaptığınız bölüme sadece "G" segmentini yakacak bir
tanımlama ekleyin. Eksi değer aldğınızda ilk displaya bu kodu
gönderirisiniz. İlk hane - işaretini gösterecektir...


Hocam bu tanımlamayla ilgili küçük bir örnek verirseniz çok memnun olurum.Birde eksi değer aldığında eksi değer göstermesini "if" lerle yapabilirmiyim.önerlerinizi bekliyorum.Saygılarımla.
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d

mehmet

display_digit dizinine 0x3F değerini
ekleyin. (Yanlış hesaplamadım umarım.)
Okuduğunuz ısı değeri sıfırdan küçük
ise ilk haneye 0x3F değerini gönderirsiniz...
Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

xoom

Son şema ve güncel kodlarını ekle - işareti kısmını tamamlayalım.

Recep METE

#29
Alıntı yapılan: xoom - 31 Aralık 2013, 10:40:55
Son şema ve güncel kodlarını ekle - işareti kısmını tamamlayalım.


Hocam şuanda işteyim, en kısa zamanda şemayı ve kodları yükleyeceğim.Değerli yardımlarınızı bekliyorum.

mesaj birleştirme:: 31 Aralık 2013, 12:21:51

Hocam güncel kod ve şemayı yükledim.Yardımcı olursanız sevinirim.Saygılar.


http://s3.dosya.tc/server15/tjbRbX/7segmentds18b20.rar.html
printf(lcd_putc,"\f  Ne kadar okursan oku, bilgine, yakışır şekilde davranmıyorsan cahilsin demektir.  \n   semfero");d