zurueck.gif

Der AVR- Programmer

23.01.2023
Prototype


Obwohl es heute recht komfortabel möglich ist AVR- Programme in einem Arduino zu brennen, beinhaltet dies den Nachteil, dass damit nur jeweils ein 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 fünf 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  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
Frontwand  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 dem Arduino Uno R3 übernommen. 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 abgegriffen. Daneben werden GND so wie Rx und Tx benutzt. Außerhalb der beiden Platinen befinden sich  der Audio- Ausgang und das LCD- Display. Der Audio- Ausgang ist auf der Schmalseite der Gehäusewand, neben den Anschlüssen des Arduino, eingebaut. Das LCD- Display ist in der Frontwand eingebaut, die in das Gehäuse gesteckt wird. Die große Platine hält die Frontwand an ihrem Platz. Mittels Drahtlitzen erfolgt eine Verbindung zu und zwischen den Komponenten.

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- Hersteller 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 zum 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 Anschlüssen des Arduino und dem Audio- Ausgang. In dem Boden befinden sich passende Löcher um das Arduino- Board mit M3-Schrauben anzuschrauben. Die große Platine wird mit vier M3 Schrauben an das Gehäuse angeschraubt. Bitte ziehen Sie die Schrauben nur "handwarm" an, sonst reißt der Kunststoff aus. 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. 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.  Ihr Gerät ist nun betriebsbereit. Sie können jetzt  Ihren ISP- Brenner
anschließen und das Gerät einschalten. 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. Messen Sie die Betriebsspannung. Sie muss etwa 5V betragen. 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
D1 = 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
Arduino Uno R3
(oder kompatibel) 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
3,5 mm Klinkenbuchse
4  Gummifüßchen
3 Schrauben M3 x 15
4 Schrauben M2 x 15
4 Schrauben M3 x 10
7 Unterlegscheiben 3,5 mm
8 Unterlegscheiben 2,2 mm
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


zurueck.gif