Etepic

Ana Tema => Algoritma ve Program Çözümleri => Konuyu başlatan: elektro77 - 30 Ağustos 2024, 13:18:26

Başlık: ADC okumada Virgülden sonra 2 haneli sayı yazma
Gönderen: elektro77 - 30 Ağustos 2024, 13:18:26
@ete Hocam. Sizden aldığım aşağıdaki kodları uzun süredir bir tasarımımda kullanıyorum.
Ama yeni farkettiğim bir şey oldu.
ADC gerilimi 4.03 volt olduğunda ekranda 4.3 olarak görünüyor.
Fakat batarya gerilimi 3.98 ise ekran 3.98 olarak doğru görünüyor.
Durum şu; Virgülden sonraki ilk hane gerilimi "0" olursa formül yanlış hesaplıyor.
Dolayısıyla batarya gerilimi okuması da yanlış oluyor..
Nerede hata yapıyorum?
Volt=(ham */ 125)
      Mvolt=volt//100
      Volt=Volt/100   'Bu formüllerde ise ondalık hanesini 2 hane yapar. yani 4.19 gibi.
      LCDOUT $FE,$C0," VOLT=",#VOLT,",",#Mvolt
Başlık: Ynt: ADC okumada Virgülden sonra 2 haneli sayı yazma
Gönderen: aRci - 30 Ağustos 2024, 13:39:58
Merhaba buradaki Mvolt kısmını 2 basamaklı yazabilmek için DEC2 yapmanız yetecektir.

LCDOUT $FE,$C0," VOLT=",#VOLT,",",DEC2 Mvolt
Başlık: Ynt: ADC okumada Virgülden sonra 2 haneli sayı yazma
Gönderen: elektro77 - 30 Ağustos 2024, 13:51:07
Alıntı yapılan: aRci - 30 Ağustos 2024, 13:39:58Merhaba buradaki Mvolt kısmını 2 basamaklı yazabilmek için DEC2 yapmanız yetecektir.

LCDOUT $FE,$C0," VOLT=",#VOLT,",",DEC2 Mvolt
Malesef olmadı. Aynı sorun devam ediyor.
Başlık: Ynt: ADC okumada Virgülden sonra 2 haneli sayı yazma
Gönderen: ete - 30 Ağustos 2024, 14:36:22
ekranda 4,08 şeklii,nde görülecek küçültülmemiş sayı 408 dir.
Bunu 100 e bölersek tam sayı kısmı 408/100=4 olarak bulunur.
Ondalık kısmı ise 408//100 işlemi sonrası 8 olarak hesaplanır.
Ekrana yazdırırken
LCDOUT $FE,$C0," VOLT=",#VOLT,",",#Mvolt
kullanırsan
ekranda 4,8 olarak görürsün. Ama
LCDOUT $FE,$C0," VOLT=",#VOLT,",",DEC2 Mvolt
kullanırsan
4,08 görmen gerekir. Dolayısıyla işlem doğru ise aynı sorunun devam etmemesi gerekir.
Sende bir hata var ama nedir sen bulacaksın.
DEC2 komutu değişken değerini 2 hane olarak yazdırır. Hane sayısı 2 den küçük ise yerini sıfırla doldurur. Hane sayısı 2 den büyük ise yalnızca 2 tanesini alır ekrana verir.

İşin garanti olsun istiyor isen şöylede yapabilirsin.
IF Mvolt<10 then
LCDOUT $FE,$C0," VOLT=",#VOLT,",0",#Mvolt
Else
LCDOUT $FE,$C0," VOLT=",#VOLT,",",#Mvolt
ENDIF

Ete

not: şimdi basit bir programda DEC2 komutu ile denedim ekrana 4,08 olarak yazıyor.
Sorun sende anlayacağın.
 
Başlık: Ynt: ADC okumada Virgülden sonra 2 haneli sayı yazma
Gönderen: elektro77 - 30 Ağustos 2024, 14:57:03
Evet sorun bende imiş.
2 dil seçenekli bir program yazmıştım.
dec2 olarak değiştirdiğim kod türkçe dilinin ekrana yazdırma kodlarında idi. Ama ben ingilizce olarak bakınca dec2 olarak değitirmeyi atladığım kod satırını ekranda okuyormuşum.
Teşekkür ederim.