logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[Atmega32] [Atmega32][DS18S20] - Czujnik DS18S20 zwraca stałą, błędną temperaturę. Jak naprawić?

el-em 12 Sty 2014 13:43 1563 4
REKLAMA
  • #1 13168235
    el-em
    Poziom 9  
    Cześć,
    Mam problem z czujnikiem DS18S20. Czujnik wypisuje mi ciągle jedną w dodatku błędną wartość temperatury. Podłączony jest poprawnie. Poniżej zamieszczam mój kod programu.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • REKLAMA
  • #3 13168312
    el-em
    Poziom 9  
    Mam świadomość, że wynik może być źle przetwarzany, ale niezależnie od tego powinien się chyba jakoś zmieniać w zależności od zmiany temperatury otoczenia?
  • REKLAMA
  • #4 13168995
    dondu
    Moderator na urlopie...
    Nie sprawdzałem programu, ale od razu sugeruję pozbyć się zmiennej typu double, a temperaturę odczytywać następująco: http://mikrokontrolery.blogspot.com/2011/04/temperatura-wyswietlacz-konwersja.html

    Druga uwaga: Nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    Masz jakieś warningi po kompilacji?
  • #5 13169841
    eleproject

    Poziom 17  
    A ja robię tak:
    Odczytuję 16 bitów z DS18B20 (i jest to liczba signed, np. int), następnie mnożę przez 100, dodaję do tego 8 i dzielę przez 16. Dzięki temu mam gotowy wynik temperatury w setnych Celcjusza, a potem to już z górki (liczba ciągle jest jako signed). Też tu nie ma zmiennych typu float/double oraz nie ma żadnych przesuwań bitowych i sprawdzania bitów na pewnych pozycjach itp...
    Np. tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Wtedy części całkowite mamy po wydzieleniu całości przez 100, a ułamkowe (setne) po wydzieleniu modulo 100 (reszta z dzielenia przez 100). Oczywiście do robienia stringa z tego można sprawdzić znak przed dzieleniami i jeśli ujemnym to wyświetlić minus a liczbę ujemna pomnożyć przez -1 do dalszych obróbek (by mieć ją jako dodatnią). Ale to już chyba jasne.
REKLAMA