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.
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;
}
Übrigens OCR2 braucht nicht eingestellt zu werden, schadet aber auch nicht.
Gruß Waste
Lesezeichen