Dekodierung des RC5 Codes ohne Timer?

Gast #827597
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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.