En komplett starter guide till AVRs (7 / 10 steg)

Steg 7: IR-fjärrkontroller



Med min brandvarnare projekt, jag hade en plan att ha en funktion där du kan tillfälligt inaktivera alarmet via fjärrkontroll, för när födelsedagstårtan kommer ut till exempel.

Så började jag med att efter ladayada IR tutorial:
http://www.Ladyada.net/Learn/sensors/IR.html

Det var ett riktigt snabba sätt att få in IR och jag är varierar mycket tacksam för det, men den är konstruerad med en rymlig arduino i åtanke och jag arbetade med en ATtiny2313 som inte har någonstans nära nog RAM att göra jobbet.

Med hennes skiss med en liten fjärrkontroll som jag hade liggande jag registreras på strömbrytaren och fick detta:
int PowerSignal [] [2] = {
ON, OFF (i 10 mikrosekunder)
{1138, 574},
{66, 76},
{66, 78},
{68, 70},
{70, 76},
{66, 76},
{68, 74},
{68, 78},
{68, 210},
{72, 216},
{68, 214},
{70, 216},
{78, 206},
{70, 214},
{70, 216},
{70, 216},
{68, 72},
{74, 72},
{68, 216},
{68, 76},
{66, 78},
{70, 214},
{68, 78},
{66, 72},
{70, 74},
{68, 216},
{74, 70},
{68, 214},
{72, 216},
{72, 68},
{74, 214},
{66, 216},
{70, 214},
{72, 5014},
{1134, 292},
{62, 5532},
{1142, 294},
{58, 0}};

38/på par, några av dem för stor för en enda byte, så om jag skulle göra så här jag skulle behöva 152 byte.
Jag hade nog blixt, även om det skulle ta en bra mängd utrymme jag kunde avvara det, men om jag skulle spela in de inkommande signalerna som det jag skulle blåsa min RAM budget utan att ens överväga andra saker jag behöver RAM för.

Jag kunde ha kontrollerat koden som kom in, men sedan timing blir lite svårt.

Jag tänkte på det för ett tag och jag märkte ett mönster i min IR-kod.
Signalerna var antingen mindre än 1ms eller de var större.
Använda ladyada's kod, hade det en tolerans på 20%, vilket skulle innebära att någon av de låga siffror skulle matcha varandra.
Det fanns i princip ingen skillnad mellan en 680 och 780 mikrosekunder, med toleransen.

Det var ett liknande fall för den större då 1ms värden, det finns några undantag, men de flesta passar regeln.

Tänkte jag, vad händer om jag behandla dem som enda bitar, 0.. då 1ms och en 1 om det var större.

Packade i sånt kom jag upp med detta:
11000000 = 0xC0
00000000 = 0x00
01010101 = 0x55
01010101 = 0x55
00000100 = 0x04
00010000 = 0x10
00010001 = 0x11
01000101 = 0x45
01011101 = 0x5D
1100

Efter att ignorera den senaste nibble (halv ett byte) jag kunde lagra den inkommande signalen på en gång i endast 9 byte, och jämför signalen skulle bara ta upp 9 också!
Om jag ville ha fler funktioner skulle inte jag vara ont om flash för att lagra koder och är så små att de kunde lätt ha förvarats i EEPROM om jag behövde.

Ytterligare en fördel var att kontrollera om koden matchade var ingen mer sedan 9 enkla byte jämförelser.

Ta en titt på den bifogade uppförandekoden.

På toppen finns det en uppsättning definierar blir koden enklare att följa och upprätthålla.
Efter det är mönstret ovan nämnda, lagras som en röding och anges hexadecimalt.
Allt annat är i grunden i listenForIR-funktion som kallas kontinuerligt från den huvudsakliga loopen.
Observera, detta är bara enkla demo kod, i ett sista projekt kommer du att använda ett avbrott för att vakna när IR upptäcker något.
Jag har en version av koden som gör detta.

Så, hur fungerar listenForIR?
Kan bryta ner.

Vi börjar med ett tag loop som försöker få 9 byte data från IR.
Vi börjar genom att ställa in timern till en 256 prescaler.
På 1MHz kan oss tid upp till 65ms utan att flöda över.

IR-mottagare hålla data pin hög standard kommer låga när en pulsbreddsmodulerad signal tas emot.
Så vi väntar tills vi får en låg, och om vi tar längre tid då 56ms väntar vi lösa ut.

När vi har en låg vi behöver tid, men vi behöver inte tid så länge som tidigare och vi kunde använda en högre nivå av Exakthet, så ändrar vi prescaler till 8.
Om låga hålls för längre sedan 1ms, då vi hoppa ut, annars slutar öglan tidigt som stiftet går hög.

Den nästa bit kod har en nice användning av bitvis operationer som låter oss hålla reda på ändringar snabbt och billigt (billig cpu och minnesanvändning):

current_byte << = 1;
current_byte | = staten.
While(IR_LOW); vid en låg längre då ovanstående timeout

Vi börjar genom att flytta alla bitar kvar.
Vi sedan eller värdet av antingen 1 eller 0, som lägger sitt värde för LSB (minst signifikanta biten).
Vi sedan vänta, incase det var en lång låg som vi hoppade ut på tidigare.

Vi gör sedan samma sak för den höga delen av koden.

När vi har alla 8 bitar (4 par låg & hög), vi lagra det och börja om igen.

Förutsatt att vi får alla 9 byte, vi avsluta loopen och helt enkelt jämföra den mot vår kod.
Om de alla matchar växla vi LED.

Se Steg
Relaterade Ämnen

Min Guide till AVR Transistortesters

Om du är en elektronik hobby sedan är AVR Transistortesters den största sak sedan skivat bröd! Varför om Ron Popiel levde han skulle hawking dessa natt och dag på Shopping nätverket. Men ibland finns det något sådant som för mycket av goda. Sortering...

Kompletta idioter guide till rc flygplan flyger

i detta instructables, jag kommer att visa dig hur till och vad du kommer att behöva bygga en modellflygplan. Jag ska berätta hur man bygger och reparerar ett rc plan. Nu kan börja med teorin, flygplan kan flyga på grund av sina vingar form, de är of...

Quick Start Guide till 3Doodler 2.0

Steg 1: Att lära känna 3Doodler 2.0 Steg 2: Slå på den Till vända den på plug in den och sedan flytta växeln till hög eller låg. (PLA/trä) lo (ABS, Flexy) högSteg 3: Vänta för ljus för att indikera den är redo Om du ställer in det för "lo" ljuse...

Guide till få Epic Helander skrivbordsunderlägg

Här är den kompletta Ultimate Guide till att få episka Helander skrivbordsunderlägg (detta är för din dator!) =)Steg 1: Wll behöver du:En dator, mac eller windows är absolut bra, så du kan använda någon jag använder windows men mac är mycket lik så d...

Din kompletta Guide till Minecraft PE

så, naturligtvis, jag gjorde min typiska bläddra-igenom cykel av Instructables, som jag bara om en gång i timmen eller så, när jag såg en av mina favorit medlemmar hade postat nyligen ännu ett Minecraft tutorial (denna medlem var Austydude). Jag klic...

En nybörjares guide till Arduino

Efter några år av experimentera med Arduino, beslutade jag att det är dags att dela den kunskapen har jag fått. Så jag här går, en guide till Arduino, med nakna grunderna för nybörjare och lite mer avancerade förklaringar för personer som är något me...

Alltid aktuell Guide till Ubuntu

Hej killar! Detta är det alltid uppdaterat Guide till Ubuntu. Det kommer att uppdateras med varje ny version av Ubuntu. Den nuvarande utgåvan är Ubuntu 13.04 Raring Ringtail. Nästa utgåva, 13.10 uppkäftig Salamander, beror den 17 oktober eller så. Om...

Arduino VFD Display klocka handledning - en Guide till VFD displayer

... + Lite om VFDsMinns du (fortfarande) visning av din gamla CD-spelare, HiFi system eller bil radio? Har du någonsin märkt displayerna används på din lokala mataffär som visar du skannade objektet och priset för det?Dessa skärmar har en karakterist...

Starta guiden till att bygga ett omvänd osmos hydroponics filter

Hej alla, detta är en grundläggande guide till planering ut en RO (omvänd osmos) och hydroponics vattenfilter. Detta instructable kommer att ge några grundläggande steg, personliga erfarenheter och information du behöver att hjälpa dig bygga ett RO h...

Grundläggande Guide till Flux kärnhus bågsvetsning

Hej och Välkommen till SLO Makerspace guide till Flux kärnhus bågsvetsning! Detta Instructable syftar till att lära dig att använda Lincoln Weld Pak HD flux Metallpulverfylld båge svetsare. Denna maskin är är en av de mest grundläggande svetsare till...

Guide till Nerf

jag vet, jag vet, alla mod NERF vapen att göra dem mer kraftfull och skjuta längre. Dock om du var i ett NERF krig, inte skulle du förmodligen kunna använda dem. Jag skrev detta som en guide till NERF krig sedan bara guider redan ute finns för mods....

En Guide till Raspberry Pi Arduino kommunikation i inbyggda system

Det här är en guide till olika metoder för kommunikation mellan Raspberry Pi och Arduino. Denna guide är skapad av allt jag lärt mig från inrättandet av en kapacitet skog. Inlägget av projektet kan ses, en video av projektet kan ses här, och dokument...

En vetenskapsman Guide till Citizen Science

Den underbara rouzejp var vänlig nog att översätta denna guide till franska. Läs den här!Le merveilleux rouzejp en eu la gentillesse de traduire ce guide sv français. Lisez-le ici!Citizen science är i ropet just nu, som det ska vara!Dock kan det vara...

Nexus 7 Wifi (2013, Flo, Razor) - Guide till firmware installationer och flera ROM

Jag investerat mycket tid och försökte göra det så enkelt som möjligt, så Läs den information som tillhandahålls helt innan du börjar att bråka med din enhet.Infos här kan användas på modeller också, särskilt från Nexus-serien.Men du måste använda mo...

Omfattande Guide till elektroniska brödunderläggen: en Meta Instructable

Brödunderläggen vet ibland som prototyping styrelser eller proto styrelser är ett snabbt sätt att arbeta upp och experimenterar med elektroniska kretsar. Set av brödunderläggen kretsar var ursprungligen kretsar byggd på riktigt trä brödunderläggen. V...

Den samverkande Guide till spela leda gitarr

detta är en guide till att spela gitarr. Eftersom jag är en aktiv medlem, och Danny's instructable är oavslutad (och i något förlägger verkligen innacurate, t.ex.. hans flikar var upp och ner), beslöt jag att göra en av mina egna till höger hans miss...

En Super vaga Guide till brygga öl

En Super vaga Guide till brygga ölInga detaljer men om du letar efter en allmän uppfattning om vad som händer i hem brygga öl sedan denna video är för dig...

En Pissheads Guid till varenda droppe

Steg 1: Saker du behöver 1 box vin1 par sax1 pissheadNär du tror du har slut på vin från ditt vin box tänka igen, snabb och enkel guide till få varenda droppeSteg 2: När vinet inte längre filtrerar från kranen slita öppna upp i rutan och ta bort påse...

A-Z Modding Guide till Nerf natt-Finder

här är en mod guide till om allt du kan mod på en nerf nightfinderMATERIALNight finderskruvmejselEpoxi (eller varmt lim)PVC-rör 1/8hacka sågDrilltångelastiskt bandBuzz bee enda skott våreno-ringarrörmokare tejpdartsmörjmedel (vaseline)skumpermanenta...