RC5-Code einlesen mit XC886 Problem

OP #3679153
Lesenswert?
• ▲
▼
Hallo ich stehe vor einem Riesen Problem,

Ich muss einen RC5-Code mit Hilfe des XC886 von Infineon einlesen.
Habe mir auch schon edliche Beiträge hierzu angeschaut aber ich bekomme 
einfach keine "Übersetzung" für meinen Controller hin...

bin langsam am verzweifeln.

Benutze hierfür zum Programmieren µVision4 und den TSOP 31236 als 
Empfänger

Ich verwedende den Timer2 mit seiner Autoreload Funktion um alle 1778µs 
einen Interrupt zu erzeugen welcher ein Startbit setzt.

Mit diesem Startbit wird ein Unterprogramm aufgerufen was erst 8x prüft 
ob am Eingang eine 1 anliegt, ist dies der Fall wird das STARTFLANKE bit 
gesetzt mit diesem wird dann gewartet bis eine 0 am Eingang vorhanden 
ist.

Wenn die 0 kommt wird 14x der Eingang in einem Array erfasst.

So sollte es doch normalerweise funktionieren oder?

Ich hoffe Ihr könnt mir helfen.

Gruß Andreas
OP #3679195
Lesenswert?
• ▲
▼
Hier mal mein bisheriges Programm


#include <XC886CLM.H>
//#include <../../_libs/i2c.c>
//#include <../../_libs/EA_eDIP.c>


bit Timer=0;
xdata unsigned char RC5_CODE[14];
xdata unsigned char RC5_CODE0[8];
xdata unsigned char RC5_STATUS[6];
xdata unsigned char RC5_START;
xdata unsigned char RC5_FLANKE;
xdata unsigned char RC5_ZAEHL;

sbit Empf = P3_DATA^1;



void init (void)
{
  P3_DIR  =  0x01;        //Alles Eingang bis auf P3.0
  P3_DATA  =  0x00;       //Alles auf 0 Setzen
 }

void init_timer2(void)
{
  T2_T2MOD = 0x96;        // Teiler 8 für 0,33333µs
  T2_RC2L = 0x29;         //Erster Durchlauf 65535-5334 = 0xEB29 für 
1778µs
  T2_RC2H = 0xEB;
  T2_T2L = 0x29;          //Nachladewert 65535-5334 = 0xEB29 für 1778µs
  T2_T2H = 0xEB;          //Um ein ganzes Bit zu warten
  T2_T2CON = 0;
  ET2 = 1;                //Freigabe Interrupt Timer 2
  EA = 1;                 //Allgemeine Interruptfreigabe
  TR2 = 0;                //
  TF2 = 1;                //Timer2 Starten
 }

void timer2_int (void) interrupt 5
{
  Timer = 1;
  TF2 = 0;
 }

void RC5_ROUTINE(void)
{
 if (RC5_START == 1)       //Warten bis Eingang 8x auf frei geprüft
 {
  if  (RC5_FLANKE ==1)     //Warten bis Flanke vorhanden
   {
    RC5_CODE[0] = Empf;                 //RC5-Code einlesen
    RC5_CODE[1] = RC5_CODE[0];
    RC5_CODE[2] = RC5_CODE[1];
    RC5_CODE[3] = RC5_CODE[2];
    RC5_CODE[4] = RC5_CODE[3];
    RC5_CODE[5] = RC5_CODE[4];
    RC5_CODE[6] = RC5_CODE[5];
    RC5_CODE[7] = RC5_CODE[6];
    RC5_CODE[8] = RC5_CODE[7];
    RC5_CODE[9] = RC5_CODE[8];
    RC5_CODE[10] = RC5_CODE[9];
    RC5_CODE[11] = RC5_CODE[10];
    RC5_CODE[12] = RC5_CODE[11];
    RC5_CODE[13] = RC5_CODE[12];

  RC5_ZAEHL--;             //14x Einlesen

  if (RC5_ZAEHL == 0)      //Wenn 14x eingelesen
  {
   RC5_START=0;            //
   RC5_STATUS[0]=1;        //STATUSBIT für nächsten Schritt setzen
  }
  else
  {
   if (Empf == 0)          //Warten bis Signal am Eingang
   {
    RC5_FLANKE=1;            //Flankenbit setzen
    RC5_ZAEHL = 13;          //Für 14x Zählen vorbereiten
    }
   }
  }
 }

 else
 {
  RC5_CODE0[0] = Empf;           //Überprüfung ob Eingang frei
  RC5_CODE0[1] = RC5_CODE0[0];
  RC5_CODE0[2] = RC5_CODE0[1];
  RC5_CODE0[3] = RC5_CODE0[2];
  RC5_CODE0[4] = RC5_CODE0[3];
  RC5_CODE0[5] = RC5_CODE0[4];
  RC5_CODE0[6] = RC5_CODE0[5];
  RC5_CODE0[7] = RC5_CODE0[6];

  if (RC5_CODE0[0] == 1 && RC5_CODE0[1] ==1  && RC5_CODE0[2] ==1 &&
      RC5_CODE0[3] ==1 && RC5_CODE0[4] ==1 && RC5_CODE0[5] ==1 &&
      RC5_CODE0[6] ==1 && RC5_CODE0[7] ==1)
  {
    RC5_START = 1;            //Wenn frei START auf 1 setzen
    RC5_FLANKE = 0;           //Auf Flanke Warten

    RC5_CODE0[0]= 0;          //Prüfung auf 0 Setzen
    RC5_CODE0[1]= 0;
    RC5_CODE0[2]= 0;
    RC5_CODE0[3]= 0;
    RC5_CODE0[4]= 0;
    RC5_CODE0[5]= 0;
    RC5_CODE0[6]= 0;
    RC5_CODE0[7]= 0;
   }
   }
}




Main()
{
 init();
 init_timer2();               //Timer2 init


 if (Timer == 1)              //Wenn Interrupt von Timer2
 {
  Timer = 0;                  //Interruptbit zurücksetzem
  RC5_ROUTINE();              //Routine starten
  }

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.