PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grundsätzliches zu RP6 und Bascom



tfv
30.12.2007, 20:20
(Frage passt im Prinzip sowohl in RP6 als auch in Bascom Board, hab mal hier gepostet)
Bin seit kurzem auch stolzer Besitzer eines RP6, also noch Neuling.

C- Programmierung mit WinAVR, inkl. Programmupload usw. ist mir klar und funktioniert.

Alternativ wollte ich mir auch die BASCOM Entwicklungsumgebung mal ansehen, da ich glaube, dass da die Einstiegshürde bei meinem Sohn niedriger wäre.

Soweit ich verstehe, gibt es im Moment zwei wesentliche Handycaps bei der Bascom-Programmierung des RP6:

1.) Ein direkter Upload aus der IDE via mitgeliefertem USB-UART Anschluss ist nicht möglich, allerdings funktioniert der Umweg, die in Bascom erzeugten Hex-Files per RP6Loader hochzuladen.

Hab mal ein Demoprogramm probiert, hat aber nicht funktioniert, Terminalprogramm des RP6Loaders bringt nur nicht lesbare Steuerzeichen nebst dem Hinweis: [RP6BOOT]



$regfile = "m32def.dat" 'Die Anweisung bestimmt Controllertyp, hier AVR Mega 32
$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
$swstack = 32 'wirklich nötig werden
$hwstack = 32
$crystal = 16000000 'Die Frequenz des verwendeten Quarzes

$baud = 9600 'Die Baudrate für RS232 Ausgabe.
'Sie muss auch bei PC Terminalprogramm identisch sein
do
Print "**** RN-CONTROL sagt Hello World *****"
wait 1
loop


Hat da jemand eine Meinung? Gibts irgendwo speziell eine Einführung RP6 Programmierung mit Bascom?

2.) Es scheint auch so, dass die win WinAVR verfügbare Befehlslibrary wesentliche Funktionen enthält (z.B. das weiche Ansteuern der Servos, Distanzmessungen usw), die so in Bascom zunächst mal nicht verfügbar sind. Leider habe ich trotz Suche im Board hier auch keine Hinweise auf eine entsprechende Basic Library gefunden, war ich nur nicht gründlich genug beim Suchen?

Danke für das Feedback, und sorry gleich mal vorweg, wenn ich doch etwas übersehen habe. Super Board!

roboterheld
30.12.2007, 20:34
ich progge über die die isp den rp6.

du musst den schaltplan nehmen und jede baugruppe anschauen wo die verdrahtung liegt und dann geht es los.

so habe ich den rp6 geproggt mit bascom.

habe jetzt aber einen eigenen oberbau(2x atmega32-16 oder atmega644-20 je nach lust und laune auswechselbar) mit motortreiber ld298 entworfen, weil die sensoren an der originalplatine vom rp6 das letzte sind.

das fahrgestell habe ich auf räder gesetzt. die laufzeit hat sich um 70% erhöht.

roboterheld
30.12.2007, 20:38
....die so in Bascom zunächst mal nicht verfügbar sind....

das ist das wunderbare was spass macht, eigene routinen entwerfen.
die teilweise noch effektiver und besser sind.

hier findest du alles für bascom :

https://www.roboternetz.de/wissen/index.php/Kategorie:Quellcode_Bascom

radbruch
30.12.2007, 21:17
Hallo


$crystal = 16000000 'Die Frequenz des verwendeten Quarzes

Der RP6 hat einen 8MHz-Takt.

Du kannst auch den Loader als Terminal verwenden. Er kennt zwei Geschwindigkeiten, 500 kBaud zum Übertragen der Daten und 38,4kBaud für die Komunikation:


#ifndef F_CPU
#define F_CPU 8000000 //Base: 8.00MHz - DO NOT CHANGE!
#endif

...

/************************************************** ***************************/
// Baudrates:

#define BAUD_LOW 38400 //Low speed - 38.4 kBaud
#define UBRR_BAUD_LOW ((F_CPU/(16*BAUD_LOW))-1)

#define BAUD_HIGH 500000 //High speed - 500 kBaud
#define UBRR_BAUD_HIGH ((F_CPU/(16*BAUD_HIGH))-1)

#endif

(Aus RP6RobotBase.h)

In meiner abgespeckten Lib initialisiere ich den UART so (aus der Init() der RP6-Lib):

// UART:
UBRRH = UBRR_BAUD_LOW >> 8; // Setup UART: Baudrate is Low Speed
UBRRL = (uint8_t) UBRR_BAUD_LOW;
UCSRA = 0x00;
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << RXCIE);


Gruß

mic

tfv
20.02.2008, 08:46
Hallo Radbruch,

danke für die Tips (sorry, dass ich mich erst jetzt melde, war länger offline). Das waren genau die entscheidenden Hinweise zur funktionierenden Zusammenarbeit zwischen RP6 und Bascom-Demoversion
* Quarzfrequenz auf 8 MHz setzen
* Baudrate der Schnittstelle im Terminalmodus auf 38400 baud setzen.

Code sieht damit wie folgt aus:


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000
$baud = 38400

Print "Hello, world!"
End


Vielleicht erleichtert's dem nächsten den Einstieg.