Stap 6: Programma IR-LED controller
De ATMega328P-chip wordt ook op grote schaal gebruikt in vele Arduino systemen met inbegrip van de meest voorkomende Arduino UNO. Dit geeft ons gemakkelijke toegang tot een I2C gecontroleerd IR LED externe gewoon door het ontwikkelen van de code op een normale Arduino UNO (met al zijn bibliotheken en mogelijkheden) en later het overbrengen van het programma naar onze SMD-variant van de ATMega IC. Ik gebruikte de IR-afstandsbediening bibliotheek ontwikkeld Ken Shirriff die u vindt hier. Deze zeer nuttig stukje code vereenvoudigt de 38 kHz signaal generatie en de timing te sturen het juiste signaal naar een paar eenvoudige lijnen van code en op het einde heb je alleen om aan te geven welke numerieke code die u wilt verzenden met een specifiek protocol. Om te zoeken naar de juiste code en het protocol kunt u bijvoorbeeld de awesome tutorial gepubliceerd door adafruit.
In mijn geval, de volgende codes worden verzonden via het NEC-protocol waarmee de lamp:
Zet LED licht op: 0xFFE01F (32 bits)
Zet LED licht wit: 0xFFD02F (32 bits)
LED power opdagen: 0xFFA05F (32 bits)
LED power afslaan: 0xFF20DF (32 bits)
LED licht uit te schakelen: 0xFF609F (32 bits)
Dus als u wilt voor voorbeeld de lamp inschakelt, gebruikt u de volgende coderegel in de Arduino ontwikkeling motor:
irsend.sendNEC(0xFFE01F, 32);
In mijn geval wilde ik de ATMega te luisteren op de I2C adres 8 voor een numerieke code die zal dan worden verzonden met behulp van de IR-LED in de NEC-formaat. Dus als ik wil een nieuwe code op te nemen, heb ik toe te voegen (bijvoorbeeld via SSH via een Wi-Fi verbinding) aan het script dat wordt uitgevoerd op het Edison bord dat veel eenvoudiger is dan te herprogrammeren de IC binnen de klok. Ik heb ook de broncode, alsmede een kopie van de binaire hex bestand voor het programmeren van de IC in deze stap.
Echter, je nog steeds te dragen van het startprogramma op uw IC van de ATMega-gesoldeerd op het bord. Om dit te vergemakkelijken de Raad van bestuur beschikt over een speciale SPI-connector zoals aangegeven in de eerste foto. U hoeft alleen een paar stukken van draad, een Arduino board en de gratis winavr softwarepakket.
Allereerst de Arduino aansluiten op de computer en het uploaden van het gegeven in de sectie Voorbeeld van uw Arduino SDK ArduinoISP-programma. Vervolgens sluit de Arduino pinnen in de code aan de juiste pinnen op het power bord gegeven. Als u van een Arduino UNO gebruikmaakt moeten de volgende aansluitingen worden gemaakt:
Arduino -> vermogen bestuur
GND -> GND
5V -> 5V
D10 -> RST
D13 -> SCK
D12 -> MISO
D11 -> Hasselt
Daarna kunt u een opdrachtregel op uw computer openen en controleren of de IC reageert. Na de volgende opdracht te typen moet u zien een antwoord geven u het serienummer en zekeringen van de IC (zoals in de 2e afbeelding). U moet vervangen COM # met de werkelijke seriële poort die uw Arduino is aangesloten (zoals rechtsonder in uw Arduino SDK).
avrdude -v -c avrisp -p m328p -b 19200 -P COM# -n
Als u van een "vers" IC gebruikmaakt hebt u om het te vertellen nu te gebruiken het kwartskristal 16 MHz als de input van een klok. Dit wordt gedaan door het instellen van de zogenaamde "zekeringen" (Zie 3e foto). Wees zeer voorzichtig in deze stap de juiste zekering instellen zoals hierboven vermeld. Anders, zou u uw IC-uitgevallen renderen.
avrdude -v -c avrisp -p m328p -b 19200 -P COM# -U lfuse:w:0xff:m -U hfuse:w:0xd9:m -U efuse:w:0x04:m
Als alles tot nu toe heeft gewerkt, kunt u uw programma op de ATMega uploaden. Je moet de "Hexuitdraai" bestand gegenereerd door de Arduino SDK tijdens het compileren van de code. Door de uitgebreide uitvoer inschakelen tijdens de compilatie (Arduino SDK opties) zult gemakkelijk kunnen vinden van de tijdelijke map waarin de hex-bestand is opgeslagen. Als alternatief kunt u het bestand van de "I2CRemote.cpp.hex" ik samen met de broncode geleverd. Houd echter in gedachten dat het alleen het IR signaal via het NEC-protocol stuurt. Voor het uploaden van het programma op de IC-type:
avrdude -v -c avrisp -p m328p -b 19200 -P COM# -U flash:w:I2CRemote.cpp.hex
U hebt nu volledige functionele IR afstandsbediening die u kunt activeren en controle door uw bestuur van Edison.