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

ATMEGA 8 - Nieprawidłowe odczyty z czujnika DS18B20 w termometrze

McCherry 16 Lis 2014 23:05 924 4
REKLAMA
  • #1 14138836
    McCherry
    Poziom 12  
    Witajcie! Próbuję zbudować sobie termometr, używam następującego kodu:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Niestety na wyświetlaczu wciąż widnieje wartość 0.00C. Gdy odłączę przewód GND wskakuje 'Cisza', natomiast gdy odłącze VCC i GND wyświetlacz pokazuje różne wartości. Jakieś pomysły co może być nie tak? Może po prostu uszkodzony czujnik?
  • REKLAMA
  • #2 14138843
    excray
    Poziom 41  
    Kolego definicje służą temu żeby sobie ułatwiać życie a nie je utrudniać. Przeanalizuj sobie swoje i sprawdź co robią i czy ma to sens. Poza tym czasy. Jeśli instrukcja pisze o tym że sygnał może przyjść w czasie 15-60uS to znaczy że czekasz minimum 60uS zanim zaczniesz sprawdzać. Tak samo w funkcjach presence, odczytu i zapisu bitu. Tam w ogóle na końcu nie czekasz na zakończenie bieżącej operacji tylko od razu wychodzisz z funkcji.
  • REKLAMA
  • #3 14138941
    McCherry
    Poziom 12  
    Po analizie Twoich dyrektyw (acz nie wiem, czy właściwej analizie) mam coś takiego

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    I ten sam problem.
  • REKLAMA
  • #4 14138959
    excray
    Poziom 41  
    Jeszcze gorzej. "v1Wire_SendBit" to już zupełnie jakaś porażka. Może na przykładzie Ci wytłumaczę.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Na końcu tej funkcji Presence jest czas 300uS. Znajdź go u siebie. A teraz pomyśl, zrobiłeś presence i już bez czekania przechodzisz do wysyłania do DSa danych. Nawet nie sprawdzasz szyny 1-wire a tym czasem DS cały czas jeszcze żyje tym presence i trzyma ją w stanie niskim. Takie same błędy popełniasz przy odczycie i zapisie.
  • #5 14139714
    McCherry
    Poziom 12  
    Poczytałem trochę w internecie i zmieniłem na coś takiego (wywaliłem w ogóle funkcje pojedynczych bitów).

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Obecnie cały czas pokazuje temperaturę -0.06C. Nie zmienia się mimo ewidentnej zmiany temperatury w otoczeniu.

    edit:
    Rozwiązane, zamykam.
REKLAMA