1 Octopus¶
- Autor:
Hubert Hoegl
<Hubert.Hoegl@hs-augsburg.de>
- Datum:
2008-04-07
Diese Notizen beschreiben meine Erfahrungen mit dem kleinen „Octopus“ Platinchen, das man über den USB Bus des PC von Linux oder Windows aus ansteuern kann. Als wesentliche Bauelemente sind ein USB Controller USBN9604 von National und ein frei programmierbarer Ein-/Ausgabeprozessor AVR Mega128 von Atmel drauf. Der USB Baustein erledigt nur die ganz elementaren Funktionsblöcke des USB Protokolls, der Hauptteil des Protokolls wird in Software („Firmware“) auf dem AVR erledigt. Die Platine eignet sich für die unterschiedlichsten Projekte, bei denen man mit der Aussenwelt frei programmierbar über externe Ports, Busse wie I2C, SPI und CAN, UARTs, Analogsignale, PWM Signale und Timer kommunizieren muss. Sogar die Sprache zur Ansteuerung des Octopus ist wählbar, zur Zeit gibt es Anbindungen an C, C++, Java, Python und Ruby. Letztendlich sind alle Sprachen möglich, die Swig (http://www.swig.org) unterstützt. Die komplette Software im und um den Octopus ist freie Software unter der GPL Lizenz, das heisst sie ist frei im Sinne der Free Software Foundation.
Den Octopus Bausatz kann man im Web-Shop des Autors Benedikt Sauter kaufen, siehe http://embedded-projects.net.
1.1 Installation¶
Octopus (Version 3) ist ein vormontierter Bausatz, bei dem nur noch ganz wenige Bauteile eingelötet werden müssen. Es genügt, wenn man den 10-poligen Wannenstecker einlötet, damit man einen Programmieradapter für den Mega128 AVR anstecken kann.
1.1.1 Octopus Software herunterladen und kompilieren¶
Die aktuelle Version der Octopus Software kann man mit Hilfe des
svn
Werkzeugs aus einem zentralen „Repository“ herunterladen.
Ich habe das wie folgt gemacht:
Zunächst exportiere ich das Verzeichnis „trunk“ in das aktuelle Verzeichnis:
svn export http://octopususb.googlecode.com/svn/trunk
Am Schluss des Exports wird die aktuelle Version ausgegeben, das war
bei mir Version 118. Nun legen ich ein Verzeichnis
~/build/octopus-118
in meinem Heimatverzeichnis an, in das ich
dann trunk
mit mv trunk octopus-118
hinein bewege.
Nun muss die Software kompiliert werden. Als erstes wechsle ich in:
~/build/octopus-118/trunk/liboctopus/
und rufe sh ./bootstrap
auf. Danach ruft man im gleichen Verzeichnis
das Kommando ./configure``auf. Wenn nach einer Weile
configure fertig ist, kann man ``make
aufrufen. Das Resultat von
make ist die „liboctopus“, die zunächst (vor der Installation) unter
src/.libs
(der Punkt ist wichtig!) liegt:
liboctopus.a liboctopus.lai liboctopus.so.0 octopus.o
liboctopus.la liboctopus.so liboctopus.so.0.10.0
Durch sudo make install
werden diese Bibliotheken an den
endgültigen Platz im Dateibaum installiert. In diesem Fall ist das
/usr/local/lib/
.
Neben der ganz wesentlichen liboctopus kann man auch noch einen oder mehrere „Wrapper“ für die Ansteuerung unter einer Skriptsprache installieren. Diese findet man unter:
~/build/octopus-118/trunk/libs/
Wählen wir Python aus, dann geht es in das Verzeichnis python/
.
Hier reicht die Eingabe von make
aus, um den Wrapper zu erzeugen.
Dieser besteht aus mehreren Dateien mit den Endungen .o, .pyc, .pyd
und .so. Man kann nun noch den Wrapper mit make install
installieren. Dieser letzte Schritt kopiert die Python Anbindung an
die Stelle:
/usr/local/lib/python2.4/site-packages/
Nachdem man den Python Interpreter mit dem Kommando python
gestartet hat, kann man nun das Modul octopus
importieren:
>>> import octopus
Die darin enthaltenen Objekte werden mit dem Kommando:
>>> dir(octopus)
ausgegeben. Wichtig ist, dass man die Version 2.4 des Interpreters
verwendet, da vorher für diese Version auch der Wrapper erstellt
wurde. Falls der Aufruf von python
zur falschen Version führt,
dann kann man auch explizit python2.4
eingeben. Natürlich würde
der Python Code auch mit einer neueren Version, z.B. 2.5, laufen. Dann
müsste aber vorher auch wieder der Wrapper-Code für Python 2.5
erstellt werden.
1.1.2 Programmierung des Mega128¶
Ich habe zum Programmieren des Mega128 das avrdude
Programm unter
Linux verwendet. Dieses Programm kann sehr viele verschiedene Adapter
für den ISP Programmier-Port ansteuern. Einer der einfachsten ist
der „BSD“ Adapter (nach dessen Erfinder Brian S. Dean), den man direkt
an den Drucker-Port des Rechners anschliesst. Die folgenden Signale
werden beim „BSD Kabel“ direkt vom Parallelport mit dem 10-poligen
ISP Stecker verbunden:
25-pin Parallelport 10-pin ISP (Pin in Klammern)
----------------------------------------------------
7 /RESET (3)
8 SCK (7)
9 MOSI (1)
10 MISO (9)
18 GROUND (4,6,8,10)
Damit avrdude auf den Drucker-Port (heisst auch „Parallel-Port“)
kommt, muss das Gerät /dev/parport0
unter Linux existieren. Falls
es nicht vorhanden ist, kann man es mit dem Kommando:
sudo mknod /dev/parport0 c 99 0
anlegen.
Ist nun das Programmierkabel angeschlossen, dann kann man avrdude wie folgt aufrufen:
sudo avrdude -p m128 -c bsd
Es sollte als Ausgabe in etwa erscheinen:
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9702
avrdude: safemode: Fuses OK
avrdude done. Thank you.
Falls dies funktioniert, kann man die Firmware in den Mega128 schreiben - man nennt das auch „flashen“. Die Firmware findet man im Quelltext unter:
~/build/octopus-118/trunk/firmware
Man muss diese zunächst mit dem Kommando make
kompilieren. Daraus
resultieren die beiden Dateien main.hex
und octopus.hex
. Beide
Dateien sind im Intel Hex Format. Ausprobieren hat ergeben, dass nur
main.hex
zur gewünschten Funktion des Octopus führt, deshalb wird
diese nun geflasht:
sudo avrdude -p m128 -c bsd -U flash:w:main.hex
Nun müssen noch die „Fuse-Bits“ im AVR auf bestimmte Werte gesetzt werden, damit der Controller z.B. mit der richtigen Frequenz läuft:
avrdude -p m128 -c bsd -U lfuse:w:0xe0:m
avrdude -p m128 -c bsd -U efuse:w:0xff:m
avrdude -p m128 -c bsd -U hfuse:w:0xdd:m
Alternative: USBprog
Statt des BSD Kabel kann man alternativ auch den „USBprog“ Adapter
verwenden, der auch von Benedikt Sauter stammt. Dazu konfiguriert man
USBprog als avrispv2 Gerät, das entspricht der gleichen
Funktionalität wie es das originale Gerät AVRISP mkII von Atmel hat.
Gegenüber dem BSD Kabel hat USBprog den Vorteil, dass es wegen des USB
Anschlusses auch an jedem modernen PC oder Notebook funktioniert, die
ja oft keinen Parallelport mehr haben. In den oben angegebenen
avrdude
Kommandozeilen ersetzt man einfach -c bsd
durch
-c avrispv2
.
Diesen Adapter kann man ebenfalls von http://www.embedded-projects.net beziehen.
Tipp: Makefile in trunk/firmware/
Die zwei wesentlichen Operationen mit avrdude, erstens Download und zweitens Fuse Programmierung, sind auch als Targets im Makefile in trunk/firmware/ enthalten:
make download
make fuse
1.2 Demos¶
Der Demo-Sourcecode ist hier:
http://hhoegl.informatik.hs-augsburg.de/etc/octopus_demo/
Das Beispiel blink_hh.py
schaltet die sieben LEDs in einer Reihe auf der
Octopus Platine in kurzer Abfolge 100 mal ein und wieder aus.
Die sieben LEDs sind beim Mega128 an den Port PC[0:6] angeschlossen.
1.3 Zu tun¶
Einige API Funktionen sind noch nicht implementiert, z.B.
octopus_io_set_port()
.Python Binding geht zur Zeit (Okt 2008) nur mit Python 2.4.
1.4 Weitere Tipps¶
Eine Projektgruppe sagte mir heute (2008-10-30), dass man bei Ubuntu 8.04
(„Hardy“) noch folgende Pakete installieren muss, damit man liboctopus
kompilieren kann: autoconf, automake, libtool und python-dev. Das macht
man mit sudo apt-get install <paketname>
. Danach geht es weiter wie
oben beschrieben.
1.5 Referenzen¶
Homepage der kommerziellen Projekte Octopus und USBprog von Benedikt Sauter: http://www.embedded-projects.net. Hier findet man auch den Web-Shop.
Vom gleichen Autor, aber weniger kommerziell, sind die Seiten unter http://www.ixbat.de.
- Avrdude AVR Programmier-Software: