PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nunchuck über i2c Ausleseprobleme (wohl Nunchukseitig)



ustech
04.10.2008, 13:38
Hallo,

ich bin am versuchen, einen Nindento Wii Nunchuck Controller an einem ATmega32 zu betreiben, leider scheint es nicht ganz richtig zu laufen...

Ich bekomme die Daten wie auf http://www.wiili.org/index.php/Wiimote/Extension_Controllers/Nunchuk ab 04a40040 (decrypted)


Wii-Nunchuck Test app...
let's go!!!
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
1 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
2 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
3 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
4 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
5 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
6 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
7 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
8 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
9 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
10 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
11 aa 0 0 0 0 0 0 0 0 0 0 0 a4 20 0 0
12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
13 0 0 0 0 ff ff ff ff ff ff ff ff ff ff 0 0
14 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
15 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ff ff
16 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
17 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
18 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
19 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
20 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
21 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
22 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
23 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
24 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
25 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
26 ff ff ff ff ff ff ff ff ff ff ff ff ff ff aa 0
27 0 0 0 0 0 0 0 0 0 0 a4 20 0 0 0 0
28 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
29 0 0 ff ff ff ff ff ff ff ff ff ff 0 0 0 0
30 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31 0 0 0 0 0 0 0 0 0 0 0 0 ff ff ff ff
32 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
33 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
34 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
35 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
36 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
37 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
38 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
39 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
40 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
41 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
42 ff ff ff ff ff ff ff ff ff ff ff ff aa 0 0 0
43 0 0 0 0 0 0 0 0 a4 20 0 0 0 0 0 0
44 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
45 ff ff ff ff ff ff ff ff ff ff ff 0 0 0 0 0
46 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
47 0 0 0 0 0 0 0 0 0 0 0 ff ff ff ff ff
48 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
49 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
50 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
51 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
52 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
53 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
54 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
55 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
56 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
57 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
58 ff ff ff ff ff ff ff ff ff ff ff aa 0 0 0 0
59 0 0 0 0 0 0 0 a4 20 0 0 0 0 0 0 0



Das "aa 0 0 0 0 0 0 0 0 0 0 0 a4 20 0 0" scheint wohl eine TypeID zu sein oder so, also scheint die reine TWI-Implementation zu funktionieren.

Ich glaube eher, dass ich irgendwas beim Wiimote Erweiterungsslot-Protokoll nicht verstanden habe:
so wie ich das verstanden hab, muss folgendes geschen

1. sende an 0x52 die 2 bytes 0x40 und 0x00
loop{
2. sende an 0x52 ein byte 0x00
3. lese 6 bytes von 0x52
}


leider bekomme ich so immer nur 0xff zurück, und nun meine theorie: ich starte ab 04a40040 (0x40, 0x00) und bekomme dann immer 6 bytes, die natürlich 0xff sind...

Hat jemand einen Tipp für mich?

Dieser Thread https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=42153&postdays=0&postorder=asc&highlight=nunchuck&start=22 konnte mir leider auch nicht helfen

Grüße Uli

PS: Die oben genannten Ausgaben bekomme ich nur, wenn ich auf das 0x00 senden vorm lesen der 6 bytes verzichte...

linux_80
05.10.2008, 11:08
Hallo,

hast Du auch den Pegelwandler von 5-auf 3,3V dazwischen?
Als ich den nicht drin hatte, bekam ich auch alle möglichen Werte zurück, erst mit der Pegelanpassung klappte es.

ustech
05.10.2008, 12:46
Hallo,
ich betreibe den avr bereits mit 3v3, also kann es daran nicht liegen...
Ich hab's sogar mal halbreproduzierbar geschafft, die werte auszulesen, aber es ändert sich lediglich bei den Tasten was an den Werten!
Grüße Uli
Ps:auf welchem avr hast du das damals implementiert?

radbruch
05.10.2008, 13:53
Hallo

Da es mit meinem RP6 (8MHz ATMega32) auch mit 5V recht gut funktioniert hatte scheint es nicht am Prozessor oder der Spannung zu liegen. Die TWI-Schreib/Leseadresse war bei meinen Versuchen unterschiedlich und 8bitig:

'Const Nunchuck_write = &H52 ' Slaveadresse
'Const Nunchuck_read = &H53
Const Nunchuck_write = &HA4 ' Slaveadresse
Const Nunchuck_read = &HA5

Mit 0xA4/0xA5 hat's bei mir letztlich funktioniert, dass hängt aber wohl von der verwendeten TWI-Lib ab?

I2CTWI_transmitByte(0xa4, 0); // Datenlesemodus starten
I2CTWI_readBytes(0xa5, &nunchuk_data[0], 6); // sechs Bytes lesen
Gruß

mic

ustech
05.10.2008, 16:15
Hallo,
danke für eure Antworten, ich habe das Problem gefunden und beseitigt:
ich hab bemerkt, dass ich nur müll (ff) bekomme, wenn ich zu schnell bin nach dem 0x00 senden.. also hab ich ein bisschen mit delay rumgespielt...
effektiv mache ich jetzt folgendes:


1. sende an 0x52 die 2 bytes 0x40 und 0x00
loop{
. 2. sende an 0x52 ein byte 0x00
. 3. warte 200 µs (evtl auch weniger möglich, mit 100 gings netmehr)
. 4. lese 6 bytes von 0x52
. 5. auswerten und in variablen schreiben
}


Grüße Uli

PS: das mit 0x52 vs 0x53 ist meiner Meinung nach einfach nur die Modus-Angabe (lesen oder schreiben), also ist 0x52 die ID, beim schreiben muss das letzte Bit auf 0 sein, zu lesen auf 1

radbruch
05.10.2008, 16:58
Prima, hast du schon eine Anwendung in Planung?

btw:

Das Initialisieren funktioniert jetzt, wichtig scheint zudem eine kurze Pause zwischen dem Senden der "0" und der Abfrage der Bytes zu sein.
(aus https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=389391#389391 :)

ustech
05.10.2008, 23:56
Hi Radbruch,

schöner subtiler Hinweis von dir ;) Ich hab das irgendwie überall überlesen... weiß auch net, wie mir das passiern konnte... nuja.. jetzt seh ich das quasi überall stehn :>

Meine Anwendung ist erstmal recht spielerisch: ich werd es wohl mit einem BTM-222 irgenwie verheiraten.. bin nur noch am zweifeln, ob ich meinen Plan, den Nunchuck ganz zu lassen übern haufen werfen soll und versuchen soll, in das Gehäuse selber ne platine mit nem atmega48, dem btm und ner lion-zelle zu quetschen... aber ich glaub, das würde wohl zu knapp werden...

Es könnte also z.b. für erste Tests mit dem Acclererometer mal meine PSX-Fernbedienung ersetztn oder so...

Grüße Uli