-
-
Erfahrener Benutzer
Roboter-Spezialist
Es könnten noch zwei Fehler sein. Erstens könnte irgendwas falsch sein an der ir_init(), die Frequenz stimmt schon, ich weiß nur nicht ob FastPWM stimmt. Vielleicht sollte man hier mal auf PhaseCorrect PWM umstellen.
Und zweitens könnte es sein dass das hier:
for(X=1;X<=13;X++)
{
if((i=1)&&(code&(1<<X)) // letztes Bit war high und nächstes ist high
{
PWM_PORT|= (1<<PWM_BIT); // high
us_889();
PWM_PORT&= ~(1<<PWM_BIT);
us_889();
}
else if((i=1)&&(!(code&(1<<X)))) // letztes high und nächstes low
{
i=0;
us_889();
PWM_PORT|= (1<<PWM_BIT);
us_889();
}
else if((i=0)&&(code&(1<<X))) // letzes low, nächstes high
{
i=1;
us_889();
PWM_PORT&= ~(1<<PWM_BIT);
us_889();
}
else if((i=0)&&(code&(1<<X))) // letzes low, nächstes low
{
PWM_PORT&= ~(1<<PWM_BIT);
us_889();
PWM_PORT|= (1<<PWM_BIT);
us_889();
}
else
asm volatile ("nop"); // zu else sollte es nie kommen
}
zu lange dauert, und ein Bit dadurch nicht 1,778ms sondern vielleicht 2ms braucht. Deswegen könnte es sein das deine rc5_recieve() Funktion, die du verwendest, es nicht als rc5 Code erkennt.
Man müsste in einem Simulator mal genau schauen wie lange mein for() Schleife (13Bits) mit den if Anweisungen braucht. Ist da dann wirklich ein größere Zeitfehler muss/kann man vielleicht noch deinen us_889() Wartefunktionen verändern.
In der ir_init_send() war auch noch was von Timer0 drinnen, das hatte ich nur vergessen zu löschen. Habs jetzt verbessert, und die Funktion rc5_init() gennant.
Gruß Muraad
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen