Dekodierung des RC5 Codes ohne Timer?

Gast #827597
Lesenswert?
• ▲
▼
Hallo,

ich hab mir ein bisschen das RC5 Protokoll im Internet angesehen.
Öfters habe ich zu der RC% Dokumentation auch ein paar zugehörige 
Beispielprogramme zur Dekodierung eines RC5 Signals gesehen(sowohl 
Assembler als auch C).
Bei diesen Programmen wurde eigentlich immer ein Timer eingesetzt,der 
alle paar µs überläuft und einen Interrupt auslöst.
Ich bin jetzt nicht wirklich gut im Umgang mit µC,aber ginge das nicht 
auch ohne einen Timer?

Was ich bisher verstanden hab(oder ich hoffe zumindest das ich das das 
korrekt verstanden habe):

Wenn ich eine Taste auf der Fernbedienung drücke dann werden ja immer 14 
bit gesendet( 2Starbits + 1 Toggle Bit + 5 Adressbits + 6 Kommandobits).
Eigentlich muss ich ja (zumindest hab ich das aus der RC5 Dokumentation 
so verstanden) nur die einzelnen Bits auf "0" oder "1" überprüfen. Wie 
lange so ein High bzw Low dauert ist ja eigentlich egal,oder?

Meine Überlegungen zum Programm:

Ich warte im Hauptprogramm so lange bis auf der Portleitung das erste 
Mal ein High auftritt,damit weiß ich dann das die Übertragung gestartet 
wird.
Nach dem Startbit kommen ja noch 13bit,das heißt ich müsste so lange 
warten bis ich alle 14bits beisammen hätte. Da ich nicht so wirklich gut 
im Erklären bin,noch ein kurzer Programmcode wie ich mir das vorgestellt 
hätte:

1
//----Include-Files----
2
#include<stdio.h>
3
#include<stdlib.h>
4

5
sbit at P0^1 IR //P0.1 ist der Pin wo der IR Dekoder angeschlossen ist
6

7
char string[15]; //Variable in der die Bitkombination später stehen soll
8
int zaehler;
9
int go = 0; //Hilfsvariable
10

11
void main(void)
12
{
13

14
if(IR == 1) //die Fernbedienung sendet einen Code
15
{
16
  zaehler = 0; 
17
  string[zaehler] = 0x01; //Starbit speichern
18
  while(IR == 1); //solange der Pin noch High ist
19
  while(IR == 0); //danach kommt ein Low
20
  
21
  zaehler ++;
22
  while(zaehler = ! 13)
23
  
24
  {
25
   if(IR == 1)
26
   {
27
     string[zaehler] = 0x01;
28
     while(IR == 1);
29
     while(IR == 0);
30
     go = 1; //wird gesetzt,damit er nicht mehr in die andere Schleife geht
31
   }
32
   
33
   if(go == 0)
34
   {
35
   if(IR == 0)
36
   {
37
     string[zaehler] = 0x00;
38
     while(IR == 0);
39
     while(IR == 1);
40
    }
41

42
    }
43
    go = 0;
44
    zaehler ++ ;
45
  
46
   }
47

48
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren