podczerwień NEC

Oct 16, 2005 2 Replies

Witam!



Od dłuższego czasu próbuje napisać program pod atmelka 89cx2051 który by rozkodowywał system nadawany przez piloty NECa. (poprzez dołączony scalony odbiornik ir - sfh...) Niestety dotychaczas nie udało mi się tak stworzyć programu aby poprawnie rozkodować tą transmisję. Jeżelu ktoś ma pomysł jak się do tego zabrać i mógłby podsunąć kilka pomocnych wskazówek - bede wdzięczny.



załączam stronę ze schematem kodu nadawanego przez piloty neca:

formatting link
Dodam że piszę w Bascomie ale za rady czysto assemblerowe też będe wdzięczny.



pozdrawiam


Najpierw stwórz funkcję dekodującą jeden bit, potem będzie już z górki. Potrzebujesz mierzyć czas trwania przerwy między impulsami 560 us, ale łatwiej będzie regularnie próbkować sygnał (np. co 140 us) i dekodować sygnał automatem osadzonym w przerwaniu timera wyzwalanym co te 140 us (140 us * 4 = 560 us). Mogłoby być jeszcze rzadziej ale wtedy nie odfiltrujesz krótkich śmieci. Inne podejście jeszcze mniej obciążające procesor to odpalenie szybkiego timera nie generującego przerwań, a w przerwaniu wyzwalanym dowolnym zboczem sygnału IR odczytywanie i zerowanie licznika timera (przez to znasz długości sygnału IR i przerwy czyli to co pokazano w punkcie "Modulation" opisu protokołu). Nośną 38 kHz zdejmie sam odbiornik IR (na wyjściu da obwiednię). Ostatnia rzecz to wykrycie w podobny sposób "rozbiegówki" sygnału długości 9 ms, wykorzystywanej też przy wysyłaniu powtórek kodu.

Witam,

Ja bardzo podobna transmisje rozkodowalem za pomoca ukladu CCP jakie sa w procesorach m. in. PIC. Uklad po prostu czeka po kolei na odp. impulsy - najpierw rozbiegowka czyli impuls i przerwa. Jesli czasy sie zgadzaja (z tolerancja ktora ja dalem na poziomie +-30%), to idziemy dalej czyli czekamy na kolejne impulsy (bity danych). I tak dalej - az dojdziemy do konca. Trzeba tylko pamietac, ze na koncu przebiegu jest jeszcze jeden dodatkowy pik, ktory wyznacza czas trwania ostatniej przerwy.

Sam odbior bitow i pomiar ich czasow trwania zrobilem na przerwaniach - po odebraniu kazdego impulsu uklad przestawia sie na oczekiwanie na przeciwne zbocze (wyzwalanie raz opadajacym, raz narastajacym zboczem). Uklad CCP zlicza impulsy do momentu wystapienia przerwania - potem mozna te dlugosci sobie odczytac i wrzucic do pamieci do dalszej analizy (u siebie analize i dekodowanie rozkazow mam juz w programie glownym).

Dla prockow ktore nie posiadaja CCP sposob z szybkim timerem i przerwaniem z jednego z pinów - jak kolega wyzej napisal jest rownie dobry.

Generalnie zasada jest jednak taka, ze system wie czego oczekuje i wie w ktorym momencie powinien nadejsc jaki impuls (pomijajac czy to ma byc jedynka czy zero), wie w ktorym momencie odbioru sie znajduje (kazdy impuls jest zliczany) itd... Jezeli cos sie nie zgadza z tym na co system oczekuje (np. dlugosc trwania impulsu), to odbior powinien zostac przerwany a uklad zresetowany. I znowu czekamy na rozbiegowke.

Kod moge udostepnic, ale jest napisany w ASM na proceorki PIC rodziny 18. Maszyna stanow.

Wykrywanie warunku repeat - czyli rozbiegowki wysylanej przy wcisnietym klawiszu (ktory na szczescie jest inny niz warunek startu wysylany na poczatku nadawania) ja sobie darowalem, bo nie bylo mi to potrzebne. Ale mozna latwo zaimplementowac.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required