Robo2004
15.03.2004, 19:43
Dieses Programm ist für die die nur die Grundversion haben.
Mit den Programm wird auf den vier LEDs der Binärwert ein IR- Signal dargestellt (Fernbedienung). Die Subrotienen können aber auch leicht dazu verwendet werden um andere Werte im Binär Format dazustellen.
Es wird in diesen Programm erst das Low Nibble(Bit0-Bit3) dargestellt und nach einer kleinen Zeitverzögerung dann das High Nibble(Bit4-Bit7).
Der Code
' Sascha Kröger
' 12.03.2004
' Programm ShowDual.bas
'
' ---------------------------------------------------------------------
' FUNKTION DES PROGRAMMS
'----------------------------------------------------------------------
' In diesen Programm wird der Wert eines IR- Fernbidinung Signal auf
' den LED des Roboters in Binärform Dargestellt.
' Dieses Programm bietet die Möglichkeit ein IR Signal darzustellen
' wenn man nur die Grundversion von CCRP5 hat. Wenn man die Erweiterung
' mit den LCD hat, dann wird man das sicher besser dort darstellen lassen.
' Die Subrotienen LCONVERT und HCONVERT Stellen den Wert der Variable
' Value da, diese Subrotienen lassen sich auch leicht in anderen
' Programmen implementieren.
'------------------------------------------------------------------------
'--------------------------
'------ I/O PORTS ---------
'--------------------------
'- INTERFACE LCD/EXTPORT --
define sdio port[1]
define sclio port[3]
define strobe port[4]
'-- INTERFACE COM/NAV -----
define DATALINE port[1]
define CLOCKLINE port[2]
'---- FREIE PORTS ---------
define FREIP7 port[7]
define FREIP8 port[8]
define FREIP9 port[9]
define FREIP10 port[10]
define FREIP11 port[11]
define FREIP12 port[12]
define FREIP13 port[13]
define FREIP14 port[14]
define FREIP15 port[15]
define FREIP16 port[16]
'--------------------------
'------ SENSORS ---------
'--------------------------
define LIGHT_L ad[7]
define LIGHT_R ad[6]
define SYS_VOLTS ad[3]
define CHRG_CURRENT ad[2]
define SYS_CURRENT ad[1]
define MIC ad[4]
define TOUCH ad[5]
'---------------------------
'------ DRIVE -------------
'---------------------------
define SPEED_L da[1]
define SPEED_R da[2]
define REV_L port[6]
define REV_R port[5]
'--------------------------
'---- SYSTEM MEMORY -------
'--------------------------
'--- INTERFACE BUFFER ----
define LBYTE byte[1]
define HBYTE byte[2]
define SUBCMD byte[3]
'---- OPERATION DATA ------
define EXTPORT byte[4]
define LED1_F bit[29]
define LED2_F bit[30]
define LED3_F bit[31]
define LED4_F bit[32]
define SYSTEM_STATUS byte[5]
define ACSL_F bit[33]
define ACSR_F bit[34]
define IR_F bit[35]
'--------------------------
'---- USER MEMORY -------
'--------------------------
define CMDC byte[6]
define ADRC byte[7]
'--- SYSTEMROUTINEN -----------
define PLM_SLOW &H01C4
define SYSTEM &H01C9
define COMNAV &H0154
'- ERWEITERTE SYSTEM ROUTINEN -
define REVR &H0101 'ANTRIEB RECHTS RÜCKWÄRTS
define REVL &H0106 'ANTRIEB LINKS RÜCKWÄRTS
define FWDR &H010B 'ANTRIEG RECHTS VORWÄRTS
define FWDL &H0110 'ANTRIEB LINKS VORWÄRTS
define ROTR &H0115 'RECHTS DREHEN
define ROTL &H0119 'LINKS DREHEN
define REV &H011D 'RÜCKWÄRTS
define FWD &H0121 'VORWÄRTS
define COMNAV_STATUS &H0125 'UPDATED ALLE FLAGS IM STATUS-REGISTER
define ACS_LO &H01E1 'ACS POWER
define ACS_HI &H01E9 '
define ACS_MAX &H01F1 '
define SEND_TLM &H014A 'SENDET TELEMETRIE (CH=HBYTE,DATEN=LBYTE)
define SEND_SPEEDR &H0134 'SENDET TLM KANAL 8,PLM RECHTS
define SEND_SPEEDL &H013A 'SENDET TLM KANAL 7,PLM LINKS
define SEND_SYSSTAT &H0144 'SENDET TLM KANAL 0,SYSTEM STATUS
'(FLAGS für ACS,FWD/REV, ACS_LO/HI/MAX)
'---------------------------------------------------------------------------------
define Value byte[9] ' Varibel für den Wert der auf den LEDs dargestellt werden soll
'---------- INIT---------------
'FREIP7=off:FREIP8=off:FREIP9=off:FREIP10=off
'FREIP11=off:FREIP12=off:FREIP13=off:FREIP14=off
'FREIP15=off:FREIP16=off
gosub SUBSYS_PWR_ON
beep 368,10,0:pause 50
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
gosub NO_ACS_INT:beep 368,10,0:SYS ACS_HI 'LO,HI und MAX
'------------ ANTRIEB -------------------------
REV_L=on:REV_R=on:SYS PLM_SLOW
'--------- IR-DATENFORMAT -----------------
'gosub REC80
gosub RC5
'--------------------------------------------
'--- DEMO REMOTE CONTROL ---
'--------------------------------------------
#loop
pause 2:SYS COMNAV_STATUS
if IR_F = off then goto loop
'-------- DATEN HOLEN ------------------------
gosub GET_IRDATA
' Empfangenes Signal anzeigen
if HBYTE=&HFF then goto loop
Value = LBYTE
goto SHOW_IRDATA
'---------------------------------------------
#SHOW_IRDATA
beep 200,10,0:pause 10
gosub LCONVERT
pause 500
beep 200,10,0:pause 10
gosub HCONVERT
pause 500
goto loop
'---------------------------------------------
' Die Subrotine Stellt das Low Nibble(Bit0-Bit3)
' der Variable Value auf den vier LED Binär da
#LCONVERT
gosub LEDSOFF
if (Value AND 1) = 1 then gosub LED1ON
if (Value AND 2) = 2 then gosub LED2ON
if (Value AND 4) = 4 then gosub LED3ON
if (Value AND 8) = 8 then gosub LED4ON
return
' Die Subrotine Stellt das High Nibble(Bit4-Bit7)
' der Variable Value auf den vier LED Binär da
#HCONVERT
gosub LEDSOFF
if (Value AND 16) = 16 then gosub LED1ON
if (Value AND 32) = 32 then gosub LED2ON
if (Value AND 64) = 64 then gosub LED3ON
if (Value AND 128) = 128 then gosub LED4ON
return
'IIIIIIIIIII LED DRIVER IIIIIIIIIIIIIIIII
#LED1ON
LED1_F=on:goto EXTPORT_WRITE
#LED1OFF
LED1_F=off and &HEF:goto EXTPORT_WRITE
#LED2ON
LED2_F=on:goto EXTPORT_WRITE
#LED2OFF
LED2_F=off:goto EXTPORT_WRITE
#LED3ON
LED3_F=on:goto EXTPORT_WRITE
#LED3OFF
LED3_F=off:goto EXTPORT_WRITE
#LED4ON
LED4_F=on:goto EXTPORT_WRITE
#LED4OFF
LED4_F=off:goto EXTPORT_WRITE
#LEDSOFF
EXTPORT=EXTPORT and &H0F:goto EXTPORT_WRITE
#EXTPORT_WRITE
SYS SYSTEM:pulse STROBE:RETURN
'IIIIII SYSTEMROUTINEN COMM/NAV SYSTEM IIIII
#GET_IRDATA
SUBCMD=1:sys COMNAV:return
#SEND_IRDATA
SUBCMD=0:sys COMNAV:return
#RC5
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFC
HBYTE=00:SUBCMD=2:sys COMNAV:return
#RC5_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HFE)or 2
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H01)and&HFD
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H03)
HBYTE=00:SUBCMD=2:sys COMNAV:return
'IIIIII SYSTEMROUTINEN SYSTEM IIIIIIIIIIII
#NO_ACS_INT
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFB
HBYTE=00:SUBCMD=2:sys COMNAV:return
#ACS_INT_200
SUBCMD=4:sys COMNAV:LBYTE= HBYTE or &H04
HBYTE=50:SUBCMD=2:sys COMNAV:return
#SUBSYS_PWR_ON
sdio=on:sclio=on:strobe=off:EXTPORT=(EXTPORT and &HFE)or 8
sys SYSTEM:return
#SUBSYS_PWR_OFF
EXTPORT=(EXTPORT and &HF7)or 1:sys SYSTEM
deact sdio:deact sclio:return
#CLR_DISTANCE
SUBCMD=3:sys COMNAV:return
#L_DISTANCE
SUBCMD=6:sys COMNAV:return
#R_DISTANCE
SUBCMD=7:sys COMNAV:return
Mit den Programm wird auf den vier LEDs der Binärwert ein IR- Signal dargestellt (Fernbedienung). Die Subrotienen können aber auch leicht dazu verwendet werden um andere Werte im Binär Format dazustellen.
Es wird in diesen Programm erst das Low Nibble(Bit0-Bit3) dargestellt und nach einer kleinen Zeitverzögerung dann das High Nibble(Bit4-Bit7).
Der Code
' Sascha Kröger
' 12.03.2004
' Programm ShowDual.bas
'
' ---------------------------------------------------------------------
' FUNKTION DES PROGRAMMS
'----------------------------------------------------------------------
' In diesen Programm wird der Wert eines IR- Fernbidinung Signal auf
' den LED des Roboters in Binärform Dargestellt.
' Dieses Programm bietet die Möglichkeit ein IR Signal darzustellen
' wenn man nur die Grundversion von CCRP5 hat. Wenn man die Erweiterung
' mit den LCD hat, dann wird man das sicher besser dort darstellen lassen.
' Die Subrotienen LCONVERT und HCONVERT Stellen den Wert der Variable
' Value da, diese Subrotienen lassen sich auch leicht in anderen
' Programmen implementieren.
'------------------------------------------------------------------------
'--------------------------
'------ I/O PORTS ---------
'--------------------------
'- INTERFACE LCD/EXTPORT --
define sdio port[1]
define sclio port[3]
define strobe port[4]
'-- INTERFACE COM/NAV -----
define DATALINE port[1]
define CLOCKLINE port[2]
'---- FREIE PORTS ---------
define FREIP7 port[7]
define FREIP8 port[8]
define FREIP9 port[9]
define FREIP10 port[10]
define FREIP11 port[11]
define FREIP12 port[12]
define FREIP13 port[13]
define FREIP14 port[14]
define FREIP15 port[15]
define FREIP16 port[16]
'--------------------------
'------ SENSORS ---------
'--------------------------
define LIGHT_L ad[7]
define LIGHT_R ad[6]
define SYS_VOLTS ad[3]
define CHRG_CURRENT ad[2]
define SYS_CURRENT ad[1]
define MIC ad[4]
define TOUCH ad[5]
'---------------------------
'------ DRIVE -------------
'---------------------------
define SPEED_L da[1]
define SPEED_R da[2]
define REV_L port[6]
define REV_R port[5]
'--------------------------
'---- SYSTEM MEMORY -------
'--------------------------
'--- INTERFACE BUFFER ----
define LBYTE byte[1]
define HBYTE byte[2]
define SUBCMD byte[3]
'---- OPERATION DATA ------
define EXTPORT byte[4]
define LED1_F bit[29]
define LED2_F bit[30]
define LED3_F bit[31]
define LED4_F bit[32]
define SYSTEM_STATUS byte[5]
define ACSL_F bit[33]
define ACSR_F bit[34]
define IR_F bit[35]
'--------------------------
'---- USER MEMORY -------
'--------------------------
define CMDC byte[6]
define ADRC byte[7]
'--- SYSTEMROUTINEN -----------
define PLM_SLOW &H01C4
define SYSTEM &H01C9
define COMNAV &H0154
'- ERWEITERTE SYSTEM ROUTINEN -
define REVR &H0101 'ANTRIEB RECHTS RÜCKWÄRTS
define REVL &H0106 'ANTRIEB LINKS RÜCKWÄRTS
define FWDR &H010B 'ANTRIEG RECHTS VORWÄRTS
define FWDL &H0110 'ANTRIEB LINKS VORWÄRTS
define ROTR &H0115 'RECHTS DREHEN
define ROTL &H0119 'LINKS DREHEN
define REV &H011D 'RÜCKWÄRTS
define FWD &H0121 'VORWÄRTS
define COMNAV_STATUS &H0125 'UPDATED ALLE FLAGS IM STATUS-REGISTER
define ACS_LO &H01E1 'ACS POWER
define ACS_HI &H01E9 '
define ACS_MAX &H01F1 '
define SEND_TLM &H014A 'SENDET TELEMETRIE (CH=HBYTE,DATEN=LBYTE)
define SEND_SPEEDR &H0134 'SENDET TLM KANAL 8,PLM RECHTS
define SEND_SPEEDL &H013A 'SENDET TLM KANAL 7,PLM LINKS
define SEND_SYSSTAT &H0144 'SENDET TLM KANAL 0,SYSTEM STATUS
'(FLAGS für ACS,FWD/REV, ACS_LO/HI/MAX)
'---------------------------------------------------------------------------------
define Value byte[9] ' Varibel für den Wert der auf den LEDs dargestellt werden soll
'---------- INIT---------------
'FREIP7=off:FREIP8=off:FREIP9=off:FREIP10=off
'FREIP11=off:FREIP12=off:FREIP13=off:FREIP14=off
'FREIP15=off:FREIP16=off
gosub SUBSYS_PWR_ON
beep 368,10,0:pause 50
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
gosub NO_ACS_INT:beep 368,10,0:SYS ACS_HI 'LO,HI und MAX
'------------ ANTRIEB -------------------------
REV_L=on:REV_R=on:SYS PLM_SLOW
'--------- IR-DATENFORMAT -----------------
'gosub REC80
gosub RC5
'--------------------------------------------
'--- DEMO REMOTE CONTROL ---
'--------------------------------------------
#loop
pause 2:SYS COMNAV_STATUS
if IR_F = off then goto loop
'-------- DATEN HOLEN ------------------------
gosub GET_IRDATA
' Empfangenes Signal anzeigen
if HBYTE=&HFF then goto loop
Value = LBYTE
goto SHOW_IRDATA
'---------------------------------------------
#SHOW_IRDATA
beep 200,10,0:pause 10
gosub LCONVERT
pause 500
beep 200,10,0:pause 10
gosub HCONVERT
pause 500
goto loop
'---------------------------------------------
' Die Subrotine Stellt das Low Nibble(Bit0-Bit3)
' der Variable Value auf den vier LED Binär da
#LCONVERT
gosub LEDSOFF
if (Value AND 1) = 1 then gosub LED1ON
if (Value AND 2) = 2 then gosub LED2ON
if (Value AND 4) = 4 then gosub LED3ON
if (Value AND 8) = 8 then gosub LED4ON
return
' Die Subrotine Stellt das High Nibble(Bit4-Bit7)
' der Variable Value auf den vier LED Binär da
#HCONVERT
gosub LEDSOFF
if (Value AND 16) = 16 then gosub LED1ON
if (Value AND 32) = 32 then gosub LED2ON
if (Value AND 64) = 64 then gosub LED3ON
if (Value AND 128) = 128 then gosub LED4ON
return
'IIIIIIIIIII LED DRIVER IIIIIIIIIIIIIIIII
#LED1ON
LED1_F=on:goto EXTPORT_WRITE
#LED1OFF
LED1_F=off and &HEF:goto EXTPORT_WRITE
#LED2ON
LED2_F=on:goto EXTPORT_WRITE
#LED2OFF
LED2_F=off:goto EXTPORT_WRITE
#LED3ON
LED3_F=on:goto EXTPORT_WRITE
#LED3OFF
LED3_F=off:goto EXTPORT_WRITE
#LED4ON
LED4_F=on:goto EXTPORT_WRITE
#LED4OFF
LED4_F=off:goto EXTPORT_WRITE
#LEDSOFF
EXTPORT=EXTPORT and &H0F:goto EXTPORT_WRITE
#EXTPORT_WRITE
SYS SYSTEM:pulse STROBE:RETURN
'IIIIII SYSTEMROUTINEN COMM/NAV SYSTEM IIIII
#GET_IRDATA
SUBCMD=1:sys COMNAV:return
#SEND_IRDATA
SUBCMD=0:sys COMNAV:return
#RC5
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFC
HBYTE=00:SUBCMD=2:sys COMNAV:return
#RC5_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HFE)or 2
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H01)and&HFD
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H03)
HBYTE=00:SUBCMD=2:sys COMNAV:return
'IIIIII SYSTEMROUTINEN SYSTEM IIIIIIIIIIII
#NO_ACS_INT
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFB
HBYTE=00:SUBCMD=2:sys COMNAV:return
#ACS_INT_200
SUBCMD=4:sys COMNAV:LBYTE= HBYTE or &H04
HBYTE=50:SUBCMD=2:sys COMNAV:return
#SUBSYS_PWR_ON
sdio=on:sclio=on:strobe=off:EXTPORT=(EXTPORT and &HFE)or 8
sys SYSTEM:return
#SUBSYS_PWR_OFF
EXTPORT=(EXTPORT and &HF7)or 1:sys SYSTEM
deact sdio:deact sclio:return
#CLR_DISTANCE
SUBCMD=3:sys COMNAV:return
#L_DISTANCE
SUBCMD=6:sys COMNAV:return
#R_DISTANCE
SUBCMD=7:sys COMNAV:return