Hallo Leute,
danke für eure Hinweise! Ich hab das Problem gelöst!
War nicht einfach, hat aber Spass gemacht.
Ich beschreib euch den Lösungsweg, vielleicht haben ja noch mehr Leute das Problem.
workwind, Du schreibst, C3 und C13 müssen 10nf haben. Im Bauplan und in der Anleitung sind für C3 aber 100nF angegeben. Ich hab das deshalb erstmal gelassen und statt dessen auf Anregung von mifritscher nochmal alles durchgemessen.
Keine Auffälligkeiten, keine Fehler. Nun dachte ich, schau dir mal die Software an. Also bin ich hergegangen und hab mir WINAVR installiert und konnte nach einigem Rumprobieren die NiboRoboLib304 mit Hilfe des Programms Programmer's Notebook bauen. In Eclipse für C/C++ habe ich das AVR-Plugin installiert und kann jetzt direkt aus Eclipse heraus programmieren, bauen und brennen. Ist angenehmer als über RoboDude.
Zuerst habe ich in der RoboLib in der Datei key.c eine kleine Funktion eingefügt, die mir die "rohen" Tastenwerte in einem String zurückliefert. Ich hab sie key_get_analog() genannt. Diese Werte habe ich auf dem Maroon-Shield ausgegeben. Der Mikrocontroller wandelt laut Datenblatt die Spannung am Analogeingang in eine Zahl zwischen 0 und 1023 um.
Taster 1 liefert den Wert 371.
Taster 2 liefert den Wert 556.
Taster 3 liefert den Wert 643.
Nun wollte ich wissen, was die Software bei diesen Werten zurückliefert. Das passiert in der Methode _key_calc_state() in key.c. Nach einigem Rumprobieren, und mit Ausgaben auf dem Maroon-Shield bin ich hinter die Logik gekommen:
Die Methode liefert bei einer gedrückten Taste einen Wert zwischen 0 und 7:
0 (binär 000) hat keine Auswirkung
1 (binär 001) bedeutet A/a (A beim Drücken und a beim Loslassen)
2 (binär 010) bedeutet B/b
3 (binär 011) bedeutet A+B/a+b
4 (binär 100) bedeutet C/c
5 (binär 101) bedeutet A+C/a+c
6 (binär 110) bedeutet B+C/b+c
7 (binär 111) bedeutet A+B+C/a+b+c
Dass beim Drücken von Taster 1 die LED 1 und 3 gleichzeitig aufleuchten, heisst also, dass 5 statt 1 zurückgeliefert wird. Der Rest war einfach: Rückgabewert 1 und 5 vertauschen, RobolLib bauen, Testprogramm aufspielen und Voila!, die LEDs leuchten wie sie sollen.
Man kann vielleicht auch die Widerstände R44 bis R48 anders dimensionieren, ich hatte aber keine Lust, das auszurechnen. Mache halt lieber Soft- als Hardware
Noch ein Wort zu WINAVR unter Windows:
Es ist zwar schon ein paar Jährchen alt, hat aber den Vorteil, dass es die RoboLib bauen kann, was ich mit dem AVR Studio nicht hingekriegt habe. In den Foren steht der Hinweis, dass man die Datei msys-1.0.dll im Verzeichnis /utils/bin austauschen muss. Das ist richtig, mit der bestehenden Version funktioniert der Build nicht. Allerdings funktionieren die Versionen, die als Download angeboten werden, auch nicht. Nach weiterer Suche fand ich irgendwo den Hinweis, dass man die Version benutzen soll, die mit dem Programm MinGW mitgeliefert wird und damit klappte es!
Herzlichst
Juergen9