Dieses Programm

Code:
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'IIIIIIIIII          ROBBY RP5 - Leerprogramm 2            IIIIIIIIIIII
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
'PROGRAMM-RUMPF ZUM START EIGENER ENTWICKLUNGEN

' Programm-Name: LEERPROGRAMM_BE1.bas
' Hardware:      Robby RP5 MIT Erweiterungsplatine, aber OHNE CC2
'                (und ggf. mit LC-Display an LCD1)
' Treiber:       P5DRIV12.S19
'----------------------------------------------------------------------
'------ 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]
define LSTROBE      port[7]
'-- INTERFACE COM/NAV -----
define DATALINE     port[1]
define CLOCKLINE    port[2]
'-- CC2 INTERFACE   -------
define CC2POWER     port[8]
'------ LCD INTERFACE ------
define Daten     byteport[1]
define lcd_port  byteport[2] 'Frei, wenn kein LCD angeschlossen ist!
define lcd_RS       port[14]
define lcd_RW       port[13]
define lcd_E        port[15]
'--------------------------
'------ 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]
define LEDPORT       byte[6]
define L1_F          bit[41]
define L2_F          bit[42]
define L3_F          bit[43]
define L4_F          bit[44]
define L5_F          bit[45]
define L6_F          bit[46]
define L7_F          bit[47]
define L8_F          bit[48]
'---- LCD DRIVER -------------
define lcd_buf       byte[7] 'Bytes 7 und 8 frei, wenn LCD nicht genutzt wird!
define lcd_param     byte[8]
'--------------------------
'----  USER MEMORY  -------
'--------------------------
define DEVICEADDRESS byte[9]
define zeichen       byte[10]
'User Memory ab BYTE[10] frei!

'--- SYSTEMROUTINEN -----------
define PLM_SLOW      &H01C2
define SYSTEM        &H01C7
define LED_DRIVE     &H01CA
define COMNAV        &H0144
'- 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        &H01E0   'ACS POWER LO
define ACS_HI        &H01E8   '
define ACS_MAX       &H01F0   '
define SEND_TLM      &H013A   'SENDET TELEMETRIE (CH=HBYTE, DATEN=LBYTE)
define SEND_SYSSTAT  &H0134   'SENDET TLM KANAL 0, SYSTEM STATUS
                              '(FLAGS für ACS, FWD/REV, ACS_LO/HI/MAX)
'---------- INIT---------------
' Basiserweiterung initialisieren:
LSTROBE=off:CC2POWER=on 
' Subsysteme einschalten:
gosub SUBSYS_PWR_ON
' LC-Display initialisieren:
gosub LCD_INIT
'----------------------------------------------
beep 368,10,0:pause 50
'------------ ANTRIEB -------------------------
REV_L=on:REV_R=on:sys PLM_SLOW
'----------------------------------------------------------------------
' Hier ggf. weitere Initialisierungs-Befehle!!!

'----------------------------------------------------------------------
' PROGRAMM:
lcd_E = 0
lcd_RW = 0
lcd_RS = 0 : Daten = &H0E : pulse lcd_E
lcd_RS = 0 : Daten = &H01 : pulse lcd_E
lcd_RS = 1 : Daten = 65 : pulse lcd_E
lcd_RS = 1 : Daten = 66 : pulse lcd_E
'----------------------------------------------------------------------
' UNTERPROGRAMME:

'----------------------------------------------
'--------- 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 8 LEDs der Basiserweiterung IIIIIIII
' Der Robby mit Basiserweiterung kann OHNE LC-Display keine Werte
' (z.B. seiner Sensoren) anzeigen. Diese Routine gibt VALUE mit
' den 8 LEDs der Basiserweiterung in Binärform (8 Bit) aus.
' Die Variable VALUE muss als BYTE definiert sein!
'#LBINOUT
'gosub LOFF: gosub L1FLASH: gosub L1FLASH
'gosub L1FLASH: gosub L1FLASH: gosub L1FLASH
'if (VALUE and &B1) <> 0 then gosub L1ON
'if (VALUE and &B10) <> 0 then gosub L2ON
'if (VALUE and &B100) <> 0 then gosub L3ON
'if (VALUE and &B1000) <> 0 then gosub L4ON
'if (VALUE and &B10000) <> 0 then gosub L5ON
'if (VALUE and &B100000) <> 0 then gosub L6ON
'if (VALUE and &B1000000) <> 0 then gosub L7ON
'if (VALUE and &B10000000) <> 0 then gosub L8ON
'pause 200: return
'#L1FLASH
'gosub L1ON: pause 5: gosub L1OFF: 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
' L1->  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1
' L2->  0  0  1  1  0  0  1  1  0  0  1  1  0  0  1  1
' L3->  0  0  0  0  1  1  1  1  0  0  0  0  1  1  1  1
' L4->  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).
' Für jede leuchtende LED 5 bis 8 muss noch folgender Wert addiert
' werden: L5->  + 16
'         L6->  + 32
'         L7->  + 64
'         L8->  +128
' Damit erhält man dann den ganzen 8-Bit-Dezimalwert (0..255).

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

'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
sys SYSTEM:pulse STROBE:return

'--- LEDS AUF DER BASIS ERWEITERUNG  ------
#L1ON
L1_F=on:goto LEDPORT_WRITE
#L1OFF
L1_F=off :goto LEDPORT_WRITE
#L2ON
L2_F=on:goto LEDPORT_WRITE
#L2OFF
L2_F=off :goto LEDPORT_WRITE
#L3ON
L3_F=on:goto LEDPORT_WRITE
#L3OFF
L3_F=off :goto LEDPORT_WRITE
#L4ON
L4_F=on:goto LEDPORT_WRITE
#L4OFF
L4_F=off :goto LEDPORT_WRITE
#L5ON
L5_F=on:goto LEDPORT_WRITE
#L5OFF
L5_F=off :goto LEDPORT_WRITE
#L6ON
L6_F=on:goto LEDPORT_WRITE
#L6OFF
L6_F=off :goto LEDPORT_WRITE
#L7ON
L7_F=on:goto LEDPORT_WRITE
#L7OFF
L7_F=off :goto LEDPORT_WRITE
#L8ON
L8_F=on:goto LEDPORT_WRITE
#L8OFF
L8_F=off :goto LEDPORT_WRITE
#LOFF
LEDPORT=0 :goto LEDPORT_WRITE
#LON
LEDPORT=&HFF
#LEDPORT_WRITE
sys LED_DRIVE:pulse LSTROBE:return

'----------------------------------------
'------------- LCD ROUTINES -------------
'----------------------------------------
#LCD_INIT
'alle ports 0
 lcd_port = OFF

' 8-Bit-Modus aktivieren
  lcd_param=&H38 : gosub LCD_WRITECMD

' mit 8-Bit-Command in 4-Bit-Modus umschalten
  lcd_port=&B00000010
  tog lcd_e
  tog lcd_e

' ab jetzt 4-Bit-Modus
  lcd_param = &H28 : gosub LCD_WRITECMD
  lcd_param = &H0C : gosub LCD_WRITECMD

' Display loeschen
#LCD_CLS
  lcd_param = &H02 : gosub LCD_WRITECMD
  lcd_param = &H01 : gosub LCD_WRITECMD
  return

' Zeilenwechsel
#LCD_GOTOLINE
  if lcd_param = 1 then lcd_param = &H80
  if lcd_param = 2 then lcd_param = &HC0
  goto LCD_WRITECMD

' LCD-Kommando
#LCD_WRITECMD
  lcd_buf = OFF
  goto LCD_WRITE

' Zeichenausgabe
#LCD_WRITECHAR
  lcd_buf = &B00100000

' Kommando oder Zeichen an Display senden
#LCD_WRITE
  lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
  tog lcd_e
  tog lcd_e
  lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
  tog lcd_e
  tog lcd_e
  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 "p5driv12.s19"
sollte bereits "AB" auf das LC-Display am Stecker LCD1 schreiben.

Dieses tut es aber nicht.

Stattdessen leuchtet die gelbe Kontrollleuchte an der Basiserweiterung, auf der BE werden LED 1 und 5 eingeschaltet gleichzeitig erlischt die Kontrollleuchte wieder, die grüne LED für den Co-Prozessor (IR;COM/NAV) blinkt kurz auf und die LEDs leuchten immernoch. Zusätzlich leuchten auf Robby noch die LEDs 1 und 4.

Kann mir jemand helfen?

P.S.: Das Huptprogramm also
Code:
lcd_E = 0
lcd_RW = 0
lcd_RS = 0 : Daten = &H0E : pulse lcd_E
lcd_RS = 0 : Daten = &H01 : pulse lcd_E
lcd_RS = 1 : Daten = 65 : pulse lcd_E
lcd_RS = 1 : Daten = 66 : pulse lcd_E
stammt aus dem PDF "LC-Display_am_Robby" von user jonas. "lcd_" habe ich selbst davorgesetzt, weil es ja so definiert ist.