USB Prog

USB Prog

 

Was ist ein USB Prog?

USB Prog ist ein Open Source Programmieradapter, zum programmieren diverser Mikrocontroller. Durch ein cleveres Konzept kann er eine Vielzahl von Programmieradaptern, auch anderer Mikrocontrollerfamilien ersetzen. In einem Online-Pool werden die dafür notwendigen Firmwaredateien zum Aufspielen auf dem USB Prog zur Verfügung gestellt. Durch das Open Source Konzept und den Online-Pool ist sichergestellt, dass jederzeit Firmwaredateien für neue Programmieradapter, bzw. neue Mikrocontrollerfamilien hinzugefügt werden können. Zur Zeit können viele Mikrocontroller von Atmel, einige ARM, PIC, MSP430, Flashes und sogar FPGAs programmiert, bzw. sogar debuggt werden. Außerdem kann das USB Prog als einfacher Logikanalysator und sogar als USB Display für Industriestandardkompatible Displays verwendet werden. Die Möglichkeiten sind schier unbegrenzt…

Zum Zeitpunkt des Entstehens dieses Artikels ist die Hardwareversion 3.1 aktuell. Der Aufbau wird anhand dieses Releases durchgeführt. Einer der Haupterfinder dieses Projekts ist Benedikt Sauter.

 

Für wen ist der USB Prog geeignet?

Ich benutze seit Jahren einen Programmierstecker für den parallelen Anschluss (Bild 6) und das Windows Programm PonyProg. Leider verfügen heutige Laptops nicht mehr über diese parallele Schnittstelle. Auch serielle Schnittstellen werden im Zuge der Miniaturisierung moderner Geräte zunehmend wegoptimiert. Somit war es nach dem Kauf eines neuen Laptops nicht mehr möglich, alle älteren/kleinen Atmel Mikrocontroller zu programmieren. Auch beim Flashen der neueren ATMega Reihe gab es immer wieder Probleme, die sich auch mit die aktuellsten PonyProg Version nicht lösen ließen. Logische Konsequenz: Es muss ein neuer Programmieradapter her! Seit ein paar Jahren verfolge ich das USB Prog Projekt und da es mitlerweile das alpha Stadium hinter sich gelassen hat, fällt die Entscheidung für diesen Programmieradapter sehr einfach.

Eines vorweg genommen: Der Bau des USB Prog erfordert einige Kenntnisse beim Herstellen der Platine und Löten der Bauteile und sollte nicht von einem Anfänger durchgeführt werden.

Die Hauptplatine und alle Bauteile können auch direkt im Shop bezogen werden. Ich erwähne an dieser Stelle ausdrücklich, dass ich weder mit Benedikt Sauter verwandt noch in irgendwelchen Geschäftsbeziehungen mit ihm stehe. Für mich kommt nur der vollständige Selbstbau in Frage. Dieses Dokument soll keine Anleitung für den Bau eines USB Prog sein, sondern nur beschreiben, welche Probleme auftreten und wie sie gelöst werden.

 

Schaltplan und Layout

Für die komplette Selbstbaulösung gibt es eine speziell dafür geroutete Version. Der Schaltplan und das Layout wurden unverändert übernommen.

Schaltplan USB Prog
Bild 1: Schaltplan USB-Prog

 

Layout Board USB Prog
Bild 2: Platinenlayout USB-Prog

 

Bestellliste

Ich habe versucht, möglichst alle Bauteile von Reichelt zu beziehen. Einzig die Durchführungstüllen wurden bei Pollin gekauft. Meistens sind bei den Widerständen 10 Stück angegeben, obwohl im Schaltplan weniger als 10 benötigt werden. Der Grund dafür ist, dass Reichelt bei kleineren Mengen höhere Preise verlangt. Ab 10 Stück Mindestabnahme wirds deutlich günstiger. Was an Bauteilen zu viel ist, wandert in die SMD Sammelbox und wird für spätere Projekte weiterverwendet. Leider gibt es bei Reichelt den 24,0 MHz Quarz nicht in der benötigten Bauform. Somit muss etwas improvisiert werden. Außerdem wurde die USB-Buchse nicht mitgeliefert, deshalb habe ich das USB-Kabel direkt angelötet und mit einer Durchführungstülle gegen Feuchtigkeit geschützt. Die gesamte Platine passt in ein standard Plastegehäuse, dessen Bestellnummer mit angegeben wurde. Leider war das Flachbandkabel zum Bestellungszeitpunkt ebenfalls nicht lieferbar, weshalb ich keinen Preis angeben kann. Zur Not tuts ein PC Diskettenlaufwerkskabel, dass nach der 10. Leitung aufgetrennt wird.

Der Gesamtpreis beläuft sich auf ungefähr: 16 Euro.

Nr. Bestellnummer Was? Anzahl Einzel Preis Gesamt Preis Wo?
1 ATMEGA 32-16 TQ ATMega AVR-RISC-Controller, TQFP-44 1 2,75 2,75 Reichelt
2 SL 1X40G 2,54 40pol. Stiftleiste, gerade, RM 2,54 1 0,14 0,14 Reichelt
3 LL 5818 SMD Schottky-Diode, Melf, 30V, 1A 2 0,20 0,40 Reichelt
4 USB N9604-28M USB Node-Controller DMA, SOL-28 1 4,70 4,70 Reichelt
5 24,0000-MA505 SMD-Quarz, Grundton, 24,0 MHz 1 0,91 0,91 Reichelt
6 NPO-G0805 15P SMD-Vielschicht-Keramikkondensator 15P 2 0,05 0,10 Reichelt
7 X7R-G0603 100N SMD-Vielschicht-Keramikkondensator 100N 10 0,05 0,50 Reichelt
8 SMD-0603 10K SMD-Chipwiderstand 0603, 10 K-Ohm, 1% 10 0,008 0,80 Reichelt
9 SMD-0603 1,0M SMD-Chipwiderstand 0603, 1,0 M-Ohm, 1% 10 0,008 0,08 Reichelt
10 SMD-0603 1,5K SMD-Chipwiderstand 0603, 1,5 K-Ohm, 1% 10 0,008 0,08 Reichelt
11 SMD-0603 270 SMD-Chipwiderstand 0603, 270 Ohm, 1% 10 0,008 0,08 Reichelt
12 SMD 1/4W 100 SMD-Chip-Widerstand, Bauform 1206, 100R 10 0,0082 0,082 Reichelt
13 X7R-G0603 1,0/16 SMD-Vielschichtkondensator G0603 – 1,0µF 3 0,070 0,21 Reichelt
14 LED 3MM GN LED, 3mm, Low Cost, grün 1 0,070 0,07 Reichelt
15 LED 3MM RT LED, 3mm, Low Cost, rot 1 0,060 0,06 Reichelt
16 WSL 10W Wannenstecker, 10-polig, gewinkelt 1 0,13 0,13 Reichelt
17 AK 673-A USB-Kabel 2.0, A-Stecker/Mini-USB-5P-St 1 0,95 0,95 Reichelt
18 TEKO 10014 ABS-Kunststoffgehäuse 90x46x18mm 1 1,95 1,95 Reichelt
19 BEL 160X100-1 Fotoplatine, einseitig, 160x100mm,1,5mm 1 1,70 1,70 Reichelt
20 AWG 28-10G 10M Flachbandkabel AWG28, 10-pol., grau,10m 1 grad nicht lieferbar Reichelt
21 PFL 10 Pfostenbuchse, 10-polig, mit Zugentl. 2 0,070 0,14 Reichelt
22 440 316 Kabel-Durchführungstüllen 10 Stck. 1 0,30 0,30 Pollin

Bei dem USB-Kabel kann irgendein Kabel gewählt werden, welches auf einer Seite einen USB-A Anschluss hat. Die Gegenseite des Kabels wird sowieso direkt auf die Platine gelötet. Sollte man sich für das in der Liste stehende Kabel entscheiden, dann muss der Mini USB-Stecker abgeschnitten werden. Zusätzlich zu der obigen Bestellliste werden noch zwei Jumper benötigt, die auch von jeder x-beliebigen Computer-Platine geerntet werden können. Deshalb habe ich an dieser Stelle darauf verzichtet.

 

Die fertige Platine

Die Bestückung ist eine Herausforderung. Einige Widerstände haben die SMD Größe 0603, was umgerechnet 1,6mm Länge und 0,8mm Breite entspricht. Auch beim Ätzen dieser Platine waren zwei Anläufe nötig.

TIPP: Man sollte auf abgelaufenes Platinenmaterial verzichten!

Wie man sieht, wurde das USB-Kabel (rechts) mit einem Draht auf der Unterseite verdrillt. Zu meinem Erstaunen erweist sich diese „Konstruktion“ stabiler als angenommen und eine zusätzliche metallische Zugentlastung ist nicht mehr nötig. Vor dem Verlöten des USB-Kables unbedingt an die Kabeldurchführungstülle denken. Nicht wundern, die Platine glänzt, weil sie mit Kolophonium versiegelt und somit gegen Feuchtigkeit geschützt wurde.

USB Prog geätzte und bestückte Platine
Bild 3: Geätzte und bestückte Platine

 

Das Gehäuse

Mit etwas Feinarbeit lässt sich die Aussparung für die Wannenleiste ausfräsen und die Platine passgenau anschrauben. Den SMD-Quarz habe ich zwei Drähte verpasst und die Drähte so durch die Bohrungen geführt, dass sie von unten direkt angelötet werden können.

Bestückte Platine im Gehäuse Oberseite USB Prog
Bild 4: Platine im Gehäuse

Für was war doch gleich welche Steckerleiste? Eine kurze Bemerkung auf der Oberseite ist ganz hilfreich.

Und abschließend das fertig aufgebaute Gerät:

Fertig aufgebautes USB Prog
Bild 5: Fertig aufgebautes USB Prog

 

Der Hardwareaufbau wurde vollständig am 12.03.2010 realisiert.

Bevor mit dem Flashen des Bootloaders begonnen wird, sollte ein Trockenlauf durchgeführt werden. Für diesen Test eignen sich alle aktiven USB Hubs. Also jeder USB Hub, der ein eigenes Netzteil mitbringt. Sollten Kurzschlüsse auf der Platine sein, dann wird nicht die Laptop USB Schnittstelle zerstört, sondern maximal der USB Hub. Sobald der USB Prog angeschlossen wird, leuchtet die grüne LED. Ist das nicht der Fall, dann alle Leitungen/Stecker, etc. prüfen.

 

Flashen des Bootloaders

Wer den gleichen parallelen Programmierstecker (Bild 6) wie ich verwendet, muss noch die Stromversorgung des parallelen Programmiersteckers mit einem Jumper auf JP2 zwischen den beiden PINs 2 und 3 aktivieren. Außerdem muss noch ein weiterer Jumper auf JP1 gesteckt werden, damit der parallele Programmierstecker einen RESET des USB Prog Mikrocontrollers durchführen kann. Dennoch wird der Programmierstecker die Programmierung mit Fehlermeldungen beim Lesen und Schreiben quittieren. Der Grund liegt an einer Besonderheit dieses Programmiersteckers.

Programmierstecker für die parallele Schnittstelle
Bild 6: Programmierstecker für die parallele Schnittstelle

Auf der zu programmierenden Platine wird normalerweise eine ISP-Schnittstelle nach Atmel Spezifikation benötigt. In dieser Spezifikation sind die jeweils 4., 6., 8. und 10. Leitung mit Masse (GND) verbunden. Beim USB Prog stimmen die Leitungen MOSI, RESET, SCK, MISO und VCC überein, nicht jedoch die Masseleitungen 4, 6 und 8 (Bild 7).

USB Prog Gegenüberstellung ISP Schnittstellen
Bild 7: Gegenüberstellung ISP-Schnittstellen nach Spezifikation, bzw. USB Prog

Das bedeuted, dass der Programmierstecker seine Masse zwingend mindestens über die 10. Leitung bekommen muss. Beim Aufschrauben des parallelen Programmiersteckers ist zu erkennen, dass nicht PIN 10, sondern PIN 6 mit GND verbunden ist (Bild 8). Das ist ein Problem, denn der parallele Programmierstecker wird nicht mit Strom versorgt und funktioniert deshalb nicht.

 

USB Prog Parallel Adapter aufgeschraubt
Bild 8: Aufgeschraubter paralleler Programmierstecker zu erkennen PIN 10 ist nicht verdrahtet

Um den Bootloader mit diesem parallelen Programmierstecker aufzuflashen, muss zwangsläufig die 10. Leitung mit Masse oder der 6. Leitung verbunden werden (Bild 9).

USB Prog Modifizierter parallel Programmierstecker
Bild 9: Modifizierter parallel Programmierstecker

Eine zusätzlich eingezogene Masseleitung von Leitung 10 zur Masse (schwarze Leitung) gewährleistet die Stromversorgung des parallelen Programmiersteckers. Noch einfacher wäre, einen vorhandenen USB Prog zum programmieren des neuen USB Prog zu verwenden. Dann würde die Pinbelegung 1:1 übereinstimmen.

Der komplette Aufbau ist in Bild 10 dargestellt.

USB Prog kompletter Aufbau zum programmieren des Bootloaders
Bild 10: Kompletter Aufbau zum programmieren des Bootloaders

Ist der Bootloader programmiert, dann die beiden Jumper abziehen und einen Jumper auf Pinleiste JP3 als Brücke des PIN 2 und PIN 3 aufstecken, das aktiviert den Bootloader. Sobald der USB Prog per USB an einen PC angesteckt wird, sollte ein neues „unbekanntes“ Gerät erkannt werden. In der Linux Konsole nach Aufruf des Befehls „dmesg“ sieht die Meldung so oder ähnlich aus:

usb 7-1: new full speed USB device using uhci_hcd and address 4
usb 7-1: configuration #1 chosen from 1 choice

Jetzt kann mit dem Usbprog PC Flashtool die im Online-Pool vorhandene Firmware aufgespielt werden (Bild 11).

USBProg Firmware flashen aus dem Online Pool
Bild 11: Mit USBProg wird die im Online Pool vorhandene AVRISP mk2 Clone Software aufgeflasht

Jetzt verhält sich das USBProg wie ein mk2 ISP von Atmel. Unter Windows kann im AVR Studio genauso wie mit dem Original ISP gearbeitet werden. Bei Linux bietet sich das Programm avrdude an. Es ist ein Kommandozeilenprogramm, welches eine Vielzahl von Programmieradaptern unterstützt. Etwas mehr Komfort bietet AVR8 Burn-O-Mat. Dieses in Java geschriebene Programm läuft unter Windows, wie auch unter Linux, nutzt als Grundlage avrdude und hat eine recht übersichtlich gestaltete Oberfläche. In den Settings müssen ein paar Einstellungen zum Programmieradapter vorgenommen werden (Bild 12).

USB Prog Einstellung im Programm AVR8 Burn-O-Mat
Bild 12: Einstellungen im Programm AVR8 Burn-O-Mat für die Benutzung vom USBProg

Es ist an der Zeit, den ersten Mikrocontroller über AVR8 Burn-O-Mat zu flashen. Dazu habe ich ein selbst gebautes Labornetzteil mit Atmega8 Mikrocontroller als Zielplatform ausgewählt (Bild 13).

USBProg mit AVR8 Burn-O-Mat flashen eines Atmega8 Mikrocontrollers
Bild 13: USBProg mit AVR8 Burn-O-Mat beim flashen eines Atmega8 Mikrocontrollers
Im Log des AVR8 Burn-O-Mat ist der Aufruf von avrdude mit allen Aufrufparametern zu erkennen. Wenn keine Fehlermeldung kommt, dann hat das Programmieren und Verifizieren des Ziel-Mikrocontrollers geklappt.

 

Probleme

Ein großes und bisher unlösbares Problem stellte ich bei der Benutzung meines USBProg fest. Eigentlich sollte das USBProg auch in einer virtuellen Maschine (VMware) unter Windows XP eingesetzt werden. Leider meldet Windows nach dem Freigeben des USBProg einen Fehler (Bild 14).

USB Prog Fehlermeldung in VMWare Windows XP
Bild 14: USB Prog Fehlermeldung in VMWare Windows XP

Nach etwas Recherche im Internet stellte sich heraus, dass dieses Problem weitreichend bekannt aber bisher noch nicht gelöst wurde.

 

Anmerkung des Autors vom 24. April 2010: Es soll mitlerweile eine alternative Firmware existieren, die das Problem beheben soll. Für mich ist das Problem unkritisch, da ich das USBProg ausschließlich unter Linux mit AVR8 Burn-O-Mat verwende oder auf einem PC mit installiertem Windows und nicht in einer virtuellen Maschine.

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Die Checkbox für die Zustimmung zur Speicherung ist nach DSGVO zwingend.

Ich akzeptiere