zurueck.gif

Der AVR- Programmer

1.11.2020
Prototype


Obwohl es heute recht komfortabel möglich ist AVR- Programme in einem Arduino zu brennen, beinhaltet dies den Nachteil, dass damit nur jeweils einen Controllertyp der AVR- Familie, in der Regel ein ATMega 328P,  programmiert werden kann. Verwendet man in seinem Projekt andere AVR- Typen, weil man z.B. mit der verfügbaren Platz oder der Stromaufnahme knausern muss, so ist man darauf angewiesen kleine Programmierschaltungen diskret aufzubauen oder zumindest für den Anschluss an einen ISP- Brenner zu sorgen. Ferner benötigt man zusätzliche Komponenten, wie LCDs, Taster, usw.  um die Funktion der Schaltung zu testen. Das ist ein lästiger zusätzlicher Arbeitsaufwand, der nervt wenn man ihn regelmäßig betreiben muss. Um den zu vermeiden habe ich ein kleines Programmiergerät entwickelt, das alle häufig verwendeten Komponenten enthält. Damit lassen sich fast alle gängigen AVRs in der  PDIP- Ausführung brennen.

ISP_BrennerAußer dem hier beschriebenen AVR- Programmer benötigen Sie, zum Betrieb der Schaltung, einen ISP- Brenner, wie ihn z.B.  verschiedene Onlinehändler anbieten. Das linke Bild zeigt das von mir verwendete Exemplar. Zurück zu dem Programmer. Der AVR- Programmer besteht aus mehreren IC- Sockeln, deren Kontakte der Anschlüsse SCK, MISO, MOSI, Reset, +5V und GND parallel geschaltet sind. Im wesentlichen geht es also darum die Anschlüsse des externen ISP-Brenners und der Stromversorgung an die richtigen Pins der IC- Sockel zu bringen. So braucht man zum Brennen der AVRs nur noch den gewünschten AVR in seinen Sockel zu stecken und schon kann es losgehen. Darüber hinaus gibt es einen 16- poligen IC- Sockel zur freien Beschaltung.  Weiterhin sind zehn LEDs mit Vorwiderstand, sowie vier Taster und  drei 10 kOhm Trimmer verbaut. Damit man nach dem Brennen sogleich den Erfolg seiner Bemühungen kontrollieren kann, ist jeder IC- Sockel mit mehren Steckbuchsen verbunden. Alle Komponenten können daher durch Drahtbrücken miteinander verbunden  werden. Die Taster und LEDs können mit Drahtbrücken gegen Masse geschaltet werden, aber auch andere Anschlussvarianten sind möglich. Ebenso ist eine freie Verschaltung der Potis denkbar. Letztendlich ist da noch die Stromversorgung zu erwähnen, die eine Versorgung aus unterschiedlichen Quellen: wie einen internen 9V-Block, ein 9V- Steckernetzteil und den 5 V des ISP-Brenners ermöglichen. Ein Arduino Uno R3 übernimmt die Funktion eines USB zu RS232 Wandlers und über einen Spannungsteiler können Signale z.B. an die Soundkarte eines PCs geschickt und durch ein Soundkarten- Oszilloskop visualisiert werden. Zu erwähnen ist noch das LCD-Display, das in die
201101aa-003a. 201101aa-004a.jpg
Frontseite des Gehäuses eingebaut ist. Der IC- Sockel U3 kann wahlweise mit 8-poligen AVRs, wie zum Beispiel dem ATTiny 45 oder den 20-poligen AVRs, wie zum Beispiel dem ATTiny 2313 bestückt werden. Dabei muss der unterschiedliche Masseanschluss berücksichtigt werden. Die beiden obigen Bilder  verdeutlichen das. Der 16-polige IC- Sockel U4 ist völlig frei beschaltbar. Hier kann z.B. ein ATTiny 44 gesteckt werden. Allerdings hat man dann selbst für die richtigen Verbindungen zur Stromversorgung und den ISP-Anschlüssen Sorge zu tragen. Man greift sie einfach von einem anderen IC- Sockel z.B. den darüber-liegenden 20-poligen Sockel U3 ab. Sehr praktisch kann auch ein 8MHz- Quarzgenerator  auf diesem Sockel sein, den man benötigt wenn man z.B. einen „verfusten“ AVR retten will.

Der Schaltplan:
Schaltplan

Über die 5V Versorgung des ISP- Brenners wird ein Miniaturrelais  geschaltet. Ein Umschalter dieses Relais schaltet im angezogenen Zustand des Relais die Stromversorgung des ISP-Brenners auf die Sicherung F1. Im abgefallen Zustand des Relais wird der Strom von der 9V Versorgung über einen 7805 auf F1 geschaltet. Ein Öffner des Relais in dem 9V- Kreis verhindert, dass Strom von der Batterie verbraucht wird wenn die Stromversorgung des ISP- Brenners aktiv ist und die 9V- Versorgung versehentlich nicht mit S1 abgeschaltet wurde. Der Elko und der dazu parallel geschaltete  270 Ohm Widerstand reduzieren den Haltestrom des Relais, wobei der Elko für den benötigten Anzugstrom sorgt. Die grüne LED D4 über dem Schalter S1 signalisiert generell eine aktive Stromversorgung. Die rote LED D2 daneben brennt zusätzlich zu der  Grünen wenn die Stromversorgung über den ISP- Brenner erfolgt.  Aus dem Arduino Uno R3 muss der ATMega 328P-PU entfernt werden. Es ist daher ein Arduino mit 28-poligen  PDIP- Controller zu verwenden.  Eine RS232 Schnittstelle ist an heutigen Computern nicht mehr vorhanden, deshalb verwenden wir den Arduino als Schnittstellenwandler. Nützlich ist die serielle Schnittstelle allemal, da fast jeder AVR eine solche besitzt und mit ihrer Hilfe das Debugging beträchtlich erleichtert wird, indem die relevanten Werte über eine Terminalemulation ausgelesen werden. Wenn Ihre AVRs einen Bootloader haben, dann können Sie sogar über die serielle Schnittstelle den AVR brennen.

Die Platinen-Layouts:
gr_Platine shield.jpg
Die gesamte Schaltung ist auf zwei Platinen untergebracht. Die Gerberdateien können hier heruntergeladen werden. Die IC- Sockel, sowie die zugänglichen Komponenten und Anschlüsse befinden sich auf der großen Platine im Europaformat, Die Stromversorgung wird in einem Arduino– Shield realisiert, der zwar auf den Arduino gesteckt ist aber ihn nicht zur Stromversorgung nutzt. Nur GND so wie Rx und Tx werden benutzt. Die Stromversorgung über die 9V- Buchse des Arduino wird also NICHT verwendet. Außerhalb der beiden Platinen befindet sich ein DC- Stecker, der Audio- Ausgang, das LCD- Display und der Batteriehalter BT1. Er ist auf der Schmalseite der Gehäusewand eingebaut. Das LCD- Display ist auf der Frontseite eingebaut. Mittels Drahtlitzen erfolgt eine Verbindung zu und zwischen den Platinen.

Die Buchsenleisten:
Aus Kostengründen verwende ich 64- polige Buchsenleisten, die ich passend zuschneide. Außerdem ist es nicht immer möglich Buchsenleisten in der gewünschten Läge zu bekommen. Aus einer 64er Leiste bekommt man mehrere Leisten in den gewünschten Längen. Es empfiehlt sich die Leisten nicht einfach durchzubrechen. Sie zerbrechen dann oft auch an den Kontakten. Trennen Sie die Leisten besser mit einem Taschenmesser. Setzen Sie dem gebogenen Teil der Klinge an. Zum Trennen ist ein gewisser Kraftaufwand nötig. Dabei ist dafür Sorge zu tragen das die getrennten Stücke nicht durch die Gegend fliegen, indem man mit der Hand die den Druck auf die Klinge ausübt auch die Leiste abdeckt. Wenn Sie zwei bis drei Kontakte Verlust pro Stück in Kauf zu nehmen bereit sind, können Sie die Leiste auch durchsägen und den Rest jeweils abschleifen. Das Gleiche gilt wenn Sie die Stücke einfach durchbrechen. In jeden Fall sollten die bearbeiteten Enden nachbearbeitet, also abgeschliffen werden. Für die Leisten die die Länge der Sockel haben gibt es die Alternative Präzisionssockel zu zerteilen.

Die SMD Widerstände:
Wie Sie aus der Stückliste entnehmen können kommen für die Widerstände auf der großen Platine SMD Bausteine der Größe 805 zum Einsatz. Das Löten dieser Widerstände ist etwas pfriemelig, gelingt aber wenn sie die Bausteine mit einem Zahnstocher,  dem Sie eine Spitze abgeschliffen haben, auf den Footprint andrücken. Mit der anderen Hand halten Sie den Lötkolben. Bei dem PCB- Herstellen JLCPCB sind die Footprints verzinnt wenn sie die billigste Ausführung wählen und die Kontaktstellen der 805er Widerstände sind ebenfalls verzinnt. Fixieren Sie also den Widerstand mit dem Lötkolben auf der einen Seite. Dann können Sie die andre Seite mit Lötzinn anlöten und zu Schluss auch der fixierten Seite noch einen Tropfen Zinn gönnen.
 
Das Gehäuse:
Programmiergeraet_2020.jpg
Das Gehäuse wurde mit einem 3D-Drucker erstellt. Sollten Sie selbst noch keinen 3D- Drucker haben, können Sie auch einen 3D- Drucker in Ihren nächst gelegenen FabLab nutzen. Das von mir verwendete Filament ist PLA.  Die Layerhöhe sollte 0,2 mm betragen, die Fülldichte 30%.  Die STL- Dateien können Sie hier herunterladen. Das Gehäuse enthält Aussparungen für die Batteriehalterung, das LCD- Display, den Anschlüssen für den Arduino, der Buchse für die 9V- Versorgung und dem Audio- Ausgang. In dem Boden befinden sich passende Löcher um das Arduino- Board mit M3-Schrauben anzuschrauben. Damit die Aussparungen sauber gedruckt werden ist eine Stützstruktur erforderlich, die Sie nach dem Druck entfernen sollten.Die große Platine wird mit vier 3mm-Blechschrauben an das Gehäuse angeschraubt. Bitte ziehen Sie die Blechschrauben nur "handwarm" an, sonst reißt der Kunststoff aus.  Zwischen der großen Platine und dem Gehäuse, sowie zwischen dem Arduinoboard und dem Gehäuse setzen Sie bitte 5 mm Distanzhülsen aus Kunststoff. Unter dem Boden werden 4 Gummifüße geklebt, damit der Programmer einen sicheren Stand hat. Das LCD-Display wird mit vier 2 mm Zylinderkopfschrauben an die Frontwand angeschraubt. Der Arduino  wird mit drei Schrauben M3 auf dem Gehäuseboden befestigt. Ggf. müssen Sie Sie Löcher und Aussparungen etwas nacharbeiten. Ich empfehle den Einsatz von Unterlegscheiben.

Inbetriebnahme:
Schließen Sie Ihren ISP-Brenner und die Stromversorgung noch nicht an. Prüfen Sie bitte zunächst einmal mit einem Ohmmeter alle Verbindungen gegen Masse, ob Sie auch keine Kurzschlüsse in Ihrer Schaltung haben. Wenn ja, müssen diese natürlich erst einmal gefunden und beseitigt werden. Das gleiche gilt natürlich auch für Leitungsunterbrechungen und unerwünschte Kontakte zwischen den Leiterbahnen. Ist bis hier hin alles in Ordnung, legen Sie eine volle Batterie in das Gerät ein und schalten Sie es ein. Die grüne LED muss jetzt leuchten. Messen Sie die Betriebsspannung. Sie muss etwa 5V betragen. Ihr Gerät ist nun betriebsbereit. Sie können jetzt einen zu brennenden AVR einsetzten und Ihren ISP- Brenner anschließen. Die rote und die grüne LED leuchten, wenn der ISP-Brenner angeschlossen ist und die 5V- Stromversorgung übernimmt, was bei einigen Brennern möglich ist. Leuchtet die grüne LED einmal wider erwarten nicht, so ist das ein Hinweis darauf, dass die Sicherung F1 durchgebrannt ist und (nach Beseitigung der Ursache) ersetzt werden muss.

Stückliste:

Arduino- shield:
R1 = 2k7 bedrahtet
R2 = 220R bedrahtet
R3 = 270R bedrahtet
R4, R5 = 1k5 bedrahtet
C1 = 100µF/35V, bedrahtet
C2, C3 = 100nF bedrahtet
IC1 = 7805 bedrahtet
D1, D3 = 1N4001 bedrahtet
d1 = Kleinrelais FRT 5 DC 5V
F1 = Sicherungshalter, Feinsicherungen 5x20mm, offen
        mit Feinsicherung 100mA 5x20mm
Platine shield

große Platine:
X1 = Wannenstecker, 10-polig, gerade
X2 = Stiftleisten 2,54 mm, 2X03, gerade
U1 = Präzisionssockel 40 Pol.
U2 = Präzisionssockel  28 Pol.
U3 = Präzisionssockel  20 Pol.
U4 = Präzisionssockel  16 Pol.
R7 ... R16 = 1k5 SMD 805
P1, P2, P3 = Einstellpotentiometer, liegend, 10 kOhm, 6 mm
D2, D5 ... D9 = Lowcurrend LED 5mm Rot
D4, D10 ... D14 = Lowcurrend LED 5mm Grün
S2 ... S7 = Printtaster, THT, 2,45 N, 6 x 6 x 7 mm
12 Buchsenleisten 64 Pol. 2,54mm, gerade  (siehe Text)
Platine große Platine

sonstiges:
ISP Brenner
Steckernetzteil 9V DC
9V Block
Arduino Uno R3 mit 328P in PDIP-Ausführung
LCD Display, 16x2, HD44780- kompatibel, Kontakte oben links 
10 m Drahtlitze 0,5 mm²
S1 = Miniatur-Kippschalter, 1x, Ein-Ein
BT1 = Batteriehalter für 1x 9-Volt-Block oder 2x Mignon (AA), 64,5 x 37 x 22,5 mm
DC Einbaubuchse Zentraleinbau, Ø außen: 5,6 mm, Ø innen: 2,1 mm
3,5 mm Klinkenbuchse
4  Gummifüßchen
3 Schrauben M3 x 15
4 Schrauben M2 x 15
4 Blechschrauben 3mm x 10
7 Unterlegscheiben 3,5 mm
8 Unterlegscheiben 2,2 mm
4 Gewindemuttern M3
8 Gewindemuttern M2
7 Distanzhülsen, Kunststoff, 5mm
Gehäuse = 3D-Druck

Drahtbrücken:
Drahtbruecke-1.JPG Verbindungen auf dem Programmiergerät steckt man mit Drahtbrücken. In dem linken Bild sehen Sie eine Drahtbrücke, wie ich sie für die Masseanschlüsse der LEDs und Taster verwende. Sie sind 1/10 Zoll (2,54mm) breit. Ich biege sie mir aus 0,5 mm Schaltdraht. Das rechte Bild zeigt  eine käufliche Drahtbrücke, die ich für Verbindungen der AVRs mit den Komponenten verwende. Sie sind im Internet recht preisgünstig zu beziehen. In dem unterem Bild  sieht man eine Standardbelegung, wie ich sie fast ständig gesteckt lasse, weil ich sie immer wieder benötige. Drahtbruecke-2.jpg

Standardbelegung.jpg

Und noch etwas...
Es ist zwar eigentlich selbstverständlich, aber ich sage es lieber trotzdem. Obwohl Sie auf der großen Platine mehrere IC- Sockel haben, können  Sie gleichzeitig immer nur EINEN AVR brennen! Und noch ein Tipp: Sockeln Sie Ihre AVRs ehe Sie sie in das Programmiergerät stecken. Das schont die Beinchen Ihrer AVRs und sorgt für einen sicheren Kontakt.

[1] Gerberdatei  große Platine
     Gerberdatei kleine Platine
[2] die STL Datei


zurueck.gif