Skocz do zawartości

Rozbieżność bitowa pomiędzy analizatorem logicznym a UART


Sheppard25

Pomocna odpowiedź

Cześć,

Postanowiłem napisać post z uwagi na to, że już drugi dzień się z tym męczę i nie mam pomysłu. Debugowanie czegokolwiek w AVR nie jest dla mnie proste 🙂 

1. Wysyłam dane zakodowane w Manchester co 5 sekund i one są wysyłane poprawnie i odbierane przez odbiornik również poprawnie. 1 bit to ok. 1ms. W analizatorze logicznym jest to czasami kilka mikrosekund więcej lub mniej ale jak rozumiem, tak działają prawa fizyki i nigdy nie otrzymamy idealnie równych stanów. Teraz chciałbym je po prostu przekonwertować z powrotem na bajty ASCII. 

2. Próbkuję sygnał z timerem, który wywołuje przerwania co około 0,496ms czyli w założeniu 2 razy na bit. 

3. Niestety zauważyłem, że za każdym razem w jednym miejscu bity są przekłamane w stosunku do tego co dostaję na UART. Preambuła prawie do końca przychodzi poprawnie, natomiast potem jest błąd, następnie nadal jest okej. Totalnie nie wiem z czego to może wynikać. Pomyślałem, że może przez to, że jednak te stany nie trwają idealną 1ms przez co po pewnym czasie może się zdarzyć, że nie 2 a 3 przerwania przypadną na 1 zmiane sygnału Manchester, nastąpi jakby przeskok albo, że UART wprowadza jakiś delay przy wysyłaniu, który potem powoduje, że pierwszy bit jest wysyłany niepoprawny mimo, że bez UART byłby odczytany poprawnie (tyle ze bez UART nie mam jak debugowac na biezaco). Czasami ten bit po zmianie timera przeklamuje nieco inaczej ale zwykle zawsze w tym samym miejscu.  

4. Kolejnym problemem jest to, że UART ignoruje jakby to co znajduje się w warunku w linii 88 Receiver.cpp. Printuje mi zera jeszcze przed pierwsza wiadomoscia mimo ze zgodnie z tym warunkiem nie powinien poniewaz ma state ustawiony na WAITING_FOR_PREAMBULE

https://github.com/sheppard30/Czujnik-wilgotnosci---odbiornik 

Bede wdzieczny za pomoc, pozdrawiam

Zrzut ekranu 2024-09-07 221033.png

Edytowano przez Sheppard25
Link do komentarza
Share on other sites

Ten analizator nie ma więcej kanałów? Najlepiej w ten sposób zwizualizować zmiany stanów odbiornika. W odpowiednich momentach zmieniasz stany na nieużywanych wyjściach kontrolera.

Zegar nie jest jakoś synchronizowany z początkiem pakietu? Trzeba by było wykrywać pierwszą zmianę stanu. 
 

Link do komentarza
Share on other sites

Przed chwilą, etet100 napisał:

Ten analizator nie ma więcej kanałów? Najlepiej w ten sposób zwizualizować zmiany stanów odbiornika. W odpowiednich momentach zmieniasz stany na nieużywanych wyjściach kontrolera.

Zegar nie jest jakoś synchronizowany z początkiem pakietu? Trzeba by było wykrywać pierwszą zmianę stanu. 
 

@etet100 ma ma, tylko mialem problem z uruchomieniem go. Musialem zainicjowac pin dla drugiego kanału poza konstruktorem Receivera bo z jakiegos powodu bylo to dla mikrokontrolera za wczesnie. Testuje troche inne podejscie, zobaczymy

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.