Atmel AVR Mikrocontroller mit OpenSuse: Die Hardware

Die benötigte Hardware ist ein AVR Controller mit etwas zusätzlicher Beschaltung. Die kann man mutig selbst erstellen oder fertig kaufen. In den folgenden Abbildungen dargestellt sind drei Boards, ein einfaches, bei eBay fertig für ca. 15€ erstanden und ein komplexeres, von www.pollin.de für ebenfalls ca. 15€, zum Selbstaufbauen und schließlich ein fertig aufgebautes Board für ca. 50 Euro.

Für die ISP-Programmierung benötigt man ein RS232-Kabel, auf dem 1:1 die Anschlüsse 3,4,5,6,7,8,9 durchgeführt sind.

Anforderungen an den PC, mit dem die AVR-Programme erstellt werden, sind niedrig. Ein 600Mhz-Notebook ist dicke ausreichend. Unabdingbar ist die RS232-Schnittstelle, wenn seriell übertragen werden soll. Da man beim Herumbasteln theoretisch die RS232-Schnittstelle durch Fehlbeschaltung und Unachtsamkeit zerstören kann, sollte man zur Sicherheit nicht seinen besten Rechner für solche Hardware-Aktionen nutzen.

Der AVR Controller kommt mit einigen Milliampere Strom aus, so dass ein einfaches Steckernetzteil mit 9V Gleichspannung ausreicht. Ein komplettes einfaches AVR Board braucht auch nur einige Dutzend mA. Manchmal kann man auch Wechselspannung einspeisen, denn viele Boards besitzen eine eigene Gleichrichtung und Stabilisierung. Vorübergehend langt sogar eine 9V-Batterie.


Einfaches AVR-Board mit ATmega8. 4 Schalter und 8 Dioden dienen als Input- und Output-„Geräte“. Oben links wird die Stromversorgung angeschlossen, in der Mitte oben erkennt man den RESET-Taster. Das ISP-Programmierkabel ist oben rechts angeschlossen. Auf der mittleren braunen Buchsenleiste sind die IO-Pins des Controllers nach außen geführt.

Das Pollin Board ( http://www.pollin.de). On-Board sind die RS232-Umsetzung für die ISP-Programmierung, so dass oben links direkt der Computer angeschlossen werden kann. Unten links ist ein eigenständiger RS232-Anschluss vorhanden. Das Board erlaubt, diverse Typen der AVR-Controller (ATMega, ATtiny) in die Fassungen einzusetzen. Drei Taster und zwei LEDs sind die On-board I/O-Geräte. Ein Steckplatz für ein EEPROM 24Cxx ist vorhanden, des weiteren zwei Steckplätze für ISP und JTAG Programmierung und auf der 40-poligen Steckerleiste sind zahlreiche Pins der Controller herausgeführt. 2 Jumperleisten erlauben die flexible Anpassung des Boards. Dieses Board gibt es mittlerweile in mehreren Varianten und es gibt auch Erweiterungsboards dazu.

Das LAB-MEGA Board von Rakers (http://www.rakers.de) Dieses Board ist mit SMD-Elementen aufgebaut und besitzt daher geringe Abmessungen. Es nutzt den ATmega128, der satte 53 I/O Pins und 128KB Flash Speicher bietet. Auf der Karte findet sich neben den „üblichen“ Dingen wie Spannungsversorgung, ISP/JTAG Interfaces auch eine USB Schnittstelle, ein I2C Expander, eine Echtzeituhr (PCF8583) sowie 2 RS232 Interfaces. Zahlreiche Pins sind auf einer 64-poligen Messerleiste VC64 herausgeführt. Die SMD Bauweise erschwert (ohne geeignetes Werkzeug) leider das Auswechseln defekter Bauteile und auch die Fehlersuche. Zu diesem Board gibt es Erweiterungsboards von Rakers.

ISP-Adapter

Es gibt unterschiedliche Adapter, für RS232, Parallel, USB, …

Serieller ISP-Adapter

Ich verwende einen selbstgebastelten. Bauanleitungen dazu gibt es zahlreich im Internet. Mein Adapter passt z.B. direkt an obiges Pollin-Board.


ISP-Adapter Schaltplan.

Die Schaltung passt komplett auf einer passend gemachten Lochrasterplatine
in einen RS232-Stecker hinein. Hier ist der Stecker ohne Gehäuse dargestellt.

Es gibt übrigens auch Boards mit einer 6-poligen Buchse statt der oben dargestellten 10-poligen. Dies gilt z.B. für das LAB-MEGA Board von Dr. Rakers.
Für solche Boards habe ich mir einen Adapter gelötet, der auf der einen Seite eine 10-polige Buchse und auf der anderen Seite einen 6-poligen Stecker hat.
Das Pin Mapping ist wie folgt:

10-polige Buchse (wie z.B. auf Pollin Board oder Ulrich Radigs Boards)  6-polige Buchse (z.B. Rakers LAB-MEGA)
9 – MISO 1
5 – /RESET 5
6 – GND 6
7 – SCK 3
1 – MOSI 4

Schließlichgibt es noch eine verwirrende Besonderheit beim ATmega128: Dort wird die ISP-Programmierung nicht über die auch vorhandenen Pins MOSI+MISO vorgenommen sondern über zwei „neue“ Pins namens PDI und PDO (nicht zu Verwechseln mit den Port-Pins PD1 und PD0 !!!).
Auch hier das Mapping:

ISP Pin Bezeichnung AT mega 128 Port-Pin am AT mega128
MOSI PDI PE0 (Port E, Pin 0)
MISO PDO PE1 (Port E, Pin 1)

Nutzung eines USB Programmers von Atmel

Mangels serieller Schnittstellen an neueren PCs (besonders bei Notebooks) bietet sich eher die Nutzung eines solchen Programmers an.


Der AVR ISP mkII von Atmel

Das Innere des Programmers – wesentlich komplexer als der triviale RS232 Programmer

Falls bei Nutzung des USB-Programmers der Programmer nicht gefunden wird, sind eventuell die Regeln für den Zugriff auf USB nicht ausreichend. Dazu die Datei /etc/udev/rules.d/15-usbavr.rules neu anlegen und dort  hineinschreiben:

# Atmel AVR ISP mkII SUBSYSTEM==“usb“, SYSFS{idVendor}==“03eb“, SYSFS{idProduct}==“2104″, GROUP=“users“, MODE=“0660″

Kein serieller Port mehr am PC?

Die Nutzung der seriellen Schnittstelle für ISP-Programmierung ist ein sehr simpler Ansatz. RS232 kann auch zur bequemen Ausgabe z.B. von Fehlermeldungen, verwendet werden.

Leider haben viele neuere PCs keine serielle Schnittstelle mehr.
Manche Motherboards haben noch einen „seriellen Header“, der eine serielle Schnittstelle darstellt. Wenn man so etwas auf dem Motherboard hat, kann man sich einen Slot-Adapter kaufen und die Schnittstelle nutzen.

Wenn man nicht mal einen seriellen Header auf dem Mainboard hat, kann man einen USB<->Seriell-Adapter nutzen. Es gibt für unter 10 Euro Kabel, die als Adapter zwischen RS232 und USB dienen können. Unter Linux klinkt sich eine solches Kabel in den Gerätebaum z.B. als „/dev/ttyUSB0“ ein und kann dann genauso wie eine „echte“ serielle Schnittstelle genutzt werden.

Bei meinem OpenSuse 11.2 sieht die Einbindung (mittels dmesg ausgegeben) wie folgt aus:

 ...  [ 3529.694778] usbserial: USB Serial Driver core
 [ 3529.705376] USB Serial support registered for ch341-uart
 [ 3529.705409] ch341 6-1:1.0: ch341-uart converter detected
 [ 3529.718371] usb 6-1: ch341-uart converter now attached to ttyUSB0
 [ 3529.718650] usbcore: registered new interface driver ch341