niedziela, 6 listopada 2016

AVR NEC - biblioteka obsługi popularnych pilotów podczerwieni

     Realizując różnorakie projekty w oparciu o mikrokontrolery napotykamy problem obsługi różnych peryferiów doń podłączonych. Aby nasz projekt programistyczny był przejrzysty i uniwersalny, warto jest by obsługę tychże urządzeń oprogramować w osobnych plikach po czym zlinkować je do pliku głównego - właśnie przy pomocy biblioteka.
     Zarówno w celach edukacyjnych jak i praktycznych, napisałem bibliotekę umożliwiającą wykorzystanie w swoim projekcie odbiór danych z pilota podczerwieni pracującego w protokole NEC. Piloty tego typu można dziś spotkać bardzo często do sterowania urządzeniami domowymi, jest też wiele bardzo tanich i nieustępujących ładnym designem pilotów do nabycia na znanych portalach aukcyjnych, czy w sklepach internetowych.
     Ukazana tutaj biblioteka zawiera się w trzech plikach:

  • IR_config.h - służący do wyboru standardu jaki obsługujemy (oprócz standardu NEC, można dodać także innych, a wszystkie linkowane będą tylko jednym plikiem nagłówkowym)
  • NEC.c - gdzie zostały zawarte wszystkie funkcje i procedury realizujące dekodowanie sygnału oraz inicjalizację sprzętu)
  • NEC.h - którego przeznaczeniem jest wybór funkcji z jakich chcemy korzystać w obrębie standardu. Zawiera również kilka istotnych parametrów definiujących standard NEC.
     Oraz posiada następujące cechy:

  • Możliwość obsługi wielu standardów
  • Możliwość dodawania standardów (po ówczesnym napisaniu odpowiednich procedur oczywiście)
  • Możliwość wybiórczej kompilacji wybranych funkcji/opcji
  • Obsługa oparta na zdarzeniach
  • Licznik odebranych ramek
  • Redundancja odebranego adresu i komendy (weryfikacja poprawności ramki)
  • Możliwość rozszerzenia pola danych do rozmiaru 32 bitów w jednej ramce
Biblioteka została napisana na Atmege16 i na niej była testowana, jednak nie powinno być problemu z przeportowaniem jej na dowolny procesor z timerem posiadającym tryb Input Capture.
Wymaga scalonego odbiornika podczerwieni typu TSOP lub podobnego.
Do obliczania ilości odebranych ramek zostało wykorzystane przerwanie od przepełnienia licznika (tego samego, który odpowiedzialny jest za dekodowanie sygnału i jest związany z trybem Input Capture). Wobec tego wymagany jest tylko jeden timer. Być może w przyszłości powstaną aktualizację tej biblioteki, również na inne procesorki nie posiadające takiej konfiguracji. Jest ona dokładnie opisana więc nie powinno być problemu z jej zrozumieniem. Z racji wykorzystania przerwań, konieczne jest uruchomienie przerwań globalnych. Biblioteka dostępna na GitHub'ie:





1 komentarz:

  1. Cześć, pobrałem, przetestowałem i wszystko działa! Czy mógłbym prosić o kontakt mailowy na hopek1986@o2.pl

    OdpowiedzUsuń