#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 |
#define IR_PAUSE_SAMPLES 250 |
#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
#define IR_SAMPLES_PER_BIT_EARLY 6 |
#define IR_SAMPLES_PER_BIT_LATE 10 |
#define IR_SAMPLES_PER_BIT_MIN 3 |
void InitRC5 | ( | void | ) |
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 | ) |
volatile uint8_t enableRC5 = 0 |
volatile uint16_t RC5data = 0 |