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][C][AVR STUDIO 5] DS18B20 wariuje przy wysokich temp

MisiekII 21 Gru 2011 18:14 1774 2
REKLAMA
  • #1 10288551
    MisiekII
    Poziom 11  
    Witam serdecznie

    Przejrzałem mnóstwo wątków i stron www o AVR i problemach z komunikacją z czujnikiem temp. DS18B20. U mnie pomiar działa ale jest pewien haczyk - temperatura mierzona jest (i wyświetlana na LCD) do wartości 70stopni Celsjusza. Dalsze ogrzewanie czujnika powoduje, że otrzymuję tylko jedną wartość temperatury tj. 127,9. Po schłodzeniu układ dalej mierzy temperaturę (bez resetowania).

    Pomyślałem, że jest to jakiś problem z konwersją temperatury więc na wyświetlaczu wyświetlam teraz dwie ośmiobitowe zmienne odpowiadające danym o temperaturze z magistrali 1-Wire. Widać wyraźnie, że jedna z 8-bitowych zmiennych zmienia się wraz ze wzrostem temperatury 0..255, a druga pełni rolę licznika przepełnień tej pierwszej - wszystko jest więc ok. Przy wspomnianych 70 stopniach obie liczby przyjmują wartość 255...

    Na magistrali mam 1 czujnik z zasilaniem 5V i rezystorem podciągającym 4,7k, kabelek 10cm, pomijam czytanie jego numeru ID.

    Sprawdziłem 3 czujniki (niestety z tego samego źródła) i każdy zachowuje się podobnie, choć nie identycznie - temperatury przy których licznik "wariuje" różnią się o +/5 stopni.
    W sieci znalazłem tylko 1 podobny wątek - nie został on jednak rozwiązany.

    Z problemem walczę od około 2 tygodni. Czy ktoś ma jakiś pomysł co może być przyczyną opisanej sytuacji?

    Pozdrawiam
    Łukasz
  • REKLAMA
  • Pomocny post
    #2 10288593
    tmf
    VIP Zasłużony dla elektroda
    Najpewniej złe timingi OW, które rozjeżdżają się w wyższych temperaturach. Popraw używany przez ciebie program i wszystko będzie ok. Inna możliwość to używanie trybu pasożytniczego czujnika, nominalnie chodzi on do 85 stopni, lecz trzeba pamiętać, że wraz ze wzrostem temp. rosną upływności i wszystkie parametry stają się co raz bardziej krytyczne.
  • #3 10297455
    MisiekII
    Poziom 11  
    Witaj tmf!

    Miałeś rację :D
    Przyczyną "wariowania" czujnika przy wysokich temperaturach były złe timingi - zarówno slotów "write" i "read".
    Do policzenia dokładnych czasów wykonania procedur wykorzystałem wbudowany w AVR Studio 5 symulator. Okazało się, że większość czasów była niemal o połowę za krótka.

    Na przyszłość: jeśli ktoś uważa przebiegi czasowe w dokumentacji ds18b20 Maxim-a za mało zrozumiałe polecam dokument Atmel-a (AVR318) o komunikacji 1wire. Jest tam bardzo precyzyjny a jednocześnie prosty opis generowania poszczególnych przebiegów dla 1wire.

    Pozdrawiam
    Łukasz
REKLAMA