Hallo Biboxx,
ich vermute, dein "Wie mache ich das?" bezog sich eher auf die Auswertung als auf den Anschluß. Wenn du schon Servos ansteuern kannst und dazu eine ISR verwendest (wie im Beispiel im RN-Wissen: Servo) ist die Auswertung eines RC-Empfängersignals sehr einfach: Man zählt einfach die ISR-Aufrufe mit gesetztem RC-Eingang. Ein Beispiel (mit einem 8MHz-Mega32 und einem Timer im CTC-Mode):
Code:
ISR(TIMER0_COMP_vect)
{
static uint16_t rc_temp_pwr=0;
static uint16_t rc_temp_dir=0;
// Ab hier werden Impulse für Servos erzeugt
//static uint16_t count=0;
//if(count>x) PORTA &= ~16; else PORTA |= 16; // E_INT1 (Pin8)
//if(count>y) PORTC &= ~1; else PORTC |= 1; // SCL (Pin10)
//if(count>z) PORTC &= ~2; else PORTC |= 2; // SDA (Pin12)
//if(count<1000)count++; else count=0;
// Ab hier werden RC-Signale vom Empfänger ausgewertet
if (PINC & 1) rc_temp_dir++; else
if (rc_temp_dir) { rc_input_dir=rc_temp_dir-1; rc_temp_dir=0; }
if (PINC & 2) rc_temp_pwr++; else
if (rc_temp_pwr) { rc_input_pwr=rc_temp_pwr-1; rc_temp_pwr=0; }
}
(Aus:https://www.roboternetz.de/phpBB2/ze...=328824#328824)
Die Signale werden hier an PC0 und 1 eingespeist, die Ergebnisse stehen in rc_input_dir und rc_input_pwr. Standardmäßig werden solche ISR mit 100kHz aufgerufen, dann ergeben sich die für Servos üblichen Werte von 100-200. Man kann aber auch einen anderen Takt verwenden. Wenn man schon einen Timer mit halbwegs schneller Frequenz im Einsatz hat (PWM, IR-Trägerfrequenz...) kann man auch diesen verwenden. Die Werte haben dann zwar eine andere Auflösung, dafür ist der Aufwand noch geringer als wenn man extra noch einen Timer einsetzt. ;)
Gruß
mic
Lesezeichen