Hi Dirk,
für die CC1 verwende ich folgenden (selbst geschriebenen \/) Code:
Code:'-------------------------- '------ 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 TX port[7] define RX 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] '--------UART BYTE---------- define status byte[7] define ready byte[8] '-------------------------- '------ 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! '--- 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) '---------- INIT--------------- ' Freie Ports initialisieren: RX=off:TX=off ' Subsysteme einschalten: gosub SUBSYS_PWR_ON beep 368,10,0:pause 50 gosub LEDSOFF 'Alle LEDs auf Robby aus ' ACS initialisieren: 'gosub NO_ACS_INT:beep 368,10,0:SYS ACS_HI 'Kein Interrupt, Power HI '------------ ANTRIEB ------------------------- REV_L=on:REV_R=on:SYS PLM_SLOW '---------------------------------------------------------------------- ' HAUPTPROGRAMM: #Main gosub LED1ON get status gosub LED2ON speed_L = 50 speed_R = 50 SYS FWD if (status = 0) then goto links if (status = 1) then goto rechts if (status = 2) then goto gerade goto main #links speed_L = 60 speed_R = 60 SYS ROTL pause 3 goto Main #rechts speed_L = 60 speed_R = 60 SYS ROTR pause 3 goto Main #gerade speed_L = 50 speed_R = 50 SYS FWD pause 3 goto Main '--------------------------------------------------------------- '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 #WAIT_PING SUBCMD=8: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 '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"
... der Code am RN-Control sieht so aus:
Code:' nötige Definitionen $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 Config Servos = 2 , Servo1 = Porta.0 , Servo2 = Porta.1 , Reload = 20 Config Adc = Single , Prescaler = Auto Config Porta.0 = Output Config Pinc.6 = Output Config Pinc.7 = Output Config Pind.4 = Output 'Ports für rechten Motor Config Pinb.0 = Output Config Pinb.1 = Output Config Pind.5 = Output Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Pwm1a = 0 Pwm1b = 0 Tccr1b = Tccr1b Or &H02 Config Pina.2 = Input Config Pina.3 = Output Config Pina.4 = Input Portd.4 = 0 Enable Interrupts ' Variablen definieren Dim I As Byte Dim Us As Byte Dim X As Byte Dim Status As Byte Dim Zeitmessung As Word Dim Entfernung As Word ' Hauptprogramm Do Gosub Usscan Loop End ' Unterprogramme Usscan: ' Scanschleife For I = 27 To 85 Servo(1) = I Servo(2) = 50 Pulseout Porta , 3 , 40 Pulsein Zeitmessung , Pina , 4 , 1 Zeitmessung = Zeitmessung * 10 Entfernung = Zeitmessung / 58 X = I If Entfernung < 40 And I < 50 Then Gosub Links End If If Entfernung < 40 And I > 50 Then Gosub Rechts End If If Entfernung > 40 Then Gosub Gerade Waitms 35 Next Return Links: Status = 0 Printbin Status Servo(1) = X Servo(2) = 50 Waitms 50 Return Rechts: Status = 1 Printbin Status Servo(1) = X Servo(2) = 50 Waitms 50 Return Gerade: Status = 2 Printbin Status Return
Viele Grüße
ikarus_177







Zitieren

Lesezeichen