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

XMega128A3U-DS1820 - Losowe/zawyżone wyniki pomiaru

SciroWroc 14 Kwi 2015 22:02 894 3
REKLAMA
  • #1 14617819
    SciroWroc
    Poziom 14  
    Witam.
    Nie potrafię poradzić sobie z czujnikiem DS1820.
    Nie wiem co robię źle.

    Czujnik podpięty do portu D pin 2. Zasilany na stałe z 3.3 V. Linia danych podpięta przez 4k7R do 3.3V
    Przewody między czujnikiem a uC to ok 5 cm.

    uC to Xmega 128A3U. Pracuje na 32 MHz.

    W odpowiedzi na polecenie 0x44 dostaje takie dane
    Kod: text
    Zaloguj się, aby zobaczyć kod


    komórka [0] zmienia wartość, przy ogrzaniu czujnika. CRC nie sprawdziłem, bo nie bardzo wiem o co chodzi z tym wyliczaniem.


    Po wysłaniu 0x33 dostaje taką odpowiedz
    Kod: text
    Zaloguj się, aby zobaczyć kod










    Kod: text
    Zaloguj się, aby zobaczyć kod


    Funkcje do obsługi pinu
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Reset magistrali i wymiana bitów.
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Wysłanie i odebranie bajtu
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Procedura odczytania temperatury
    Kod: text
    Zaloguj się, aby zobaczyć kod


    Co powinienem jeszcze sprawdzić ?
    Pozdrawiam
    Grzesiek
  • REKLAMA
  • #2 14618053
    tmf
    VIP Zasłużony dla elektroda
    Przede wszystkim sprawdź CRC - po to ono jest. A przy okazji - jaki jest sens taktować MCU 32 MHz, jeśli 99% czasu spędza on w martwej pętli? Zrób komunikację 1-wire na USART jak należy, tym bardziej, że w XMEGA masz ich sporo i daj odpocząć biednemu prockowi :)
  • REKLAMA
  • Pomocny post
    #3 14618386
    zumek
    Poziom 39  
    SciroWroc napisał:

    Co powinienem jeszcze sprawdzić ?
    ...

    Przede wszystkim, funkcję W1odbierz(). Poza tym, reszta też mocno ... nadmiarowa - wiele niepotrzebnych instrukcji, np.

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

    i.t.p.
  • #4 14623473
    SciroWroc
    Poziom 14  
    Ok, po stosach przykładów udało się rozwiązać problem. Moja funkcja składająca kolejne bity, "sklejała" bajt o złym kierunku. LSB finalnie trafiał na MSB i odwrotnie.

    tmf: USART niestety w tym układzie nie jest możliwy, zabrakło mi pinów i dlatego ograniczyłem się do komunikacji na 1 pinie. W przyszłości spróbuję zrealizować to tym sposobem.

    zumek: Dziękuję za naprowadzenie na trop.
    Nie pisałem wcześniej w C i daleko mi do eleganckiej formy pisania. Mam nadzieję, że zmieni się to z czasem.

    Pozdrawiam
    Grzegorz
REKLAMA