Pouczające może być przyjrzenie się prostszemu algorytmowi znajdowania bitów stopu i startu. Najpierw próbkuj wejście z czterokrotną szybkością transmisji.
Jeśli szybkość transmisji danych wynosi 9600 bitów na sekundę, będziesz chciał próbkować z częstotliwością 38 400 Hz.
Gdy nie ma transmisji, otrzymasz dużo szumu, a na wejściu próbki mogą pojawić się losowe wzloty i upadki.
Po wysłaniu bitu początkowego można go wyczuć na co najmniej 3 kolejnych próbkach. Następnie będziesz próbkować co czwartą próbkę jako rzeczywisty otrzymany bit, przesuniętą o jedną próbkę, aby była blisko środka każdego bitu.
W końcu otrzymasz bit stopu - jeśli nie jest poprawny, możesz odrzucić wszystkie dane i spróbować ponownie, czekając na bit startowy.
To prosty przypadek. Gdy już to uruchomisz, zauważysz, że nadal otrzymujesz złe dane i właśnie tam wykorzystujesz więcej technik odzyskiwania danych:
- Zamiast używać tylko jednej próbki w pobliżu środka każdego bitu, spójrz na wszystkie trzy próbki, które powinny wystąpić w czasie bitowym, i użyj głosowania większości, aby określić rzeczywistą wartość bitu.
- Zwiększ częstotliwość próbkowania do 8x lub 16x, co da znacznie większą liczbę próbek na bit do wykorzystania i przybliży Cię do zbierania informacji przez cały bit, a nie tylko 3/4 w środku.
- Przechowuj strumień danych podczas odbierania i używaj korelatora, który porusza się wzdłuż strumienia, aby znaleźć bity początkowe i końcowe. W ten sposób nie wyrzucisz możliwego bajtu, ponieważ masz zły bit startowy tuż przed prawdziwymi danymi.
- Zamiast próbkować w środku bajtów, szukaj przejść - RF wysyła przejścia lepiej niż poziomy statyczne. Znajdź początek bitu początkowego, a następnie używając małego okienka wokół każdego przejścia bitowego, sprawdź, czy jest przejście, a wtedy uzyskasz informacje o poprzednim i następnym fragmencie.
Jednak proste sygnały USART nie są odpowiednie dla RF.Rozważ przyjrzenie się kodowaniu w Manchesterze.Zamiast wysyłać dane jako wysokie / niskie, wysyłasz je jako przejścia od wysokiego do niskiego lub niskiego do wysokiego.To znacznie ułatwia odzyskiwanie zegara, ponieważ koduje zegar na każdy bit i działa na przejściach, które są naturalnym przyjacielem RF.Nie możesz wysłać go tak szybko, ale będzie znacznie bardziej niezawodny.
Weź również pod uwagę wykrywanie błędów i, jeśli to możliwe, korekcję błędów.Dzięki prostemu wykrywaniu błędów będziesz w stanie zweryfikować, czy modyfikacje algorytmu poprawiają sygnał, czy nie obiektywnie.