2 Hand-Steuerungsmodul

Dieses recht einfache Modul bietet die Möglichkeit die Steuerspannung zur Steuerung des Motors von 0 V bis zum Maximalwert 10 V im Rahmen des 8-Bit DA-Wandlers (von 0...255) über die Eingabetastatur zu definieren. Es besteht nur aus einer Schleife, in der die eigentliche ,,Tastatur-Steuerroutine'' immer wieder mit einer 0.3 Sek. Verzögerung (WAIT_LOOP 3) aufgerufen wird, bis das Modul verlassen wird.

	; ====================================================================
	; manual control main program
	; ----------------------------------
	; direct manual control of the PCF 8591 by controlling the "Power"
	; ----------------------------------
	manual_control_main:
	  rcall mod_manctrl_init         ; initialize manual control env.
	...
	; manual control loop begin...
	mcntrl_loop:
	  WAIT_LOOP 3                    ; software timer
	  rcall speed_control            ; key controlled speed of rotation
	  rcall check_keypress           ; manage keyboard events...
	  breq  mcntrl_loop              ; ...nozzzin pressed...
	  cpi   temp1, key_mask0         ; has "stop" been pressed?
	  brne  mcntrl_loop              ; if not, we looooooooooooop...
	; manual control loop end...
	; ----------------------------------
	  rcall stop_rotation            ; we NEVER send stop directly to PCF
	  rcall mctl_funcmode            ; do some screen io...
	manual_control_main_ret:
	  ret 
Dabei wird der Mechanismus der nummerischen Werteingabe (siehe Absch. 7.6.2.2) verwendet um dem ,,Power''-Wert über die Tastatur zu kontrollieren, dieser wird dann zum D/A-Wandler PCF8591 geschickt und in der LCD-Anzeige zusammen mit dem aktuellen Drehwinkel ständig aktualisiert.

Figure 7.15: Manuelle Winkelsteuerung
\includegraphics[%
width=4cm]{graphics/ManControl2.ps}

Die eigentliche Tastatursteuerung geschieht in der Subroutine speed_control. Das High-Level Tastaturkontroll-Unterprogramm keyproc_varvalue_preset führt anhand der aktuellen Tastenstati die konkrete Tasten-Wertumsetzung, unter Berücksichtigung der Tastendynamik, durch. Die Geschwindigkeit der Wertänderung nimmt daher mit der Tasten-Haltezeit, wie in Absch. 7.6.2.2 beschrieben, zu.

	; ====================================================================
	; manual control subroutine for speed control
	; ----------------------------------
	; input: none
	; output: none
	; affected: temp1
	; ----------------------------------
	speed_control:
	  LDIWR REG_A, RotSpeedMax
	  MOVWR MREG_A, REG_A            ; inp: maxmum 8-bit value
	  LDSWR LREG_A, rot_speed_value  ; inp: value to modify
	  rcall keyproc_varvalue_preset  ; call speed keyboard function
	  STSWR rot_speed_value, LREG_A  ; storing the "new" rot_speed_value
	  rcall mctl_funcmode            ; screen io...
	  lds   temp1, rot_speed_value
	  rcall PCF_SEND_VALUE           ; send "new" speed value to pcf
	  ret
Der Modul-Code befindet sich (lt. Code-Organisation in Absch. 7.5.3) in der Datei mod/man_ctrl.asm.

gerhard.reithofer@tech-edv.co.at