Dieses Programm
sollte bereits "AB" auf das LC-Display am Stecker LCD1 schreiben.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"
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
stammt aus dem PDF "LC-Display_am_Robby" von user jonas. "lcd_" habe ich selbst davorgesetzt, weil es ja so definiert ist.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







Zitieren

Lesezeichen