Moin
Ich hab meinen Robby gestern bekommen und nun war ich dabei mal an Program größtenteils selber zu schreiben.
Ich hab versucht sowohl IR als auch ACS mit Interrupt zu betreiben, hab mir jeweils beide Beispielprogramme angeschaut und mir dann folgendes zusammengereimt:
Habs versucht möglichst übersichtlich zu gestalten.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 FreiPo7 port[7] define FreiPo8 port[8] define FreiPo9 port[9] define FreiPo10 port[10] define FreiPo11 port[11] define FreiPo12 port[12] define FreiPo13 port[13] define FreiPo14 port[14] define FreiPo15 port[15] define FreiPo16 port[16] '-------------------------- '------ SENSORS --------- '-------------------------- 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 SPEED byte[6] define MODE byte[7] define ANZEIGEMODE byte[8] '--- 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 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) '----------------------------------------- '---- INITIALISIERUNG ---- '----------------------------------------- '----------------Frei Ports--------------- FreiPo7=off FreiPo8=off FreiPo9=off FreiPo10=off FreiPo11=off FreiPo12=off FreiPo13=off FreiPo14=off FreiPo15=off FreiPo16=off '----------------Andere Sachen------------ REV_L=on:REV_R=on:SYS PLM_SLOW 'Motor interrupt INT 'Interruptfunktion=#INT gosub SUBSYS_PWR_ON 'Subsystem an gosub RC5_INT 'RC5 Protokol gosub ACS_INT_200 'ACS Interrupt SYS ACS_lo 'minimale ACS Leistung 'SPEED_L=120 'Geschwindigkeit links 120/255 'SPEED_R=120 'Geschwindigkeit rechts 120/255 '------------------Fertig?---------------- beep 368,10,0 'Beep :) pause 50 'Kleinen Moment warten '------------------------------------------ '---- HAUPTSCHLEIFE ---- '------------------------------------------ #loop beep 368,10,0 pause 50 goto loop #INT SYS COMNAV_STATUS 'Com/Nav abfragen '-------IRDA----------------- gosub get_irdata 'Ir Data holen if LBYTE=61 then gosub fahren 'Power Knopf gedrückt '-------ACS------------------ SYS COMNAV_STATUS 'Com/Nav abfragen if (ACSL_F and ACSR_F)=on then gosub Hzentral if ACSL_F=on then gosub Hlinks if ACSR_F=on then gosub Hrechts return interrupt #fahren led1an RETURN #Hlinks 'Hindernis Links led3an RETURN #Hrechts 'Hindernis Rechts led4an RETURN #Hzentral 'Hindernis Zentral led2an RETURN '------------------------------------------- '---- DIV. FUNKTIONEN ---- '------------------------------------------- #led1an LED1_F=on:goto EXTPORT_WRITE #led1aus LED1_F=off and &HEF:goto EXTPORT_WRITE #led2an LED2_F=on:goto EXTPORT_WRITE #led2aus LED2_F=off:goto EXTPORT_WRITE #led3an LED3_F=on:goto EXTPORT_WRITE #led3aus LED3_F=off:goto EXTPORT_WRITE #led4an LED4_F=on:goto EXTPORT_WRITE #led4aus LED4_F=off:goto EXTPORT_WRITE #ledaus EXTPORT=EXTPORT and &H0F:goto EXTPORT_WRITE #EXTPORT_WRITE SYS SYSTEM:pulse STROBE:RETURN '-----------SYSTEMROUTINEN COMM/NAV------------------ #get_irdata SUBCMD=1:sys COMNAV:return #send_irdata SUBCMD=0:sys COMNAV: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=0:SUBCMD=2:sys COMNAV:return '-----------SYSTEMROUTINEN SYSTEM--------------------- #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" '-------------------------- '------ 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 FreiPo7 port[7] define FreiPo8 port[8] define FreiPo9 port[9] define FreiPo10 port[10] define FreiPo11 port[11] define FreiPo12 port[12] define FreiPo13 port[13] define FreiPo14 port[14] define FreiPo15 port[15] define FreiPo16 port[16] '-------------------------- '------ SENSORS --------- '-------------------------- 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 SPEED byte[6] define MODE byte[7] define ANZEIGEMODE byte[8] '--- 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 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) '----------------------------------------- '---- INITIALISIERUNG ---- '----------------------------------------- '----------------Frei Ports--------------- FreiPo7=off FreiPo8=off FreiPo9=off FreiPo10=off FreiPo11=off FreiPo12=off FreiPo13=off FreiPo14=off FreiPo15=off FreiPo16=off '----------------Andere Sachen------------ REV_L=on:REV_R=on:SYS PLM_SLOW 'Motor interrupt INT 'Interruptfunktion=#INT gosub SUBSYS_PWR_ON 'Subsystem an gosub RC5_INT 'RC5 Protokol gosub ACS_INT_200 'ACS Interrupt SYS ACS_lo 'minimale ACS Leistung 'SPEED_L=120 'Geschwindigkeit links 120/255 'SPEED_R=120 'Geschwindigkeit rechts 120/255 '------------------Fertig?---------------- beep 368,10,0 'Beep :) pause 50 'Kleinen Moment warten '------------------------------------------ '---- HAUPTSCHLEIFE ---- '------------------------------------------ #loop beep 368,10,0 pause 50 goto loop #INT SYS COMNAV_STATUS 'Com/Nav abfragen '-------IRDA----------------- gosub get_irdata 'Ir Data holen if LBYTE=61 then gosub fahren 'Power Knopf gedrückt '-------ACS------------------ SYS COMNAV_STATUS 'Com/Nav abfragen if (ACSL_F and ACSR_F)=on then gosub Hzentral if ACSL_F=on then gosub Hlinks if ACSR_F=on then gosub Hrechts return interrupt #fahren led1an RETURN #Hlinks 'Hindernis Links led3an RETURN #Hrechts 'Hindernis Rechts led4an RETURN #Hzentral 'Hindernis Zentral led2an RETURN '------------------------------------------- '---- DIV. FUNKTIONEN ---- '------------------------------------------- #led1an LED1_F=on:goto EXTPORT_WRITE #led1aus LED1_F=off and &HEF:goto EXTPORT_WRITE #led2an LED2_F=on:goto EXTPORT_WRITE #led2aus LED2_F=off:goto EXTPORT_WRITE #led3an LED3_F=on:goto EXTPORT_WRITE #led3aus LED3_F=off:goto EXTPORT_WRITE #led4an LED4_F=on:goto EXTPORT_WRITE #led4aus LED4_F=off:goto EXTPORT_WRITE #ledaus EXTPORT=EXTPORT and &H0F:goto EXTPORT_WRITE #EXTPORT_WRITE SYS SYSTEM:pulse STROBE:RETURN '-----------SYSTEMROUTINEN COMM/NAV------------------ #get_irdata SUBCMD=1:sys COMNAV:return #send_irdata SUBCMD=0:sys COMNAV: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=0:SUBCMD=2:sys COMNAV:return '-----------SYSTEMROUTINEN SYSTEM--------------------- #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"
Wenn cich das Program nun kompiliere und dann starte, fäng er auch brav an zu beepen undn wenn ich IR Taste 61 drücke geht auch wunderbar led1 an. Doch die ACS scheinen nicht zu reagieren, die grüne LED des Subsystem blinkt zwar, wenn ich meine Hand davorhalte, doch die Leds gehen nicht an.
Die Acs funktionieren aber ich habs mit nem Beispielprogram ausprobiert.
Wie bekomm ich es nun hin, das beide Sensoren mit nem Interrupt funktionieren? Gibt es eine Möglichkeit die Interrupt Quellen zu diffenzieren?
Achso, ich habs auch schon mit nur 1 mal SYS COMNAV_STATUS probiert, hat auch nicht geklappt
Lesezeichen