AVR HV-Programmer

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Ein "Hochspannungs"-Programmierer für AVR legt eine Spannung von +12V an den Reset-Eingang. Damit lassen sich auch Fusebits programmieren, die mit dem normalen ISP-Programmer nicht zugänglich sind.

Zu unterscheiden sind das High Voltage Serial Programming (HVSP) und das Parallel Programming (PP). Welche Methode(n) ein AVR unterstützt, steht im jeweiligen Datenblatt des AVRs.

Bekannte HV Programmer sind:

Hochvolt-Programmer sind nur dann als In-System-Programmer verwendbar, wenn die Schaltung mit den 12 V an der Resetleitung zurechtkommt und auch alle anderen Pins genügend hochohmig und ohne schaltungstechnische Nebenwirkungen (etwa einem Brückenkurzschluss) angeschlossen sind. Da dies bei der Menge anzuschließender Pins [im Vergleich zur Gesamtanzahl der Pins des Gehäuses] eher selten der Fall sein wird, werden die Chips fast immer „solo“ (sozusagen „Out-System“) gebrannt. Am ehesten bietet sich HVSP-ISP für 14-beinige SMD-AVRs an; dazu müssen in der Einsatzschaltung ggf. entsprechende Vorkehrungen getroffen werden.

Ein Platinenlayout für ElmChans Hochvolt-Programmer

Dieser benötigt einen PC mit Parallelport sowie eine externe Stromversorgung von 6..24 V=. USB-Parallel-Konverter (für Drucker) funktionieren nicht. Vorteil: Ein Mikrocontroller wird nicht benötigt.

Wie auch das Original beherrscht dieser PP (parallel programming) als auch HVSP (serial programming). Für den rein seriellen Gebrauch (HVSP der 8- und 14-Beiner) kann man auf den 74HC299 verzichten.

Schaltplan im Eagle-Format, Bestückungspläne und Platinenlayout: Christoph Kessler

ElmChans Konzept ist eine ausgesprochene „Billiglösung“, die 20-poligen AVRs bevorzugend, dem scheint eine einseitige Platine mit Drahtbrücken im Eagle-Light-Format 80×100 mm² angemessen. Jener verzichtet auf Spannungsregler; einen 78L05 hinzuzusetzen und das Ganze mit stabilisierten 12 V zu speisen sollte jedoch nicht allzu schwer fallen.

Das Foto (unten) zeigt schon die „Luxusversion“, Teilbestückung ist entsprechend denkbar.

Achtung, Schaltplanfehler! Die Bezeichnungen /AUTOFEED und /SELIN sind genau verkehrt herum.

Eagle board / schematic files

Schematic.png

Components.png

AVR HV Programmer Layout.png

AVR HV Programmer Foto.jpg

Software, auch für ATtiny4..10

Open-Source, Download. Kann direkt ELF-Dateien laden, kein Umweg über avr-objcopy erforderlich. Kann EEPROM, Fuses und Lockbits „in einem Rutsch“ der (von-neumannisierten) Hex- oder ELF-Datei entnehmen und brennen. Sowie die Chip-Signatur aus der Datei (mit #include <avr/signature.h> zu generieren) mit dem Chip vergleichen. Bei Verwendung einer ELF-Datei kann die Software die Chip-Signatur von der elf-Section .note.gnu.avr.deviceinfo ermitteln; #include <avr/signature.h> ist dann nicht mehr erforderlich. Die Software kennt alle 8-Bit-AVRs. Unterstützt direkten (giveio.sys) als auch indirekten (InpOut32.dll) Portzugriff aufs Parallelport sowie eine wahlfreie Port(basis)adresse. Läuft von Windows 95 bis Windows 10 sowie Linux; ein PC mit Parallelport (auch als Steckkarte via PCI oder PCIexpress nachgerüstet) ist erforderlich. Parallelports an Docking-Stations funktionieren auch. USB-Parallel-Konverter (für alte Drucker) funktionieren nicht.

Der sechsbeinige Schaltkreis im SOT23-Gehäuse ist wie folgt an die 8-polige Fassung anzuschließen:

Pin der Fassung Pin des Controllers Signalname
1 6 RESET = Programmierspannung
2 3 TPICLK (Takt)
4 2 GND (Bezugspotenzial)
7 1 TPIDATA (Daten, bidirektional)
8 5 5P (geschaltet)

Das Pin 4 des Controllers kann frei bleiben.

Fuse bei ATtiny4..10

Diese Mikrocontroller haben laut Dokumentation keine Fuse(s), sondern Configuration Bits. avr-gcc trägt diesem Umstand „Rechnung“, dass #include <avr/fuse.h> nicht wie erwartet funktioniert: Die Configuration-Bits sollen laut Linker-Skript in der Sektion .config ankommen, mit der linearen Adresse 0x820000 (die gleiche wie .fuse für die übrigen AVRs). In die ELF-Datei setzt man ein einzelnes Configuration-Byte so:

   uint8_t __attribute__((section(".config"))) Config=0xFE;  // Reset = I/O-Pin

Der ELF-Loader vom oben angegebenen avrpp berücksichtigt diese Besonderheit.

avr-gcc-Fehler bei ATtiny4 und ATtiny5

Verwendet man

   #include <avr/signature.h>

verweigert avrpp die Zusammenarbeit mit dem Chip, weil die Signatur nicht passt. Hier liegt der Fehler in den Kopfdateien avr/tn4.h und avr/tn5.h, dort sind die Signaturbytes tatsächlich falsch eingetragen. Vielleicht liest das jemand vom avr-gcc-Team und packt das Problem an der Wurzel, statt selbst die Dateien korrigieren zu müssen.

Betrieb mit SMD-Clip

Beim Betrieb dieses Programmiergerätes in Verbindung mit einem 8-poligen SMD-Clip zur Programmierung von ATtinyX5 (SU und SSU = breites und normales SMD-Gehäuse mit e = 1,27 mm) versagt bereits das Auslesen der Device-ID-Bytes, und der Chip wird nicht erkannt. Auch das Drosseln der Programmiergeschwindigkeit (bspw. mit -i10) hilft nicht dagegen. Ursache sind gegenseitige Störungen auf den vier Datenleitungen, die vom Mikrocontroller selbst verursacht werden und über die Leitungslänge von nur 15 cm nicht mehr genügend von den Widerständen auf dem Programmerboard bedämpft werden. Dies führt letztlich zu zusätzlichen Taktflanken auf SCI = PB3.

Abhilfe schafft ein Kondensator 100 pF zwischen Pin 2 = SCI = PB3 und Pin 4 = GND direkt am zu programmierenden Mikrocontroller. Alternativ ein Kondensator 4,7 nF zwischen Pin 7 = PB2 = SDO und Pin 4 = GND, ebenfalls direkt am zu programmierenden Mikrocontroller. Andere versuchsweise Kondensatoren, insbesondere zwischen Pin 8 = UCC und Pin 4 = GND brachten keinen Erfolg.

Dasselbe Problem wird vermutlich auch bei anderen 8-poligen ATtinys und beim Verlängern mit 14-poligen ATtinyX4 auftreten, da gleicher Programmieralgorithmus: „HVSP“ = Hochvolt-serielle Programmierung.

Es ist davon auszugehen, dass eine geeignete Terminierung auf der Programmer-Seite (bspw. Serienwiderstände 100 Ω statt 1 kΩ) das Problem ebenfalls und besser löst.

siehe auch

Miniatur-Version von ElmChans HV-Programmer

AVR In System Programmer