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