-
hallo dirk,
die rn-control kann man entweder über isp oder (mit bootloader) per rs232 schnittstelle und nullmodemkabel (ich verwende dazu das kabel vom ccrp5) flashen.
wenn mir noch eine frage gestattet ist: die kommunikation zwischen rn-control und ccrp5 kann ich ja mit den befehlen PUT und GET im robby quelltext realisieren, oder?
danke schon mal
lg
ikarus_177
-
Ok, wenn die RN-Control auch über die serielle Schnittstelle geflasht wird, müßte man den CCRP5 wirklich abtrennen. Vorher würde ich aber auch da probieren, ob man durch deaktivieren der RX/TX-Ports (Deact ...) im CCRP5-Programm die Trennung auch so erreichen kann.
An einer seriellen Verbindung können immer nur zwei Teilnehmer gleichzeitig aktiv sein. Werden es drei (RN-Control, CCRP5 und PC), muss unbedingt einer seine TX-Leitung deaktivieren. Wenn der CCRP5 und die RN-Control aktiv sind, müßte das Kabel vom PC abgezogen werden.
Ja, beim CCRP5 kannst du die Bytes mit PUT und GET senden/empfangen.
Gruß Dirk
-
hallo dirk,
nein das bringt auch nichts, egal mache ich mir halt einen zweipoligen stecker, dann kann man das ganz bequem ein- und ausstecken.
danke sehr
hochachtungsvoll
ikarus_177
-
Hallo,
da ihr mich beim Bau meines ersten Roboters so tatkräftig unterstützt habt, möchte ich euch das Ergebnis meiner Bemühungen natürlich nicht vorenthalten.
Ein kurzes Video findet ihr unter
http://de.youtube.com/watch?v=SSTvQdfnAus
Das Video zeigt ein einfaches Hinderniserkennungsprogramm, welches die Daten des US-Sensors auswertet. Der Sharp IR-Sensor wird derzeit noch nicht abgefragt.
Der Bot ist in erster Linie als Experimentierplattform gedacht, um mich in die unendlichen Weiten der Robotik einzuführen. Da ich diesen Einstieg nach meiner Auffassung gut hingekriegt hab, ist nun schon ein weiteres Projekt in Planung, bei dem ich allerdings mehr selber anfertigen will (in erster Linie die Controllerboards), allerdings müssen dazu erst mal Sponsoren gefunden werden ;-)
über Rückmeldungen/Kritik/Anregungen freut sich
ikarus_177
-
Hallo ikarus_177,
sieht ja gut aus!
Wie funktioniert die Zusammenarbeit AVR - CC1? Hast du auf der CC1 das Original-Gateway_2.bas genommen oder etwas eigenes geschrieben? Wie sieht das Programm auf der rn-control aus?
Du siehst: Ich bin neugierig.
Gruß Dirk
-
Hi Dirk,
für die CC1 verwende ich folgenden (selbst geschriebenen \:D/) 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
-
Hallo ikarus_177,
ich hätte da mal ne frage:
Verwendest du für das RN-Control die akkus vom ccrp5 oder hast du eigene akkus?
Wenn du die von ccrp5 verwendest dann sag pls welche pins.
mfg robo-fighter
-
Hi,
ich verwende die Spannung des CCRP5 (7,2V).
Diese greife ich an Masse (ich glaube das ist Y0? Die einzelnen Pinnummern mit Bezeichnung findest du übrigens auch am Ende der Beschreibung vom CCRP5) und an Pin Y19 (ob diese Nummer stimmt, weiß ich nicht mehr so genau, auf jeden Fall ist es der vorletzte) ab.
Genauer kann ich dir das erst am Wochenende schreiben, da ich dann wieder zu Hause bin (Wochentags in Steyr).
Viele Grüße
ikarus_177
-
Danke für die info!
Gruß
robo-fighter
-
Hi,
hab noch mal nachgesehen wegen der Angaben, sie stimmen.
Viele Grüße
ikarus_177