2 Steuerungsphase I (SpeedGoUp)
Diese Startphase muss folgende Aufgaben abdecken:
- Initialisierung der Rotationsfunktion (Richtungs-Steuerung)
- Das Präprozessing, also die Vorberechnung des Zählerwertes, an dem
die Geschwindigkeit in die ,,SpeedDown'' Phase III übergeht.
- Die ,,Programmierung'' des Ouput Compare 1B (OCR1B) Interrupt
Registers mit diesem Wert (rcall setup_counter_value).
- Kontinuierliche Erhöhung die Steuerspannung, bis die Drehbewegung
einsetzt. Dieser ,,Startwert'' wird als Variable rot_contrl_minimum
gespeichert und dient in der ,,SpeedDown''-Phase III als Zielwert
für die Geschwindigkeitsreduzierung.
- Überprüfen, ob die Rotation beim Maximalwert tatsächlich begonnen
hat, wenn nicht, wird das Programm abgebrochen (siehe Schlagwort InitCycle
im Absch. 7.8.5).
- Überprüfen, ob die ,,SpeedDown''-Phase bereits erreicht ist. Ist
dies der Fall, wird die ,,SpeedHigh''-Phase übersprungen.
Zur Verbesserung der Lesbarkeit des Codes wurden die Makros ,,BEFORE_POSITION''
und ,,AFTER_POSITION'' eingeführt, die das Erreichen oder ,,noch
nicht'' Erreichen des vorberechneten Endwerts überprüfen, indem das
entsprechende Bit im Timer Interrupt Mask Register (TIMSK)
kontrolliert wird. Das Bit wird von der ISR des Timer1B (Output Compare1B
Interrupt Vector Address) kontrolliert.
; ===================================================================
; interrupt checks
; ----------------------------------
; check if a value is reached (TIMSK bit is set)
; ----------------------------------
;
; Parameter: @0 .. label to jump if reached
.macro AFTER_POSITION
in ltmp1, TIMSK ; read TIMSK port, is bit OCIE1B set?
sbrs ltmp1, OCIE1B ; position value is reached?
rjmp @0 ; if yes (bit is reset), we jump to...
.endmacro
Anwendungsbeispiele sind in den Beschreibungen der Phasen II und III
zu finden.
Der Mechanismus zum Setzten und Rücksetzten des verwendeten Output
Compare1B Interrupts wurde bereits in Abschnitt 7.7.3.5
beschrieben.
gerhard.reithofer@tech-edv.co.at