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

Termometr na DS18B20. Popraw kod o 3 stopnie. Dam 20 pkt.

05 Sty 2007 00:30 1822 6
  • #1 3406927
    Konto nie istnieje
    Konto nie istnieje  
  • #3 3407376
    teedd
    Poziom 19  
    Posty: 219
    Pomógł: 24
    Ocena: 2
    Witam.
    Strzelam w ciemno: przed loop daj wait 10. Możliwe, że zbyt częste odpytywanie Dallasa powoduje jego nagrzwanie. Tak było np. w przypadku SHT11.
    Pozdrowienia - teedd
  • #4 3407478
    Mirek D
    Poziom 15  
    Posty: 120
    Pomógł: 8
    Ocena: 12
    Tu masz sprawdzoną procedurę odczytu temperatury. Zmień tylko definicję procesora, przypisania portu 1wire i LCD i masz gotowe.

    '=============================================
    'definicja użytego kontrolera
    $regfile = 8535def.dat

    'jaki rezonator kwarcowy
    $crystal = 8000000
    '$sim
    '------------------------------------------------------------------------------
    'konfiguracja LCD

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portd.7
    Config Lcdpin = Pin , Db7 = Porta.7 , E = Portc.3 , Rs = Portc.2

    '------------------------------------------------------------------------------
    'Używamy końcówki:
    'Podłącz rezystor 4K7 między końcówkę a szynę zasilania

    Config 1wire = Pind.6

    Deflcdchar 1 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 'znak stopnia
    Dim T1 As Single
    Dim T2 As Single
    Dim B1 As Byte , B2 As Byte
    Dim T As Single 'String * 6
    Dim Zn As String * 1
    Cls



    'PROCEDURA Odczyt_temp

    Do

    1wreset
    1wwrite &HCC 'skip kod termometru

    1wwrite &H44 'konwersja Conwert T

    Wait 1
    1wreset
    1wwrite &HCC 'skip kod termometru

    1wwrite &HBE 'Odczyt_temp

    B1 = 1wread()
    B2 = 1wread()
    1wreset

    If B2 >= 240 Then 'w przypadku temperatur ujemnych
    B1 = 255 - B1 'Od 255 Odejmujemy BL
    B2 = 255 - B2 'od 255 odejmujemy BH
    Zn = "-"
    Else
    Zn = "+"
    End If
    B1 = B1 / 16
    B2 = B2 * 16
    T = B1 + B2

    Cls
    Lcd "Temp_1 " ; Zn ; T ; "" ; Chr(1) ; "C"



    Loop
    '-----------------------------------------------------------------------------

    Powodzenia
  • #5 3408123
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Mirek D napisał:
    Tu masz sprawdzoną procedurę odczytu temperatury...

    No nie całkiem sprawdzoną :(
    Przy temperaturach ujemnych , zawyża wynik o 1 stopień :(
    Dla B1=&H90 i B2=&HFC wyświetla -54 a powinien -55.Skoryguj obliczenia dla ujemnych :)

    Piotrek
  • #6 3408502
    Mirek D
    Poziom 15  
    Posty: 120
    Pomógł: 8
    Ocena: 12
    Dzięki Kolego Zumek za uwagę, faktycznie błąd. W linii obliczającej wartość zmiennej B1 jest;

    B1=255-B1

    a powinno być;

    B1=256-B1

    Ponoć nieomylny jest ten tylko co nic nie robi, pozostałym one się zdarzają.

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy problemu z termometrem opartym na czujniku DS18B20, który wskazuje temperaturę zawyżoną o około 2-3 stopnie Celsjusza. Autor prosi o poprawienie kodu tak, aby wyświetlana temperatura była pomniejszona o 3 stopnie. Próba prostego odejmowania wartości od zmiennej temperatury (np. TR = T - 3) skutkowała błędnymi wynikami i wyświetlaniem wartości około +256, co wskazuje na problem z typem danych lub konwersją. W odpowiedziach pojawiły się sugestie dotyczące poprawnej procedury odczytu temperatury z DS18B20, uwzględniające konfigurację mikrokontrolera, portów LCD i 1-wire oraz korektę błędów w obliczeniach temperatur ujemnych. Wskazano, że w kodzie może być błąd w obliczeniach ujemnych temperatur, gdzie zamiast B1=255-B1 powinno być B1=256-B1 lub zastosowanie negacji bitowej (B1=not B1). Zasugerowano także dodanie opóźnienia (wait 10) przed pętlą odczytu, aby uniknąć przegrzewania czujnika przez zbyt częste odpytywanie. Jeden z linków prowadzi do sprawdzonego kodu termometru na DS18B20, który można dostosować do własnej konfiguracji sprzętowej.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA