Auswahl
Projekte
Impressum
lang:en   lang:de

 
 
 
Day Es gibt diverse Schaltungen im Netz, die das Gleiche machen, wie die hier vorgestellte Schaltung. Wer seinem Atmega-Prozessor Leben in Form einer Firmware einhauchen möchte, kann auch auf dieses Projekt zurückgreifen.

Was am Ende rauskommen soll

 
Inspiriert vom AVR Doper Projekt, wollte ich das in einer abgespeckten Version nachbauen. Leider legen viele Autoren viel zu großen Wert auf ihre Leiterkarte und deren möglichst rechteckige Form (oder was auch immer) und vergessen, daß man am Ende vielleicht auch ein Gehäuse dafür benötigt. Und dann wird solange an der Leiterkarte gesägt und gefeilt bis sie in ein Gehäuse passt, oder gleich ein viel zu großes Gehäuse gewählt.
Aus diesem Grund habe ich anders herum angefangen. Also erst ein Gehäuse ausgesucht. Gewählt habe ich eins der Firma PAC TEC, vom Typ PP-2AA.
Das Gehäuse hat eine angenehme Größe und liegt gut in der Hand. Das Batteriefach stört zwar etwas und muß auch in diesem Projekt ausgesägt werden (in einem anderen Projekt erwies sich aber eben dieses Batteriefach als nette Dreingabe). Der Deckel des Batteriefachs ist aber auch in diesem Projekt nützlich, weil man darüber einfachen Zugang zu den Komponenten erhält, ohne das Gehäuse jedesmal aufschrauben zu müssen.

Schaltplan

Das Meiste dieses Schaltplans war bereits dadurch vorgegeben, daß die Software fertig ist und somit bestimmte Signale an bestimmten Prozessor-Anschlüssen erwartet werden. Was ich verändert habe, ist, daß ich etwas ESD-Schutz hinzugefügt, ein paar Signale anders behandelt und eine abweichende Belegung des ISP-Steckers gewählt habe. Der Schaltplan ist übrigens mit GEDAs gschem gezeichnet.
Schaltplan als Postscript
ESD-Schutz sollte man nie vergessen. Nicht ohne Grund beschweren sich andere, daß ihnen immer wieder mal die selbstgemachte Schaltung um die Ohren fliegt, weil sie genau das vergessen haben.

ISP Anschluß

Ein Hinweis vorweg: In diesem Projekt verwende ich eine etwas abgewandelte Signalbelegung des ISP-Steckers. Dies gilt aber nur für den 10poligen Typ.
Der zehnpolige Anschluß am MiniDoper hat folgende Belegung. Anschluß 1 kann an diesem Stecker an der Dreieck-Markierung sehr leicht erkannt werden.
 
Die angegebenen Signalrichtungen beziehen sich auf den MiniDoper.
PinSignalSignalPin
1MISO (in)VTG (in/out)2
3SCK (out)MOSI (out)4
5RST (out)GND (pas)6
72. SCKTxD (out)8
9N.B.RxD (in)10
N.B. Nicht Belegt. Auf diesem Anschluß sollte weder ein aktives Signal, noch eine Versorgungsspannung liegen.
Und hier ist dargestellt, wie die Signalbelegung des ISP-Steckers eines Ziel-Prozessors aussehen müßte, damit die ISP-Buchse des hier vorgestellten MiniDopers elektrisch paßt:
 
Signalbelegung einer 2,54mm Raster Stiftleiste auf dem zu programmierenden System. Die angegebenen Signalrichtungen sind ebenfalls aus Sicht des Zielsystems (also dem AVR-Prozessor) angegeben.
PinSignalSignalPin
1MISO (out)VTG (in/out)2
3SCK (in)MOSI (in)4
5RST (in)GND (pas)6
7N.B.RxD (in)8
9N.B.TxD (out)10
N.B. Nicht Belegt. Auf diesem Anschluß sollte vom Zielsystem aus weder ein aktives Signal, noch eine Versorgungsspannung liegen.
Die abweichende Belegung des 10 poligen ISP-Steckers habe ich gewählt, weil ich eine Belegung des Steckers haben wollte, die einerseits den 6poligen ISP-Betrieb unterstützt, andererseits aber auch die nette Eigenschaft, beim 10-poligen Stecker noch eine serielle Schnittstelle mit dabei zu haben. Das heißt aber auch:
Die 10-polige ISP-Stecker-Variante hat nicht die Standardbelegung wie sie von anderen ISP-Adaptern verwendet wird!
Nur der 6-polige Stecker entspricht dem allgemein verwendeten Standard.
Das wirklich interessante an dieser Schaltung ist, daß sie den heute weit verbreiteten USB als Kommunikations-Schnittstelle verwendet. Immer weniger Rechner besitzen eine echte serielle Schnittstelle und mit den ganzen USB-Seriell-Adaptern wird man auch nicht immer glücklich.
Trotzdem kann diese Implementierung noch eine serielle Verbindung zum Zielsystem bieten. Somit ist Programmieren und Entwanzen möglich, ohne viel Kabel verwenden zu müssen, und vor allem muß man auf dem Zielsystem keine Pegelwandler und RS232-Buchsen vorsehen. Einfach den 10-poligen ISP verwenden und beides ist möglich.
Die USB-Anbindung erfolgt in reiner Software, so daß kein spezieller lokaler Controller notwendig ist. Es genügen ein paar externe passive Bauteile (D2/D3/D7/D8, R3/R4), der Rest erfolgt in der Firmware.

Leiterkarte

Die Leiterkarte kommt mit zwei Lagen aus. Klar könnte man sowas vielleicht auch einseitig hinbekommen, aber wer hat schon soviel Zeit. Zwei echte Kupfer-Lagen inkl. echter Durchkontaktierungen (also nicht selber ätzen) macht mehr Spaß und führt zu einem besseren Layout. Erstellt habe ich es mit dem CAD-Programm Eagle-V4.
Hinweis: Die folgenden Dateien sind im Postscript-Format.
Bestückungsdruck Oberseite
Kupferlage Oberseite
Kupferlage Unterseite
Bestückungsdruck Unterseite
Und als Eagle-Binärdatei:
Leiterkarte als EAGLE-Datei

Stückliste

Diese Bauteile gilt es zu besorgen
Typ Wert Bauform Menge Name(n)
TTL 74HC126 SO14 1 IC2
CAPACITOR 100n C0805 6 C15 C16 C2 C3 C6 C7
CAPACITOR 10p C0805 7 C10 C11 C12 C13 C14 C8 C9
CAPACITOR 22p C0805 2 C4 C5
CAPACITOR 4u7 ELC-2.5 1 C1
CRYSTAL 12MHz HC49/S 1 XT1
DIL3_SWITCH DIL3 DIL06 1 SW1
DIODE BAV99 SOT23 10 D10 D11 D12 D13 D14 D15 D5 D7 D8 D9
DIODE Z3V6 DIODE1 2 D2 D3
DIODE Z5V1 DIODE1 1 D16
CONNECTOR Header 10 HEADER_2x5_2_54 1 X2
LED RED SOT23 3 D1 D4 D6
CPU ATmega8/DIL28 DIL28 1 IC1
SOCKET Socket_DIL28 DIL28 1 X3
FUSE 125mA mini_fuse 1 F1
NPN_TRANSISTOR BC547 TO-92-CBE 1 Q1
RESISTOR 10k R0805 5 R10 R5 R6 R7 R9
RESISTOR 150R R0805 3 R11 R17 R2
RESISTOR 1k R0805 4 R12 R13 R14 R8
RESISTOR 22k R0805 1 R16
RESISTOR 2k2 R0805 1 R1
RESISTOR 33k R0805 1 R15
RESISTOR 68R R0805 2 R3 R4
BEAD BEAD LBEAD 7 L1 L2 L3 L4 L5 L6 L7
SINGLE_INLINE_2_54 SIL5 HEADER_1x5_2_54 1 X1 (optional)
CASE PP-2AA 1
CABLE USB 1 Typ: USB-Maus-Kabel
CABLE Flachbandkabel 10cm Typ: 10-polig, 1,27mm Raster
PCB EAGLE file 1
Einige Bestellhinweise:
  • Gehäuse: PAC TEC, PP-2AA (www.pactecenclosures.com)
    Quelle: Conrad Electronic, Nr. 523150-62 (KUNSTSTOFFGEHAEUSE 94X63X28)
  • Leiterkarte: BetaLayout (www.pcb-pool.com)
    Größe: 55.1 x 82.54 x 1.6 mm / 3.85 x 2.24 x 1.1 in

Aufbau

Der Aufbau könnte mehr oder weniger problematisch sein. Es kommt auf die Erfahrung des Löters an. Denn es sind SMD-Bauteile beteiligt, die nicht nach jedermanns Geschmack sind. Ich halte aber 0805, SO16 und SOT23 noch für machbar, auch wenn man kein Lötprofi ist. Dann muß man eben hin und wieder das Lötzinn wieder wegsaugen. Wozu gibt es "Solderwick"?
Beachte: Den Prozessor nicht fest einlöten. Er muß gesockelt sein, damit man ihn programmieren kann!
 
Oberseite Unterseite
Bla
Bla
Unterseite Fast fertig!
Bla
Bla

Gehäuse

Wie eingangs erwähnt, besitzt dieses Gehäuse ein Batteriefach. Während der Deckel dieses Fachs sehr praktisch ist, ist das eigentliche Fach im Inneren der Schaltung im Weg. Es muß daher herausgeschnitten werden. Dies geht am besten mit einer kleinen Trennscheibe, aufgesteckt auf einer Minibohrmaschine. Sowas gibt es im Laden für Baselbedarf.
Aber Achtung: Es darf nicht radikal alles weggeschnitten werden. Das Batteriefach besitzt drei Aufliegepunkte für die Leiterkarte. Damit wird sie auf Höhe gehalten. Diese drei Punkte müssen als Stege vom Batteriefach erhalten bleiben. Diese Aufliegezonen sind im Layout der Leiterkarte entsprechend von Bauteilen freigehalten.
 

Inbetriebnahme

Jetzt gilt es die erste Hürde zu nehmen. Dieses Projekt wird ein ISP, es braucht aber Firmware, die wiederum einen ISP benötigt, um sie in den Prozessor zu bringen. Also ein klassisches Henne-Ei-Problem. Ich habe ein altes STK500, um Atmel-Prozessoren programmieren zu können. Mit diesem habe ich den Atmega8 für diese Schaltung programmiert. Deshalb ist der Prozessor in diesem Projekt gesockelt. Aber der Reihe nach. Erst brauchen wir die Firmware, um überhaupt etwas zum Programmieren zu haben.

Entwicklungsumgebung und Toolchain

Es müssen ein paar Voraussetzungen erfüllt werden, um die Firmware in den Zustand zu überführen, wie der Prozessor sie braucht. Wir brauchen also noch ein paar Werkzeuge und vor allem eine Cross-Toolchain.
Für Cross-Toolchain und Erstellung der Firmware verwende ich PTXdist. Dessen Installation ist hier beschrieben. PTXdist wird uns die Toolchain und dann damit die Firmware für den MiniDoper bauen.

MiniDoper Firmware

Auch die Firmware für den MiniDoper ist ein PTXdist-Projekt. Es kann von hier geladen werden. Auspacken, Festlegen der Toolchain und dann bauen ist nun - dank PTXdist - recht einfach:
~$ tar xf avr-mini-doper-1.1.2.tar.gz
~$ cd avr-mini-doper-1.1.2
~/avr-mini-doper-1.1.2$ ptxdist toolchain /opt/OSELAS.Toolchain-1.99.2/avr/gcc-4.3.2-libc-1.6.2-binutils-2.19/bin
~/avr-mini-doper-1.1.2$ ptxdist go
Ggf. muß der Pfad zur Toolchain anders lauten, beispielsweise, weil eine andere Version zum Einsatz kommt oder man sich entschieden hat, die Toolchain nicht nach /opt installieren zu lassen.
Dieses Projekt baut übrigens avrdude gleich mit, um den Prozessor nachher mit der Firmware programmieren zu können. Am Ende findet man:
  • avrdude: in sysroot-host/bin/avrdude
  • firmware: in images/main.hex
Programmieren der Firmware. Zunächst müssen die Fuses des Atmega8 programmiert werden:
~/avr-mini-doper-1.1.2$ sysroot-host/bin/avrdude -p atmega8 -c stk500v1 -U hfuse:w:0xc9:m -U lfuse:w:0x9f:m
Danach die Firmware selber:
~/avr-mini-doper-1.1.2$ sysroot-host/bin/avrdude -p atmega8 -c stk500v1 -U flash:w:/images/main.hex:i
Wie man sehen kann, verwende ich hier mein altes STK500 Evaluationboard von Atmel (Option -c stk500v1). Das ist also meine Henne, die den neuen USB basierten ISP als Ei erzeugt. Diese Option muß bei Verwendung eines anderen Programmiergeräts für diesen Zweck entsprechend angepaßt werden.
Hinweis: Der lokale avrdude wird per Voreinstellung ohne LPT-Unterstützung gebaut. Wer also noch einen LPT-basierten ISP verwenden will, muß diese Unterstützung einschalten.
Hat man das Projekt schon gebaut und stellt dann fest, daß die LPT-Unterstützung fehlt, kann man das so nachholen:
~/avr-mini-doper-1.1.2$ ptxdist menuconfig
Hier den Menüpunkt Activate LPT support aktivieren. Das Menü verlassen und die Einstellungen sichern.
Anschl. nur avrdude neu bauen lassen (geht schneller):
~/avr-mini-doper-1.1.2$ ptxdist clean host-avrdude
~/avr-mini-doper-1.1.2$ ptxdist go
Jetzt hat das Programm in sysroot-host/bin/avrdude auch LPT-Unterstützung.

Und fast fertig

Das war es schon. Nachdem die Firmeware im Prozessor ist, kann nun auch das USB-Kabel in die Leiterkarte gelötet werden. Ein "Knoten" sollte als Zugentlastung im inneren des Gehäuses verbleiben. Ein kleines Loch, je zur Hälft in beiden Gehäusehälften, erleichtert die Montage. Was noch fehlt sind die Bohrungen im Deckel, damit man die Status-LEDs auch sehen kann und eine ansprechende Blende.
Hier habe ich eine Vorlage, so wie ich sie in meinem Gerät wie zu Beginn dieses Artikels vorgestellt habe. Erstellt habe ich sie mit OpenOffice. Zugegeben, die LEDs exakt zu treffen ist nicht einfach. Bei dieser Schaltung habe ich den Fehler gemacht, mir keine Hintertür zu lassen, um die Position exakt zu treffen, ohne viel messen zu müssen. Ich bin aus der Gehäusezeichnung nicht schlau geworden, wo ich relativ zu den Platinenführungen im dafür vorgesehenen Deckelfeld hätte die Bohrungen machen müssen. In einem anderen Projekt mit dem gleichen Gehäuse bin ich dann später einen anderen Weg gegangen (man lernt ja dazu). Aber hier eben noch nicht.
Die Vorlage kann man nach eigenem Geschmack ändern, nur die Positionen der LEDs und die Umrandung sollte man aus nachvollziehbaren Gründen so lassen. Das Ganze habe ich dann auf Fotopapier gedruckt, damit es sauber ausschaut. Mit einer Lochzange konnten dann die LED-Löcher entsprechend gestanzt werden. Als Abdeckung gegen Verwischen ist eine einseitige, durchsichtige Klebefolie zum Einsatz gekommen. Um das Ergenbis dann auf das Gehäuse zu kleben, zusätzlich eine doppelseitige, durchsichtige Klebefolie von 3M.

Host System

Das System, an dem der MiniDoper betrieben werden soll (diesmal nicht der Zielprozessor, den man mittels ISP programmieren möchte), muß ggf. auch etwas vorbereitet werden. Zunächst einmal muß natürlich USB-Unterstützung vorhanden sein. Das gilt mechanisch/elektrisch, wie auch Software-Technisch. Ich kann hier nur für Linux sprechen. Laut den Aussagen der Original-Autoren sollte sich der MiniDoper aber auch an Windows betreiben lassen. Allerdings kann ich dazu nichts sagen, da ich kein Windows habe, um es auszuprobieren. Zurück zum Linux-Kernel. Dieser muß HID-Geräte unterstützen, damit der MiniDoper überhaupt erkannt wird.
Steckt man den MiniDoper an das System an, sollte das Kommando dmesg etwa diese Ausgabe anzeigen:
usb 4-2: new low speed USB device using uhci_hcd and address 5
usb 4-2: configuration #1 chosen from 1 choice
drivers/usb/input/hid-core.c: ctrl urb status -75 received
hiddev96: USB HID v1.01 Device [obdev.at AVR-Doper] on usb-0000:00:1d.3-2
Warum diese -75 Nachricht erscheint ist mir schleierhaft, der MiniDoper funktioniert aber trotzdem.
Das Kommando lsusb liefert bei angeschlossenem MiniDoper auf meinem System diese Ausgaben:
Bus 004 Device 005: ID 16c0:05df
Device Descriptor:
 bLength                18
 bDescriptorType         1
 bcdUSB               1.01
 bDeviceClass            0 (Defined at Interface level)
 bDeviceSubClass         0
 bDeviceProtocol         0
 bMaxPacketSize0         8
 idVendor           0x16c0
 idProduct          0x05df
 bcdDevice            1.00
 iManufacturer           1 obdev.at
 iProduct                2 AVR-Doper
 iSerial                 0
 bNumConfigurations      1
 Configuration Descriptor:
  bLength                 9
  bDescriptorType         2
  wTotalLength           34
  bNumInterfaces          1
  bConfigurationValue     1
  iConfiguration          0
  bmAttributes         0x80
   (Bus Powered)
  MaxPower              200mA
  Interface Descriptor:
   bLength                 9
   bDescriptorType         4
   bInterfaceNumber        0
   bAlternateSetting       0
   bNumEndpoints           1
   bInterfaceClass         3 Human Interface Devices
   bInterfaceSubClass      0 No Subclass
   bInterfaceProtocol      0 None
   iInterface              0
    HID Device Descriptor:
    bLength                 9
    bDescriptorType        33
    bcdHID               1.01
    bCountryCode            0 Not supported
    bNumDescriptors         1
    bDescriptorType        34 Report
    wDescriptorLength      60
   Report Descriptors:
    ** UNAVAILABLE **
   Endpoint Descriptor:
    bLength                 7
    bDescriptorType         5
    bEndpointAddress     0x81  EP 1 IN
    bmAttributes            3
     Transfer Type            Interrupt
     Synch Type               None
     Usage Type               Data
    wMaxPacketSize     0x0008  1x 8 bytes
    bInterval              10
Device Status:     0x0000
(Bus Powered)
Nun ist es möglich, mit Hilfe der libusb auf das Gerät zuzugreifen. Allerdings sind dazu Root-Rechte notwendig. Keine Ahnung warum.

Den MiniDoper benutzen

Die Firmware, die hier eingesetzt wird, ist mit der stk500v2 kompatibel. Daher gibt man avrdude diese als Programmieradapter vor. Damit avrdude dann nicht mehr die serielle Schnittstelle benutzt, um den MiniDoper anzusprechen, muß man diese noch überschreiben mit dem Steuerword avrdoper. Der Anfang jedes Kommandos sieht dann so aus:
~$ avrdude -c stk500v2 -P avrdoper ....
Die drei Punkte deuten die restlichen Parameter an, je nachdem was man vorhat zu tun.

MiniDoper als Debug-Hilfe verwenden

Der MiniDoper - wie auch sein großer Bruder - besitzen ein serielle Schnittstelle zum Zieprozessor hin. Ohne großen Aufwand und Pegelwandler kann man die Debug-Ausgaben des Zielprozessors auf dem Entwicklungsrechner sichtbar machen. Und das alles über nur eine Stiftleiste und ohne Kabelwechsel. Mit dem Original-Quellpaket von obdev kommt ein kleines Programm mit, welches die Daten der seriellen Schnittstelle über den AVR-Doper auslesen und anzeigen kann. Da ich sehr viel 'cross-compiliere', habe ich ein vergleichbares Programm neu geschrieben unter Verwendung der Autotools. Das Quellarchiv kann von hier geladen werden.
Bauen sollte nach den bekannten Regeln möglich sein:
~$ tar xf doperterm-0.99.6.tar.gz
~$ cd doperterm-0.99.6
~/doperterm-0.99.6$ ./configure
~/doperterm-0.99.6$ make
~/doperterm-0.99.6$ make install

Probleme?

Sollten Probleme beim Bauen oder Benutzen auftreten, bitte eine Mail an: projects at kreuzholzen dot de

Artverwandtes

Hier gleiche Ansätze und als Ergebnis andere Gehäuse: