C++Guns – RoboBlog blogging the bot

19.02.2009

itoa uitoa für AVRs

Filed under: Allgemein — Tags: — Thomas @ 23:02

Wer kennt das nicht, man möchte eine Zahl über USART ausgeben, scheut sich aber vor solche dicken Funktionen wie fprintf. Man höhrt dann öfters von einer itoa Funktion, die es aber nicht per default gibt. Hier ist meine uitoa Funktion, welche die Zahl gleich raussendet. Inspiriert vom midgard Projekt von buha.info . Die USARTtransmis* Funktionen sind von http://jump.to/fleury .

void USARTuitoa(uint16_t n)
{
// max. 5 stellige zahlen + die abschliessende 0 im string
unsigned char s[6];
// arrays fangen bei 0 an zu zählen. pos zeigt auf das letzte feld
register uint8_t pos = 5;

// den string mit einer 0 terminieren
s[pos] = (char) 0;

do {
uint8_t rest = n % 10;
n = (n - rest) / 10;

s[- -pos] = rest + '0';
} while(n && pos);

USARTtransmitString((unsigned char *) (s + pos));
}

18.02.2009

PIV Tag 13

Filed under: Allgemein — Thomas @ 19:02

Gibt nichts aussergewöhnliches zu berichten. Wir suchen immernoch nach Dinge, die im Wasser schweben.

17.02.2009

Irix root password reset

Filed under: Allgemein — Tags: , , — Thomas @ 14:02

Seit einer Woche beschäftige ich mich ja mit diesen O2 Rechner. Auf einem hatte ich Debian installiert. Das lief mehr oder weniger Reibungsfrei. Auf dem anderen belasse ich das Irix. Nun hat sich das Problem ergeben, dass ich das root Passwort nicht kenne. Man hat mir geraten einfach das Hash zu löschen, dann sei auch kein PW gesetzt. Glücklicherweise habe ich ja zwei O2 Rechner. So konnte ich die eine Festplatte gerade in den anderen schieben.

Das mounten funktionierte erst nicht. Es gab eine "bad superblock" Meldung. Laut /var/log/messages hatte er wohl Probleme mit einer kaputten Log auf der Platte. Also schnell xfsprogs und xfsdump installiert und einen fsck gemacht. Dann konnte man sie auch mounten :)

Das Passwort steht als Hash in der /etc/shadow Datei. Einfach den Kryptischen Kram zwischen den zwei ":" rauslöschen. Ausserdem sollte man in der Datei /etc/default/login kontrollieren ob auch alles so eingestellt ist wie hier gezeigt:

# Must all accounts have passwords? If YES, and user has no password, they
# will be prompted for one at login time.
PASSREQ=NO
#

#
# Like PASSREQ, but locks out user if they have no password.
MANDPASS=NO

Danach runterfahren, Platte wieder umstecken und booten. Fertig :)

14.02.2009

It is 1234567890

Filed under: Allgemein — Thomas @ 12:02

Viel gibt es dazu nicht zu sagen. Ich hab mal ein kleines Video gemacht ;)

1234567890.avi

12.02.2009

PIV Tag 12

Filed under: particle tracking system — Thomas @ 14:02

gpiv war wieder das heutige Thema. gpiv_combing unterstütze nicht das ppm Format. coriander hingegen speichert bevorzugt im ppm Format ab. Das oder raw. Aber bei raw ist mir gpiv bisher immer abgestürzt. Da liegt die Idee natürlich nahe in einem kleinen Scipt erstmal alle Bilder in ein von gpiv_combing unterstützes Format zu bringen. Ich hab mich da für pgm entschieden. Das kostet natürlich Zeit. Zeit die ich nicht aufbringen will. Also hab ich mir den Code angeschaut und ppm Unterstützung eingebau. War auch ganz einfach. Dabei habe ich festgestellt, dass das Programm die Bilder intern erstmal alle ins png Format umwandelt.

Beim Wasserradprojekt hab ich es geschafft den Messverstärker über die Serielleschnittstelle zu steuern. Zwei Problem gab es dabei. Erstens musste man erstmal feststellen, dass die Masseleitung des Kabels am Gerät ab war und zweitens wie man die Partität auf Gerade stellt. Bin ich irgendwie zu doof dafür :)

10.02.2009

SGI O2 und Debian

Filed under: Allgemein — Tags: , , — Thomas @ 18:02

Heute viel mir eine SGI O2 [1] in die Hände. Also das Teil ist von 1997 und hat wenn ich mich nicht verlesen habe ganz 200MHz. Die Installation von Debian ist eigentlich garnicht so schwer, wenn man ein paar Sachen weiss. Zum einen kann diese Bios da keine Ports größer als 32767 öffnen. Das ist schlecht wenn man versucht das Image per tftp hochzuladen und einfach nichts passiert. Ich habe diese Information auch nur zufällig gefunden und ich erlaube mir mal hier die Lösung zu zitieren:

The PROM of the Indy don't handle source ports over 32767. So we have to:

* echo "2048 32767" > /proc/sys/net/ipv4/ip_local_port_range

The same PROM also has problem with MTU discovery. So go on and:

* echo "1" > /proc/sys/net/ipv4/ip_no_pmtu_disc

Die Quelle ist mir leider verloren gegangen. Jedenfalls habe ich mich dann weiter an die Anleitung [2] gehalten und es hat fast alles funktioniert. Dort wird am Anfang auf ein Image verwiesen, welches ich auch installiert habe. Aber ich denke, jedes andere MIPS fähige Image sollte auch gehen. Die Installation selbst lief wie gesagt problemlos. Nur vor dem ersten booten gibt es wieder eine Kleinigkeit zu beachten. Es heisst

setenv OSLoadFilename Linux

Und nicht

setenv OSLoadFilename linux

Man beachte das große L bei Linux. Beim ersten booten gab es auch gleich eine Kernel Panic. Er hatte wohl irgendwelche Schmerzen wegen der Festplatte. Aber ich konnte nicht alle Meldungen mitlesen, deswegen hab ich sie mir über die serielle Schnittstelle ausgegeben. Wie in der Anleitung angegeben, passiert dies durch setenv console d1. Aber Vorsicht, der Bildschirm bleibt dann dunkel und alle Informationen bis zum login screen gehen ueber die serielle raus. Übrigends habe ich kein spezielles SGI RS232 Kabel benutzt. Ein "normales" voll durchkontaktieres Kabel geht also auch. Die Kernel Panic trat auch nicht wieder auf. Wahr wohl der Schock das Erstemal Linux zu booten ;)

Übrigends, ihr braucht eine PS2 Maus um auf diesen Maintenance Knopf beim starten zu drücken. USB Maus mit PS2 Adapter gehen nicht.

Nach der Installation waren 500MB Festplattenplatz belegt und noch 1.5GB frei. Auch der RAM mit 256MB war noch nicht komplett belegt. Mir gefällt das Teil irgendwie. Mal sehen was sich damit noch anfängen lässt. Ein paar ext. SCSI Platten wären nett :)

[1] http://images.google.de/images?hl=de&q=sgi+o2&btnG=Bilder-Suche&gbv=1
[2] http://js1.kicks-ass.org/~js1/debianO2.html

07.02.2009

*buntu

Filed under: Allgemein — Thomas @ 13:02

Das hab ich heute auf einer Xbuntu Kiste gefunden

5381 ? S 0:00 /bin/dd bs 1 if /proc/kmsg of /var/run/klogd/kmsg

Zitiat: "das ist eine armselige implementierung der kernel->syslog brücke ;)"
Meine Rede ;)

04.02.2009

PIV Tag 11

Filed under: particle tracking system — Thomas @ 22:02

Heute lästern wir mal etwas über Matrox. Um genauer zu sein über Mil-Lite. Ein Softwarepaket für industrielle Bildverarbeitung, welche auch unter Linux zu nutzen ist. Das steht jedenfalls überall so, funktioniert aber nicht wirklich. Erst muss in irgendeiner Headerdatei festgelegt werden, dass man wirklich Linux nutzt. Dann noch ein paar Include Datei korrigieren und alle Dateien die einen Großbuchstaben enthalten umbenennen, da Windows den Unterschied zwischen "A" und "a" nicht kennt. Die Softwareentwickler übrigends auch nicht, keiner von ihnen! Nach diesen Änderungen compiliert das mitgelieferte Testprogramm auch, nur linken mag es nicht. Ich weiss auch nicht, was ich den Compiler an Linkeroptionen mitgeben soll. Es gibt zwar eine mil.lib und mil.dll aber die mit angeben löst das Problem auch nicht. Ich hätte das ganze ja liebend gern unter Windows ausprobiert, aber er findet keinen Kameratreiber wenn ich das Beispiel starte. Einfach so von heute auf morgen geht es nicht mehr. Wie immer....

Aber halb so schlimm. Ich hab von meinem Prof. gehört, dass IDL auch ganz toll Bilder bearbeiten kann. Nur unterlieg das mal wieder einer Lizenz, aber dafür gibts ja die GDL. Ein IDL Klon unter der GPL ohne GUI. Und LPG kostet übrigens bei Jet jetzt .609 stat .599

Äh was? Jetzt nochmal zum mitschreiben.

IDL (Interactive Data Language) [1] steht unter einer Lizenz die Geld kostet. GDL (GNU Data Language) [2] ist ein Klon der nichts kostet. Nachteil: er hat keine GUI (Graphical User Interface) [3]. Und LPG (Liquified/Liquefied Petroleum/Propane Gas) [4] ist toll.

GDL benutzt MPI (Message Passing Interface) [5]. Das bedeutet, es war nicht einfach zu compilieren. Und als es dann lief, konnte es kein Fenster öffnen und stürze ab. Dankeschön.

Jetzt kommen wir zu einem erfreulichen Thema. Wie ich bestimmt im letzten Post erwähnt habe geht es darum, den Drehgeber eines Wasserrades auszulesen. Also habe ich mich die Woche hingesetzt und ein kleines Programm in einen Mikrocontroller gehackt, der die Impulse aufsummiert und alle Sekunde ausgibt. Das hat sogar recht schnell funktioniert. Der Vorteil liegt auf der Hand. Die Entscheidung, wann eine Sekunde rum ist übernimmt nun der mC, welcher das viel genauer kann als das Windows Programm. Welches ja schon ins stocken komt, wenn man es nur anklickt und verschieb. Noch hinzu muss diese Information nicht durchs USB Interface geschickt werden, welches alles andere als Echtzeit fähig ist.

Es langt aber nicht nur die Drehzahl zu messen, sondern noch irgendwie das Gewicht des Wassers, dass gegen die Schaufelblätter drückt. Wie genau das aufgebaut ist habe ich immer noch nicht verstanden. Jedenfalls gibt es einen Messverstärker mit RS232 Ausgang. Den muss ich irgendwie möglichst syncron zur Drehzahl auslesen und die Daten dann zusammen an den PC schicken. Aber darum kümmer ich mich nach den Klausuren....

[1] http://www.ittvis.com/
[2] http://gnudatalanguage.sourceforge.net/
[3] http://de.wikipedia.org/wiki/Graphical_User_Interface
[4] http://de.wikipedia.org/wiki/Fl%C3%BCssiggas
[5] http://de.wikipedia.org/wiki/Message_Passing_Interface

Powered by WordPress