-
-
Moderator
Robotik Visionär
Ja, es ist schwierig mit Worten zu erklären. Der Timer wird so initialisiert, dass die ISR (interruptserviceroutine) ca. alle 0,01ms (100kHz, bei 8MHz prescaller=/8 und ocr=9)) aufgerufen wird (häufiger oder seltener beeinflußt den Wertebereich/die Auflösung der Positionen). In der ISR macht man dann mit den (Start-)Variablen rc_count=0 und rc_pos=0 und rc_(Eingangs)pin folgendes:
isr(TIMER0_COMP_vect)
{
if (rc_pin) rc_count++; else if (rc_count) { rc_pos=rc_count; rc_count=0; }
}
Ab dem ersten Impuls (man könnte nach der Initialisierung kurz warten bis der erste gültige Wert ansteht: while(!rc_pos); ) kann dann das Hauptprogramm mit rc_pos arbeiten. Das basiert übrigens auf dem Servo-Beispielcode im RN-Wissen...
mic
Bild hier
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen