#format rst #language de ======== Octopus ======== :Autor: Hubert Hoegl ```` :Datum: 2008-04-07 .. contents:: Inhalt .. sectnum:: 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. .. figure:: octopus.jpg :align: center 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. 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. 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 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. 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. 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 ``. Danach geht es weiter wie oben beschrieben. 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: http://savannah.nongnu.org/projects/avrdude/ .. Local Variables: .. compile-command: "make rst-html" .. End: