Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Atmega8][c] ds18b20 nie wysyła temperatury

ShadowDancer 15 Gru 2011 16:03 1078 3
  • #1 15 Gru 2011 16:03
    ShadowDancer
    Poziom 10  

    Witam,

    Jakiś czas próbuję doprowadzić do ładu mój termometr. Odsyła on sygnał po resecie, jednak próba odczytania temperatury kończy się fiaskiem. Działam na procesorze Atmega8, do opóźnień używam bilblioteki util/delay.h (WinAVR). Termometr podłączony jest na stałe do zasilania.

    Ten kod napisałem na podstawie dokumentacji temometru i dokumentu opisującego interface 1 wire od atmela:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    I kod programu

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Procesor przetaktowałem na 8MHz wewnętrzny oscylator, bo znalazłem na forum, że to może być problem, ale nie pomaga ( sekundnik na tym procesorze działa dobrze).

    Próbowałem też użyć kodu np. stąd: http://student.agh.edu.pl/~coni/avr_1wireobsluga.pdf

    Ale nawet nie odsyła sygnału po resecie - nie mam pojęcia dlaczego.
    Proszę o pomoc.

    0 3
  • #2 15 Gru 2011 16:23
    pawel-jwe
    Poziom 30  

    Na wewnętrznym RC jest bardzo ciężko (zbyt niestabilny).
    Miałem przypadek że na wew. RC 8MHz za nic nie chciało działać prawidłowo, a na zew. kwarcu ruszyło bez problemu.
    Jeśli na zew. kwarcu nadal będzie coś nie tak, to najprawdopodobniej opóźnienia (delay'e) masz źle ustawione (za małe lub za duże), to najczęstsza przyczyna problemów z 1-wire.
    Jak masz podłączony? Widziałem przypadki że przy podłączeniu 2-linii (masa + zasilanie i komunikacja na jednej linii) były problemy, a przy 3 liniach (masa+zasilania+linia danych) działało ok.

    0
  • Pomocny post
    #3 15 Gru 2011 17:09
    zumek
    Poziom 39  

    ShadowDancer napisał:

    Ten kod napisałem na podstawie dokumentacji temometru i dokumentu opisującego interface 1 wire od atmela:

    A do dokumentacji AVR-ka zaglądałeś :?:
    Zastanów się, czy można uzyskać niski stan na magistrali 1wire, jeżeli pin do niej podłączony jest ustawiony jako wejście :?:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Poza tym, żeby być w zgodzie z dokumentacją 1wire, to do sterowania magistralą używaj tylko rejestru kierunku DDRx, wcześniej zerując bit w rejestrze PORTx.

    0
  • #4 15 Gru 2011 23:19
    ShadowDancer
    Poziom 10  

    Poprawiłem funkcję read byte i teraz działa bardzo dobrze.

    0