Coś się nie sumuje. Twoje sygnały wydają się być 3.3V od szczytu do szczytu, co oznacza, że są prosto z mikro. Jednak poziomy UART mikrokontrolera są (prawie) zawsze bezczynne, wysokie i aktywne niskie. Twoje sygnały są odwrócone od tego, co nie ma sensu.
Aby ostatecznie przenieść te dane do komputera, należy je przekonwertować na poziomy RS-232. Tego właśnie oczekuje port COM komputera. RS-232 jest w stanie bezczynności niskim i aktywnym wysokim, ale niski jest poniżej -5 V, a wysoki powyżej + 5 V. Na szczęście istnieją układy scalone, które ułatwiają konwersję między typowymi sygnałami UART poziomu logiki mikrokontrolera a RS-232. Te układy zawierają pompy ładujące, które wytwarzają napięcia RS-232 z zasilacza 3,3 V. Czasami te układy są ogólnie nazywane „MAX232”, ponieważ był to numer części wczesnego i popularnego układu tego typu. Potrzebujesz innego wariantu, ponieważ najwyraźniej używasz zasilania 3,3 V, a nie 5 V. Wykonujemy produkt, który jest w zasadzie jednym z tych układów na płycie ze złączami. Wejdź na http://www.embedinc.com/products/rslink2 i spójrz na schemat, aby zobaczyć jeden przykład, jak podłączyć taki układ.
Kolejną rzeczą, która się nie sumuje, jest to, że obie sekwencje wydają się mieć więcej niż jeden bajt, nawet jeśli mówisz, że wysyłasz tylko 0 i 255. Ten typ danych szeregowych jest wysyłany z bitem początkowym, a następnie 8 bitami danych, potem bit stopu. Bit startowy ma zawsze przeciwną biegunowość niż poziom biegu jałowego linii. W większości opisów poziom bezczynności linii jest określany jako „spacja”, a przeciwnie jako „znak”. Tak więc bit startowy jest zawsze na znak. Celem bitu początkowego jest zapewnienie synchronizacji czasu dla pozostałych bitów. Ponieważ obie strony wiedzą, ile to trochę czasu, jedynym pytaniem jest, kiedy zaczyna się bajt. Bit startowy zapewnia tę informację. Odbiornik zasadniczo uruchamia zegar na zboczu początkowym bitu startowego i używa go, aby wiedzieć, kiedy nadejdą bity danych.
Bity danych są wysyłane co najmniej do najbardziej znaczącej kolejności, przy czym znak wynosi 1, a spacja wynosi 0. Dodaje się bit stopu na poziomie przestrzeni, dzięki czemu początek następnego bitu początkowego jest nową krawędzią i pozostawia trochę czasu między bajtami. Pozwala to na mały błąd między nadawcą a odbiorcą. Jeśli odbiornik byłby choć trochę wolniejszy od nadawcy, w przeciwnym razie przegapiłby początek następnego bitu startowego. Odbiornik resetuje się i uruchamia swój zegar od nowa za każdym nowym bitem początkowym, aby błędy synchronizacji nie kumulowały się.
Z tego wszystkiego powinieneś zobaczyć, że pierwszy ślad wydaje się wysyłać co najmniej dwa bajty, a ostatni wygląda na może 5.
Pomoże to, jeśli rozszerzysz skalę czasową śladów. W ten sposób możesz zmierzyć, czym naprawdę jest trochę czasu. Pozwoliłoby to zweryfikować, czy naprawdę masz 9600 bodów (104 µs / bit), i umożliwić dekodowanie poszczególnych bitów przechwytywania. W tej chwili nie ma wystarczającej rozdzielczości, aby zobaczyć, gdzie są bity, i dlatego faktycznie dekoduje to, co jest wysyłane.
Dodany:
Właśnie przyszło mi do głowy, że twój system może wysyłać dane w formacie ASCII zamiast binarnym. Tak się zwykle nie dzieje, ponieważ konwersja do ASCII w małym systemie zajmuje więcej ograniczonych zasobów, słabo zużywa przepustowość i konwersję na PC można łatwo wykonać, jeśli chcesz wyświetlić dane użytkownikowi. Jeśli jednak Twoje transmisje są znakami ASCII, które wyjaśniłyby, dlaczego sekwencje mają więcej niż jeden bajt, dlaczego drugi jest dłuższy („255” to więcej znaków niż „0”) i dlaczego oba wydają się kończyć tym samym bajtem. Ostatni bajt jest prawdopodobnie rodzajem znaku końca linii, który zwykle byłby znakiem powrotu karetki lub znakiem nowej linii.
W każdym razie rozszerz skalę czasową, a my możemy dokładnie zdekodować, co jest wysyłane.