Witam!
Korzystam na szybko z płytki klona arduino nano v3, atmega328p, 16MHz taktowanie. Dioda nadawcza wg. schematu z Bluebooka do pinu PD6.
To co pojawia się na wyjściu podglądam za pomocą analizatora stanów na scalonym odbiorniku podpiętym tylko do zasilania.
Za pomocą starszego programu Pana Mirka - Dekoder IR, zgrałem sobie przebieg sygnału z pilota do tablicy.
Każdy element reprezentuje ilość mikrosekund, pierwszy element pokazuje czas trwania nośnej, drugi czas przerwy itd, naprzemiennie.
Napisałem więc szybko krótki programik, który odczytuje wartość z tablicy, w zależności od tego czy jest to przerwa, czy nośna - albo uruchamia Timer0 generujący nośną, albo wycisza pin diody IR. Następnie mnożę wartość z tablicy przez 2, dzięki czemu przy preskalerze 8 otrzymuję odpowiednią ilość mikrosekund - taką jak w tablicy. Potem czekam po prostu w pustym while aż minie określony czas. I od nowa.
Dla dużych czasów (>4000us) wszystko się zgadza, dla mniejszych okazuje się, że impuls trwa dłużej niż powinien. Sprawdziłem ile trwa czas jednego przebiegu for-a, bez oczekiwania w while - wyszło około 4us, czyli nie to ma wpływ.
Dla czasu 4599 otrzymuję 4710, ale dla 832 jest to już 1749.
Gdzie robię błąd? Jak odtworzyć ten sygnał. I nie chodzi mi tu o to jaki to standard kodowania i żeby na tej podstawie to nadać, tylko właśnie chcę odtworzyć sygnał zapisany do tablicy. No i nie mogę... Wcześniej próbowałem odmierzać po mikrosekundzie, przerwaniami od timera, ale to oczywiście też bardzo wydłużało mi czasy.
Ale skąd teraz takie przekłamania, gdzie mi ten czas ucieka...
Poniżej kod.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
