pentagonchicken
17.11.2005, 17:01
Hallo,
ich versuche gerade verzweifelt meinem Asuro das senden im RC5 code beizubringen.
Ich benutze die erweiterte asuro lib.
wenn ich die lib richtig verstanden haben müsste ich nur ocr2 auf 0xC7 setzen um ein Fast PWM signal zu erhalten, welches die ir diode für 6,9 µs anschaltet und für 20µs ausschaltet. Also mir ein 36 khz Signal im rc 5 norm erzeugt. anschließend muss ich nur noch um eine 1 zu senden die diode 899µs ausschalten und dann für 899µs ein. und bei einer 0 genau umgedreht. soweit hab ich es in meinem code verwirklicht.. nur das problem, es funktioniert nicht und ich finde den fehler nicht.
#include "asuro.h"
#include <stdlib.h>
#define lup 0x31df
#define ldown 0x31dd
#define chup 0x38f10
#define chdown 0x3811
void sendrc5(unsigned long int cmd){
DDRD |= (1<<DDD1);
OCR2= 0xC7;
int length=0;
while(length<=14){
PORTD |=(1<<PD1);
if(cmd & 0x2000){
TCNT0=0;
TCCR0=(1<<CS01) | (1<<CS00); //timer start
while(TCNT0<111);
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);
}
length++;
cmd <<=1;
}
PORTD |=(1<<PD1);
}
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;
}
Vieleicht sieht ja wer anderst den fehler..
ich versuche gerade verzweifelt meinem Asuro das senden im RC5 code beizubringen.
Ich benutze die erweiterte asuro lib.
wenn ich die lib richtig verstanden haben müsste ich nur ocr2 auf 0xC7 setzen um ein Fast PWM signal zu erhalten, welches die ir diode für 6,9 µs anschaltet und für 20µs ausschaltet. Also mir ein 36 khz Signal im rc 5 norm erzeugt. anschließend muss ich nur noch um eine 1 zu senden die diode 899µs ausschalten und dann für 899µs ein. und bei einer 0 genau umgedreht. soweit hab ich es in meinem code verwirklicht.. nur das problem, es funktioniert nicht und ich finde den fehler nicht.
#include "asuro.h"
#include <stdlib.h>
#define lup 0x31df
#define ldown 0x31dd
#define chup 0x38f10
#define chdown 0x3811
void sendrc5(unsigned long int cmd){
DDRD |= (1<<DDD1);
OCR2= 0xC7;
int length=0;
while(length<=14){
PORTD |=(1<<PD1);
if(cmd & 0x2000){
TCNT0=0;
TCCR0=(1<<CS01) | (1<<CS00); //timer start
while(TCNT0<111);
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);
}
length++;
cmd <<=1;
}
PORTD |=(1<<PD1);
}
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;
}
Vieleicht sieht ja wer anderst den fehler..