rc5.c-Dateireferenz

#include <avr/io.h>
#include "rc5.h"

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define IR_SAMPLES_PER_BIT   8
#define IR_SAMPLES_PER_BIT_EARLY   6
#define IR_SAMPLES_PER_BIT_LATE   10
#define IR_SAMPLES_PER_BIT_MIN   3
#define IR_PAUSE_SAMPLES   250
#define IR_PORT   PORTD
#define IR_DDR   DDRD
#define IR_PINR   PIND
#define IR_PIN   PD0

Funktionen

void IsrRC5 (void)
uint16_t ReadRC5 (void)
void InitRC5 (void)

Variablen

volatile uint16_t RC5data = 0
volatile uint8_t enableRC5 = 0


Makro-Dokumentation

#define IR_DDR   DDRD

DDR of Port D

Definiert in Zeile 57 der Datei rc5.c.

#define IR_PAUSE_SAMPLES   250

Startbit ist erst nach 200 Samples ohne

Definiert in Zeile 49 der Datei rc5.c.

#define IR_PIN   PD0

Pin 0

Definiert in Zeile 59 der Datei rc5.c.

#define IR_PINR   PIND

Port D input

Definiert in Zeile 58 der Datei rc5.c.

#define IR_PORT   PORTD

Port D

Definiert in Zeile 56 der Datei rc5.c.

#define IR_SAMPLES_PER_BIT   8

/file rc5.c /brief Funktionen fuer die Dekodierung von RC5-Fernbedienungs-Codes /author Benjamin Benz (bbe@heise.de),
m.a.r.v.i.n

/version V001 - 20.12.2005 - Benjamin Benz (bbe@heise.de) Version fuer den c't-Bot V002 - 11.02.2007 - m.a.r.v.i.n portiert fuer den ASURO 8 Samples per Bit

Definiert in Zeile 45 der Datei rc5.c.

#define IR_SAMPLES_PER_BIT_EARLY   6

Flanke fruehestens nach 7 Samples

Definiert in Zeile 46 der Datei rc5.c.

#define IR_SAMPLES_PER_BIT_LATE   10

Flanke spaetestens nach 9 Samples

Definiert in Zeile 47 der Datei rc5.c.

#define IR_SAMPLES_PER_BIT_MIN   3

Flanke vor 3 Samples -> paket verwerfen

Definiert in Zeile 48 der Datei rc5.c.


Dokumentation der Funktionen

void InitRC5 ( void   ) 

Init IR-System

Definiert in Zeile 180 der Datei rc5.c.

00181 {
00182   IR_DDR  &= ~IR_PIN;   // Pin auf Input
00183   IR_PORT |= IR_PIN;    // Pullup an
00184   enableRC5 = 1;
00185 }

void IsrRC5 ( void   ) 

Interrupt Serviceroutine wird alle 222.2us aufgerufen

Definiert in Zeile 75 der Datei rc5.c.

00076 {
00077   // sample lesen
00078   uint8_t sample = 1;
00079 
00080   if ((IR_PINR & (1<<IR_PIN)) != 0)
00081   {
00082     sample = 0;
00083   }
00084 
00085   // bittimer erhoehen (bleibt bei 255 stehen)
00086   if (RC5bittimer<255)
00087   {
00088     RC5bittimer++;
00089   }
00090 
00091   // flankenerkennung
00092   if ( RC5lastsample != sample)
00093   {
00094     if (RC5bittimer<=IR_SAMPLES_PER_BIT_MIN)
00095     {
00096       // flanke kommt zu frueh: paket verwerfen
00097       RC5bitcount=0;
00098     }
00099     else
00100     {
00101       // Startbit
00102       if (RC5bitcount==0)
00103       {
00104         if ( (sample==1) && (RC5bittimer>IR_PAUSE_SAMPLES) )
00105         {
00106           // Startbit speichern
00107           RC5data_tmp = 1;
00108           RC5bitcount++;
00109         }
00110         else
00111         {
00112           // error
00113           RC5data_tmp = 0;
00114         }
00115 
00116         // bittimer-reset
00117         RC5bittimer = 0;
00118 
00119         // Bits 2..14: nur Flanken innerhalb des Bits beruecksichtigen
00120       }
00121       else
00122       {
00123         if (RC5bittimer >= IR_SAMPLES_PER_BIT_EARLY)
00124         {
00125           if (RC5bittimer<=IR_SAMPLES_PER_BIT_LATE)
00126           {
00127             // Bit speichern
00128             RC5data_tmp = (RC5data_tmp<<1) | sample;
00129             RC5bitcount++;
00130           }
00131           else
00132           {
00133             // zu spaet: paket verwerfen
00134             RC5bitcount = 0;
00135           }
00136 
00137           // bittimer-reset
00138           RC5bittimer = 0;
00139         }
00140       }
00141     }
00142 
00143   }
00144   else
00145   {
00146     // keine flanke innerhalb bitzeit?
00147     if (RC5bittimer > IR_SAMPLES_PER_BIT_LATE)
00148     {
00149       // 14 bits gelesen?
00150       if (RC5bitcount==14)
00151       {
00152         RC5data = RC5data_tmp;
00153       }
00154       // paket verwerfen
00155       RC5bitcount = 0;
00156     }
00157   }
00158 
00159   // sample im samplepuffer ablegen
00160   RC5lastsample = sample;
00161 
00162 
00163 }

uint16_t ReadRC5 ( void   ) 

IR-Daten lesen

Rückgabe:
wert von ir_data, loescht anschliessend ir_data

Definiert in Zeile 170 der Datei rc5.c.

00171 {
00172   uint16_t retvalue = RC5data;
00173   RC5data = 0;
00174   return retvalue;
00175 }


Variablen-Dokumentation

volatile uint8_t enableRC5 = 0

schaltet die RC5 Abfrage ein/aus

Definiert in Zeile 69 der Datei rc5.c.

volatile uint16_t RC5data = 0

letztes komplett gelesenes RC5-paket

Definiert in Zeile 68 der Datei rc5.c.


Erzeugt am Sun Nov 18 18:24:53 2007 für ASURO Library von  doxygen 1.5.1-p1