Also das Problem mit "fahren" hab ich jetzt gelöst.
Hier mal mein jetztiger Stand:
Code:
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'IIIIIIIIII          ROBBY RP5 - Leerprogramm 1            IIIIIIIIIIII
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'PROGRAMM-RUMPF ZUM START EIGENER ENTWICKLUNGEN

' Programm-Name: LEERPROGRAMM_RP5.bas
' Hardware:      Robby RP5 OHNE Erweiterungsplatine
' Treiber:       P5DRIV.S19

'----------------------------------------------------------------------
'                       FUNKTION DES PROGRAMMS
'----------------------------------------------------------------------
'
'

'----------------------------------------------------------------------
'ACHTUNG:
' Der erste Schritt in der Initialisierung Ihres Programms sollte immer die Zeile

'                        REV_L=on:REV_R=on:sys PLM_SLOW

' enthalten. Diese Zeile initialisiert die Ports für die Richtungsumschaltung
' des Antriebs und die PLM Frequenz. Initialisieren Sie die Ports auch, wenn der
' Antrieb nicht benutzt werden soll!

' DER BETRIEB DER MOTOREN OHNE DIESE INITIALISIERUNG FÜHRT UNWEIGERLICH ZUR
' ZERSTÖRUNG DER ANTRIEBSELEKTRONIK !!
'----------------------------------------------------------------------
'------ Konstanten --------
define V_OFFSET     0 '= CHRG_CURRENT - SYS_VOLTS (Abgleichwert)
define V_ADJUST     2 'Eichwert Spannungen (Bauteile-abhängig!)
'Hier weitere Konstanten-Definitionen!

'--------------------------
'------ 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 FREIAD8      ad[8] 'Freier A/D-Wandler
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 DEVICEADDRESS byte[6]
'User Memory ab BYTE[7] frei!
define GP            byte[6]
define MAXLIGHT      byte[7]
define GP1           byte[8]
define SAMPLE        byte[9]
define HSAMPLE       byte[10]

'--- 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 LO
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 INBYTE byte[24]
define OUTBYTE byte[23]

'---------- INIT---------------
' Freie Ports initialisieren:
FREIP7=off:FREIP8=off:FREIP9=off:FREIP10=off
FREIP11=off:FREIP12=off:FREIP13=off:FREIP14=off
FREIP15=off:FREIP16=off

' Subsysteme einschalten:
gosub SUBSYS_PWR_ON

beep 368,10,0:pause 50
gosub LEDSOFF 'Alle LEDs auf Robby aus

' ACS initialisieren:
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
'gosub NO_ACS_INT:beep 368,10,0:sys ACS_HI 'oder: ACS_LO, ACS_MAX
' ODER ...
'---- SYSTEM OPERATION MODE (ACS INTERRUPT 200 ms) ----
'interrupt ACS_INTERRUPT:gosub ACS_INT_200:beep 368,10,0:sys ACS_HI

' IR-COMM initialisieren:
'--------- IR-DATENFORMAT -----------------
'gosub RC5 'oder: REC80
' ODER ...
'---- IRCOMM OPERATION MODE (INTERRUPT ON) ----
'interrupt IRCOMM_INTERRUPT:gosub RC5_INT 'oder: REC80_INT
'---------- SET ADDRESSED MODE -----------------
'DEVICEADDRESS=1 'oder: 2..15
'gosub SET_ADDRESS
gosub NO_ACS_INT:beep 368,10,0:SYS ACS_MAX

'------------ ANTRIEB -------------------------
REV_L=on:REV_R=on:sys PLM_SLOW
'----------------------------------------------------------------------
' Hier ggf. weitere Initialisierungs-Befehle!!!

'----------------------------------------------------------------------
' PROGRAMM:
' Hier mit dem Programm beginnen!!!
#Start
gosub CLR_distance:gosub LEDSOFF
INBYTE=0:OUTBYTE=0
#loop
gosub micro
if HSAMPLE >= 10 then INBYTE=25:gosub fahren
goto loop
'----------------------------------------------------------------------
' UNTERPROGRAMME:
#fahren    'benötigt INBYTE und ACS
gosub L_DISTANCE         
if LBYTE=INBYTE then gosub stop
SYS FWDR:SYS FWDL:SPEED_L=155:SPEED_R=155
SYS COMNAV_STATUS
if (ACSL_F and ACSR_F)=on then gosub rotate
if ACSL_F=on then gosub move_right
if ACSR_F=on then gosub move_left
goto fahren


#stop
SYS FWDR:SYS FWDL:SPEED_L=0:SPEED_R=0:gosub Start

#move_right
SPEED_R=100:SPEED_L=255:return

#move_left
SPEED_L=100:SPEED_R=255:return

#rotate
SPEED_L=150:SPEED_R=150:SYS ROTR:return

#micro
for GP=1 to 100
SAMPLE=MIC
if SAMPLE > HSAMPLE then HSAMPLE=SAMPLE
next
if HSAMPLE < 10 then gosub LED1ON else gosub LED1OFF
if HSAMPLE >= 10 then return
HSAMPLE=0
goto micro

'----------------------------------------------
'--------- ACS INTERRUPT SERVICE --------------
'----------------------------------------------
'#ACS_INTERRUPT 'Beispiel für eine Interruptroutine!
'sys COMNAV_STATUS
'if ACSL_F=on then gosub LED4ON else gosub LED4OFF
'if ACSR_F=on then gosub LED1ON else gosub LED1OFF
'pause 5:gosub LED1OFF:gosub LED4OFF:return interrupt
'---------------------------------------------
' ODER ... (ACHTUNG: Nur EINE Interrupt-Routine ist möglich!!!)
'---------------------------------------------
'-------- IR-COMM INTERRUPT SERVICE ----------
'---------------------------------------------
'#IRCOMM_INTERRUPT 'Beispiel für eine Interruptroutine!
'sys COMNAV_STATUS
'gosub GET_IRDATA
'gosub LED1ON:pause 5:gosub LED1OFF:return interrupt
'---------------------------------------------

'IIIIIIII Binärausgabe mit den 4 LEDs IIIIIIII
' Der Robby kann OHNE zusätzliche Hardware keine Werte (z.B.
' seiner Sensoren) anzeigen. Diese Routine gibt VALUE mit den
' 4 LEDs in Binärform (als 2 Nibble mit je 4 Bit) aus.
' Die Variable VALUE muss als BYTE definiert sein!
'#LEDBINOUT 'Ausgabe 1. Nibble (low)
'gosub LEDSOFF: gosub LED1FLASH: gosub LED1FLASH
'gosub LED1FLASH: gosub LED1FLASH: gosub LED1FLASH
'if (VALUE and &B1) <> 0 then gosub LED1ON
'if (VALUE and &B10) <> 0 then gosub LED2ON
'if (VALUE and &B100) <> 0 then gosub LED3ON
'if (VALUE and &B1000) <> 0 then gosub LED4ON
'pause 100 'Ausgabe 2. Nibble (high)
'gosub LEDSOFF: gosub LED2FLASH: gosub LED2FLASH
'gosub LED2FLASH: gosub LED2FLASH: gosub LED2FLASH
'if (VALUE and &B10000) <> 0 then gosub LED1ON
'if (VALUE and &B100000) <> 0 then gosub LED2ON
'if (VALUE and &B1000000) <> 0 then gosub LED3ON
'if (VALUE and &B10000000) <> 0 then gosub LED4ON
'pause 100: return
'#LED1FLASH
'gosub LED1ON: pause 5: gosub LED1OFF: pause 5: return
'#LED2FLASH
'gosub LED2ON: pause 5: gosub LED2OFF: pause 5: return

'Binär-Dezimal-Tabelle (4-Bit):
' WERT:   0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
' LED1->  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1
' LED2->  0  0  1  1  0  0  1  1  0  0  1  1  0  0  1  1
' LED3->  0  0  0  0  1  1  1  1  0  0  0  0  1  1  1  1
' LED4->  0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1
'
' Der Dezimal-WERT kann in der 1. Zeile abgelesen werden, wenn man
' die zutreffende LED-Kombination aussucht (1 -> an, 0 -> aus).
' Der Wert des 2. Nibbles (high) kann genauso abgelesen werden,
' muss aber noch mit 16 multipliziert und zum 1. Nibble addiert
' werden, um den ganzen 8-Bit-Dezimalwert (0..255) zu erhalten.

'----------------------------------------------------------------------

'IIIIIIIIIII LED DRIVER IIIIIIIIIIIIIIIII
#LED1ON
LED1_F=on:goto EXTPORT_WRITE
#LED1OFF
LED1_F=off :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
#LEDSON
EXTPORT=EXTPORT or &HF0
#EXTPORT_WRITE
LBYTE=EXTPORT:sys SYSTEM:return

'IIIIII SYSTEMROUTINEN COMM/NAV SYSTEM  IIIII
#GET_IRDATA
SUBCMD=1:sys COMNAV:return
#SEND_IRDATA
SUBCMD=0:sys COMNAV:return
#GET_TLM
SUBCMD=1:sys COMNAV:LBYTE= LBYTE or (HBYTE shl 6)
HBYTE= HBYTE shr 2: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
#ADDRESSED_MODE_ON
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H10)
HBYTE=00:SUBCMD=2:sys COMNAV:return
#ADDRESSED_MODE_OFF
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HEF)
HBYTE=00:SUBCMD=2:sys COMNAV:return
#SET_ADDRESS
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H10)
HBYTE=00:SUBCMD=2:sys COMNAV
LBYTE=DEVICEADDRESS:SUBCMD=5:sys COMNAV:return
#GET_ADDRESSED_DATA
SUBCMD=1:sys COMNAV:HBYTE=HBYTE and &H7:return
#SEND_ADDRESSED_DATA
HBYTE=(HBYTE shl 3)or DEVICEADDRESS:SUBCMD=0:sys COMNAV:return
#WAIT_PING
SUBCMD=8: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

'---------COM/NAV GERÄTEREIBER -------------
'syscode "p5driv.s19"
Bei diesem Prog hängt sich mein robby beim Zweiten Durchgang zwischen
if HSAMPLE < 10 then gosub LED1ON else gosub LED1OFF
und if HSAMPLE >= 10 then gosub fahren
auf.(denke ich zumindest)
vielleicht kann mir ja jemand helfen.
Fänd ich gut

Gruß dj