Forum: Mikrocontroller und Digitale Elektronik Dekodierung des RC5 Codes ohne Timer?


von Unwissender (Gast)


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
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.