Witam.
Napisałem programik na procesor z tytułu, który mierzy długości impulsów na pinie, i wysyła wynik pomiaru na UART. Postanowiłem wykorzystać to do przechwycenia sygnału z pilota do tunera TV SAT (TechniSat, bo taki miałem pod ręką
), taktowanie: kwarc 4MHz, odbiornik typu TSOP, sygnał zanegowany przez 74LS00 i dostarczony na PD6, schemat pominę, bo tu nie ma żadnych problemów. Program był inspirowany następującymi projektami:
http://www.embedds.com/programming-16-bit-timer-on-atmega328/
https://www.elektroda.pl/rtvforum/topic856661.html
http://mikrokontrolery.blogspot.com/2011/04/obrotomierz-diy.html
Idea polega na tym, że mamy trzy stany pomiaru: start przy wzrastającej krawędzi, opadającej, i końcu niskiego stanu (po którym następuje ponowny wzrost, lub time out) i na koniec odejmujemy wartość przechwyconej wartości od wartości z poprzedniego stanu:
Kod (pominąłem komentarze i inicjalizacje UART i strumienia dla printf):
Ten układ zasadniczo działa, ale co pewien czas wśród odczytów pojawiają się takie które mają przypadkowe wartości, ocierające się nawet o maksymalną wartość zmiennej 32 bitowej int bez znaku... Nie potrafię tej anomalii wyjaśnić, i bardzo utrudnia to odczytanie kodu pilota. Poniżej to co odczytałem RealTermem (wszystkie wartości w mikrosekundach):
Dla porównania: sygnał z generatora prostokąta z miernika:
I sygnał z drugiego AVRa, zaprogramowanego aby najpierw wysłać impuls 2560us, a potem serie sześciu po 1800us (każdy oddzielony 660us stanu niskiego):
Z góry dziękuje za pomoc.
Napisałem programik na procesor z tytułu, który mierzy długości impulsów na pinie, i wysyła wynik pomiaru na UART. Postanowiłem wykorzystać to do przechwycenia sygnału z pilota do tunera TV SAT (TechniSat, bo taki miałem pod ręką
http://www.embedds.com/programming-16-bit-timer-on-atmega328/
https://www.elektroda.pl/rtvforum/topic856661.html
http://mikrokontrolery.blogspot.com/2011/04/obrotomierz-diy.html
Idea polega na tym, że mamy trzy stany pomiaru: start przy wzrastającej krawędzi, opadającej, i końcu niskiego stanu (po którym następuje ponowny wzrost, lub time out) i na koniec odejmujemy wartość przechwyconej wartości od wartości z poprzedniego stanu:
A B
| |
+-----+
| | C
| | |
---+ +-----+--
Kod (pominąłem komentarze i inicjalizacje UART i strumienia dla printf):
Kod: text
Ten układ zasadniczo działa, ale co pewien czas wśród odczytów pojawiają się takie które mają przypadkowe wartości, ocierające się nawet o maksymalną wartość zmiennej 32 bitowej int bez znaku... Nie potrafię tej anomalii wyjaśnić, i bardzo utrudnia to odczytanie kodu pilota. Poniżej to co odczytałem RealTermem (wszystkie wartości w mikrosekundach):
---------------------------
HI: 928
LOW:848
HI: 4294930672
LOW:832
HI: 1824
LOW:1728
HI: 1792
LOW:880
HI: 944
LOW:1728
HI: 1808
LOW:864
HI: 928
LOW:848
HI: 1792
LOW:1776
HI: 1792
LOW:880
HI: 928
LOW:1744
HI: 1792
LOW:880
HI: 4293920544
LOW:848
HI: 912
LOW:1760
HI: 1792
LOW:880
HI: 1792
LOW:880
HI: 928
LOW:848
---------------------------
Dla porównania: sygnał z generatora prostokąta z miernika:
---------------------------
HI: 10272
LOW:9792
HI: 4294931520
LOW:9808
HI: 10192
LOW:9824
HI: 10208
LOW:9824
HI: 10224
LOW:9808
HI: 10320
LOW:9680
HI: 10256
LOW:9776
HI: 10368
LOW:9760
HI: 10352
LOW:9664
HI: 10352
LOW:9584
HI: 10320
LOW:9648
HI: 10320
LOW:9232
HI: 10192
LOW:9776
HI: 10672
LOW:8848
HI: 9904
LOW:9808
HI: 10304
LOW:9744
---------------------------
I sygnał z drugiego AVRa, zaprogramowanego aby najpierw wysłać impuls 2560us, a potem serie sześciu po 1800us (każdy oddzielony 660us stanu niskiego):
---------------------------
HI: 1856
LOW:688
HI: 4294962336
LOW:688
HI: 2640
LOW:672
HI: 1856
LOW:688
HI: 1856
LOW:688
HI: 1856
LOW:688
HI: 1856
LOW:688
HI: 1856
LOW:688
HI: 1856
LOW:688
HI: 2624
LOW:688
HI: 1856
LOW:688
HI: 1856
LOW:672
HI: 1856
LOW:688
HI: 1856
LOW:688
HI: 1856
LOW:688
HI: 1840
LOW:688
---------------------------
Z góry dziękuje za pomoc.
