Start

Experimente

Grundlagen

Produkte
- ES-M32
-- Erster  Test -- USB
-- Bascom
-- RAM
-- ADC  
-- Ports  
-- Relais  
-- Morsen  
-- Datenlogger
-- SIOS  
-- ASCII  
-- mV-Logger
-- I/O12/24 V
-- Bootloader  

Neues

Impressum

ES-M32

Bascom-AVR



Bascom-AVR ist ein einfach zu bedienender Basic-Compiler für AVR-Controller. Eine freie Demoversion kann von der Homepage des Herstellers MCS Electronics geladen werden. Die freie Version ist auf eine Codegröße von 4 KB limitiert, was für die ersten Schritte mehr als genug ist. 

Download: Der Quelltext (ESM32Test1.zip)

Bascom übersetzt einen Basic-Quelltext in eine ausführbare Hex-Datei, die dann mit ESM32.exe in den Controller geladen wird. Wer bereits in Visual Basic programmiert hat, findet sich mit Bascom schnell zurecht. Das vorhandene Programmbeispiel ESM32Test1.bas zeigt die wichtigsten Details für die Ansteuerung des Boards und kann leicht verändert und für spezielle Zwecke angepasst werden. Testen Sie zuerst einmal, ob das Programm ohne Fehlermeldung übersetzt wird. Wählen Sie Program/Compile oder F7 oder die zugehörige Symbol-Schaltfläche, das schwarze schräge IC. Die Erfolgsmeldung sagt, dass in diesem Fall 10% des Speichers verwendet wurde. Im Verzeichnis des Quelltextes steht nun eine neue Datei ESM32Test1.hex. Diese können sie in den Controller laden.



Erzeugen Sie einmal absichtlich einen Fehler. Schreiben Sie z.B. einfach ein Wort in eine Zeile, mit der der Compiler garantiert nichts anfangen kann, z.B. „Gesundheit!“. Wenn sie nun neu kompilieren kommt eine Fehlermeldung. Mit angegeben ist die Zeile, in der der Fehler steht. Sie brauchen nur auf die Meldung zu klicken, dann springt der Cursor genau in die fehlerhafte Zeile.

Jedes Bascom-Programm beginnt mit einem Vorspann, in dem man dem Compiler wichtige Einstellungen mitteilt. $regfile = "m32def.dat" legt fest, dass eine Register-Datei für den Mega32 verwendet werden soll, die im Bascom-Verzeichnis bereits vorbereitet liegt. Wenn mal ein anderer Controller verwendet werden soll, muss diese Einstellung ausgetauscht werden. Man kann die Einstellung auch unter Options/Compiler/Chip vornehmen und im Quelltext darauf verzichten. Hier erfährt man auch die genauen Namen der Register-Dateien.

'Bascom ATmega32, LCD, Memory und Tastenabfrage
$regfile = "m32def.dat" 'Register-Datei zum Mega32
$crystal = 11059200 'Crystal = Quarz, hier 11,0592 MHz
$hwstack = 16 '16 Bytes für Hardware-Stapel
$swstack = 32 '32 Bytes für Software-Stapel
$framesize = 32 '32 Byte für Datenrahmen

Man kann die Einstellung auch unter Options/Compiler/Chip vornehmen und im Quelltext darauf verzichten. Hier erfährt man auch die genauen Namen der Register-Dateien.

Im selben Fenster stehen auch einige weitere Einstellungen wie HW-Stack, Soft Stack und Framesize. Es handelt sich hier um reservierte Speicherbereiche, die der Compiler benötigt. Wenn man die voreingestellten Werte stehen lässt oder die Einstellungen im Programm verwendet muss man sich zu nächst nicht darum kümmern. Erst bei sehr großen Projekten kann es nötig werden hier etwas zu ändern. Die entsprechenden Einstellungen im Quelltext überschreiben die Voreinstellungen in dne Options.

Baud = 9600                 'Übertragungsrate 9600 Bits/s

Die Einstellung Baud = 9600 betrifft die serielle Schnittstelle, falls man z.B. mit Print Texte oder Zahlenwerte senden will. Das Terminalprogramm muss dann ebenfalls auf eine Übertragungsrate von 9600 Baud eingestellt sein. Aber Achtung: Der Mega32 leitet die Baudrate aus der Taktfrequenz ab. Die $crystal-Einstellung muss also stimmen. Wenn man z.B. einen neuen Chip verwendet, arbeitet der Controller noch mit dem internen Oszillator mit 1 MHz. Dann wird eine krumme Baudrate erzeigt, und im Terminal sieht man nur komische Zeichen. Dann müsste man entweder die Fuses für den externen Quarz programmieren oder im Programm die Taktrate 1.000.000 Hz einstellen.

Ein einem Bascom-Programm folgen dann Deklarationen der verwendeten Unterprogramme (engl. Subroutine, kurz Sub), hier Sub Test1 bis Sub Test4. Immer wenn man ein neues Unterprogramm einbaut, muss es vorne mit Declare angegeben werden.

Declare Sub Test1
Declare Sub Test2
Declare Sub Test3
Declare Sub Test4

Es folgt die Dimensionierung (Dim) von Variablen. Der Compiler muss wissen, welchen Speicherplatz eine Variable verwendet. Es gibt z.B. die Variablentypen  Byte  (8 Bit, Wertebereich 0 … 255), Word (2 Bytes, 0…65635) oder Integer ( 2 Bytes, Wertebereich -32768 …+32767).  In diesem Fall werden zwei Variablen für die PWM-Steuerung weiter unten gebraucht. Weil dort Zahlen im Bereich bis 1023 vorkommen reicht ein Byte nicht aus.  Man kann Variablen im Programmkopf dimensionieren, dann sind sie im gesamten Programm gültig (globale Varibalen). Oder man schreibt sie als lokale Variablen in eine Sub. Allgemein ist der Umgang mit globalen Variablen in Bascom einfacher und sicherer. 

Dim Pwma As Integer
Dim Pwmb As Integer

Dann werden bestimmte Hardware-Baugruppen des Controllers eingerichtet. Hier ist es zunächst ein Timer, der ebenfalls weiter unten verwendet werden soll. Die beiden Zeilen sind mit dem Kommentarzeichen ausgeschaltet (im Editor erscheinen sie grün), werden also nicht mit übersetzt. Alternativ kann nämlich die Initialisierung auch weiter unten im Programm, z.B. in einer Sub durchgeführt werden. 


'Config Timer0 = Timer , Prescale = 64
'Start Timer0

Wenn man in einem Programm das Display verwenden möchte muss man dem Compiler mitteilen, an welchen Anschlüssen es liegt (beim ES-M32 sind es sechs Leitungen am Port D) und wie viele Spalten (16) und Zeilen (2) es besitzt. Dann muss einmal im Programm der Befehl Initlcd zur Initialisierung stehen. Cls löscht das Display, Locate stellt den Cursor an die gewünschte Stelle, und LCD „Text“  schreibt einen Text.


Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2

Initlcd
Cls
Locate 1 , 1
Lcd "AK Modul Bus"
Locate 2 , 1
Lcd "ES-M32"
Waitms 1500

Im Programmbeispiel folgt nun eine tastengesteuerte Auswahl der vier vorhandenen Unterprogramme. Im Folgenden sollen die einzelnen Unterprogramme genauer beschrieben werden, weil sie die wichtigen Grundelemente der Programmierung enthalten. 

Siehe auch :
Bootloader für Bascom: www.elektronik-labor.de/AVR/Bootloader.html