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

DS18B20 problem powyżej 85C

adam_sth 26 Mar 2010 14:10 2099 11
REKLAMA
  • #1 7882163
    adam_sth
    Poziom 10  
    Zrobiłem układ Atmega16 + DS18B20+ wyświetlacz LCD. Wszystko działa ładnie póki nie zacząłem podgrzewać czujnika. Okazało się, że powyżej +85C wskazania zaczynają wariować. Zrbilem sobie podgląd starszego odbieranego bajtu i okazuje się, że otrzymuje on zupełnie przypadkowe wartości. W nocie katalogowej napisali, że do mierzy do +125C a do +85C z dokładnością 0,5C.
    Pytanie czy akurat czujnik z którego korzystam ma taki defekt czy w zakresie 85-125C ten czujnik nie działa?
    Dodam że potrzebuje mierzyć temp z zakresu 90-100C.
  • REKLAMA
  • #2 7882214
    tmf
    VIP Zasłużony dla elektroda
    Masz go podlączony jako parasite powered? Jesli tak to powyżej 85 stopni w tym trybie nie działa. Jeśli masz go podlączony do zasilania normalnie to pewnie rozjeżdżają się timingi.
  • #3 7883643
    adam_sth
    Poziom 10  
    Nie wiem czy dobrze myślę, Parasite powered to podłączenie w którym urządzenie korzysta z zasilania z linii sygnałowej, czy raczej ustawia się ten tryb wysyłając jakieś polecenie?
    A w swym urządzeniu prowadzę do czujnika 3 linie: zasilanie, masa i linia sygnałowa.
  • REKLAMA
  • #4 7883682
    wojtek8-7
    Poziom 13  
    adam_sth napisał:

    A w swym urządzeniu prowadzę do czujnika 3 linie: zasilanie, masa i linia sygnałowa.


    Między zasilaniem a linią sygnałową powinien być rezystor 4,7K
  • REKLAMA
  • #5 7884109
    adam_sth
    Poziom 10  
    Powinien być i jest, ale co jest dziwne, to po odłączeniu linii sygnałowej od zasilania to nadal układ działa, być może dzięki pull-up ale tutaj pewności nie mam
  • #6 7890529
    adam_sth
    Poziom 10  
    A mógłby mi ktoś polecić jakiś inny czujnik temperatury działający w zakresie 90-100C i dający się w miarę prosto oprogramować?
  • REKLAMA
  • #7 7890551
    rusala
    Poziom 22  
    LM35 -55 do +150 stopni ale analogowy więc do przetwornika ADC. Jest o tyle przyjemny, że na 1 stopień przypada 10mV na wyjściu.
  • #8 7890659
    tmf
    VIP Zasłużony dla elektroda
    A nie prościej napisać porządnie oprogramowanie obsługujące 1-wire, tak, żeby to działało na DS? Pokaż swój kod, pewnie przyczyna się szybko znajdzie.
  • #9 7893288
    Circuit Chaos
    Poziom 13  
    adam_sth napisał:
    A mógłby mi ktoś polecić jakiś inny czujnik temperatury działający w zakresie 90-100C i dający się w miarę prosto oprogramować?

    TC74 na I2C ale dokładności to on dobrej nie ma... W praktyce skacze o 2-3 stopnie.
  • #10 7893595
    flapo213
    Poziom 21  
    Witaj,

    W datasheet od DS18B20 jest napisane że faktycznie przy pomiarze temperatury powyżej 90 czy 100 stopni C czujnik potrzebuje więcej prądu do konwersji. Ale chyba udzielę Ci trafnej informacji bo miałem podobny problem, niestety układ DS18B20 jest bardzo czuły i wszelkie dziwne zachowania na nóżce DO mogą powodoać dziwne zachowania. Ale do rzeczy co zrobić żeby było dobrze otóż twój problem na 90% dotyczy błędnego przekonfigurowania nóżki do odczytu i zapisuj bitów do DS18x20.

    Przykład:

    przekonfigurowanie pinu może wyglądać tak

    DDRC |= 0x20;
    PORTC |= 0x20;

    lub

    PORTC |= 0x20;
    DDRC |= 0x20;

    niestety dla dallasa ma to kolosalne znaczenie.

    Sprawdź dokładnie w datasheet od ATmegi16 jak dokładnie powinno być.

    Nie sugeruj się tu moim kodem ważna jest tu kolejność. Ja w tej chwili dokładnie nie pamiętam co powinno być pierwsze ale jak Ci jest to bardzo potrzebne to Ci podeślę jak powinno być.

    Pozdrawiam
  • #11 7897625
    adam_sth
    Poziom 10  
    W końcu udało się, prze-konfigurowałem piny jak mi radziliście oraz trochę poprawiłem timingi (odstęp czasu pomiędzy odczytem poszczególnych bitów zmieniłem z 15 na 20 us) i zadziałało.
    Dziękuje wszystkim za pomoc.
    Jedyne co mnie jeszcze dziwi, to to że jak podłącze czujnik do portu C0 to nie potrzebuje rezystora podciągającego dla linii sygnałowej (działa zarówno jak jest podłączony do masy jak i gdy nie jest) a jak podłącze pod jakikolwiek inny port np D4 to muszę mieć rezystor pull-up bo inaczej wyświetla 0,0C. Poza zmianą portów nic w kodzie nie modyfikuje przy tej zamianie. Dodam jeszcze nie wiem czy to istotne, że do wspomnianego portu C na 6 najstarszych pinach podłączyłem wyświetlacz lcd.
  • #12 7897634
    rusala
    Poziom 22  
    jest możliwe, że masz włączony wewnętrzny pull-up na tym pinie choć on jest dość "słaby"
REKLAMA