Mein EdBot

Erweiterungen & Modifikationen am c't-Bot inkl. Schaltplanänderungen
Antworten
memnoch

Mein EdBot

Beitrag von memnoch » 02 Okt 2006, 14:31

Hallo allerseits,

melde mich nach langer Abwesenheit sowohl vom c't-Bot als auch vom Forum zurück. Habe vor ca. 4 Wochen mal wieder angefangen, ein wenig an Eddie (so hab ich meinen Bot genannt) herumzuschrauben. Warum ich damit wieder anfing ist mir genauso schleierhaft wie warum ich damit Monate vorher aufgehört habe... Jedenfalls erzähle ich mal ein bißchen, was es neues gibt.

Hardwaretechnisch habe ich erstmal das Display ersatzlos entfernt. An seine Stelle trat eine Lochrasterplatine, die einerseits mit der Hauptplatine über die UART-Erweiterung (J4) und andererseits über die Displayschnittstelle (ST4) verbunden ist. Ich habe damals noch einen SpeakJet von Sander Electronic ergattern können, den ich zusammen mit einer LM386-Verstärkerschaltung aufgebaut habe. Den Mini-Lautsprecher habe ich mit Heißkleber unter die Lochrasterplatine geklebt. Zum SpeakJet gleich nochmal mehr. Ich habe dazu noch eine RJ11-Buchse (4-Draht Telefonbuchse) aufgelötet, die die USART (Rx / Tx / CTS) des Mega32 für die Kommunikation mit dem PC freilegt. Die Tx-Leitung wird auch vom SpeakJet benutzt, und damit der nicht jedesmal lospiept, wenn Eddie mit dem PC quatscht, schalte ich ihn über ERW1 und einen Transistor frei. Hauptsächlich will ich den RJ11-Anschluss zum Firmwareupdate mittels Bootloader benutzen.
An der Displayschnittstelle, genauer gesagt an Pin 14, dem nach dem Displaypatch völlig unbenutzten Pin, hängt ein Funkmodul von Circuit Design, wovon wir in der Firma noch ein paar unbenutzte Muster hatten. Somit habe ich noch ein Shift-Register frei. Ich kann über den Jumper der Displaybeleuchtung dieses Funkmodul an- und abschalten. Da es ein reines Sendemodul ist, benutze ich es zur permanenten Übermittlung von Telemetriedaten an den PC. Ich habe mir dazu ein Gegenstück um den USB-2-Bot-Adapter gebaut. Dieser steckt als Modul auf einer Platine, auf der ebenfalls eine RJ11-Buchse und der Funkempfänger sitzen. Diese teilen sich den Rx-Anschluss des FT232, deshalb habe ich noch einen Multiplexer (74HC4053) verbaut, der über das DTR-Signal zwischen elektrischem und Funkempfang umschaltet. Grundgedanke war der, dass ich ohne ISP-Adapter und auch mit meinem PowerBook den Bot programmieren kann.

Softwareseitig habe ich angefangen, ein komplett neues Programm zu schreiben. Hauptsächlich weil low-level-µC-Programmierung mein Interesse geweckt hat. Ich habe also zuerst die Motorsteuerung angefangen und auf Timer 1 16kHz als PWM-Frequenz verwendet. Kein Schnurren, kein Stottern, saubere Motorendrehzahlen. Timer 0 habe ich für den Empfang von RC6-Fernbedienungskommandos verwendet. Timer 2 ist "multi purpose" und steht momentan auf 9600Hz. Bei jedem zweiten Takt, sprich mit 4800Hz, bekommt das Funkmodul ein Bit zu senden. Und zwar aus einem Ringpuffer, der ständig alle Sensoren- und Aktorendaten enthält (oder mal enthalten soll). So lasse ich zur Zeit das Bild des Maussensors ständig auslesen und über die Funkstrecke senden, habe also während Eddies Fahrt durchs Wohnzimmer vor Augen, was er unter der Grundplatte sieht. Der selbe Interrupt liest die Sensorendaten ein, steuert also nicht-blockierend die AD-Wandler, und setzt die Enable-Leitungen immer so, dass ein Sensor aus- und ein anderer eingeschaltet wird. Dadurch erhoffe ich mir weniger Spannungsschwankungen. Später soll dieser Interrupt auch noch die Servo-PWM erzeugen. Die Mainloop braucht sich jetzt nur noch um das Verhalten zu kümmern. An der Stelle habe ich noch nichts getan, allerdings teste ich gerade die Sensoren. Dafür lasse ich zwei Oszillatoren des SpeakJet Tonfrequenzen entsprechend den Sensordaten erzeugen. Im Klartext, Eddie pfeift immer gleichzeitig zwei Töne (rechter und linker Sensor), und zwar tiefe, wenn seine Abstandssensoren kein Hindernis sehen, und immer höher werdende, je näher er einem Hindernis kommt.

Mein Statusbericht ist wohl etwas länger geworden... Wünsche viel Spaß beim Lesen gehabt zu haben! ;)

Gruß memnoch

marvin
Wiki Master
Wiki Master
Beiträge: 385
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 04 Okt 2006, 11:35

Hallo memnoch,

klingt ja hoch interessant deine Erweiterungen. Ein paar Fotos und vielleicht eine Skizze von deinen Erweiterungen wären nicht schlecht.

Gruß marvin

memnoch

Beitrag von memnoch » 06 Okt 2006, 00:43

Bitteschön, habe ein paar Fotos hochgeladen. Eagle-Skizzen folgen eventuell demnächst.

Gruß memnoch

marvin
Wiki Master
Wiki Master
Beiträge: 385
Registriert: 18 Jan 2006, 16:21
Wohnort: Berlin
Kontaktdaten:

Beitrag von marvin » 06 Okt 2006, 10:47

Hallo memnoch,

danke für die Bilder, sieht echt gut aus. Und noch jede Menge Platz für Erweiterungen :wink:

Gruß marvin

memnoch

Beitrag von memnoch » 27 Okt 2006, 00:53

Hallo zusammen,

mittlerweile liegen in meiner Gallerie auch die Schaltpläne der bisherigen Erweiterungen.
Habe in den letzten Tagen mal einen kleinen Bootloader und entsprechende Kommandozeilentools geschrieben. Der Bootloader belegt gerade mal 1024 Bytes am Ende des µC-Flashs und kann einfache Kommandos, die per UART empfangen werden, ausführen zum Chip Erase, seitenweisen Flashen und Auslesen. Dabei werden die LEDs des Bot gesetzt (rot beim Schreiben, grün beim Lesen). Die UART wird mit 57600 Baud betrieben. Ich habe nicht genau gestoppt, aber ich glaube so um die 10 Sekunden dauert es, bis 32K geflasht sind.

Wer das ganze gern ausprobieren möchte:
Zunächst muss die EdBoot.hex mit dem normalen ISP-Adapter in den Controller geschrieben werden. Fuse-Bits, die programmiert, also auf 0, sein müssen, d.h. in PonyProg: Häkchen ist gesetzt, sind BOOTRST und BOOTSZ0. Zum Vergleich: Bisher waren die Häkchen bei BOOTSZ0 und BOOTSZ1 gesetzt.
Dann muss der USB-2-Bot-Adapter aufgesteckt (VCPP-Treiber) und BootEd von einer Konsole aus gestartet werden:
[pre]./BootEd /dev/tty.usbserial-EdBot[/pre] (Linux / MacOSX; eigenen vom Adapter belegten Port angeben)
oder
[pre]BootEd COM3[/pre] (Windows)
Ohne Angabe weiterer Parameter wird erstmal die Kommunikation getestet und ob der Bootloader anspringt. Eventuell mal den Reset-Knopf am Bot drücken, falls das nicht passiert.
Jetzt kann man BootEd über Parameter -i eine .hex-Datei angeben. Diese wird mit dem aktuellen Flash-Inhalt verglichen (Verify).
Hängt man noch den Parameter -write an, wird zuerst der Inhalt der .hex-Datei ins Flash geschrieben und danach verifiziert.
Nimmt man anstelle von -write die Option -erasewrite, so wird zuerst der gesamte Flash (mit Ausnahme des Bootloaders selbst) gelöscht und danach erst die .hex geflasht.

Mir ist der Bootloader eine große Hilfe, weil ich vom PowerBook aus den Bot programmieren kann, was auch viel schneller geht als mit meinem ISP. Für Fragen und Kritik bin ich offen, den Code veröffentliche ich, sobald ich ihn etwas aufgeräumt habe ;)

Gruß memnoch

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 27 Okt 2006, 02:35

Hallo memnoch,

das hört sich sehr interessant an! :-) Muss ich demnächst mal ausprobieren.

Würde es dir etwas ausmachen, das BootEd als Universal Binary zu compilieren? ;-)

Gruß Timo
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

memnoch

Beitrag von memnoch » 27 Okt 2006, 08:28

Hallo eax,

argh, stimmt, das ist mir gestern abend entschwunden, ich habe BootEd auf nem PPC compiliert... Also eventuell kann ich das Tool heute abend nachreichen, hab die Sources nicht hier, oder ich schaffe das erst in den nächsten Tagen. Zumindest die Sources lad ich dann hoch.

Gruß memnoch

achiem

Beitrag von achiem » 27 Okt 2006, 14:21

Hallo memnoch,
mich würde speziell erst mal die Umschaltung der ser. Leitung zum speakjet und Statusdaten-Funk-Sendemodul interessieren. Du hast dies ja an ERW1 gehangen via Transistor-wie eigentlich genau ? Wie schaltest Du den speakjet damit ab bzw. die Leitung zum Sendemodul um ? Dann ist ja auch in der jetzigen Ausbaustufe des bots ERW1 zwar noch frei, was aber wenn diese für den Servo/ Klappe... standardmäßig Verwendung findet ? Und die Steuerung des speakjets zur Tonausgabe (Quellcode) je nach Hindernis würde mich auch interessieren, zumal ich ja auch noch eine sinnvolle Verwendung meiner jetzt abgebauten Platine suche...Siehe hierzu:
http://www.ctbot.de/forum/hoeren-und-sp ... 13-30.html

Danke und Gruß, achiem

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 27 Okt 2006, 15:06

memnoch hat geschrieben:Hallo eax,

argh, stimmt, das ist mir gestern abend entschwunden, ich habe BootEd auf nem PPC compiliert... Also eventuell kann ich das Tool heute abend nachreichen, hab die Sources nicht hier, oder ich schaffe das erst in den nächsten Tagen. Zumindest die Sources lad ich dann hoch.

Gruß memnoch
Das wäre super, dann läuft es auch "direkt". Der Quellcode reicht mir sonst auch, dann compilier ich es kurz selbst ;-)

Gruß Timo
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

memnoch

Beitrag von memnoch » 27 Okt 2006, 19:33

Hi,

ich habe den Download jetzt mal um die Sources ergänzt, welche ich ihrerseits mal um Kommentare ergänzt habe ("Comments? We need no bloody comments!" ;) )
Da ich zur Zeit kein lauffähiges Linux hier habe (ausser ner Ubuntu-Live für PPC), kann ich gerade kein Binary erstellen.

@achiem:
Ich habe die ENA_ERW1-Leitung gemopst, da sie ja auf J4 herausgeführt wird. Diese hängt jetzt am Gate des Transistors, den ich als Schalter direkt in die TX-Leitung gehängt habe. Ist ENA_ERW1 auf LOW, kriegen also meine UART-Buchse und der SpeakJet Signale; ist es auf HIGH, dann nur die UART-Buchse. Da die Servos nur über eigene PWM-Leitungen gesteuert werden, habe ich mir sonst keine großen Gedanken um ENA_ERW1 gemacht.
Mein Funksender hängt nicht an der UART, sondern an ST4, der eigentlich für das Display da ist, welches ich bei mir aber ersatzlos entfernt habe. Ich habe stattdessen den nach dem Display-Patch freigewordenen Pin ans Funkmodul gesetzt und einen Timer so programmiert, dass er mit der richtigen Baudrate Start-, Stop- und Datenbits generiert. Auf diese Art rennt der Timer eine Endlosschleife über einen Puffer, den ich im Laufe der Mainloop mit Sensordaten füttere, die dann am Empfänger als serielle Daten wieder ankommen.
Für die SpeakJet-Oszillatoren habe ich eine Fernbedienungstaste belegt, die in der Variable sonar die vier ADC-Wandlergruppen (also 2x Distanz, 2x Linie, 2x Licht, 2x Kante) durchläuft (bei sonar == 0 ist Ton aus):[pre] if(RC5_Code == 0x000F && !mute)
{
sonar = (sonar + 1) % 5;
if(sonar == 1)
{
uartwrite("\00H8J0N1J0N2J0N11J5N12J5N");
}
else if(!sonar)
{
uartwrite("X");
}
}[/pre]Die Initialisierung setzt Lautstärken und Frequenzen der ersten beiden Oszillatoren und schaltet Envelope aus. Einmal pro Mainloop, also ungefähr alle 20 ms, kommt folgendes:[pre] if(sonar)
{
sprintf(str, "1J%uN2J%uN", adc[(sonar - 1) * 2] * 2 + 440, adc[(sonar - 1) * 2 + 1] * 2 + 440);
uartwrite(str);
}[/pre]adc ist ein Puffer aus 8x uint16, der in einem Timer-Interrupt mit den rohen ADC-Werten gefüllt wird. 1J bzw. 2J im Kommandostring wählen den 1. bzw. 2. Oszillator aus, %uN enthält dann die neue auszugebende Frequenz.
Das hat dann den folgenden Effekt: Wenn sonar == 1 ist, piepen die Oszillatoren mit ca. 440 Hz (ein tiefes A), wenn kein Hindernis in Sicht ist, und kreischen mit ca. 2200 Hz, wenn sie direkt (10cm) vor einer Wand stehen. Bei sonar == 3 wird der Ton höher, je dunkler es ist; bei 2 und 4 wird er umso höher, je weniger Boden der Bot unter den Rädern hat.

Gruß memnoch

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 27 Okt 2006, 20:25

memnoch hat geschrieben:Hi,

ich habe den Download jetzt mal um die Sources ergänzt, welche ich ihrerseits mal um Kommentare ergänzt habe ("Comments? We need no bloody comments!" ;) )
Da ich zur Zeit kein lauffähiges Linux hier habe (ausser ner Ubuntu-Live für PPC), kann ich gerade kein Binary erstellen.
Hi,
super, das klappt gut bei mir, vielen Dank!

Btw: Funktioniert USB2Bot mit Anzeige / Logging im Sim bei dir unter OS X? Ich bekomme immer nur "Device in use, unknown application", der Adapter ist aber verfügbar und das Flashen damit klappt jetzt ja auch einwandfrei.

Gruß Timo
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

memnoch

Beitrag von memnoch » 31 Okt 2006, 08:52

eax hat geschrieben:Funktioniert USB2Bot mit Anzeige / Logging im Sim bei dir unter OS X?
Hi Timo,

ich benutze den Sim gar nicht, ehrlich gesagt... Habe ihn mal unter Win ausprobiert, aber noch nicht unter OS-X, u.a. wegen Java3D... Hast Du es mit einem aktuellen FTDI-Treiber ausprobiert oder mit dem schon vorhandenen (bei mir wurde der Chip beim Anstöpseln sofort erkannt, ich habe aber trotzdem nochmal nen neueren Treiber von ftdichip.com installiert)?

Gruß memnoch

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 31 Okt 2006, 15:20

Hi memnoch,

mit dem integrieten Treiber ging gar nix, dann hab ich auch den von ftdichip.com genommen (mit dem das Flashen per Bootloader jetzt auch super klappt).

Gruß Timo
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

eax
Friends of Robby
Friends of Robby
Beiträge: 755
Registriert: 18 Jan 2006, 16:16
Wohnort: Karlsruhe

Beitrag von eax » 06 Nov 2006, 18:55

Nachtrag:
Wenn man (für Bot-2-Sim unter OS X) das Verzeichnis /var/lock anlegt (und dort Schreibrechte hat), geht's. :-)
Steht leider nicht in der Readme, aber dank Nachhilfe im Googlen :roll: hab ich's dann gefunden...
Siehe auch hier.

Gruß Timo
Timo -- Meine Beiträge sind unter CC-BY-SA freigegeben

Antworten