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.
| Pin | Signal | Signal | Pin |
| 1 | MISO (in) | VTG (in/out) | 2 |
| 3 | SCK (out) | MOSI (out) | 4 |
| 5 | RST (out) | GND (pas) | 6 |
| 7 | 2. SCK | TxD (out) | 8 |
| 9 | N.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.
| Pin | Signal | Signal | Pin |
| 1 | MISO (out) | VTG (in/out) | 2 |
| 3 | SCK (in) | MOSI (in) | 4 |
| 5 | RST (in) | GND (pas) | 6 |
| 7 | N.B. | RxD (in) | 8 |
| 9 | N.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 vorallem 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 jedermans
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 |
|
|
|
| Unterseite |
Fast fertig! |
|
|
|
|
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 vorallem 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.0.tar.gz
~$ cd avr-mini-doper-1.1.0
~/avr-mini-doper-1.1.0$ 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.0$ 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.0$ 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.0$ 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.0$ 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.0$ ptxdist clean host-avrdude
~/avr-mini-doper-1.1.0$ 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 ein gleicher Ansatz und als Ergebnis ein anderes Gehäuse:
http://www.ulrichradig.de/home/index.php/avr/usb-avr-prog
|