Inhaltsverzeichnis
Wie ist der Ablauf mit Bascom Basic?
Atmel Controller (also auch RN-Control) lassen in verschiedenen Programmiersprachen programmieren. Sehr beliebt sind diesbezüglich der Basic Compiler Bascom, der C Compiler GCC und der AVR Studio Assembler.
Der Einstieg wird einem besonders einfach beim Bascom Compiler gemacht. Nicht nur dass dieser unzählige von Funktion besitzt, nein auch die Entwicklungsumgebung ist sehr umfangreich. Simulator, Terminalprogramm und Flasher (Übertragungsprogramm) sowie eine ganze Reihe anderer Tools sind bereits integriert. Zudem erzeugt der Compiler überraschend kompakten Maschinencode. Es gibt eine kostenlose Demo-Version von Bascom. Die Einschränkung gegenüber der Vollversion besteht im wesentlichen darin, das nur 4K Code erzeugt werden kann. Dies reicht bereits für viele kleinere Anwendungen aus. Für ca. 90 Euro gibt’s auch eine Vollversion ohne Einschränkung. Fast alle gängigen Atmel-Controller lassen sich mit Bascom Basic programmieren.
Der Einstieg ist sehr einfach. Nachdem man sich die Demo oder Vollversion besorgt hat, installiert man das Programm über SETUP auf einem Windows-Rechner, dies ist recht unproblematisch. Das Programm wird anschließend über das START-Menü aufgerufen.
Bevor ein erstes Programm entwickelt wird, sollte man erst mal einige grundsätzliche Optionen in Bascom einstellen. Zum Programmieren eines Controllers benötigt man ein speziellen Adapter welcher einige Leitungen des Controllers (SPI-Ports und RESET) mit dem PC verbindet. Man spricht hier von einem AVR-ISP Programmierkabel oder auch ISP-Dongel genannt, dieser wird oft an den Druckerport des PC angeschlossen.
Beispiel eines ISP-Programmierkabels (hier Bauanleitung):
Verwendet man ein solches Kabel, so sollte man in Bascom folgende Optionen einstellen:
http://www.roboternetz.de/bilder/bascom/bascomispoptionen.gif
Dann müsst ihr noch im BIOS nachsehen, welche Adresse der zu verwendend Port hat. Dies macht ihr indem ihr beim Neustart die Taste [Entf] drückt. Dort müsst ihr dann etwas suchen, da diese Einstellungen bei jedem BIOS anders sind. WICHTIG: Verändert auf keinen fall die Einstellungen im BIOS! Die Adresse tragt ihr nun in das Feld "LPT-Adress" ein.
Diese Optionen bleiben dauerhaft gespeichert und müssen nicht bei jedem neuen Programm geändert werden.
Nun müssen noch die Output-Optionen in Bascom festgelegt werden. Bascom ist in der Lage eine ganze Reihe von verschiedenen Dateien zu generieren um später verschiedene Programmiertools und Debugger nutzen zu können. Empfehlenswert ist folgende Grundeinstellung:
http://www.roboternetz.de/bilder/bascom/bascomoutputoptionen.gif
Das erste Programm
Über das Menü File/New kann dann ein neues Fenster für ein erstes Bascom-Programm geöffnet werden. Als erstes Einstiegsprogramm könnte ein "Hello World"-Programm so aussehen:
Print "**** RN-CONTROL sagt Hello World *****"
Dieses Programm würde allerdings kaum funktionieren, außer wenn man unter Optionen den Controllertyp, die genaue Quarzfrequenz und Baudrate des verwendeten Controllers (Controllerboard´s) richtig eingestellt hat.
Es ist allerdings empfehlenswert diese Werte lieber im Programmcode mit festzulegen. Dadurch hat man eine wesentlich bessere Übersicht und kann die Programme auch leichter, ohne zusätzliche Kommentare, an interessierte weitergeben. Eventuell vorhandene Einstellungen im Optionsmenü werden durch die Anweisungen im Code außer Kraft gesetzt. Im Falle von dem Microcontrollerboard RN-Control mit AVR ATMega32 sollte daher jeder Quelltext mit folgenden Zeilen beginnen:
$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 9600 do Print "**** RN-CONTROL sagt Hello World *****" wait 1 loop
Die erste Anweisung $regfile legt fest für welchen Controllertyp überhaupt Code produziert werden soll. Die Anweisungen $framesize, $swstack, $hwstack sind eigentlich bei dem kleinen Programm nicht notwendig. Sie legen den Platz fest, der für bestimmte Stackbereiche (lokale Variablen / Funktionsparameter) reserviert wird. Man sollte sich jedoch gleich angewöhnen diese Anweisungen in den Code zu schreiben. Das ermitteln der richtigen Werte für die Stackgröße ist etwas aufwendiger, dazu bietet Bascom spezielle Funktionen für den Simulator. In der Regel kommt man aber mit den oberen Werten schon bei den meisten Programmen hin. Im Zweifel sollte man die Werte etwas erhöhen. Je höher die Werte, desto mehr Speicher wird natürlich benötigt. Zu geringe Werte können aber unter Umständen, wenn z.B. viele Subroutinen, Funktionen, Interrupts, lokale Variablen genutzt werden, zu seltsamen schwer auffindbaren Programmfehlern führen. Wenn also eine Funktion völlig unsinnige Ergebnisse liefert oder Abstürze erfolgen, dann ist es Zeit den Stack mal zu prüfen.
Die Anweisung $crystal legt die Quarzfrequenz fest. Es ist wichtig, dass Bascom weiss, mit welcher Quarzfrequenz der Controller arbeitet. Ansonsten liefern viele Funktionen falsche Ergebnisse oder funktionieren erst garnicht. Anzumerken ist hier, dass AVR Controller der Mega Serie (wie der ATMega32 in RN-Control) nach dem Kauf noch gar keinen Quarz sondern den internen Taktgenerator nutzen. Der interne Taktgenerator läuft immer mit 1 Mhz, so dass man bei neuen Controllern eigentlich $crystal=1000000 angeben müsste. Zumindest solange bis man den Quarz über die sogenannten Fusebits (bestimmte Einstellungen im Controller) aktiviert. Da in diesem Beispiel jedoch das Board RN-Control gleich auf die vollen 16 Mhz umgeschaltet werden soll, geben wir gleich $crystal = 16000000 an.
Die Anweisung $baud = 9600 bestimmt die Übertragungsgeschwindigkeit der RS232 Schnittstelle im Controller. 9600 Baud ist ein Wert der sehr oft genutzt wird. Da ein Controller ja kein Bildschirm besitzt, erfolgen alle Ausgaben gewöhnlich über diese RS232 Schnittstelle. Man muss also nur das eingebaute Terminalprogramm in Bascom starten und kann dann alle Ausgaben des angeschlossenen Controllers am Bildschirm verfolgen. Dies ist sehr hilfreich bei der Fehlersuche in Programmen, daher gehört neben dem AVR-ISP Programmierkabel eigentlich auch immer ein RS232-Kabel zur Standard Ausstattung eines Programmierers.
Nachdem nun der Quellcode erstellt wurde muss dieser compiliert (in Maschinencode übersetzt) werden. Dies geschieht durch einen einfachen Klick:
http://www.roboternetz.de/bilder/bascom/bascomcompilieren550_a.gif
Hat man noch einen Fehler im Quellcode, dann steht nun gewöhnlich im unteren Bereich eine Fehlermeldung, ansonsten dürfte ein Fenster ähnlich wie dieses erscheinen:
http://www.roboternetz.de/bilder/bascom/bascomcompiliermsg_b.gif
Dieser Vorgang dauert oft nur wenige Sekunden, danach ist das Maschinencodeprogramm fertig. Damit es ausgeführt werden kann, muss es natürlich in den Controller übertragen werden. Dazu verbindet man das Controllerboard über ein ISP-Programmierkabel mit dem Druckerport des PC´s. Zudem schaltet man die Betriebsspannung des Baords ein. Nun kann der Bascom Programmiermodus durch einen Klick aktiviert werden:
http://www.roboternetz.de/bilder/bascom/bascomprgaktivieren550_c.gif
Im Bascom Programmiermodus wird der Maschinencode in Hex-Form angezeigt. In diesem Dialog brauchen wir eigentlich nur die Übertragung zu starten. Dies geschieht wiederum durch einen Klick:
http://www.roboternetz.de/bilder/bascom/bascomispstart550_d.gif
Auch die Übertragung dauert nur wenige Sekunden. Wenn alles geklappt hat sollte in der Statuszeile links "OK" stehen. Leider ist die ISP Übertragung manchmal etwas störanfällig so das man einen zweiten oder dritten Versuch braucht. Kommt dies öfters vor, sollte man prüfen ob nicht ein Netzkabel oder eine andere Störquelle das ISP Kabel kreuzt.
Nachdem man das Programm übertragen hat, muss man bei einem neuen Controller noch die sogenannten Fusebit´s umschalten. Unter dem Begriff Fusebit´s versteht man bestimmte Controllereinstellungen die ebenfalls über das ISP-Programmierkabel geändert werden können. Es gibt eine ganze Reihe von Einstellungen die man verändern kann, dies ist bei jedem Controller ein wenig anders. gewöhnlich reicht es jedoch den Quarz zu aktivieren und ein soganannten JTAG-Interface zu deaktivieren. Das JTAG-Interface ist ein spezielles Debugger-Interface um Programmfehler zu finden, es kann jedoch nur genutzt werden wenn man spezielle Zusatzhardware besitzt. Da dies selten der Fall ist kann man diese Port´s auch für andere Zwecke nutzen, daher wird dieses oft deaktiviert. Um die Fusebit´s nun zu ändern rufen wir im Programmierdialog die Tafel mit den Fusebits durch einen klick auf:
http://www.roboternetz.de/bilder/bascom/bascomfusebitdialog550_e.gif
Der Controller muss beim Aufruf dieses Dialoges angeschlossen und mit Strom versorgt werden. Nun können wir die Fusebits an zwei Stellen ändern. Dies geht in Bascom sehr bequem, da wir in zwei Feldern nur eine andere Auswahl treffen müssen, siehe Bild:
http://www.roboternetz.de/bilder/bascom/bascomquarz550_f.gif
Beim Quarz ist es meist die unterste Auswahlmöglichkeit. Die Fusebits sind also richtig eingestellt wenn es wie auf dem oberen Bild aussieht. Bei dem Board RN-Control sind diese Einstellungen in der Regel nicht notwendig da diese bereits vor der Auslieferung umgestellt werden. Die Fusebits müssen auch nur einmal umgestellt werden. Die Einstellungen bleiben auch erhalten wenn ein neues Programm eingespielt wird. Nicht vergessen dass nach der Änderungen der Fusebit-Auswahl diese auch über den Button "WRITE FS" und "WRITE FSH" in den Controller übertragen werden müssen.
Vorsicht: Vor der Übertragung darauf achten dass die richtigen Quarzeinstellungen gewählt wurden. Man kann den Controller dort nämlich auch auf aktive externe Taktgeneratoren umstellen. Wenn man dies versehentlich tut und keinen echten Taktgenerator hat, dann ist der Controller quasi tot und muss gewechselt werden.
Mit der Programmübertragung wird gleichzeitig auch immer ein RESET ausgeführt und das Programm im Controller gestartet. Wenn Sie nun also das Terminalprogramm in Bascom starten (Parameter 9600 baud, 8 Bit, 1 Stopp Bit), dann wird im Sekundentakt **** RN-CONTROL sagt Hello World ***** erscheinen.
Nun viel Spaß beim Einstieg
Autor
- Frank
Siehe auch
- Bascom
- AVR-ISP Programmierkabel
- RN-Board FAQ-Seite
- Atmel
- RN-Control
- AVR-Einstieg leicht gemacht
- Buchvorstellungen
Weblinks
http://home.arcor.de/dirk.milewski/seite81.html - Fusebits für den 16 MHz externen Quartz einstellen