Der AVR- Programmer23.01.2023
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. Auß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 Der 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: 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: 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:
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 |