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:
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"
Habs versucht möglichst übersichtlich zu gestalten.

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