Spisu treści:

Odbiornik USB ATtiny85 IR: 11 kroków (ze zdjęciami)
Odbiornik USB ATtiny85 IR: 11 kroków (ze zdjęciami)

Wideo: Odbiornik USB ATtiny85 IR: 11 kroków (ze zdjęciami)

Wideo: Odbiornik USB ATtiny85 IR: 11 kroków (ze zdjęciami)
Wideo: Wprowadzenie do mikrokontrolerów AVR - od elektroniki do programowania 2024, Listopad
Anonim
Odbiornik USB ATtiny85 na podczerwień
Odbiornik USB ATtiny85 na podczerwień

OSTRZEŻENIE, TA INSTRUKCJA STAŁA SIĘ PRZESTARZAŁA

Biblioteka v-usb została zaprojektowana do pracy z protokołem USB 1.1, który w dzisiejszych czasach prawie nie istnieje. Wraz z pojawieniem się USB3 będziesz miał więcej niż ból głowy, próbując sprawić, by urządzenia v-usb działały. Po zmianie mojego centrum multimedialnego mam wiele problemów ze stabilnością i pomimo tego, że odbiornik działa, po chwili przestaje działać. Nie udało mi się to naprawić. Zrobiłem też wersję na atmega328p, ale ta miała te same problemy. Używanie timera watchdoga do okresowego resetowania płyty też nie pomogło, więc zrezygnowałem z v-usb.

Zrób sobie przysługę i nie idź dalej z tą instrukcją, chyba że jest to w celach edukacyjnych. Polecam zamiast tego zakup modułu chipowego ATmega 32U4, który ma już zintegrowany interfejs USB i postępuj zgodnie z tym przewodnikiem:

www.sparkfun.com/tutorials/337

Następnie wrzuć czujnik podczerwieni TSOP31238 i gotowe.

Witajcie twórcy! jest to instrukcja zbudowania działającego odbiornika podczerwieni USB przy użyciu mikrokontrolera Attiny85. Rozpocząłem ten projekt, aby przezwyciężyć brak obsługi (przynajmniej pełnej obsługi) niektórych pilotów IR w systemie GNU/Linux. Postępując zgodnie z tymi instrukcjami, możesz zbudować programowalny odbiornik podczerwieni USB, który działa z dowolnym pilotem na podczerwień za kilka dolców.

Przede wszystkim ta instrukcja nie istniałaby bez ciężkiej pracy ludzi, którzy stworzyli biblioteki, z których tu korzystam:

  • David A. Mellis za jego attiny core
  • Oprogramowanie Rowdy Dog dla ich biblioteki TinyTuner
  • Oprogramowanie Rowdy Dog dla ich małego bootloadera
  • Rancidbacon (https://rancidbacon.com/) dla swojego portu arduino biblioteki v-usb (https://code.google.com/archive/p/vusb-for-arduino/downloads)
  • seejaydee za swoją bibliotekę IR dla małych rdzeni znalezionych w komentarzach instructable https://www.instructables.com/id/Attiny-IR-librar… kod na https://www.instructables.com/id/Attiny-IR -biblioteka…

Czasami nie jest łatwo znaleźć właściwego właściciela biblioteki, więc w przypadku pomyłki zostaw komentarz, a rozwiążę problem JAK NAJSZYBCIEJ.

Ten przewodnik istnieje, ponieważ nie znalazłem kompletnego samouczka/przewodnika działającego po wyjęciu z pudełka (może istnieć, ale nie mogłem go znaleźć), więc zebrałem wszystkie informacje dostępne w Internecie i po wielu próbach i Błędy Wymyśliłem kompletny przewodnik po zbudowaniu działającego odbiornika USB IR, który faktycznie działa całkiem nieźle.

Główne źródła informacji, które śledziłem:

  • https://nathan.chantrell.net/20121014/tinypcremot…
  • https://forum.arduino.cc/index.php?PHPSESSID=ap4jg…
  • https://blog.petrockblock.com/2012/05/19/usb-keybo…
  • https://learn.adafruit.com/using-an-infrared-libr…
  • https://codeandlife.com/2012/03/03/diy-usb-passwor…
  • https://codeandlife.com/2012/02/22/v-usb-with-atti…
  • https://www.instructables.com/id/Attiny-IR-librar…

Krok 1: Niektóre rozważania

  • Nie posiadam programatora AVR ISP i nie mam ochoty go kupować, więc użyłem Arduino do zaprogramowania attiny85
  • Nie obchodzi mnie żaden inny system operacyjny niż GNU/Linux, więc nie wiem, czy to zadziała inaczej.
  • istnieją inne biblioteki IR, ale nie mogłem zmusić ich do pracy nawet z arduino. Rozważ jednak, że zacząłem z ograniczoną wiedzą na temat bibliotek IR. Może mógłbym sprawić, by działały teraz, po nabyciu doświadczenia w rozwiązywaniu wielu problemów. W każdym razie byłem zagubiony i zdesperowany, zanim znalazłem bibliotekę, którą udostępnił Seejaydee i od tamtej pory z niej korzystam (wielkie dzięki!).
  • Istnieją inne konfiguracje sprzętowe, ale użyłem tylko tej, która używa 5 V do zasilania attiny85 i dwóch diod Zenera 3,6 V 0,5 W do zaciskania napięcia linii danych, działa po wyjęciu z pudełka, więc nie zadzierałem z inne konfiguracje.
  • Możesz użyć kryształu 16Mhz lub możesz użyć biblioteki tinytuner, aby skalibrować wewnętrzny zegar swojego attiny85. Gorąco radzę używać kryształu, jest znacznie stabilniejszy i prawdopodobnie zaoszczędzi ci wielu bólów głowy.
  • Używam tutaj dwóch różnych bootloaderów dla attiny85:

a) Wersja oprogramowania Rowdy Dog, ma zintegrowany interfejs szeregowy, który jest bardzo fajny i jest bardzo mały, dzięki czemu masz więcej miejsca na swój program i inne biblioteki. Problem w tym, że z jakichś powodów, mimo że działa całkiem nieźle, po pewnym czasie urządzenie usb zostało odłączone (problemy można znaleźć przy pomocy polecenia dmesg). Nie wiem czy to problem z rdzeniem czy mieszaną kombinacją rdzenia plus wybrane biblioteki więc po chwili postanowiłem użyć tego rdzenia tylko do dekodowania kluczyków pilota i kalibracji zegara (gdy nie używam 16Mhz kryształ). Potem po prostu nagrywam bootloader Mellis i przesyłam ostateczny szkic, który nie korzysta z interfejsu szeregowego.

b) Wersja Mellis, stabilny bootloader, używałem tego w wielu projektach. Używałbym tego bootloadera zawsze, gdyby zawierał interfejs szeregowy. Używam tego rdzenia w końcowym szkicu po zdekodowaniu wszystkich kluczy na moich pilotach.

Krok 2: Zacznijmy od sprzętu

Zacznijmy od sprzętu
Zacznijmy od sprzętu
Zacznijmy od sprzętu
Zacznijmy od sprzętu
Zacznijmy od sprzętu
Zacznijmy od sprzętu

Potrzebne narzędzia:

  • płyta kompatybilna z arduino
  • adapter szeregowy na usb do dekodowania kluczyków zdalnych (wystarczy użyć FT232RL)
  • PC z zainstalowanym GNU/Linux i poprawnie skonfigurowanym arduino IDE, używam arduino IDE 1.8.0
  • pilot na podczerwień do testowania urządzenia (nawet taki gówniany, jak te, które można znaleźć w zestawach startowych arduino, zadziała)
  • multimetr do debugowania tablicy (mam nadzieję, że nie będzie Ci potrzebny, powodzenia!)

Lista materiałów:

  • 1 attiny85
  • 2 rezystory 68R
  • 1 rezystor 1,5 K
  • 1 rezystor 4,7 K
  • 1 kryształ 16 Mhz;
  • 1 kondensator 22pF
  • 1 kondensator 0.1uF
  • 1 kondensator 10uF
  • 2 diody Zenera 3,6 V 0,5 W
  • 1 złącze męskie USB typu A
  • 1 listwa pinowa z 6 pinami do programowania i debugowania płyty.
  • 1 czujnik podczerwieni TSOP31238
  • dużo kawy, żeby nie zasnąć

Przed lutowaniem ostatecznej płytki prawdopodobnie chciałbyś zrobić prototyp płytki prototypowej do celów testowych, zgodnie ze schematem dołączonym do tej instrukcji powinno wystarczyć do jej zbudowania.

Aby podłączyć attiny85 do komputera, ostateczna konstrukcja wykorzystuje złącze USB typu A, które jest wlutowane w płytkę, ale w przypadku prototypu trzeba będzie wykonać kabel USB, który można podłączyć do płytki stykowej:

Przylutuj do małego kawałka 4 pinów płyty perforowanej, a następnie wytnij stary kabel USB i przylutuj piny do 4 przewodów wewnątrz kabla USB:

  • czerwony to VCC (5 V)
  • czarny to GND
  • biały to D-
  • zielony to D+

Trzymaj wszystko razem za pomocą gorącego kleju.

Teraz musimy podłączyć programator ISP (Arduino), przejściówkę USB na szeregową (FT232RL) oraz czujnik podczerwieni do attiny85.

Możesz zostawić wszystko połączone, aby móc nagrywać różne bootloadery, ładować szkice i sprawdzać port szeregowy bez zmiany przewodów, Aby to zrobić, połącz wszystko zgodnie z tymi instrukcjami:

Programista ISP (Arduino): pozwala na nagrywanie bootloaderów i ładowanie szkiców

  • attiny85 PB0 (pin5) do pin11 (MOSI) w arduino
  • attiny85 PB1 (pin6) do pin12 (MISO) w arduino
  • attiny85 PB2 (pin7) do pin13 (SCK) w arduino
  • attiny85 RESET (pin1) z pullupem (4,6k do VCC) do pin10 w arduino
  • attiny85 VCC do 5V w arduino
  • attiny85 GND do GND w arduino

Adapter usb do portu szeregowego (FT232RL): pozwala nam to sprawdzić port szeregowy

  • attiny85 PB0 (pin5 RX) do TX w FT232RL
  • attiny85 PB2 (pin7 TX) do RX w FT232RL
  • attiny85 GND (pin4) do GND na FT232RL
  • ponieważ attiny85 jest już zasilany przez arduino, nie musisz podłączać 5V do FT232RL, w przeciwnym razie podłącz: attiny85 VCC (pin8) do 5V na FT232RL

przejściówka usb na szereg (FT232RL) tylko do kalibracji zegara (tylko dla bootloadera "ATtiny85 @ 8MHz (wewnętrzny oscylator; BOD wyłączony)")

  • PB4 (pin3 RX) do TX w attiny FT232RL85
  • PB3 (pin2 TX) do RX w attiny FT232RL85
  • GND (pin4) do GND na FT232RL
  • ponieważ attiny85 jest już zasilany przez arduino, nie musisz podłączać 5V do FT232RL, w przeciwnym razie podłącz: attiny85 VCC (pin8) do 5V na FT232RL

Jeśli używasz kryształu 16Mhz, podłącz go do pinów Attiny85 PB3 (pin2) i PB4 (pin3) i podłącz każdy pin do GND przez zaślepkę 22pF.

Filtr Attiny85 VCC z kondensatorami 0,1uF i 10uF łączący je równolegle z GND

Podłącz pin wyjściowy czujnika podczerwieni do attiny85 PB1 (pin6), włącz go.

Zbuduj i podłącz interfejs usb:

  • GND (czarny przewód): podłącz go do wspólnego GND (wszystkie masy są połączone razem)
  • D- (biały przewód) podłączony do attiny85 PB0 (pin5) przez rezystor 68R, podłącz go również do masy przez Zenera 3,6V 0,5W i podciągnij do VCC z rezystorem 1,5K
  • D+ (zielony przewód) podłączony do PB2 przez rezystor 68R, podłącz go do masy przez Zenera 3.6V 0.5W
  • 5V, możesz zostawić go niepodłączony, ponieważ wszystko jest zasilane przez Arduino na tym etapie, w przeciwnym razie podłącz go do attiny85 VCC

Diody Zenera są połączone tak, że anody są połączone z GND, a katody są połączone z liniami danych D+ i D-.

Krok 3: Ostateczny projekt

Ostateczny projekt
Ostateczny projekt
Ostateczny projekt
Ostateczny projekt
Ostateczny projekt
Ostateczny projekt

Do ostatecznego projektu można użyć płyty perforowanej z elementami przewlekanymi lub wytrawić własną płytkę i użyć elementów smd. Aby dowiedzieć się, jak wytrawić tablicę, po prostu ją wygoogluj, dostępne są niesamowite samouczki online.

Wytrawiłem własną deskę i jestem bardzo zadowolony z efektu końcowego (mała, stabilna i wytrzymała deska). Tak, wiem, że cięcie jest do bani, ale tak późno w nocy nie mogłem użyć żadnego elektronarzędzia, a ja po prostu przetnij deskę moimi nożyczkami do blachy.

Nawiasem mówiąc, ślady na obrazach nie są nagą miedzią, zostały potraktowane paskudnym środkiem chemicznym, który lekko cynuje miedź (podejrzewa się, że wywołuje raka, więc używaj go z wielką ostrożnością, lateksowe kule i maska przeciwpyłowa):

Użyj powyższych schematów, aby zaprojektować swój układ lub możesz po prostu użyć mojego śladu PCB, aby wytrawić swoją tablicę.

Krok 4: Radzenie sobie z oprogramowaniem

Obwód w tym projekcie jest bardzo prosty, zamiast tego oprogramowanie wymaga większego wysiłku.

Aby to zadziałało, potrzebujemy co najmniej 2 bibliotek (jedna więcej, jeśli nie używasz kryształu) oraz 2 programów ładujących. Kiedy zaczynałem ten projekt, testowałem kilka bibliotek, czasami nie działały, a wiele razy po prostu nie były skonfigurowane do pracy z Attiny85 po wyjęciu z pudełka (jeszcze tego nie wiedziałem). Potem znalazłem problemy z nakładającymi się przerwaniami bibliotek / bootloaderów. W końcu musiałem uporać się ze sporą ilością błędów, kiedy podłączałem końcowy obwód do mojego komputera. Nie miałem jednak tego przewodnika, więc myślę, że wszystko będzie w porządku, po prostu postępuj zgodnie z instrukcjami w tej instrukcji, jeśli zrobisz to bez popełniania błędów, powinno być dobrze:)

Musimy teraz zainstalować i skonfigurować kilka bibliotek:

  • v-usb dla biblioteki arduino: ta biblioteka umożliwia rozpoznanie mikrokontrolera przez komputer jako klawiatury USB HID, a my użyjemy jej do wysyłania uderzeń klawiszy do komputera. Ta biblioteka wymaga pewnych zmian, aby była kompatybilna z attiny85
  • Biblioteka tinytuner tylko wtedy, gdy nie będziesz używać kryształu 16Mhz. Będziesz musiał wtedy skalibrować wewnętrzny zegar mikrokontrolera. Ta biblioteka działa po wyjęciu z pudełka.
  • Biblioteka Attiny-IR do interakcji z czujnikiem podczerwieni. Ta biblioteka działa po wyjęciu z pudełka.

Potrzebujemy również 2 bootloaderów:

  • Wersja oprogramowania dla psa z dostępnym interfejsem szeregowym. Ten bootloader wymaga niewielkiego ulepszenia do pracy z attiny85, ponieważ używa timera1 dla funkcji millis() i nie będzie działał z biblioteką IR. Musimy zmienić timer na timer0.
  • Wersja Mellis, stabilny bootloader, z którego będziemy korzystać w końcowej fazie. Działa to po wyjęciu z pudełka.

Krok 5: Instalacja i konfiguracja biblioteki V-usb

Pobierz bibliotekę z https://code.google.com/archive/p/vusb-for-arduin… Rozpakuj plik i skopiuj folder library/UsbKeyboard do folderu bibliotek szkicownika.

Teraz musisz edytować kilka plików, aby były kompatybilne z ATtiny85 (jest skonfigurowany do pracy z arduino):

A) edytuj usbconfig.h:

pod zmianą „Konfiguracja sprzętu”:

#define USB_CFG_IOPORTNAME Dto##definiowanie USB_CFG_IOPORTNAME B

oraz

#define USB_CFG_DMINUS_BIT 4do#define USB_CFG_DMINUS_BIT 0

w sekcji „Opcjonalna konfiguracja sprzętu” zmień:

#define USB_CFG_PULLUP_IOPORTNAME Dto##definiowanie USB_CFG_PULLUP_IOPORTNAME B

Aby stworzyć pełną specyfikację "HID zgodnego z rozruchem" (w przeciwnym razie żadne klawisze multimedialne nie będą działać), zmień także:

#define USB_CFG_INTERFACE_SUBCLASS 0 // Bootto#define USB_CFG_INTERFACE_SUBCLASS 0x01 // Boot

oraz

#define USB_CFG_INTERFACE_PROTOCOL 0 // Klawiatura do#define USB_CFG_INTERFACE_PROTOCOL 0x01 // Klawiatura

Opcjonalnie możesz również zmienić producenta i nazwę urządzenia w następujących definicjach:

#define USB_CFG_VENDOR_NAME

#define USB_CFG_DEVICE_NAME

B) edytuj UsbKeyboard.h:

reszta:

PORTU = 0; // DO ZROBIENIA: Tylko dla pinów USB?DDRD |= ~USBMASK;

do

PORTB = 0; // DO ZROBIENIA: Tylko dla pinów USB?DDRB |= ~USBMASK;

Aby zezwolić na zmianę kodów dalej niż 101:

0x25, 0x65, // LOGICAL_MAXIMUM (101) do:0x25, 0xE7, // LOGICAL_MAXIMUM (231)

oraz

0x29, 0x65, // USAGE_MAXIMUM (aplikacja klawiatury) do:0x29, 0xE7, // USAGE_MAXIMUM (aplikacja klawiatury)

Być może będziesz musiał edytować również te 3 pliki:

usbdrv.husbdrv.cUsbKlawiatura.h

i za każdym razem, gdy zobaczysz PROGMEM dodaj "const" przed nazwą typu zmiennej (np.: PROGMEN char usbHidReportDescriptor[35] ==> PROGMEM const char usbHidReportDescriptor[35])

Jeśli nie jest to jasne, odwiedź

Możesz uniknąć wszystkich tych zmian, jeśli po prostu pobierzesz załączoną bibliotekę (sam wprowadziłem wszystkie te zmiany) i po prostu rozpakujesz ją do folderu bibliotek szkicownika:

UsbKeyboard skonfigurowany dla attiny85

Edycja: niedawno odkryłem, że Alejandro Leiva (https://github.com/gloob) zajął się tą biblioteką i wydaje się, że działa również dobrze. Możesz również wypróbować jego wersję z niezbędnymi zmianami, które wprowadziłem, aby działała z attiny, więc jeśli chcesz to sprawdzić, po prostu wyodrębnij ją do folderu bibliotek szkicownika.

UsbKeyboard skonfigurowany dla attiny85 (wersja Alejandro Leiva)

Krok 6: Instalacja bibliotek Attiny-IR i Tinytuner

A) Biblioteka Attiny-IR:

pobierz go z https://drive.google.com/open?id=0B_w9z88wnDtFNHlq… a następnie rozpakuj go do folderu bibliotek szkicownika.

B) Biblioteka Tinytunera:

Jest to potrzebne tylko wtedy, gdy nie używasz kryształu 16Mhz, ale uwierz mi, mimo że działa również bez kryształu, jest z nim znacznie stabilniejszy i kosztuje kilka centów, więc zachowaj prostotę, użyj kryształu i pomiń tę bibliotekę.

Nie jesteś jeszcze przekonany? ok, pobierz bibliotekę z https://storage.googleapis.com/google-code-archive… a następnie rozpakuj ją do folderu bibliotek szkicownika.

Skończyliśmy z bibliotekami, teraz przechodzimy do instalacji bootloaderów.

Krok 7: Instalacja i konfiguracja bootloaderów

Zamierzamy zainstalować dwa bootloadery, z których jeden Mellis jest według mojego doświadczenia bardziej stabilny i użyjemy go w końcowym szkicu. Drugi, opracowany przez Rowdy Dog Software, jest niesamowitym rdzeniem, bardzo mały i z dostępnym zintegrowanym interfejsem szeregowym, ale po pewnym czasie mój pilot uległ awarii, więc użyjemy tego bootloadera tylko do skalibrowania wewnętrznego zegara attiny85 i odkodowania naszego pilota guziki.

Wiem, że są dostępne biblioteki dające możliwości portu szeregowego attiny85, ale wtedy będziesz musiał dostosować biblioteki, które używają obiektu szeregowego… Bardziej podoba mi się ta procedura.

Zacznijmy od instalacji:

A) Program ładujący Mellis:

po prostu otwórz preferencje Arduino IDE i dodaj „Additional Boards Manager URLs:

raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Następnie otwórz menedżera płyt Arduino IDE i wyszukaj attiny, zainstaluj płyty z Mellis. Teraz powinieneś zobaczyć identyfikator Arduino dla płyt ATtiny25/45/85 i ATtiny24/44/84.

B) Mały bootloader Rowdy Dog Software:

pobierz bootloader z

Rozpakuj plik i skopiuj mały folder do swojego szkicownika/sprzętu (utwórz ten folder, jeśli jeszcze nie istnieje). następnie przejdź do folderu sketchbook/hardware/tiny/avr/ i:

1) skopiuj plik Prospective Boards.txt do pliku boards.txt

2) edytuj plik platform.txt i wprowadź kilka zmian:

Odkomentuj zmienną compiler.path i pozostaw ją wskazującą na folder hardware/tools/avr/bin/ wewnątrz folderu instalacyjnego arduino:

compiler.path={ŚCIEŻKA_DO_TWOJEGO_FOLDERU_ARDUINO}/sprzęt/narzędzia/avr/bin/

change alsocompiler. S.flags=-c -g -assembler-with-cpptocompiler. S.flags=-c -g -x assembler-with-cpp

Następnie zmień następujące zmienne, upewniając się, że wszystko jest na swoim miejscu (te pliki muszą istnieć, w przeciwnym razie wskaż zmienne na właściwe ścieżki):

tools.avrdude.cmd.path={runtime.ide.path}/sprzęt/tools/avr/bin/avrdude

tools.avrdude.config.path={runtime.ide.path}/hardware/tools/avr/etc/avrdude.conf

tools.avrdude.cmd.path.linux={runtime.ide.path}/hardware/tools/avr/bin/avrdude

tools.avrdude.config.path.linux={runtime.ide.path}/hardware/tools/avr/etc/avrdude.conf

3) edytuj plik cores/tiny/core_build_options.h i zmień:

#define TIMER_TO_USE_FOR_MILLIS 1 do#define TIMER_TO_USE_FOR_MILLIS 0

Jest to bardzo ważne, w przeciwnym razie odbiornik IR wypisze zera dla każdego przycisku. Ta instrukcja konfiguruje timer0 dla funkcji millis() pozostawiając timer1 dostępny dla biblioteki IR. Ostateczny szkic i tak wyłączy timer0, więc nie będziesz mieć dostępnych funkcji millis() i delay(). Zamiast tego możesz mieć dostępną funkcję delayMicroseconds().

Ten bootloader jest minimalny, ale zawiera obsługę obiektów Serial:

Attiny85 PB2 (pin7) to TX, a PB0 (pin5) to RX

Możesz mieć konfigurację z programatorem ISP (arduino) i adapterem szeregowo-usb podłączonym w tym samym czasie, dzięki czemu nie musisz zbyt często zmieniać przewodów:

Teraz mamy zainstalowane i poprawnie skonfigurowane zarówno biblioteki, jak i bootloadery, najcięższa praca jest zakończona i możemy zacząć testować.

Krok 8: Nagrywanie programów ładujących i przesyłanie szkiców

Gorąco radzę aktywować pełne wyjście w preferencjach Arduino IDE, aby można było rozwiązać każdy ewentualny problem.

Aby nagrać bootloader do Attiny85 należy wgrać przykład ISP do Arduino, a następnie wybrać programator Arduino jako ISP.

Teraz umieść kondensator 10uF między pinami resetu i masy na arduino (nie jest potrzebny do procesu wypalania, ale służy do wgrywania szkiców do attiny85).

Teraz arduino jest gotowe do nagrywania bootloaderów i ładowania szkiców. Wystarczy wybrać odpowiednią deskę zgodną z Twoim atutem i ją wypalić.

Aby załadować szkic do Attiny85, załaduj go do arduino IDE i kliknij „Prześlij za pomocą programatora”.

WAŻNE: podczas przesyłania szkicu są 3 kroki, kompilacja, pisanie i weryfikacja. Jeśli kompilacja i pisanie przebiegły pomyślnie, ale proces weryfikacji nie powiedzie się, możliwe, że szkic i tak zadziała.

Krok 9: Skalibruj wewnętrzny zegar Attiny85 (pomiń to, jeśli używasz kryształu)

Jeśli zdecydujesz się nie używać kryształu 16Mhz, musisz skalibrować swój zegar attiny85, więc będziemy potrzebować bootloadera z dostępnym interfejsem szeregowym i użyjemy biblioteki tinytuner, aby uzyskać poprawną kalibrację.

Wykonaj kolejne kroki

  • wybierz pod narzędziami Arduino jako programista ISP
  • wybierz płytkę "ATtiny85 @ 8MHz (oscylator wewnętrzny; BZT wyłączony)"
  • Zakładam, że masz gotowe połączenie ISP, jak opisano przed połączeniem, w przeciwnym razie wykonaj połączenia
  • nagraj bootloader
  • ten bootloader skonfigurował różne piny dla interfejsu szeregowego, użyj tej konfiguracji tylko dla bieżącego bootloadera

- PB4 (pin3 RX) do TX w FT232RL attiny85 - PB3 (pin2 TX) do RX w FT232RL attiny85 - GND (pin4) do GND w FT232RL ponieważ attiny85 jest już zasilany przez arduino, którego nie trzeba podłączać 5v na FT232RL, w przeciwnym razie podłącz: attiny85 VCC (pin8) do 5V na FT232RL

  • wgraj przykład tinytuner do attiny85
  • otwórz program screen, aby monitorować komunikację szeregową: screen /dev/ttyUSB0 9600
  • zresetuj attiny85 podłączając pin RESET (pin1) do GND (tylko chwila), na ekranie powinien pojawić się komunikat powitalny
  • Kontynuuj wysyłanie pojedynczych znaków „x” (bez powrotu karetki; bez wysuwu wiersza) aż do zakończenia kalibracji
  • zanotuj gdzieś wartość kalibracji (OSCCAL = 0x). Jest to wartość, którą będziesz musiał zadeklarować na końcowych szkicach

Krok 10: Odkoduj swoje przyciski pilota

Teraz nadszedł czas, aby zdekodować nasze przyciski pilota i przypisać je do określonych naciśnięć klawiszy w komputerze, w tym celu wykonaj następujące kroki:

  • wybierz płytkę "ATtiny85 @ 16 MHz (wewnętrzny PLL; 4.3V BOD)" jeśli nie używasz kryształu, "ATtiny85 @ 16 MHz (zewnętrzny kryształ; 4.3 V BOD" w przeciwnym razie wypal ją
  • załaduj szkic:
  • Jeśli nie używasz kryształu, odkomentuj wiersz zawierający zmienną OSCCAL i przypisz go do wartości, którą znalazłeś podczas kalibracji zegara
  • Zakładam, że czujnik jest podłączony jak opisano wcześniej, w przeciwnym razie podłącz go
  • Zakładam również, że jest podłączony adapter szeregowy FT232RL na usb, w przeciwnym razie podłącz go
  • zresetuj attiny85 podłączając pin RESET (pin1) do GND (chwila)
  • naciśnij kilkakrotnie przyciski pilota i sprawdź okno ekranu, musisz opisać ostatnią liczbę dla każdego rekordu, każdy przycisk może generować 2 różne liczby

Przykład:

OTRZYMAŁEM D44 3396 OTRZYMAŁEM 544 1348

Zanotuj 3396 i 1348 w związku z przyciskiem, który właśnie nacisnąłeś, a następnie musisz zdecydować, co chcesz z tym przyciskiem zrobić. Na przykład mógłbym chcieć, aby ten przycisk wysłał multimedialny kod dostępu „Zwiększenie głośności”, a następnie muszę znaleźć identyfikator tego kodu. Aby to zrobić, pobierz plik PDF:

Poszukaj sekcji „Klawiatura/Strona klawiatury” na stronie 53 i użyj liczb w kolumnie Identyfikator użytkowania (grudzień), aby powiązać przyciski pilota z kodami klawiatury. W naszym przykładzie widzimy, że kod klawisza „Zwiększanie głośności” to: 128.

Edytuj plik UsbKeyboard.h wewnątrz biblioteki UsbKeyboard z pakietu v-usb, który zainstalowaliśmy wcześniej i dodaj do istniejących definicji, jeśli jeszcze go tam nie ma:

#define KEY_VOL_UP 128

Kiedy skończymy ze wszystkimi przyciskami pilota/s i wszystkie definicje w pliku UsbKeyboard.h są gotowe, możemy przejść do ostatniego kroku.

Krok 11: Ładowanie ostatecznego szkicu i mam nadzieję na najlepsze

Wczytuję ostateczny szkic i mam nadzieję na najlepsze!
Wczytuję ostateczny szkic i mam nadzieję na najlepsze!
Wczytuję ostateczny szkic i mam nadzieję na najlepsze!
Wczytuję ostateczny szkic i mam nadzieję na najlepsze!

Mamy teraz zdekodowane wszystkie przyciski pilota, plik UsbKeyboard.h jest wypełniony naszymi kodami klawiszy, więc teraz możemy załadować do arduino IDE ostateczny szkic z:

github.com/venumz/ATtiny85-USB-IR-odbiornik…

Ten plik jest dokładnie tym plikiem, którego używam w moim odbiorniku, i działa z 2 różnymi pilotami, więc oczywiście musisz go zaktualizować, aby móc pracować z pilotami.

Jeśli nie używasz kryształu, odkomentuj wiersz zawierający zmienną OSCCAL i przypisz go do wartości, którą znalazłeś podczas kalibracji zegara

Zauważ, że w funkcji pętli jest wiele takich instrukcji:

if(results.value==3405 || results.value==1357) { //strzałka w górę

if(lastStroke!=results.value) UsbKeyboard.sendKeyStroke(KEY_ARROW_UP);

}

Musisz tworzyć własne zestawienia, po jednym na każdy przycisk na pilocie. W warunku "if" musisz umieścić w results.value wartości, które znalazłeś dekodując pilota, a jako argument metody UsbKeyboard.sendKeyStroke musisz umieścić jeden z już zdefiniowanych kodów klawiszy w pliku UsbKeyboard.h.

Warunek " if(lastStroke!=results.value) " jest potrzebny, ponieważ niektóre piloty wysyłają ten sam kod dwa razy na trafienie, co zapobiega drugiemu trafieniu. Nie jestem do końca pewien i może to zależeć od protokołu IR, który został zaprogramowany w twoim pilocie (tak naprawdę nie jestem ekspertem w zakresie protokołów IR), ale zgodnie z moim doświadczeniem z moimi własnymi pilotami, każdy przycisk może generować 2 różne kody i gdy naciśniesz i przytrzymasz przycisk, wysyła ten sam kod, ale jeśli naciśniesz przycisk ponownie, wysyła drugi. Wygląda więc na to, że kody są wysyłane w alternatywny sposób, myślę, że jest to standardowy tryb, aby wiedzieć, ile razy naprawdę naciśniesz przycisk.

Ok, prawie skończyliśmy, po prostu wgraj ostateczny szkic, podłącz go do komputera i zobacz, jak idzie.

W tym kroku lepiej jest odłączyć zarówno arduino, jak i adapter USB do portu szeregowego, a dopiero potem podłączyć USB do portu komputera (w przypadku, gdy coś pójdzie nie tak, obwód będzie łatwiejszy do debugowania).

Jeśli wszystko działało dobrze, po otwarciu terminala i wysłaniu polecenia dmesg powinieneś zobaczyć coś podobnego do pierwszego obrazu w tym kroku. Jeśli wystąpiły problemy, powinieneś mieć błędy takie jak te z drugiego obrazu i musisz rozpocząć debugowanie obwodu i/lub oprogramowania. Jednym ze źródeł początkowych błędów, które miałem, był koncentrator USB, który nie działał z moim odbiornikiem podczerwieni (choć inne działały)… więc lepiej w tym ostatnim kroku podłączyć odbiornik podczerwieni bezpośrednio do portu komputera. Ewentualne błędy mogą być trudne do znalezienia, ale w końcu, tak jak ja, wiele się nauczyłbyś i cena jest tego warta, zapewniam Cię.

To wszystko ludzie, daj mi znać, jeśli zauważysz jakiekolwiek błędy w tej instrukcji i ciesz się swoim nowym odbiornikiem IR USB!

Zalecana: