Hallo Torrentula,
hier mal ein "Leerprogramm" für den CCRP5 mit Erweiterung. Da sind alle Definitionen, Variablen und Unterprogramme richtig drin.
Gruß DirkCode:'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 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] '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 'LEDPORT-Zugriff ermöglichen CC2POWER=on 'PWR und +5V (für CC2 und Experimentierplatine) einschalten ' Subsysteme einschalten: gosub SUBSYS_PWR_ON ' LC-Display initialisieren: 'gosub LCD_INIT beep 368,10,0:pause 50 gosub LEDSOFF 'Alle LEDs auf Robby aus gosub LOFF 'Alle LEDs auf Basiserweiterung 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 '------------ ANTRIEB ------------------------- REV_L=on:REV_R=on:sys PLM_SLOW '---------------------------------------------------------------------- ' Hier ggf. weitere Initialisierungs-Befehle!!! '---------------------------------------------------------------------- ' PROGRAMM: ' Hier mit dem Programm beginnen!!! '---------------------------------------------------------------------- ' 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"







Zitieren
Lesezeichen