FAQ für c't-Bot und c't-SIM
Zum Projekt "c't-Bot und c't-Sim" [1]
Hardware, Aufbau, Fehlersuche
Wenn ich die digital-test-Firmware hochlade, dann leuchtet das orangene Licht (laut c't 4/06, S.212 bedeutet das Fehler) - aber welche Art Fehler ist gemeint?
Das ist nur die LED für den Fehler-I/O-Pin. Dieser geht auf Low, wenn die Batteriespannung zu stark absinkt, oder der Servo zuviel Strom zieht. Ein Leuchten ist also gut.
Die LEDs, die den Zustand der Lichtsensoren anzzeigen bleiben immer dunkel, wenn ich das Analogtestprogramm lade.
Die LEDs zeigen nur das höchste Bit an. Dafür muss man die Sensoren sehr stark abschatten. Im Zweifellsfall mal mit einem Stück schwarzen Isolierband oder Tonkarton abdecken.
Mein Display zeigt nur schwarze Balken an. Was mache ich falsch.
Das weist auf falsche Fuse-Bits hin, denn dann läuft der Controller zu langsam und die Display-Timings stimmen nicht mehr.
Mein Display zeigt gar nichts an, nicht einmal schwarze Balken. Ist es kaputt?
Ziemlich sicher nicht. Wahrscheinlich stimmt nur der Kontrast nicht. Hat man den Kontrastregler POT1 so eingebaut, wie das Foto zeigt, so führt eine Drehung im Uhrzeigersinn zu höherem Kontrast, eine gegen den Uhrzeigersinn zu niedigerem. Im Auslieferungszustand ist der Kontrast oft zu niedrig.
Mein Roboter funktioniert nicht, wie er soll. Was kann ich tun?
Zuerst die Motoren abstecken — die testet man zuletzt — so haut er beim Testen auch nicht ab. Dann spielt man das Digitaltestprogrammm (siehe c't 04/06) ein und setzt die Fuse-Bits korrekt. Display und LEDs sollten die einzelnen Sensorwerte anzeigen. So kann man schonmal die meisten Sensoren checken. Dann geht es weiter zum Analogprogramm. Erst wenn alles geht, sind die Motoren dran. Die Grundregel beim Hardware-Debuggen lautet: Stück für Stück die einzelteile testen, und sich dann zu komplexeren Dingen vorarbeiten. Wenn man nichts findet, sollte man auch nach kalten Lötstellen oder Kurzschlüssen suchen.
Wenn ich die Motoren mit der Hand drehe, leuchten einige LEDs auf, obwohl der Bot abgeschaltet ist. Mache ich damit etwas kaputt?
Die Motoren arbeiten wie kleine Dynamos und erzeugen eine Spannung. Über die internen Dioden des L293D Motortreibers gelangt diese in die Schaltung. Da das aber alles vor dem Spannungsregler der restlichen Schaltung stattfindet, geht nichts kaputt. Der Motor versorgt sogar ein wenig die Schaltung.
Mein c't-Bot fährt immer rückwärts statt vorwärts und umgekehrt. Habe ich die Motoren falsch angeschlossen?
Das kann zwar sein, viel wahrscheinliche ist jedoch, dass auf dem c't-Bot eine alte Software läuft. Die äteren Versionen hatten einen Vorzeichenfehler, so dass sie alle Motorbefehle invertierten. Die aktuelle Software passt zur Aufbauanleitung.
Wenn ich meinen Bot einschalte (bzw. immer nach einem Reset) dreht er sich kurz nach rechts. Warum tut er das?
Nach und vor allem bei einem Reset schaltet der Prozessor alle Pins als Eingänge. Er treibt sie also nicht mehr gegen Masse oder Vcc. Im Falle der beiden PWM-Ausgänge interptretiert der Motortreiber das als logische 1 und lösst die Motoren drehen. Da sie um 180 Grad gedreht montiert sind, rotiert der Roboter.
Wenn das Verhalten Sie stört, könnten Sie folgendes dagegen unternehmen: Sie besorgen sich eine Buchsenleiste, die auf J5 passt, ein kurzes Stück Kabel und zwei Widerstände (z.B. 10 kOhm). Dann basteln Sie sich einen "Stecker", der jeweils Pin 5 und Pin 6 von J5 mit Masse verbindet, z.B. zu finden auf J3 Pin3. Diese Pull-Downs halten dann während einem Reset die PWM-Pins PWM1A und PWM1B auf Low. Im Betrieb stören sie nicht nennenswert.
Wie löte ich das SMD-IC auf dem Programmieradapter aus dem BlueMP3-Projekt am besten ein?
Zuerst alle Pads auf der Platine vor dem Einlöten des Bauteils verzinnen. Dabei keine großen Tropfen oder Klumpen sondern nur ein winziges bißchen Lot auf dem Pad auftragen. Dann legt man das IC mit der Pinzette auf und richtet es sorgsam aus. Während man es mit der Pinzette fest drückt, tippt man kurz zwei Beinchen (die sich diagonal gegenüberliegen) mit dem Lötkolben an. Dann ist der Chip fixiert und man hat auch eine Chance ihn bei falscher Ausrichtung nochmal zu bewegen. Bevor man alle restlichen Beinchen festlötet, sollte man nochmal mit einer Lupe die Ausrichtung prüfen.
Übertragen der Firmware, Flashen und Setzen der Fuse-Bits
Übertragen der Firmware, Flashen und Setzen der Fuse-Bits
Wie bekomme ich die Firmware in den c't-Bot?
Der c't-Bot führt lediglich seine für die Programmierung benötigten Leitungen auf zwei Standard-Steckern heraus. Um Firmware in den Bot zu bekommen, braucht man also immer einen Programmieradapter. Dieser verbindet dann einen der beiden Stecker ST5 oder ST6 mit dem PC. Solche Adapter gibt es fertig für RS-232, LPT und USB zu kaufen. Desweiteren braucht man auch eine Programmiersoftware. Details dazu beschreibt der Artikel zur Inbetriebnahme in c't 4/06. Ist die Firmware übertragen, wird dieser Adapter abgezogen und der Bot fährt sofort los.
Wie beschreibe ich den Flash mit dem avrdude?
Zum Beispiel so: avrdude -p m32 -c stk200 -P lpt1 -U flash:w:ct-Bot-test-digital.hex:i
Oder auf dem Windows-Desktop eine Verknüpfung zur Batch-Datei flash.bat erstellen und da per Drag'n'Drop das Hexfile drauffallen lassen.
Warum muss ich die Fuse-Bits setzen?
Damit der Mikrocontroller auf dem c't-Bot korrekt funktioniert, muss man unbedingt die Fuse-Bits des Prozessors richtig setzen. Diese legen unter anderem die Taktquelle fest. Macht man hier einen Fehler, lässt sich der Chip nicht mehr im System programmieren. Mit einem parallelen Programmiergerät kann man ihn aber wieder zum Leben erwecken. Alle, die Ponyprog verwenden können, finden in c't 04/06 einen Screenshot mit den korrekten Einstellungen. Für alle anderen haben wir ab sofort im CVS-System hex-Dateien mit unseren korrekten Einstellungen. Das Datenblatt des ATmega32 enthält alle nötigen Details und hier [2] gibt es einen Fuse-Bit-Rechner.
Muss ich die Fuse-Bits jedesmal neu schreiben?
Nein, wir raten davon sogar ab.
Mein Controller gibt nichts mehr von sich, auch Flashen kann ich ihn plötzlich nicht mehr. Was ist los?
Dann sind wohl die Fuse-Bits falsch eingestellt, der Controller ist für die falsche Taktquelle konfiguriert und tut daher nichts mehr. Er ist jedoch nicht defekt. Versorgt man ihn von außen mit einem Takt, kann man ihn wieder in Betrieb nehmen. Eine Bastelenanleitung, wie man das mit wenigen Bauteilen machen kann (ohne den Chip auszubauen), haben wir als Hotline-Meldung geliefert. Wem das zu fummelig ist, kann einen externen Programmieradapter verwenden, der den Takt selbst erzeugt. Alternativ dazu finden sich hier [3] einige Tipps.
Ponyprog unterstützt meinen ISP-Adapter nicht. Wie kann ich die Fuse-Bits korrekt setzen?
Das Kommandozeilen-Tool avrdude (unter windows gibt es auch eine GUI) kann mit fast allen Daptern umgehen. Zum Schreiben der Fuse-Bits, kann man die vorgefertikten .hex-Files aus dem CVS-Repository (contrib/fusebits) verwenden:
avrdude -p m32 -c stk200 -P lpt1 -u -U lfuse:w:lfuse.hex:i -U
hfuse:w:hfuse.hex:i -U lock:w:lock.hex:i
Die Schnittstelle (-P) und den Adapter (-c) muss man an die lokalen Gegebenheiten anpassen.
Für den von uns vorgestellten Adapter aus dem Blue-MP3-Projekt gilt: -c stk200 -P lpt1
Für dem mysmartUSB gilt: -c avr911 -P com5
Wer statt des ATmega32 den ATmega644 verwendet, muss noch den Parameter -U efuse:w:efuse.hex:i anfügen. Im CVS befindet sich auch schon eine fertige Windows-Batch-Datei zum setzen der Fuse-Bits
Da ich noch keinen Programmieradapter besitze, will ich nicht zwei Adapter kaufen. Kann ich den USB-2-Bot-Adapter zum programmieren verwenden?
Ohne einen ISP-Programmieradapter, um die initiale Firmware in den Bot zu spielen und die Fuse-Bits zu setzen, kommt man nicht aus. Allerdings gibt es im Code mittlerweile einen Bootloader, der -- wenn er erst einmal auf dem Controller ist -- dann über den USB-2-Bot-Adapter die Firmware aktualisiert. Weitere Informationen finden sich im Code unter ct-Bot/Documentation/Bootloader.html. Bei einem unprogrammierten Chip hilft das jedoch nicht.
Wenn ich den Bot neu geflasht habe, geht der Maussensor nicht. Wenn ich ihn dann aus- und wieder anschalte funktioniert der Sensor korrekt. Ist das normal?
Ja. Der Maussensor und der Programmieradapter nutzen die selben Leitungen. Daher verschluckt sich der Maussensor beim Flashen an den Daten vom PC und schaltet sich ab. Nach einem Kaltstart wacht er wieder auf.
Was muss ich bei Ponyprog2000 einstellen, um den BlueMP3-ISP-Adapter zu nutzen?
Im Menüpunkt Setup/Interface Setup sind folgende Einstellungen nötig: Parallel, Avr ISP I/O und alle Polarity-Haken aus. Bei manchen Mainboards muss man im BIOS des PC noch mit den Modi für den Parallel-Port experimentieren. USB-nach-Parallel-Konverter können Probleme bereiten. Des Weiteren muss man im Hauptfenster das Device ATMega32 auswählen.
Ich möchte an Stelle ATmega32 einen ATmega644 verwenden, worauf muss ich achten?
Der ATmega644 hat mehr Fuse-Bits als der ATmega32. Außerdem sind die Fuse-Bits teilweise anders belegt. Im CVS befinden sich auch die Fuse-Bits als Hex-Files für den ATmega644. Außerdem muss der Quelltext natürlich für einen ATmega644 und nicht für den ATmega32 übersetzt werden.
Ich habe einen mySmartUSB-Programmierer und will einen ATmega644 programmieren, wie geht das?
Das klappt nur, wenn sie den mySmartUSB-Programmierer vorher mit der Firmware V 1.5 oder neuer befüllen.
Ich habe einen mySmartUSB-Programmierer und das programieren dauert lange, wie kann ich es beschleunigen?
Wenn Sie avrdude oder ein Frontend dazu verwenden, nutzen sie als Programmiergerätekennung nicht avr910, sondern avr911. Dann überträgt er größere Blöcke auf einmal.
Wenn ich meinen Programmieradapter an J14 des Erweiterungsmoduls anschließe, funktioniert das übertragen der Firmware nicht. Ohne Funkmodul geht es. Was ist kaputt?
Der Programmierstecker auf dem Erweiterungsmodul (J14) ist leider verdreht. Wer ihn benutzen will, muss das Flachbandkabel um 180 Grad gedreht einstecken (Pin 1 zeigt dann nach vorne, in Richtung Transportfach des Bots). Damit das klappt muss man unter Umständen die kleine Nase am Flachbandstecker entfernen.
Programmierung allgemein
Programmierung allgemein
Wie kommt man zu Schreibrechten beim CVS?
Erst einmal noch gar nicht. Aber wir freuen uns über gut getestete und dokumentierte Patches, die uns per E-Mail unter ct-sim@heise.de [4] erreichen. Ob wir besonders aktiven Entwicklern später einen direkten Zugang zum CVS gewähren können, wird sich zeigen — nicht zuletzt anhand der Qualität der eingesandten Patches.
Wie erstelle ich einen Patch in Eclipse?
Ein Patch besteht aus einer Textdatei, die alle Unterschiede zwischen der lokalen Kopie des Codes und dem aktuellen Stand des CVS-Repositories aufführt. Haben Sie an einem oder mehreren Source-Files des c't-Sim etwas geändert, so stellen Sie zunächst über "Team/Synchronize with Repository" sicher, dass Eclipse der aktuelle Zustand des Codes im CVS bekannt ist. Um Ihre lokalen Änderungen in einen Patch zu verpacken, wählen Sie "Team/Create Patch..." Anschließend wählen Sie einen sprechenden Dateinamen für Ihren Patch (z.B. "zeitlupe.txt") und suchen sich einen Ort zum Speichern auf Ihrem System aus. Das "Diff output format" sollte "Unified" sein, das erleichtert hinterher anderen Nutzern, Ihren Patch zu übernehmen.
Dokumentieren Sie Ihren Patch — so fällt es uns und den anderen Lesern leichter zu verstehen, inwiefern Ihre Erweiterung den Simulator verbessert. Zum einen sollten Sie einen kurzen Text beilegen, der als Beschreibung auf der Projektseite veröffentlicht werden kann und — bei Übernahme ins offizielle Release — Eingang in die Changelog-Datei finden soll. Im Quellcode Ihrer neuen Funktionen selbst sollten ausführliche Javadoc-konforme [5] Kommentare zu finden sein. Bei neuen Methoden können Sie sich unter dem Tag "@author" mit Namen und E-Mail-Adresse verewigen.
Um einen Patch einzuspielen, wählen Sie unter "Team/Apply Patch" den Ordner des Projekts aus, das Sie erweiteren wollen (z.B. ct-Sim). Den Pfad zur Patch-Datei können Sie entweder per Hand einfügen oder Sie suchen die Datei über "Browse...". Wird Ihnen im nächsten Schritt gemeldet, bestimmte zu erweiternde Dateien würden nicht existieren, ist wahrscheinlich der falsche Ordner ausgewählt. "Finish" schließt den Vorgang ab. Weitere Details lassen sich in der Hilfe von Eclipe ("Working with patches") nachlesen.
Wie erstelle ich Patches, die sich auf wesentliches konzentrieren und nicht alle meine Experimente enthalten?
Damit die Patches möglichst kompatibel zueinander sind und überschaubar bleiben, sollten sie schlank sein. Ein Patch pro Thema. Insbesondere Formatierungsänderungen usw. blähen den Patch stark auf und machen ihn im Zweifelsfall inkompatibel zu anderen.
Wir empfehlen, das Repository zweimal aus dem CVS in Eclipse zu importieren. Einmal zum beliebigen eigenen Experimentieren, einmal um die fertig debugten Ergebnisse zum Export vorzubereiten.
Im "privaten"-Repository bastelt und experimentiert man. Dann erstellt man einen Patch und spielt ihn in sein "export"-Repository ein. Dabei kann man sehr einfach und detailliert auswählen, welche Teile man übernehmen will. Am Ende erstellt man aus dem "export"-Repository wieder einen Patch, den man bei uns einreicht. Patch-Dateien sind übrigens reine ASCII-Files, man kann zur Not auch mit einem Texteditor noch Teile löschen.
Bei allen Änderungen bitte die Changelog-Einträge nicht vergessen.
Warum eigentlich Eclipse und nicht Visual Studio, Jbuilder, WinAVR, CodeWarrior oder Programmierumgebung XYZ?
Der Code für c't-Bot und c't-Sim setzt sich aus zwei Teilen zusammen, die in verschiedenen Sprachen geschrieben wurden (C und Java). Der Code läuft auf zwei verschiedenen CPU-Architekturen (x86 und AVR) und zwei Betriebssystemen (Linux und Windows). Das ergibt eine Vielzahl an Konstellationen. Um dennoch nicht den Überblick zu verlieren bietet sich eine Umgebung an, die auf allen Betriebssystemen verfügbar ist und alle Codeversionen verwalten kann. Auch ein Debugging aller Zielsysteme sollte möglich sein. Des Weiteren sollte die Entwicklungsumgebung Lesern die Möglichkeit geben ständig am aktuellen Code mitzuarbeiten und eigene Vorschläge als Patches einzureichen. Um die Dokumentation eines solchen Projektes sollte sich die IDE ebenfalls kümmern.
Eclipse gibt es für Linux und für Windows. Es ist selbst eine Java-Applikation und kann von Haus aus mit Java-Source-Code umgehen. Zum Übersetzen bindet es den Compiler aus einem Java JDK ein. Für den C-Code greift es auf den gcc zurück. Dieser wiederum kann Binaries für Windows, Linux und den Mikrocontroller übersetzen. Andere Entwicklungsumgebungen bringen teils auch andere Compiler mit. Ob diese sich mit unserem Code vertragen ist nicht getestet.
Eclipse greift direkt, ohne umständliche Tools auf unser Code-Repository (CVS) zu und erstellt im Handumdrehen Patches. Diese können wir nach Prüfung bequem importieren. Inoffizielle Patches kann jeder selbst bequem einspielen. Die beiden Hilfsprogramme javadoc und doxygen integrieren sich nahtlos in Eclipse und generieren aus dem Quelltext die Dokumentation.
Des Weiteren ist Eclipse mit den nötigen Hilfspaketen in der Lage Code für jede dieser Plattformen im Einzelschrittmodus zu debuggen. Der Mikrocontroller wird dabei komplett emuliert. Wenn man möchte kann man eclipse sogar das Flashen des Mikrocontrollers beibringen. Als letzter Punkt bleibt anzumerken, dass alle hier vorgestellten Werkzeuge kostenlos sind.
Wer sich dennoch nicht mit Eclipse anfreunden kann, muss selbst experimentieren. Für Puristen, die zum C-Programmieren nur einen Editor und eine Kommandozeile brauchen, haben wir allerdings ein Makefile vorbereitet. Dankenswerter Weise hat ein Leser ein entsprechendes Ant-File für den Java-Teil beigesteuert.
Muss ich alle Pfade für das C-Projekt ct-Bot unter Eclipse immer wieder neu an mein eigenes System anpassen, wenn ich die aktuelle Version aus dem CVS heruntergeladen habe?
Eclipse legt diese Pfade in einer Datei namens .cdtbuild ab, die direkt im Wurzelverzeichnis des Projekts legt, also beispielsweise in ...\workspace\ct-Bot\. Diese Datei wird normalerweise bei jedem Auslesen des CVS erneut überschrieben. Man kann das verhindern, indem man im gleichen Verzeichnis eine Datei namens .cvsignore anlegt (Dateiformat: Plain text Ascii). Das CVS überspringt beim Aktualisieren alle Dateien und Verzeichnisse, die in dieser Datei aufgeführt werden (jeweils durch Zeilenumbrüche getrennt). Schreibt man also in .cvsignore den Dateinamen .cdtbuild hinein, verändert CVS die Projektpfade beim nächsten Auslesen nicht mehr.
Ab wann lohnt es sich einen Patch einzuschicken?
Das hängt von der Art des Patches ab: Bugfixes: Wer einen Fehler findet und sicher ist, dass seine Lösung funktioniert, sollte ihn uns umgehend schicken, damit andere nicht in die gleichen Probleme laufen.
Feature-Adds: Sinnvolle neue Features nehmen wir ebenfalls immer gerne entgegen. Beispiele für Erweiterungen von Lesern, die bereits aufgenommen wurden sind: das Verhalten bot_glance(), die Little/Big-Endian-Unterstützung, aber auch der Support für mehr als einen Screen oder das Remote-Display und die Flash-Skripte. Wichtig ist hier, dass sie gut getestet sind.
Eigene Anpassungen: wie veränderte Listen der RC5-Fernbedienungscodes, oder minimale Veränderungen dürften nur bedingt für andere von Interesse sein. Sie kommen meist nicht in den offiziellen Tree. Wir können Sie jedoch auf die Patches-Seite stellen, sofern genug Erklärung mitkommt.
Formatierungen: Was wir nicht einbauen können sind Patches nach dem Motto: "Ich hab mal eben alle Einrückungen etwas kleiner gemacht". Das liegt schlicht und ergreifend daran, dass diese Patches hunderte von Zeilen betreffen, die wir alle per Hand gegen das Original vergleichen müssen.
Insgesamt, sollte man vor dem Einreichen selbst abwägen:
- ist mein Patch für andere von Interesse
- ist er groß/wichtig genug, dass es sich für uns lohnt ihn zu analysieren. Wir müssen nämlich jeden Patch prüfen.
- ist er ordentlich programmiert
- ist er dokumentiert
Ein paar Beispiele für Patches, die sicherlich lohnen würden:
- neue Verhalten, die einen Bot sinnvoll steuern und nicht mit den anderen Verhalten kollidieren
- Abgleich der Sensorwerte
- Nützliche Testprogramme (die sich in den bestehenden Code integrieren lassen)
- Alles, was TODO-Stellen im Code ersetzt
- Ein optisch ansprechendes Remote-Display für den c't-Sim
Alle weiteren Rahmenbedingungen stehen bereits in der FAQ und auf der Patches-Seite. Patches, die den Richtlinien nicht entsprechen, können wir nicht integrieren.
Programmierung c't-Bot
Programmierung c't-Bot
Mein c't-Bot fährt immer. Nur wenn ich die Abgrundsensoren abdecke hält er an. Was ist falsch?
Es passt dann lediglich die Konstante BORDER_DANGEROUS in der Datei bot-local.h nicht zu dem Untergrund, den die Abgrundsensoren sehen. Der Bot glaubt, immer einen Abgrund zu sehen und versucht zu fliehen.
Ich habe ct-Bot-Projekt aus dem CVS ausgelesen und möchte es in Eclipse unter Windows kompilieren. Der Vorgang endet aber mit der Meldung, das die Datei ct-Bot.exe nicht erstellen kann ("make: Target 'all' not remade because of errors.") Woran liegt das?
Wenn das Kompilieren des C-Codes fehlschlägt, kann das eine Reihe von Ursachen haben. Prüfen Sie, ob in Eclipse unter "Project/Properties" bei "C/C++ build" die richtigen Pfade zu MinGW und Pthreads eingetragen sind, wie in der Installationsanleitung [6] beschrieben. Fehlen die entsprechenden Karteireiter ganz, so ist CDT (C Development Toolkit) nicht oder nicht richtig installiert. Eventuell hilft es, Eclipse nach der Installation von neuen Plugins einmal neu zu starten.
Weiterhin ist darauf zu achten, dass die vollständige Version von MinGW installiert wird, bei der Standardversion fehlen entscheidende Teile wie ein benötigtes Makefile. Im Zweifellsfall prüfen Sie bitte, ob Sie unsere Installationsanleitung wirklich Schritt für Schritt durchgeführt haben.
Wie erfasse ich neue RC5-Fernbedienungen?
Zuerst sollte man in der Datei rc5-codes.h dafür sorgen, dass die RC5-MASK so aussieht:
#define RC5_MASK (RC5_COMMAND|RC5_ADDRESS)
Und dann die Firmware nochmal neu in den Bot spielen. Im Normalbetrieb ignoriert der Bot den gesamten Adressbereich der RC5-Kommandos [7] (#define RC5_MASK (RC5_COMMAND)), so erkennt er möglichst viele Fernbedienungen. Erfassen sollte man neue Codes jedoch vollständig. Hat man eine Liste mit den Codes der eigenen Fernbedienung fertig, indem man zum Beispiel die Werte aus dem Display des Bots abgeschrieben hat, so erstellt man in rc5-codes.h eine neue Sektion. Dabei lohnt es, eine vorhandenen als Vorlage zu verwenden.
Warum enthält das CVS keine perfekt funktionierende Steuerung für den Bot?
Unsere Entwicklungsarbeit bei c't konzentriert sich darauf, einen geeigneten Rahmen für die Roboterprogrammierung zur Verfügung zu stellen – eine möglichst sichere und pfiffige Steuerung für den Bot zu entwickeln, ist nicht unser Ziel. Denn damit würden wir ja Ihnen, unseren Lesern, den größten Teil des Spaßes nehmen, der gerade darin besteht, eigene Routinen zu ersinnen, sie in Code umzusetzen und anschließend – im Simulator oder in der Realität – auszuprobieren.
Die von uns bisher in die Code-Basis eingepflegten Robotersteuerungen sind daher mit Absicht(!) alles andere als perfekt – sie sollen Anregungen und Ausgangspunkte für Verbesserungen von Ihrer Seite liefern, nicht fertige Lösungen bieten.
Gelungenen Steuercode von Leserseite, der uns als Patch per E-Mail erreicht (unter den Adressen ct-bot@heise.de [8] bzw. ct-sim@heise.de [9]) nehmen wir jedoch gerne in die Code-Basis auf, oder stellen sie zum Download bereit.
Die Tasten meiner Fernbedienung sind anders beschriftet als die Vorlagen im Source-Code. Wie bezeichne ich die Tasten, um trotzdem die üblichen Funktionen nutzen zu können?
Um den Code verständlich zu halten, haben wir uns entschieden, dass jede Taste genau den Namen erhält, der aufgedruckt ist. Ein zweites #define-Statement kann dann diesen Code einer anderen Bedeutung zuordnen.
Angenommen auf der Fernbedienung gibt es keine Taste "DOWN" aber eine Taste "CH-", die man dafür umwidmen möchte. Dann sieht die Definition so aus:
#define RC5_CODE_CH_MINUS (0x1021 & RC5_MASK) /*!< Taste CH - */ #define RC5_CODE_DOWN RC5_CODE_CH_MINUS /*!< Taste CH - umgewidmet als DOWN-Taste*/
Das ganze Framework ist so kompliziert, wie finde ich einen Einstieg?
Wir haben zwei ganz einfache Routinen vorbereitet, die als guter Einstiegspunkt für eigene Experimente dienen können. Wie alle Verhalten existiert für sie eine eigene Datei im Unterverzeichnis bot-logic [10]. In diesem Falle heißt die Datei behaviour_simple.c [11] und die beiden Funktionen bot_simple_behaviour() sowie bot_simple2_behaviour()
Damit sich die alten Hasen nicht daran stören, sind beide Routinen per default inaktiv. Möchte man sie aktivieren, so entfernt man die Kommentarzeichen von folgenden Zeilen in bot_behave_init():
// activateBehaviour(bot_simple_behaviour); // activateBehaviour(bot_simple2_behaviour);
bot_simple_behaviour() ist ein Beispiel für ein ganz schlichtes Verhalten, dass den Bot mit Hilfe von Hilfsverhalten im Quadrat fahren lässt.
bot_simple2_behaviour() nutzt keine Hilfsverhalten, sondern ist selbst eines und besitzt daher auch eine Botenfunktion bot_simple2(). Man kann es z.B. aus bot_simple_behaviour() heraus nutzen. Es fährt den Bot so lange geradeaus, bis es dunkler als ein bestimmter (übergebener) Wert wird. Es fragt also Sensoren ab und steuert relativ unmittelbar die Motoren an.
Viele weitere Details beschreibt das in c't 10/06 erschienene Tutorial.
Der Vorteil, wenn man mit diesen beiden Beispielen anfängt liegt darin, dass man sich um nichts anderes kümmern muss. Das Framework ermittelt für einen die Sensorwerte, stellt die Motoren nach und macht noch diverses andere im Hintergrund. Man kann sich ganz darauf konzentrieren z.B. den Bot ein kleines Herz oder andere geometrische Figuren fahren zu lassen. Das Suchen von Licht wäre ebenfalls ein geeignetes Übungsthema.
Beim Übersetzen bekomme ich seit dem Erscheinen von c't 10/06 immer die Fehlermeldung: undefined reference to `cos'. Was läuft schief?
Seit der Release 0.7 verwendet der Code Routinen aus der mathematischen Bibliothek. Diese Fehlermeldung deutet darauf hin, dass diese Library fehlt. Dazu öffnet man in Eclipse Project->Properties->C/C++-Build/GCC-C-Linker/Libraries. Im Feld Libraries drückt man auf das kleine grüne "Plus" und trägt in den sich öffnenenden Dialog ein kleines "m" ein. OK-Klicken. Fertig.
Mein Bot stürzt immer wieder ab. Was läuft schief?
Unter Umständen ist der Code zu groß für den Flash-Speicher des Bots geworden. Er besitzt nur 32 KByte davon. Ohne aktivierte Optimierung kommt der offizielle Code seit der Release 0.7 (c't 10/06) gefährlich nahe an diese Grenze. Aktiviert man die Optimierung (-Os), so ist wieder reichlich Platz: Einfach im Feld "Other Optimization Flags" des Menüs Project->Properties->C/C++-Build/GCC-C-Compiler/Optimization den Wert "-Os" eintragen.
Haben Sie sehr viel eigenen Code hinzugefügt, reicht vielleicht sogar die Optimierung nicht mehr aus. Dann können sie in ct-Bot.h unbenutzte Module deaktivieren um wieder Platz zu schaffen. Insbesondere Log- und Display-Routinen sind Speicherfresse, da sie mit Strings hantieren.
Der Befehl:
avr-size ct-Bot.elf
liefert Aufschluss über die jeweils belegten Speichersektionen. Die Bedeutung der einzelnen Sektionen ist hier [12] genau erklärt.
Der Compiler meldet den Fehler: "section .bootloader [00007680 -> 00007a07] overlaps section .data" oder so ähnlich. Was läuft falsch?
Sie haben vergessen dem Linker mitzuteilen, wohin er den Bootloader packen soll. Wenn Sie den Bootloader benutzen wollen, finden Sie im Verzeichnis Documentation eine HTML-Datei mit einer bebilderten Anleitung, wie sie das dem Linker mitteilen können. Wenn Sie den Bootloader nicht verwenden wollen, deaktivieren sie den BOOTLOADER_AVAILABLE-Schalter in ct-Bot.h.
Ich will Code für den ATmega644 compilieren und das klappt nicht. Was mache ich falsch?
Zuerst müssen Sie in der Build-Umgebung von Eclipse dem C-Compiler und dem Linker mit auf den Weg geben, dass Code für den ATmega644 übersetzt werden soll. Ersetzen sie Wenn Sie unter Project->Properties->C/C++ Build/Tool Settings/GCC C Compiler/Miscellaneous die Option -mmcu=atmega32 durch -mmcu=atmega644. Das gleiche wiederholen Sie unter Project->Properties->C/C++ Build/Tool Settings/GCC C Linker/Miscellaneous.. Außerdem sollten sie darauf achten, dass Sie bei der Installation der Tools auf die in der Installationsanleitung erwähnten Hinweise für den ATmega644 geachtet haben.
Programmierung c't-Sim
Programmierung c't-Sim
Beim Starten des c't-sim bekomme ich eine Exception und eine Meldung über "Unresolved compilation problems". Was mache ich falsch?
Falls als weitere Ursachen etwa "Point3f cannot be resolved to a type" oder "Vector3f cannot be resolved to a type" aufgeführt werden, weist dies darauf hin, dass die Java3D-Bibliothek nicht gefunden wurde. Diese muss ins benutzte "Java Runtime Environment" (JRE) installiert werden, wie in der Installationsanleitung beschrieben. Möglicherweise befindet sich auf Ihrem Rechner neben dem "Java Development Kit" (JDK), der sein eigenes JRE mitbringt (in einem Unterverzeichnis des JDK-Ordners), noch ein weiteres JRE, das zu einem früheren Zeitpunkt installiert wurde (unter Windows üblicherweise im Verzeichnis "Java" zu finden). Beim Ausführen von Java-Programmen greift die Java Virtual Machine (JVM) eventuell auf die alte Installation zurück. Fügt man auch dieser die Java3D-Bibliothek hinzu, sollte der Simulator starten.
Der Bot bleibt trotz programmierter Kollisionsvermeidung immer wieder an der Wand hängen. Sind die Abstandssensoren vielleicht nicht sauber implementiert?
Nein, die Modellierung der Abstandssensoren erfolgte zwar stark vereinfacht, aber orientiert sich durchaus an der Realität: Die Sensoren "blicken" parallel nach vorne, der Öffnungswinkel ihres Sichtkegels beträgt drei Grad. Zwar ist diese Implementierung eine Vereinfachung (im Original hängt der Öffnungswinkel vom Material des Hindernisses und von der Entfernung ab), aber auch der echte c't-Bot wird Schwierigkeiten haben, mit diesen Sensoren Wände zu erkennen, wenn er sich ihnen nahezu parallel nähert. Hier ist eine pfiffige Steuerungsroutine für den Bot gefordert, die ihn vielleicht nach einem bestimmten Streckenabschnitt kurz innehalten und einen Seitenblick riskieren lässt, bevor er seinen Weg fortsetzt.
Im c't-Sim-Paket befindet sich eine Datei build.xml — wozu ist die da und was mache ich damit?
Die Datei build.xml ermöglicht es, das Projekt c't-Sim mit dem Werkzeug Ant [13] der Apache Software Foundation zu kompilieren und auszuführen. Ant ist vergleichbar mit dem aus der C-Welt bekannten make und automatisiert das Erstellen (build) eines Java-Softwareprojekts. Die Datei build.xml enthält alle wichtigen Kenndaten und Einstellungen des Projekts ct-Sim. Zusätzliche Anweisungen fordern Ant auf, die Java-Quellen zu kompilieren, ein Java-Archiv (.JAR) und die Java-Dokumentation (javadoc) zu erstellen sowie schließlich den c't-Sim zu starten. Eine Anleitung, wie man den Ant Build in Eclipse integriert sowie weitere Informationen finden sich in der Datei build.howto des Java-Projekts c't-Sim.
Ich will SOFORT mit dem Programmieren im Simulator anfangen! Was soll ich machen?
Bei den Robotersteuerungen in bot-logik.c und CtBotSimTest.run handelt es sich um einfache Implementierungen, die zwar in den meisten Fällen brauchbar arbeiten, aber den simulierten Bot weder zu hundert Prozent vor Kollisionen schützen noch verhindern können, dass der Roboter in eine "Deadlock"-Situation, gerät, aus der er nicht mehr von selbst freikommt. Daher empfiehlt sich das Ausknobeln einer wirklich wasserdichten Lenkungsroutine, um mit dem Simulator warm zu werden.
Wie erstelle ich selbst eine Jar-Datei, damit ich den c't-Sim per Doppelklick im Windows Explorer oder vom Desktop starten kann?
Eclipse kann solche Jar-Archive exportieren:
- rechter-Mausklick auf c't-Sim im Package-Explorer
- "Export" anklicken
- "JAR file" auswählen und dann "Next" anklicken
- "Next" anklicken
- "Next" anklicken
- In der mit "JAR Manifest Specification" betitelten Seite neben "Main Class" auf "Browse" klicken
- Controller auswählen und dann "OK" anklicken
- "Finish" anklicken
Wie starte ich den Simulator aus Eclipse heraus?
In der Eclipse-Symbolleiste befindet sich ein Pfeil im grünen Kreis. Über den kleinen schwarzen Pfeil daneben öffnet man den Dialog "Run...", in dem man sogenannte "run configurations" erstellen kann. Wenn Sie "Java Application" wählen und dann auf "New" klicken, können Sie den Projektnamen angeben, unter dem Sie den Simulator importiert haben (üblicherweise ct-Sim). Als "main class" wählen Sie "Controller", anschließend klicken Sie auf "Apply". "Run" startet den Simulator. Beim nächsten Start des Simulators reicht es dann, wenn Sie in der Eclipse-Symbolleiste auf den Pfeil im grünen Kreis klicken.
Der ParcoursLoader kann Linien nur auf grauem Untergrund zeichnen. Ich brauche aber Linien auf weißem Boden - wie bekomme ich die?
Alle Linienfelder nutzen den normalen grauen Boden als Hintergrund. Für Linien auf hellem Boden muss man den normalen Untergrund umfärben. Dazu ändert man in der XML-Datei, die den Parcours definiert, die Farben folgendermaßen: Fussboden im Labyrinth #FFFFFF #FFFFFF Wie weiß diese Bodenplatten in der 3D-Darstellung erscheinen, hängt nicht zuletzt von der Beleuchtung des Parcours an der jeweiligen Stelle ab.
Simulator allgemein
Simulator allgemein
Ich will den Java-Teil des c't-Sim nur laufen lassen, nicht in dessen Code eingreifen. Muss ich mir trotzdem Java3D installieren (wie in der [installationsanleitung.shtml Anleitung] beschrieben), bevor die fertige jar-Datei von der Projektseite läuft?
Ja, die Installation der Java3D-Bibliothek ist notwendig. Wie man die richtige Laufzeitumgebung für den Simulator bereitsstellt, steht in der Installationsanleitung.
Die IR-Sensoren im Simulator funktionieren bei mir nicht - warum?
Wahrscheinlich liegt das an einer zu alten Version der Java3D-Bibliothek. Benötigt wird die Version "1.4.0-beta 3 (build9)" (siehe auch Installationsanleitung).
Kann ich Robotersteuerungs-Routinen in Java (wie die aus der Klasse CtBotSimTest) später auch auf meinem echten c't-Bot laufen lassen?
Nein — jedenfalls werden wir eine Entwicklung in diese Richtung nicht aktiv vorantreiben. Die Klasse CtBotSimTest ist in erster Linie als Testklasse für den Simulator konzipiert. c't-Bot und c't-Sim verstehen sich aber als offene Projekte — Code-Pakete von Leserseite, die den c't-Bot Java-fähig machen, stellen wir gerne auf die Projektseite.
Ich habe die neue Version des c't-Sim aus dem CVS geladen, Eclipse meldet mir aber Kompilierfehler — warum?
[antwort] Version 0.2 des c't-Sim benutzt Methoden, die erst seit Java 5.0 verfügbar sind. Meldet Eclipse für den neuen Code Fehler, ist zu prüfen, ob die Java-Version innerhalb der Entwicklungsumgebung nicht noch auf 1.4 gesetzt ist. Für Eclipse muss im Menü Window/Preferences bei Java/Compiler/JDK Compliance Version 5.0 aktiviert werden, dann sollte sich der Code problemlos übersetzen lassen. [antwort]
Beim Start meldet der c't-Sim eine java.lang.IllegalStateException: GL_VERSION. Was ist da los?
Diese Fehlermeldung deutet darauf hin, dass die installierte Grafikkarte die geforderte OpenGL-Version von 1.3 oder höher nicht unterstützt. Mit einem Treiber-Update lässt sich dieses Problem bei neueren Grafikkarten in der Regel beheben. Dazu sollten Sie allerdings Originaltreiber Ihres Grafikkartenherstellers verwenden, da erfahrungsgemäß das Betriebssystem die passenden Treiber nicht von sich aus mitbringt, selbst wenn es stets auf dem neuesten Stand gehalten wird. Lässt sich der c't-Sim auch mit dem neuesten Treiber nicht starten, ist leider die Grafikkarte zu alt und muss durch eine neue ersetzt werden.
Mein Firefox kann das c't-Sim-Applet nicht starten, was läuft schief?
Dieses Problem kann entstehen, wenn im Plugin-Verzeichnis des Firefox Reste von früheren Java-Installationen liegen. Die Mozilla-Knowledge-Base [14] beschreibt dieses Phänomen und rät, mit der Eingabe von about:plugins im URL-Feld zu prüfen, ob hinter allen Plugin-Dateien (unter Windows: NPJava11.dll, NPJava12.dll, etc.) die Versionsnummer des aktuellen JRE steht. Sollten in Verzeichnissen wie "C:\Program Files\MozillaFirefox\plugins" ältere Dateien liegen, sollte man sie per Hand löschen. Ebenfalls erwähnt wird das Problem auf der FAQ [15] der Mozilla-Plugins.
Zubehör
Zubehör
Ich habe eine lernbare Universalfernbedienung. Kann ich diese Für den c't-Bot verwenden?
Ja. Sie müssen allerdings dem lernbaren Modell RC5-Codes beibringen, denn nur diese versteht der c't-Bot derzeit. Typischerweise verwenden ältere Philips und Technisat-Geräte RC5-Codes. Wenn man bei der lernbaren Fernbedienung ein solches Modell wählt, sollte es klappen. Ein Modell das man nachahmen kann, ist die Philips-Fernbedienung RD 5860, die zum CD-Player CD614 gehört.
Und was ist mit den modernen RC6-Fernbedienungen?
Damit der c't-Bot diese versteht, muss man ihm die erweiterten RC6-Kommandos beibringen. Die Hardware unterstützt das, die Firmware derzeit noch nicht. Allerdings kann die Dekodierung könnte parallel zur RC5-Erkennung ablaufen. In der Link-Liste finden sich Informationen zum Aufbau der Kommandos und in einem älteren c't-Artikel [16] die Details zu den Empfangsroutinen für RC5.
Diverses
Diverses
Wann gibt es den Roboter zu kaufen?
Der Roboterbausatz ist aller Voraussicht nach rechtzeitig zum Erscheinungsdatum der c't-Ausgabe 4/2006 (6. Februar 2006) bei eMedia [17] und Segor-electronics [18] zu beziehen.
Wann gibt es Erweiterungsmodul und Klappe zu kaufen?
Sowohl das Erweiterungsmodul als auch die Klappe zur Verriegelung des Transportfaches gibt es ab Mitte Januar bei Segor-electronics [19] zu kaufen. Die Platine bietet auch emedia an.
Die Kosten des Bausatzes für den c't-Bot übersteigen meine finanziellen Mittel. Gibt es im Netz eine Stückliste und technische Zeichnungen der mechanischem Teile, damit ich das Roboter-Chassis mit Material aus der Bastelkiste selbst nachbauen kann?
Ein Plan mit den Abmessungen der Grundplatte steht als PDF zum Download bereit. Wer einzelne Teile oder ganze Baugruppen des c't-Bot durch Eigenkonstruktionen ersetzen will, sollte bedenken, dass sich anschließend die von uns zur Verfügung gestellte Software nur noch bedingt auf dem eigenen Bot einsetzen lässt (weil beispielsweise Tauschmotoren auf andere Art und Weise angesteuert werden müssen). Zwar ist der Originalbausatz des c't-Bot nicht ganz billig, die gelieferten Teile sind allerdings von hoher Qualität und sorgfältig aufeinander abgestimmt. So tragen die Achsen der Faulhaber-Motoren zuverlässig das (nicht zu unterschätzende) Robotergewicht — bei billigen Servomotoren kann man sich darauf nicht unbedingt verlassen. Die mechanischen Bauteile (Grundplatte, Räder, Motorflansch, Alu-Träger) sind nur sehr aufwändig von Hand anzufertigen, und die erforderliche Präzision erreicht man dabei wahrscheinlich auch nicht. Eine maschinelle Fertigung von Einzelstücken ist dagegen mit Sicherheit teurer als der Bezug über die Firma Segor-electronics, die im übrigen auch alle Teile des Bots einzeln verkauft.
Ist man als Mac-Anwender aus dem ct-Bot-Projekt ausgesperrt?
Den echten Bot kann man auch auf dem Mac programmieren; auch der C-Teil des Simulators (Projektteil "ct-Bot") sollte sich ohne weiteres auf dieser Plattform übersetzen lassen.
Für den Hardware-Teil gibt es passende Software-Tools. Einen Einstieg erleichtert die Seite AVR Microcontroller Programming on a Mac [20].
Beim Java-Teil des Simulators sieht es schwieriger aus. Es existiert zwar eine Java3D-Version für den Mac, aber mit dieser funktioniert unsere Variante der Kollisionserkennung (noch) nicht. Wenn Sie den Simulator trotzdem auf dem Mac betreiben wollen, müssen Sie entweder den Teil des Codes, der die Kollisionen realisiert, anders implementieren. Oder Sie versuchen, den gesamten c't-Sim seinerseits im PC-Simulator auf dem Mac zum Laufen zu bekommen.
Wir werden die Entwicklung des c't-Sim für den Mac selbst nicht vorantreiben (können), aber stellen entsprechende Code-Versionen von Leserseite gerne über die Projektseite zur Verfügung.
Meine Frage wird hier nicht beantwortet. Wer hilft mir weiter?
Bei Fragen, die hier nicht beantwortet werden, liefert unter Umständen die Suchfunktion des Diskussionsforums [21] eine Antwort. Auch im Archiv [22] der Mailingliste [23] finden sich viele Problemlösungen. Wer im Umgang mit Foren oder Mailinglisten nicht geübt ist, findet hier [24] ein paar Tipps, wie man Fragen so stellt, dass sie auch jemand beantwortet. Wer die Netikette [25] beachtet, bekommt aber meist schnell eine passende Antwort.
Als letzte Möglichkeit, können Sie sich auch per E-Mail an ct-bot@heise.de [26] bzw. ct-sim@heise.de [27] wenden.
Funkmodul
Funkmodul
Wie konfiguriere ich den WiPort?
Ein fabrikneuer WiPort lauscht entweder auf dem LAN- oder dem WLAN-Interface auf erste Kommandos. Das Programm Device-Installer von Lantronix hilft bei der ersten Konfiguration. Steht der WiPort auf LAN verbindet man ihn wie einen gewöhnlichen PC mit dem Netzwerk oder schließt ihn mit einem gekreuzten Netzwerkkabel direkt an den PC an. Steht er auf WLAN, kann man versuchen, ihn im Adhoc-Modus zu erreichen. Voreingestellt ist der Netzwerk-Name "LTRX_IBSS" und Kanal 11. Jegliche Verschlüsselung ist deaktiviert.
Normalerweise findet der Device-Installer den WiPort, sobald man ihm einen Suchauftrag erteilt hat. Sollte dies einmal nicht klappen, so kann man über den Knopf "Assign IP" den WiPort auch direkt ansprechen. Dabei fragt das Programm nach der MAC-Adresse die ein Aufkleber auf dem WiPort verrät. Sobald man dem WiPort eine IP-Adresse zugewiesen hat, kann man ihn auch direkt per HTTP ansprechen und konfigurieren.
Klappt der Zugriff per LAN oder WLAN nicht, lesen Sie bitte bei der Frage "Der Lantronix Device-Installer findet den WiPort nicht (mehr). Wie komme ich an den Baustein heran?" weiter.
Ich verwende Linux oder MAC OS X. Daher läuft der Device-Installer bei mir nicht. Wie komme ich an den WiPort heran?
Für die Erstinstallation am einfachsten über den USB-2-Bot-Adapter (siehe nächste Frage). Sobald der WiPort eine IP-Adresse hat, kann man ihn per HTTP (Port 80) oder per Telnet (Port 9999) konfigurieren. Wer keinen USB-2-Bot-Adapter zur Hand hat, findet im Lantronix-Handbuch [28] eine Anleitung, um per Hand einen Behelfs-ARP-Eintrag auf dem PC zu machen.
Der Lantronix Device-Installer findet den WiPort nicht (mehr). Wie komme ich an den Baustein heran?
Meist stimmen in diesem Fall die Netzwerkeinstellungen des WiPort nicht. Da der Baustein entweder per WLAN oder per LAN erreichbar ist, führt beispielsweise ein falscher WPA-PSK-Schlüssel schnell dazu, dass der WiPort nicht mehr im Netz zu sehen ist.
Über den USB-2-Bot-Adapter kommt man aber wieder ins Konfigurationsmenü des WiPort. Dazu verbindet man den Adapter mit J12 -- Pin 1 liegt auf der dem Transportfach abgewandten Seite. Nun nimmt man ein Terminalprogramm wie das Windows-eigene Hyperterm und stellt die Übertragungsrate auf 9600 Baud (8N1). Die Flusskontrolle schaltet man ab. Hält man nun während dem Einschalten des c't-Bot die x-Taste auf der PC-Tastatur gedrückt, sollte im Terminalprogramm das Text-Menü zur Konfiguration des WiPort auftauchen. Hier kann man Punkt für Punkt alle Einstellungen kontrollieren und verändern. Der WiPort erwartet, dass man jede Eingabe mit "Enter" bestätigt.
Wie bekomme ich eigene Webseiten in den WiPort?
Am einfachsten geht das mit dem Device-Installer von Lantronix. Allerdings verbirgt sich der Upload von Webseiten hinter dem Knopf "Upgrade Firmware". Alternativ dazu kann man auch per TFTP Dateien hochladen. Vorher muss man die Dateien mit dem von Lantronix bereitgestellten Programm Web2cob [29] die Dateien in ein Archiv verpacken:
web2cob /o /d
packt den ganzen Inhalt des angegebenen Verzeichnisses in ein einzelnes .cob-Archiv und lässt sich als externes Tool in viele Entwicklungsumgebungen integrieren. So steht nach jedem Build eine aktuelle Version der Webseite und des Java-Applets als .cob-Datei zum Flashen bereit.
Diese darf maximal 64 KByte groß sein und entspricht einem der Speicherbereiche des Webserver-Flashs. Diese Speicherbereiche tragen die Namen WEB1, WEB2, usw.. Einzelne Dateien, die größer als 64 KByte sind, lassen sich gar nicht auf den WiPort übertragen und mehrere Dateien mit einer Gesamtgröße von mehr als 64 KByte nur mit dem Device Installer.
TFTP, eine abgespeckte FTP-Version auf UDP-Basis, überträgt dann die COB-Datei auf den WiPort:
tftp -i put <.cob-Archiv>
Eine Anleitung [30] zum Upload von eigenen Applets findet sich bei Lantronix. (bbe [31])
URL dieses Artikels:
https://www.heise.de/-291940
Links in diesem Artikel:
[1] https://www.heise.de/hintergrund/c-t-Bot-und-c-t-Sim-284119.html
[2] http://haemi.dyndns.org/local/fusecalc/calc.cgi?ID=atmega32
[3] http://www.mikrocontroller.net/articles/AVR_Fuses
[4] mailto:ct-sim@heise.de
[5] http://java.sun.com/j2se/javadoc/writingdoccomments/
[6] http://www.heise.de/ct/projekte/ct-bot/installationsanleitung.shtml
[7] http://www.heise.de/ct/05/23/222/
[8] mailto:ct-bot@heise.de
[9] mailto:ct-sim@heise.de
[10] http://www.heise.de/ct/projekte/machmit/ctbot/browser/stable/ct-Bot/bot-logic
[11] http://www.heise.de/ct/projekte/machmit/ctbot/browser/stable/ct-Bot/bot-logic/behaviour_simple.c
[12] http://www.heise.de/ct/05/23/222/
[13] http://ant.apache.org
[14] http://kb.mozillazine.org/Java#Remove_outdated_Java_files_from_the_browser_plugins_folder
[15] http://plugindoc.mozdev.org/faqs/java.html#Issues
[16] http://www.heise.de/ct/05/23/222/
[17] http://www.emedia.de
[18] http://www.segor.de/
[19] http://www.segor.de/
[20] http://www.eecs.berkeley.edu/~mseeman/resources/macmicro.html
[21] http://www.heise.de/ct/foren/go.shtml?list=1&forum_id=89813
[22] http://www.heise.de/ct/newsletter/archiv/ct-bot-entwickler
[23] http://www.heise.de/ct/projekte/ct-bot/#mailing
[24] http://www.lugbz.org/documents/smart-questions_de.html
[25] http://www.uni-leipzig.de/netikett.htm
[26] mailto:ct-bot@heise.de
[27] mailto:ct-sim@heise.de
[28] http://www.lantronix.com/support/documentation.html#embds
[29] http://ltxfaq.custhelp.com/cgi-bin/ltxfaq.cfg/php/enduser/fattach_get.php?p_sid=9ciYC9ri&p_tbl=9&p_id=943&p_created=1075228215
[30] http://ltxfaq.custhelp.com/cgi-bin/ltxfaq.cfg/php/enduser/std_adp.php?p_sid=nq4Ctech&p_lva=&p_faqid=943&p_created=1075227796&p_sp=cF9zcmNoPSZwX2dyaWRzb3J0PSZwX3Jvd19jbnQ9NzgxJnBfcGFnZT01&p_li=
[31] mailto:bbe@ct.de
Copyright © 2009 Heise Medien