Hallo zusammen,
ich habe hier mal ein header gemacht, das das senden von RC5 deutlich vereinfacht. Ich poste jetzt einfach mal das header und einen Beispiel-Code (nach dem drücken auf den Taster (an PD3) wird der RC5-Command "25" gesendet), zusammen mit dieser URL sollte es sich eigentlich von selbst erklären.
Bisher habe ich den Code nur an einem 2313 ausprobiert, läuft mit 8mhz und 3.6864 mhz einwandtfrei. Die wartezeiten (865us sollten laut obiger Website eigentlich 889us sein) habe ich per oszi abgestimmt. Als Vorlage zur Abstimmung diente der "sendrc5"-Command in Bascom.
Zur Beschaltung:
Die IR-LED hängt über einen passenden Vorwiderstand mit der Kathode an PD2 und mit der Anode an +5V.
Das header:
Beispiel zur anwendung:Code:#include <avr/io.h> #include <stdint.h> #include <util/delay.h> void bit1(void) { DDRD |= (1<<PD2); // PD2 als Ausgang PORTD |= (1<<PD2); // PD2 auf 1 _delay_us(865); // Zustand für das erste Halbbit beibehalten for (uint8_t i=0; i<32; i++) // Zustand für das zweite Halbbit (36khz-Frequenz) { PORTD &= ~(1<<PD2); // PD2 auf 0 _delay_us(13.8); PORTD |= (1<<PD2); // PD2 auf 1 _delay_us(13.8); } } void bit0(void) { DDRD |= (1<<PD2); // PD2 als Ausgang for (uint8_t i=0; i<32; i++) { PORTD &= ~(1<<PD2); // PD2 auf 0 _delay_us(13.8); PORTD |= (1<<PD2); // PD2 auf 1 _delay_us(13.8); } PORTD |= (1<<PD2); // PD2 auf 1 _delay_us(865); }
Vielleicht hat ja auch jemand Lust, das Ganze so zusammenzufassen, dass man im hauptprogramm nur noch einen Befehl hat (z.B. "send_RC5(<Address>; <Togbit>; <Command>);") und das header-File den Rest erledigt.Code:#include <avr/io.h> #include <stdint.h> #include <util/delay.h> #include <util/RC5.h> void io_init(void) { DDRD |= (1<<PD2); // PD2 auf Ausgang DDRD &= ~(1<<PD3); // PD3 auf Eingang für Taster PORTD |= (1<<PD2); // PD2 auf 1 PORTD |= (1<<PD3); // PD3 Pullup für Taster } void main(void) { io_init(); while(1) { if ( !(PIND & (1<<PIND3))) { _delay_ms(200); // Taster entprellen // Startbits bit1(); bit1(); // Togglebit bit0(); // Addressbits bit0(); bit0(); bit0(); bit0(); bit0(); // Commandobits bit0(); bit1(); bit1(); bit0(); bit0(); bit1(); PORTD |= (1<<PD3); // PD3 Pullup für Taster } } }
mfg Markus







Zitieren

Lesezeichen