Skocz do zawartości

Błędny odczyt z czujnika DS18B20


adrianxx

Pomocna odpowiedź

@adrianxx witam na forum 🙂 Niestety nie masz zarejestrowanego zestawu do tego kursu, więc nie wiem czym dokładnie dysponujesz. Czy korzystasz z tego samego sprzętu, który opisany jest w kursie i uruchamiasz takie same kody programów?

Link do komentarza
Share on other sites

(edytowany)

@Treker niestety posiadam inne MCU - STM32F446RE, jednak jedyną różnicę przy UART jaką zauważyłem to funkcja Overrun, której nie posiadam... uważasz że to może powodować taki błąd? Kod oczywiście jest 1:1 z kursu, dodam że wykorzystując delay_us nie było problemów. W załączniku dodałem jak to mniej wiecej wygląda. PS. bardzo fajny kurs! 

ds18b20 uart.png

Edytowano przez adrianxx
Link do komentarza
Share on other sites

@adrianxx Naturalnie, zawsze się na początku ma ten problem 😉 Generalnie jest wynikiem jednej z dwóch rzeczy: albo parametry transmisji (timing) jest nieprawidłowy, i nie do końca czytamy prawidłowo dane, albo, dużo częściej - czujnik jest w niewłaściwym stanie, żeby wykonać polecenie przesłania danych (odczytu lub zapisu rejestru). Polecam zapoznać się z dokumentacją gdzie jest taki rysunek jaka jest kolejność wysyłania rozkazów do DS-a. Ona jest bardzo ważna, jeśli nie wykona się poleceń w kolejności czujnik odmówi współpracy. Żeby zagwarantować właściwą kolejność przesyłania poleceń chyba najlepiej użyć FSM (maszyny stanowej), czyli zrobić sobie gdzieś w kodzie listę możliwych stanów komunikacji i upewnić się, że nasz kod jest zawsze jednoznacznie w jednym z nich. Upraszcza to później debugowanie kodu. Dodatkowy plus jest taki, że można wtedy korzystać z przerwań i nie blokować głównego wątku czekaniem na zmianę stanu czujnika.

Co do timingu, na UART udało mi się na nim uzyskać troszkę szybszą transmisję niż 115200, ale niedużo szybszą. Jeśli jest ustawiona wyższa wartość, to przynajmniej u mnie to działać nie chciało.

Taka podpowiedź - jeśli CRC się nie zgadza, warto zerknąć co jest w buforze. Jak się go wcześniej wyczyściło, i CRC się nie zgadza, tam są najczęściej zera, czyli nic nie odczytaliśmy, bo czujnik nic nie wysłał, a nie wysłał, bo odmówił wykonania z jakiegoś powodu. Chyba najpierw trzeba go zaadresować, żeby wiedział że to o niego chodzi (bo można mieć na tej samej linii więcej niż 1 czujnik).

15 godzin temu, adrianxx napisał:

Miał ktoś może problem przy wykorzystaniu UART z wartością CRC i w konsekwecji błędny odczyt temperatury z czujnika(85 *C)? Dodatkowo zauważyłem błędy odczyt pierwszego bajtu w adresie czujnika...

 

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.