All in one |
|
|
|
|
|
|
|
|
Tilbage til... |
|
|
|
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 |