|
4TAP - ein AVR "bitbanging"
Programmer für die serielle
Schnittstelle, bestehend aus 3 Widerständen und einem Transistor.
Ich wollte endlich auch mal Mikrocontroller programmieren, aber mit möglichst geringem
Anfangswiderstand. Ohne Bootloader, ohne Entwicklungsplatine, sondern
etwa so wie im "Lernpaket Mikrocontroller" von Franzis. Das
Programmieren und Flashen sollte aber komfortabler sein, am liebsten in
Basic. Der Mega8-ISP-Programmer vom selben Autor wie das Lernpaket
(Burkhard Kainka), kam der Sache schon ziemlich nahe. Allerdings musste
für den Einsatz von AVRdude dessen Konfigurationsdatei editiert
werden. Außerdem muss immer die serielle Schnittstelle geöffnet sein,
weil ohne einen HIGH-Pegel an RTS der Controller in den Reset-Zustang
geht. Herausgekommen ist der "4-Teile-AVR-Programmer", kurz 4TAP.

Die schlechte Nachricht gleich vorweg: Das gute Stück
ist
(wie sein Vorbild) NICHT mit
USB-seriell-Adaptern benutzbar. Falls eine Verbindung überhaupt glückt,
ist die Transferrate im "bitbanging"-Betrieb inakzeptabel gering.
Besitzer von aktuellen Desktop-PCs ohne serielle
Schnittstelle sollten
mal nachsehen, ob diese nicht doch auf dem Motherboard vorhanden ist,
nur nicht nach außen geführt ist. Haben wir kein Glück, sollte auch
eine PCI-Einsteckkarte funktionieren (habe ich allerdings nicht
getestet).
Haben
wir aber einen Windows PC mit einem "echten"
COM-Port, können
wir mit minimalem Aufwand in die Welt der AVR-Mikrocontroller
einsteigen. Das linke Bild zeigt den Hardwareaufwand um einen ATtiny45
zu programmieren und Temperaturwerte über die serielle Schnittstelle an
den PC zu senden.
Softwareseitig war das Ziel eine problemlose
Zusammenarbeit mit
AVRdude als Brennsoftware und der BASCOM-AVR Demo als
Programmiersprache. Die Pinbelegung des 4TAB ist so gewählt, dass er
mit AVRdude als DASA3-Programmer angesprochen werden kann.
4TAP dient aber nicht nur dazu, Programme und
EEPROM in
den AVR zu flashen. Er kann über dieselben Verbindungen auch Daten mit
dem PC austauschen. Wir brauchen erstmal keine andere Hardware, wie
z.B. LCD-Displays wenn der AVR uns etwas mitteilen möchte. Stattdessen werden dieselben Leitungen, die
eben noch per "bitbanging" zum Brennen (flashen) benutzt wurden, anschließend als
UART benutzt (also dafür, wofür de serielle Schnittstelle konzipiert
wurde). AVR-seitig ist das allerdings nur mittels Software-UART
möglich, weil so eine invertierte Ausgabe möglich ist und die Sende-und
Empfangspins frei zugeordet werden können. Auf dem PC werden die Daten
in einem Terminal-Programm angezeigt.
|
Schaltplan
Die gesamte Pegelwandlung der seriellen Schnittstelle geschieht wie bei
den Vorbild-Programmern über möglichst hochohmige Widerstände in
Verbindung mit des internen Schutzdioden des AVR. Lediglich RESET wird
über einen "Wald und Wiesen Transistor" angesteuert. Der invertiert den
Pegel (RESET wird auf Masse gezogen, wenn ein HIGH-Pegel an DTR
anliegt). Das ginge auch nicht invertiert. Dann mit einem Widestand
plus Zenerdiode wie beim Mega8-ISP. Allerdings müssen wir dann zum
Betrieb immer für einen HIGH-Pegel
an RESET sorgen. Dazu müssen wir PC-seitig die serielle Schnittstelle
öffnen und den mit RESET verbundenen Ausgang setzen, z.B. mit einem
Terminalprogramm. Sobald wir das vergessen oder die Schnittstelle
schließen,
geht der AVR auf RESET und nix funktioniert. Nicht schlimm, aber
verwirrend, wie meine "Selbstversuche" mit zwei Vorgänger-Prototypen
gezeigt haben.
Ganz wichtig ist auch die Verbindung von CTS und RxD. Über CTS empfängt
der PC die Daten vom AVR beim Brennen, über RxD die vom (Software-)UART
im Betrieb. Wenn wir die Verbindung schon im PC-Stecker herstellen,
brauchen wir also lediglich 5 Adern für das Verbindungskabel.
|
Aufbau für's Steckbrett
Der
gezeigte Aufbauvorschlag ist für den Anschluss an ein
Steckbrett vorgesehen (Bild ganz oben) und ganz einfach auf
Streifen-Lochraster aufgebaut. 7 Bahnen mit je 14 Löchern stehen
lassen und wie gezeigt zusammenlöten. Es sind nur 2 Leiterbahn -
Unterbrechungen nötig.
Die Anordnung von MOSI - MISO - SCK ist so gewählt, dass sie direkt an
ATtinys und ATmegas im DIL Gehäuse passen. Der separate Steckkontakt
für GND hat den Abstand, dass er in die innen liegende Reihe der
Spannungsversorgung am Steckbrett greift. Damit haben wir schon vier
Verbindungen hergestellt, ohne dass ein Draht gesteckt ist. RESET ist
bei jedem AVR anders angeordnet. Hier habe ich einen einzelnen
Kontakt einer IC-Fassung aufgelötet. Ein Draht stellt die Verbindung zu
RESET am Controller her.
Als Verbindungskabel habe ich ein altes USB-Kabel verwendet. Masse geht
dabei über die Schirmung (das Drahtgeflecht außen rum). Dann bleiben
noch vier Leitungen für die restlichen Verbindungen. Bitte nicht
vergessen, im Stecker Pin2 (RxD) mit Pin8 (CTS) zu verbinden!
Das "Gehäuse" besteht aus einem Papier-Deckblatt aus dem Drucker und
klarem Paketband, in das wir die Platine einwickeln. |



|
Klassischer Aufbau mit 10-Pol Wannenstecker
Wenn
wir es lieber kompatibel zu anderen Programmern bauen möchten, hier ein
Exemplar, das zwischen einer 9-poligen Sub-D Buchse und einem
10-poligen Wannenstecker aufgebaut ist.
So passt das Ganze direkt an den Ausgang der Schnittstelle unseres PC
oder (sinnvollerweise) an ein Standard-Verlängerungskabel. Der
Wannenstecker hat selbstverständlich ebenfalls Standardbelegung.
Die Verbindung RxD/CTS ist hier auf der Platine realisiert.
Verbindungen innerhalb des Sub-D Steckers brauchen wir nicht herstellen.
|


|
AVRdude
Nehmen wir an, wir sind stolzer Besitzer eines ATtiny45.
Wir haben uns darüber hinaus den hier beschriebenen 4TAP nachgebaut und
an COM1 angeschlossen. Wir haben uns gemerkt, dass der
4TAP kompatibel zum DASA3-Programmer
ist. In diversen durchprogrammierten Nächten haben wir mit der
Programmierumgebung unseres Vertrauens ein Superprogramm erstellt,
welches nun als superprog.hex auf unserer Festplatte im
Ordner C:\Users\Frank\Tolle Progs auf seinen Einsatz
wartet. Dann könnten wir das von AVRdude erledigen lassen. Zu diesem
Zweck haben wir AVRdude im Ordner C:\Program Files\AVRdude
installiert. Die Kommandozeile zum flashen lautet dann:
"C:\Program Files\AVRdude\avrdude.exe" -p atTiny45 -c
DASA3 -P COM1 -U flash:w:"C:\Users\Frank\Tolle Progs\superprog.hex":i
|
Bascom-AVR und stk2dude
Das
geben wir natürlich nicht immer per Hand ein. Ich kann nur Basic und
benutze deshalb Bascom-AVR. Dort können wir externe Programmer
einbinden. Leider kann Bascom nur den Dateinamen der zu flashenden
Datei übergeben, nicht die AVR-Type. Das können wir mit meinem
kleinen
Hilfsprogramm namens stk2dude.exe beheben. Dieses dient als
"pseudo-stk500.exe". Es
gibt die Parameter für den AVR-Typ und unser Compilat (hex-Datei)
automatisch an AVRdude weiter. Weitere Parameter für AVRdude geben wir
einfach in
das Feld USB ein. Unbedingt erforderlich sind Angaben zum Programmer
(für den 4TAP muss hier -cDASA3 stehen) und zum Port, an dem
der Programmer hängt (hier -Pcom1).
Folgende Dateien müssen sich in demselben Ordner befinden:
- stk2dude.exe
- avrdude.exe
- avrdude.conf
- libusb0.dll (falls nicht schon im
Windows-Systemordner)
|
Das Terminalprogramm

Irgendwie wollen wir ja mal mit unserem genial
programmierten Mikrocontroller kommunizieren. Im einfachsten Fall soll
er uns etwas anzeigen. Vielleicht wollen wir aber auch Eingaben machen.
Beides geht mit einem Terminalprogramm. Es zeigt Zeichen an, die der PC
über eine serielle Schnittstelle empfängt und kann Zeichen über
dieselbe senden. Als Schnittstelle zwischen PC und Controller kann 4TAP
dienen.
Das Bild zeigt das Terminalprogramm Termite (siehe Downloads), wie es
Werte des internen ATtiny45-Thermometers anzeigt. Den Quelltext für das
Thermometer können wir unter Downloads runterlade. Im Button von
Termite können wir erklennen, dass die Schnittstelle für 2400 Baud. 8
Datenbits, No Parität und 1 Stoppbit eingestellt ist. Das haben wir im
Quelltext für den Controller genauso eingestellt.
Eine Hürde müssen wir noch beachten: Es kann immer nur ein Programm auf
eine serielle Schnittstelle zugreifen. Das Terminalprogramm ODER das
Programm, das den Controller flasht, in unserem Fall AVRdude. Da kommt
uns eine Eigenschaft zu Gute, die wir in Termite (und HTerm) einstellen
können: Sobald das Programm den Fokus verliert, gibt es die
Schnittstelle frei. Wenn wir das Fenster wieder in den Vordergrund
holen, wird wieder geöffnet. Konflikte mit AVRdude werden so elegant
umgangen.
|
Downloads
- Terminalprogramme, als Ersatz für das Bascom-interne
(weil ich mit dessen Scrollfunktion auf Kriegsfuß stehe):
Termite, HTerm,
Terminal by Br@y
- AVR-Brenner; eine grafische Oberfläche (GUI) für AVRdude, wenn wir dann doch mal an die gefährlichen Fuses ranmüssen
|
Links
Die Vorbilder:
Infos für Anfänger:
|
|