IR-biblioteket - fra idé til kode...  
All in one
Indledning
Overblik
RC-5 Protokollen
RC-6 Protokollen
IR-biblioteket
Projekt - Software
Projekt - Hardware
Projekt - Resultatet
Tilbage til...
Projekt kataloget
ibrefer.dk

Projekt: ”All in One”
Lys, lyd og billeder samlet i en...

Der er flere muligheder, når man skal ”læse” en kode afsendt fra en infrarød fjernbetjening. Hvis man studerer RC-5 og RC-6 protokollerne, så kunne man læse de enkelte bit i bit-strømmen ved at læse IR-føleren med passende mellemrum, når første bit i bit-strømmen detekteres. Denne teknik anvendes i almindelig seriel kommunikation (RS232). Men i modsætning til RS232 kommunikation, hvor signalet er enten højt eller lavt i hele bit-tiden for de enkelte bit, så anvendes der i RC-5 og RC-6 Manchester kodning. Det betyder at bit’et skifter signalniveau midt i bit-tiden for de enkelte bit. Hvis man vil læse IR-føleren med passende mellemrum, så stilles der store krav, idet bit’et kun har den rigtige værdi i den halve bit-tid. Svagheden ved denne måde at aflæse signalet på er, at man får en adaptiv fejl! Hvis vi f.eks. forestiller os at aflæsningsnøjagtigheden er på 5% og vi skal læse 19 bit (eks. RC-6: 3 mode-bit, 8 adr.-bit og 8 data-bit), så vil usikkerheden på det sidste bit være 95% (19 x 5%). Det er indlysende at der ofte vil opstå fejl, hvis denne teknik anvendes.

Da protokollerne anvender bi-fase eller Manchester kodning, så kan man lige så godt udnytte dette. Hvis man studerer de mulige bit kombinationer, der kan eksistere. Så ser man at der er 4 muligheder. Tegningerne skal forstås således:
A: hvis man læste et "1" og får en kort høj puls i slutningen af dette "1", så er det næste bit "1".
B: hvis man læste et "1" og får en lang høj puls i slutningen af dette "1", så er det næste bit "0".
C: hvis man læste et "0" og får en kort lav puls i slutningen af dette "0", så er det næste bit "0".
D: hvis man læste et "0" og får en lang lav puls i slutningen af dette "0", så er det næste bit "1".

Her kan man udnytte muligheden for at måle på korte/lange høje/lave pulser i hvert bit. På den måde opstår der ikke en adaptiv fejl og alle bit vil kunne læses korrekt, selv med en stor måle unøjagtighed. Her anvendes bit historikken til at afgøre hvordan der skal måles (høje eller lave pulser). Længden af disse pulser afgør det næste bit’s værdi. Ud fra de 4 situationer vist herover kan man nu opstille en tilstandsmaskine (vist herunder). Denne tilstandsmaskine er idégrundlaget for ”læsning” af RC-5 og RC-6 koder fra fjernbetjeningen.

Udover tilstandsmaskinen skal der naturligvis også være noget kode, der identificerer om der modtages RC-5 eller RC-6 kode. Dette gøres i starten, hvor de to protokoller kan skelnes fra hinanden v.h.a. start sekvensen. Her er RC-6 protokollens startpuls jo aktiv i 2,666 ms, hvor imod RC-5 protokollens startpuls kun er aktiv i 889 µs. Da RC-5 og RC-6 protokollernes modulation er lige omvendt af hinanden, så anvendes der også to separate tilstandsmaskiner til læsning af bit.
Men når der er taget højde for alle disse forhold, så kan det hele bygges sammen til en eneste funktion: wait4RC. Denne funktion venter til en kode afsendes, når den afsendes afgøres det om der er tale om RC-5, RC-5ex eller RC-6 og koden læses herefter.
Biblioteket indeholder også en funktion der skipper IR-aktivitet i 2,666 ms efter sidste puls. Dette bruges hvis der var fejl i det modtagende IR-signal. Der kunne jo godt komme signaler fra andre IR-kilder f.eks. min LK-fjernbetjening, som ikke svarer til nogle af de understøttede protokoller.
Jeg har også indbygget noget funktionalitet i biblioteket, som gør det muligt at gemme læste koder i microprocessorens EEPROM og det er naturligvis også muligt at læse disse gemte koder til senere sammenligning med nye modtagne koder. Dette bruges til at "lære" koder med, som man
senere vil udfører en handling på. Det er blevet til to funktioner: wrEEp og rdEEp.

Koden til IR-biblioteket finder du her: RCXEEP.LIB (PDF)

Variabler og definitioner finder du her: RCXEEP.VAR (PDF)
Kode, variabler og definitioner i tekstformat finder du her: RCXEEP.ZIP

Nu skal der skriver en applikation, der anvender dette bibliotek. Det kan du læse om her