^

 4TAP  der 4-Teile-AVR-Programmer 


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-Zustand geht. Herausgekommen ist der "4-Teile-AVR-Programmer", kurz 4TAP.
Steckbrett
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.

SchaltplanSchaltplan

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

StreifenrasterDer 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.


unten

oben

oben

Klassischer Aufbau mit 10-Pol Wannenstecker

StreifenrasterWenn 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.

Update April 2012: Das Verbinden von unbenutzten Leitungen der 10pol Flachbandleitung mit Masse (Pin 4,6,8  mit 10 an der Platinenoberseite)  verhindert ein "übersprechen" der parallelen Leitungen. Das hat bei mir Fehler bei höheren Controllerfrequenzen verhindert. Die Bilder sind entsprechend angepasst.

oben

unten




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

stk2dude-configDas 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

Steckbrett

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 runterladen. Im Button von Termite können wir erkennen, 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:



Zur Startseite


Haftungsausschluss    Impressum

© Frank Steinberg