Czas jakiś temu popełniłem funkcje do obsługi pilota NEC. Właściwie kod w dużej mierze oparty jest na tym: http://forum.atnel.pl/topic7144.html#p83490 ale z niewielkimi modyfikacjami. Przede wszystkim rejestracja sygnału i dekodowanie są rozdzielone. Impulsy (ich okres), podane na pin ICP, odczytywane są w procedurze obsługi przerwania i zapisywane do bufora kołowego. Funkcja dekodująca wywoływana w programie głównym czyta bufor, i zwraca zdekodowaną komendę albo kod braku komendy. Drugą modyfikacją jest rozpoznanie przytrzymania klawisza. Po co w ogóle całe to buforowanie, które komplikuje sprawę i pożera zasoby (RAM)? Ano po to by maksymalnie skrócić obsługę przerwania. Kod miał działać w lampkach choinkowych na ledach WS2812, których specyficzne sterowanie nie pozwala na upchnięcie przerwania dłuższego niż ok 5.5us (czas całkowity, łącznie z wywołaniem). I chyba, jak widać, się udało (to nie są TE lampki ):
Faktycznie przy tej ilości diod można się nie bawić w buforowania (ich wysterowanie trwa tylko 300us, przy najkrótszym możliwym okresie sygnału 1,25ms) ale przy 100 czy 200 ledach...
W załączniku kod z przykładowym mainem w formie projektu Eclipsa. Kod jest na rodzinę m168/m328, dla innych procków trzeba sobie przerobić funkcję inicjalizacyjną. Zliczanie czasu impulsu jest na zboczu opadającym, dla większości czujników pewnie trzeba zmienić na zbocze rosnące.
Załączniki:
Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.
Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości
Nie możesz rozpoczynać nowych wątków Nie możesz odpowiadać w wątkach Nie możesz edytować swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników