Hallo pentagonchicken,
im Ansatz ist dein Programm ok, sind nur einige kleine Fehler drin.
1. Ein Bit wird zuviel gesendet.
2. Phasenwechsel Low-High wird nicht ausgeführt
3. Pause zwischen den Paketen fehlt
Das korrigierte Programm ist im Code-Fenster. Bei mir funktioniert es. Musst nur die Tastencodes für lup und ldown wieder an deinen Empfänger anpassen, dann sollte es auch bei Dir funktionieren.
Übrigens OCR2 braucht nicht eingestellt zu werden, schadet aber auch nicht.Code:#include "asuro.h" #include <stdlib.h> #define lup 0x3010 #define ldown 0x3011 #define chup 0x38f10 #define chdown 0x3811 void sendrc5(unsigned long int cmd){ DDRD |= (1<<DDD1); OCR2= 0xC7; int length=0; while(length<=13){ //PORTD |=(1<<PD1); if(cmd & 0x2000){ TCNT0=0; TCCR0=(1<<CS01) | (1<<CS00); //timer start while(TCNT0<111) PORTD |=(1<<PD1); while(TCNT0<222) PORTD &=~(1<<PD1); }else{ TCNT0=0; TCCR0=(1<<CS01) | (1<<CS00); //timer start while(TCNT0<111) PORTD &=~(1<<PD1); while(TCNT0<222) PORTD |=(1<<PD1); } length++; cmd <<=1; } PORTD |=(1<<PD1); Msleep(40); } int main(void) { int taste1=0,taste2=0; Init(); StatusLED(GREEN); while(1){ taste1=PollSwitch(); taste2=PollSwitch(); if((taste1 > 0) && (taste2 > 0) && (taste1==taste2)){ if (taste1==1){ StatusLED(RED); sendrc5(ldown); } if (taste1==2){ StatusLED(GREEN); DDRD |= (1<<DDD1); sendrc5(lup); } if (taste1==4){ StatusLED(YELLOW); sendrc5(chup); } if (taste1==8){ StatusLED(RED); sendrc5(chdown); } } } return 0; }
Gruß Waste







Zitieren

Lesezeichen