BASCOM-AVR meets ARDUINO
Verwendung von ARDUINO-Hardware in Verbindung mit BASCOM-AVR-Programmen
23. August 2013

NEU:  Siehe TIPP im Abschnitt "PROGRAMMIERUNG"

Here is automatic translation made by Google:
http://translate.google.de/translate?js=n&prev=_t&hl=de&ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Fwww.kh-gps.de%2Fbascom_arduino.htm&sl=de&tl=en


 
Abb.1 ARDUINO-UNO-Board

Wenn es um kleine bis mittlere Microcontrollerprojekte geht, dann erfreut sich der Bascom-AVR-Compiler [8] schon seit vielen Jahren grosser Beliebtheit. Die verwendete Programmiersprache ist verhältnismäßig einfach erlernbar und eröffnet somit einen schnellen Weg zur Umsetzung eigener Projektideen. Dabei stellt sich allerdings immer auch wieder die Frage nach einer geeigneten Hardwareplattform. Wem ein Lochrasteraufbau dabei zu provisorisch erscheint, dem bleibt häufig nur der Entwurf eines speziellen, auf die eigene Anwendung abgestimmten Layouts mit anschliessender Platinenfertigung. Nachdem so etwas in der Regel aber mit nicht unerheblichem Zusatzaufwand verbunden ist, versucht man diesen Weg speziell dann zu vermeiden, wenn es nur um den Aufbau von  Einzelexemplaren geht. Hier entstand nun die Idee, einer Nutzung der weit verbreiteten und preiswert erhältlichen ARDUINO-Boards auch für BASCOM-AVR-Anwendungen.
Bei ARDUINO [1] handelt es sich um eine aus Italien stammende, inzwischen sehr erfolgreich eingeführte Soft- und Hardwareplattform. Es existieren Boards für unterschiedliche, sich in ihrer Leistungsfähigkeit unterscheidende Prozessoren. Darüberhinaus gibt es auch noch eine Vielzahl sogenannter "Shields" [3][4], womit entsprechend ihrer Funktion bestückte Zusatzboards bezeichnet werden. Mithilfe ihrer Steckleisten lassen sie sich auf einfachste Weise mit den Hauptprozessorplatinen verbinden. Inzwischen dürfte es kaum noch eine Microcontrolleranwendung geben, für die es nicht auch schon ein geeignetes Shield als Fertigbaustein gibt [6];[7].
Die ARDUINO-Programmerstellung erfolgt in der Regel in einer Varianten der Sprache "C++". Um sie nutzen zu können, müssten BASCOM-Programmierer allerdings erst einmal erheblich um- bzw. dazulernen. Da in Verbindung mit ARDUINO aber die gleichen, aus der AVR-Familie von Firma ATMEL stammenden Prozessoren Verwendung finden, lässt sich jegliche ARDUINO-Hardware grundsätzlich auch für BASCOM-AVR-Projekte einsetzen, was in diesem Beitrag näher erläutert werden soll.

ARDUINO-PROZESSORBOARDS

Wie schon angedeutet, gibt es ARDUINO-Boards unterschiedlichster Leistungsstufen. Wir wollen uns an dieser Stelle aber auf die Beschreibung des zur mittleren Klasse gehörenden Standard-Boards "ARDUINO-UNO" [2] ( Abb.1 ) beschränken. Seine elektrischen Daten sind dabei weitgehend identisch mit der vereinzelt noch angebotenen Vorgängerversion, die auf den schönen Namen "Duemilenove" ( italienisch für "2009" ) hörte.
Der "UNO" verwendet einen mit 16MHz getakteten ATMEL-Prozessor des Typs "ATMEGA328P". Die Versorgungsspannung für das Board kann im Bereich zwischen etwa 7 und  15V liegen. Als Anschlüsse stehen dafür ein Pin auf der Steckleiste und eine konzentrische Standard-Steckbuchse zur Verfügung. Daneben besteht auch noch die Möglichkeit einer 5V-Versorgung über den auf der Platine befindlichen USB-Anschluss. Je nach benutzem Versorgungsanschluss erfolgt dabei eine automatische Auswahl zwischen den möglichen Varianten.

Ein weiterer Microcontroller dient der Bereitstellung einer USB-Schnittstelle. Seine seriellen RxD/TxD-Anschlüsse sind fest mit den UART-Ports des Hauptprozessors verbunden. Um von aussen auf den hierbei benutzten USB-Baustein des Typs "ATMEGA 16U2-MU(R)" ) zugreifen können, wird ein u.a. im Softwarepaket des "UNO" [1] zu findender Treiber benötigt. 
Über Steckkontakte besteht ein Zugriff auf die Ports "PD0-PD7"; "PB0-PB5" und "PC0-PC5" des Hauptprozessors. ARDUINO hat sich hierfür eigene Bezeichnungen gem. Tabelle 1 erlaubt und unterscheidet dabei auch zwischen Analog- und Digitalports, wobei die mit "Analog-In" deklarierten Anschlüsse selbstverständlich auch als digitale Ein- oder Ausgänge benutzt werden können. Alle verfügbaren Prozessorports sind somit entsprechend der für den ATMEGA328P in seinem Datenblatt genannten Angaben frei verwendbar. Eine Einschränkung ergibt sich lediglich für die auch zur In-Circuit-Programmierung benutzen Ports "PB3"-"PB5", die zumindest während des Programmiervorgangs nicht auch noch mit einem gegen Masse geschlossenem Schalter verbunden sein dürfen.

ARDUINO-Leiste
ARDUINO-Pin
ATMEGA328P-Port
FUNKTION
Digital ( PWM~ )
0
PD.0
UART  RX ( TTL )

1
PD.1
UART  TX ( TTL )
m
2
PD.2
INT0

3
PD.3
INT1

4
PD.4


5
PD.5


6
PD.6


7
PD.7


8
PB.0


9
PB.1


10
PB.2


11
PB.3
ICSP  MOSI

12
PB.4
ICSP  MISO

13
PB.5
ICSP  SCK   und LED

Ground



A Ref



SDA
PC.4
I2C  SDA

SCL
PC.5
I2C  SCL
Power
-



IO Ref



Reset



+3.3V out

max. ca. 150mA

+5V out

max. ca. 500mA

Ground



Ground



+Uin ca. 7-15V


Analog-In
A0
PC.0
 

A1
PC.1
 

A2
PC.2


A3
PC.3


A4
PC.4


A5
PC.5





Tabelle 1   Zuordnung zwischen ARDUINO-Pins und ATMEGA328P-Microcontroller-Ports  
Anm.: Die Ports A0-A5 bzw. PC.0-PC.5 sind auch als digitale Ein- und Ausgänge verwendbar

Nicht unerwähnt bleiben sollen die auf der Platine befindlichen LED's zur Anzeige der 5V-Versorgungsspannung, der seriellen Daten "RxD" und "TxD", sowie des logischen Zustandes an "PB5". Darüberhinaus existiert auch noch eine RESET-Taste, über die jederzeit ein Neustart des ausgeführten Arbeitsprogrammes möglich ist.
Während der an der Steckleiste herausgeführte 5V-Anschluss mit max. etwa 500mA zusätzlich belastbar ist, beschränkt sich die Belastbarkeit des 3.3V-Anschlusses auf nur etwa 150mA.
Ein elektrisches Schaltbild des "ARDUINO-UNO" ist unter [11] herunterladbar.

Für Fälle, in denen die Leistungsfähigkeit des ATMEGA328P-Prozessors nicht genügt, gibt es in ähnlicher Ausführung auch noch den grösseren "ARDUINO MEGA" mit seinem ATMEGA2560 Prozessor.


ARDUINO-SHIELDS

Auf die Prozessorplatine steckbare Shields gibt es für die unterschiedlichsten Anwendungen. 
Hier eine Auswahl:


Die Nutzung dieser Shields unter BASCOM-AVR dürfte sich unterschiedlich aufwendig gestalten. Während sich bei der Umsetzung einfacher Funktionen ( z.B. Relaissteuerung ) keine Schwierigkeiten ergeben sollten, dürfte bei komplexeren Anwendungen noch etwas Programmierarbeit zu leisten sein. Die jeweils mit den ARDUINO-Shields verfügbaren Java-Subroutinen können dabei aber ggf. eine zusätzliche Hilfe bei der Programmentwicklung darstellen.
Darüberhinaus gibt es aber auch noch universell verwendbare Proto-PCB's. Dabei handelt es sich um ebenfalls steckbare und entsprechend eigener Wünsche bestückbare Lochrasterplatinen ( Abb.2 ).


Abb.2  PCB-Shield für Prototypen

Da es auf einfachste Weise eine universelle Zeichendarstellung erlaubt, möchte ich etwas ausführlicher noch auf das LCD-Shield [7] nach Abb.3 eingehen. Verwendet werden dabei die standardisierten LC-Displays mit 16x2-Zeichen. Die mit der UNO-Masterplatine herzustellenden Querverbindungen werden bei seinem Aufstecken automatisch geschlossen. Insgesamt erfolgt hierbei eine Belegung von 6 bzw. 7 ( bei Backlightsteuerung ) der verfügbaren Prozessorports.


Abb.3   Shield mit 16x2-Zeichen-Standard-LC-Display und Eingabetasten

Der zur LCD-Steuerung benötigte Programmcode sieht im einfachen Fall folgendermassen aus:


LCD-Pin
ARDUINO-Pin
( Proc.-Port )
Funktion
1
Ground
Ground
2
+5V
+5V
3

Kontrast ( 0 bis +5V )
4
8     ( PB.0 )
RS
5

R/W  ( fest an Ground gelegt )
6
9     ( PB.1 )
En
7

DB0
8

DB1
9

DB2
10

DB3
11
4    ( PD.4 )
DB4
12
5    ( PD.5 )
DB5
13
6    ( PD.6 )
DB6
14
7    ( PD.7 )
DB7
15

+LED
16

-LED
Tabelle 2   Zuordnung zwischen LCD- und ARDUINO-Pins
Anm.: ARDUINO-Pin 10 ( PB.2 ) kann zur Steuerung der LCD-Hintergrundbeleuchtung benutzt werden

Eine Besonderheit des benutzten Shields sind die Fünf, neben einem weiteren RESET-Auslöser noch zusätzlich vorhandenen Taster. Eine Widerstandsanordnung ( Abb.4 ) bewirkt dabei, dass sich bei ihrer Betätigung verschiedene, am Analogeingang "A0" bzw. "PC.0" des Hauptprozessors anliegende Spannungswerte einstellen. Mithilfe des nachgeschalteten 10Bit-AD-Wandlers lässt sich damit die programmgesteuerte Auslösung unterschiedlichster Vorgänge realisieren.


Abb.4  LCD-Shield: Funktion der Eingabetasten     

PROGRAMMIERUNG

Zur Programmierung der ARDUINO-Boards benutze ich einen preiswerten, über den 6pol. ICSP-Anschluss anschliessbaren USB-Stick [9]. Eine zugehörige, aus dem Internet herunterladbare Windows-Software [10] kann benutzt werden, um die vorher mit dem BASCOM-AVR-Compiler erstellten HEX-Files in den Speicherbereich des jeweiligen Prozessors auf dem ARDUINO-Board zu übertragen. Wird hierzu auch das mit den Boards gelieferte Chipexemplar benutzt, so sind auch keine weiteren Änderungen bei den Fuse-Einstellungen erforderlich, womit sich der gesamte Programmiervorgang besonders einfach gestaltet. Zu beachten ist allerdings, dass der üblicherweise auf dem Baustein zu findende ARDUINO-Bootloader hierbei überschrieben wird und somit anschliessend nicht mehr zur Verfügung steht, so dass er im Bedarfsfall erst wieder neu geladen werden müsste.


Abb.5  Vorgehensweise zur Änderung der Fuse-Einstellungen
( bei Verwendung des Programmiertools nach [10] )

Den "ARDUINO-UNO" gibt es in verschiedenen Hardwareversionen. Neben einer SMD-Version gibt es auch eine Variante, bei der der Hauptprozessor in einer 28pol. DIL-Fassung steckt. Soll anstelle des mitgelieferten Chips ein anderes, noch fabrikfrisches Chipexemplar benutzt werden, so ist zuerst zu beachten, dass es sich hierbei tatsächlich um einen Baustein des Typs "ATMEGA328P-PU" handelt. Prozessoren mit der abweichenden Aufschrift "ATMEGA328-PU" unterscheiden sich hiervon in einigen wichtigen Parametern, so dass ein  Programmierungversuch in der Regel zu einer Fehlermeldung führt, wobei nur wenige Programmertypen auch den "ATMEGA328" ohne "P" zu unterstützen scheinen.
Weiterhin ist bei den Fuse-Einstellungen der Haken für den Vorteiler durch Acht zu entfernen und die Takteinstellung auf externe Quarze ">8MHz" zu setzen ( siehe auch Abb.5 ). Nach Durchführung dieser Einstellungen und ihrer erfolgreichen Kontrolle sollte es keine weiteren Probleme geben.

Grundsätzlich sollten sich die unter BASCOM-AVR erstellten Hex-Files auch unter Verwendung einer geeigneten Bootloadersoftware übertragen lassen, womit sich der Einsatz einer separaten Programmierhardware ggf. erübrigen würde, aber ich selbst besitze keine in diese Richtung gehenden Erfahrungen und nachdem der 15-Euro-Stick-Programmer seinen Dienst so problemlos versieht, ist meine Neigung zu entsprechenden eigenen Versuchen auch mehr als gering.

NEU: Tipp im August 2013:
Ein interessanter Hinweis stammt von Thomas Schiller und wurde in der Zeitschrift FUNKAMATEUR ( Heft 9/2013, Seite 980 ) publiziert. Es geht um das kleine Softwaretool "XLOADER" ( http://russemotto.com/xloader/ ), das in Verbindung mit den üblichen ARDUINO-Boards benutzt werden kann. Über ihre USB-Schnittstelle und unter Verwendung der dabei auf den von Haus aus verwendeten AVR-Prozessoren bereits vorinstallierten Bootloader-Software erlaubt "XLOADER" das Laden jeglicher HEX-Files und kommt somit ohne eine Nutzung irgendwelcher ARDUINO-Software oder auch externer ISP-Programmer aus.

VERFÜGBARKEIT

Viele Händler bieten inzwischen die Originalversionen der ARDUINO-Boards einschliesslich passender Shields an. Ich selbst habe vorzugsweise von den unter [5] und [6] genannten inländischen Händlern bezogen. Das mit diesen Boards und Shields verbundene Handelspotential wurde inzwischen aber auch von fernöstlichen Herstellern erkannt, so dass es von dort mittlerweile schon eine grosse Menge von Nachbauten bzw. Clones gibt. Diese werden oft zu erstaunlich niedrigen Preisen angeboten, weichen in Details aber häufig doch etwas von den Originalen ab. In wie weit sie dabei auch deren Qualitätsstandards halten, dürfte nur in jedem Einzelfall klärbar sein. Interessenten für diese Produkte dürfen ggf. auch keinen Eigenimport scheuen und sollten sich einmal bei z.B. EBAY umschauen.

LINKLISTE

[1]  http://www.arduino.cc/
[2]  http://arduino.cc/en/Main/ArduinoBoardUno/
[3]  http://arduino.cc/en/Main/ArduinoShields
[4]  http://shieldlist.org/
[5]  http://www.watterott.com/de/Arduino 
[6]  http://www.komputer.de/zen/               
[7]  http://www.komputer.de/zen/index.php?main_page=product_info&cPath=30&products_id=170
[8]  http://www.mcselec.com/
[9]  http://shop.myavr.de/index.php?sp=article.sp.php&artID=200006
[10] http://shop.myavr.de/index.php?sp=download.sp.php&suchwort=dl112
[11] http://arduino.cc/en/uploads/Main/Arduino_Uno_Rev3-schematic.pdf

E-Mail contact via: