Unterstützung für Joysticks unter Mac OS X fertiggestellt, noch immer Unterbrechungen durch Stromspitzen

 Heute wurde die Unterstützung für Joysticks unter Mac OS C fertiggestellt. Alle Funktionen sind wie unter Linux. Genutzt wurde C++-Code, der die HID-Devices ausliest und prüft, welches HID ein Joystick ist.

Das ist übrigens der verwendete Joystick, na ja, eigentlich ein Gamepad:

 

Erste Tests haben ergeben, dass trotz 10A-Netzteil und "aufgebocktem" Roboter noch immer die Spannung beim "Losfahren" kurz zusammenbricht (Spitzenstrom). Daher wird der nächste Schritt die komplette Überarbeitung des "seriellen Protokoll" sein mit der der PC/Mac Daten mit dem Atmel austauscht. Denn durch den genannten winzig-kurzen Zusammenbruch der Spannung verliert der Atmel kurzzeitig die Stromversorgung und "antwortet" dem PC/Mac nicht mehr. Hier ist also noch so etwas wie ein ACK, Heartbeat o.ä. nötig.

Atmel flashen unter Mac OS X über USB

Unter Mac OS X wollte das flashen des Atmel erst nicht klappen. Für alle, die das gleiche Problem – sei es unter Linux, als auch unter Mac OS X – auch schon einmal hatten, hier nun die Lösung. Zum flashen über USB wurde das USB AVR Lab mit der Standardfirmware (ab Werk) von www.ullihome.de genutzt. Beim Nutzen des avrdude zum flashen (hier installiert via Macports), stellte sich heraus dass dieser nicht aktuell genug war, auch meinen Atmel Atmega 2560 zu unterstützen. Der avrdude wurde also wieder per Macports wieder entfernt. Komfortabel wurde nun die sehr aktuelle Version des avrdude (zurzeit V5.10-1) (mit ebenfalls aktuellerem avr-gcc) mittels des CrossPack Paketes auf dem Mac installiert.

Zum Programmieren (flashen) über den USB-Port ist nun folgender Befehl nötig:

avrdude -p m2560 -c usbasp -P usb -e -U flash:w:FILENAME.hex

 

Der manuelle compile und link Vorgang für ein C-Programm für den Atmega sieht übrigens wie folgt aus. Konfortabler geht dieses natürlich per Makefile.

avr-gcc FILENAME.c -c -o FILENAME.o -Os -g -mmcu=atmega2560

avr-gcc FILENAME.o -o FILENAME.elf -mmcu=atmega2560

avr-objcopy -j .text -j .data -O ihex FILENAME.elf FILENAME.hex

 

Sollte folgende Fehlermeldung erscheinen:
 
avrdude: Warning: cannot query manufacturer for device: error sending control message: Operation not permitted
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc
 
muss das Ganze als root ausgeführt werden. also per "su" oder "sudo" bzw. "sudo -s".
 

 

Serielle Probleme gelöst (Mac und Linux)

Lange hat sich nichts getan, da berufliche Dinge vorgehen (und damit auch Freizeit ohne Arbeit am Mac nötig waren).

In der Zwischenzeit wurden endlich alle(?) seriellen Probleme gelöst: Der neue Laserscanner S300 funktioniert nun am Mac (mit einem Standard-USB-Wandler) und unter Linux (Debian). Letzteres jedoch nur mit dem Original USB-Wandler von Keyspan! Ein Vorteil bei dem vielen Debuggen: Der Sourcecode für das öffnen, lesen und schreiben am Mac und unter Linux sind nun endlich wieder identisch! Keine unschönen #ifdefs mit Ausnahmen oder ähnlichem (openAtmelPort). Das Ganze funktioniert ebenfalls alles auch mit dem Atmel-Board.

Serieller Port für Atmel-Board nun Mac OS X-Ready

Geschafft! Nach vielen Versuchen konnte der Code zum Ansprechen des seriellen Ports für Mac OS X (10.6, Snow Leopard) so angepasst werden, dass er dort läuft. Zuvor "hing" das Programm immer beim write() Befehl. Interessanterweise trat das gleiche auch dem Original-Code "Device File Access Guide  for Serial Devices" aus dem Mac Dev Center von Apple auf. Benötigt wird dieser Teil im Programm um vom Mac oder PC Daten über die seriellen Schnittstelle zum Roboter (Atmel-Board) zu schreiben und von ihm zu lesen.

Das aus MacPorts installierte Programm minicom brachte dann die Lösung: Mit diesem konnte über zwei USB-to-Serial-Wandlern (PL2303-Chip) und einem Cross-Cable jeweils Daten gesendet und empfangen werden. Dank Open Source, konnte nun verglichen werden, warum dieses Programm einwandfrei funktioniert, der Apple Code aber nicht.

Ursache war die Kontroll-Option "CLOCAL", die für den seriellen Port gesetzt werden musste! :-) Geholfen hat auch Beschreibung auf dieser Seite. Denn es wurde nicht der Original-Treiber des Hersteller Prolific zum Testen (mit minicom) verwendet, sondern der hier beschriebene Open Source-Treiber!

Nach ein "paar" Änderungen im Code läuft der Bot nun auch unter Mac OS X:

 Als nächster Schritt wird nun der Code für den altern Laserscanner angepasst, da er ein ähnliches Verhalten aufweist.

Support für SICK Laser PLS101-312 und Atmelboard wiederhergestellt

Nach vielen Tests mit dem seriellen Port konnte nun der Support für beide seriellen Zugriffe wiederhergestellt werden. Ursache war ein Bit namens CLOCAL, welches beim Öffnen unter Mac OS gesetzt werden muss! Leider ist dieses auch mit keinem Wort auf Apples Mac Dev Center Seiten erwähnt!

 

Linux verhielt sich hier offenbar anders. Wie man sieht, alles wieder "heil":