PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nunchuck auslesen



Snaper
29.04.2010, 13:13
Hallo,

wir versuchen grade einen Nunchuck der Wii an einem ATmega32 auszulesen.
Leider bekommen wir immer nur 16 bei allen Bytes zurück.

Wir haben folgenden Code verwendet um es zu testen:

'$regfile = "M8def.dat" ' the used chip
'$crystal = 16000000 ' frequency used
'$baud = 9600

$regfile = "M32def.dat" ' RP6 mit Mega32
$crystal = 16000000 ' taktet mit 8MHz
$baud = 38400 ' Loader-Baud

$lib "i2c_twi.lbx" ' Für Hardware TWI

'Config Scl = Portc.5 ' Ports fuer IIC-Bus
'Config Sda = Portc.4

Config Scl = Portc.0 ' Ports fuer IIC-Bus
Config Sda = Portc.1

Config Twi = 400000 ' Init TWBR und TWSR

' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
Twcr = &B00000100 ' nur TWEN setzen

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

Dim Buffer(6) As Byte
Dim B As Byte
Dim Tmp As Byte

' Startausgabe
Print
Print "I2C-TWI Demo mit Wii Nunchuck"
Print

Gosub Nunchuck_init
Gosub Send_zero

Do
Buffer(1) = 0

I2creceive Nunchuck_read , Buffer(1) , 0 , 6
'Print Err

For B = 1 To 6

' Hier soll noch etwas rumcodiert werden:
Tmp = Buffer(b) Eor &H17
Tmp = Tmp + &H17

Print B ; ": " ; Hex(tmp ) ; " ";

Buffer(b) = 0 ' löschen

Next B

Gosub Send_zero

'Print "------"
Print

Waitms 500
Loop

End

Nunchuck_init:
I2cstart
I2cwbyte Nunchuck_write
'Print "Fehler beim Init: " ; Err
I2cwbyte &H40 ' sends memory address
I2cwbyte &H00 ' sends sent a zero.
I2cstop

Return

Send_zero:

I2cstart
I2cwbyte Nunchuck_write
'Print "Fehler beim null senden: " ; Err
I2cwbyte &H00 ' sends one byte
I2cstop

Return

bnitram
29.04.2010, 13:46
Wofür brauchst du denn das Nunchuk?
Also wenn du nur den Joystick brauchst ist hier ein Link:
http://www.conrad.de/ce/de/FastSearch.html?search=joistick&x=0&y=0&=Schnellsuche&initial=true
Vieleicht kannst du damit ja etwas anfangen.

Jaecko
29.04.2010, 13:52
Geh mal mit der TWI-Frequenz von 400 runter auf 100kHz.
Die 400 haben bei mir auch nicht funktioniert, mit 100 läufts perfekt.

Snaper
29.04.2010, 14:20
Geh mal mit der TWI-Frequenz von 400 runter auf 100kHz.
Die 400 haben bei mir auch nicht funktioniert, mit 100 läufts perfekt.

Hmm ne das hat es leider nicht gebracht. Wenn ich mal diese Fehlerausgabe aktiviere dann kommt: "Fehler bei Init: 0" "Fehler beim null senden: 1" .

Die 1 lässt mich aufhorchen aber woran es da dann genau liegen soll kann ich mir nicht erklären aufgrund von mangelender TWI erfahrung

Clock und Data waren vertauscht aber wir empfangen weiterhin nur 16 und das bei allen 6 Bytes. Fehler bei Init und beim Null senden angebelich "0"

Snaper
30.04.2010, 16:28
Könnte es sein, dass die Kabelfarben nicht stimmen aber wenn ja müsste durch ein einfaches vertauschen doch die Sach erledigt sein oder nicht?

Wir haben schon viel versucht aber wissen grade nicht wirklich weiter.

Snaper
30.04.2010, 16:38
Könnte es sein, dass die Kabelfarben nicht stimmen aber wenn ja müsste durch ein einfaches vertauschen doch die Sach erledigt sein oder nicht?

Wir haben schon viel versucht aber wissen grade nicht wirklich weiter.

radbruch
30.04.2010, 16:57
Hallo

Hier das Pinout meiner Nunchuck-Versuche:

rot - VDD (RP6 Pin1, XBUS 3/5)
weis - GND (RP6 Pin2, XBUS 1/2/14)
grün - SDA (RP6 Pin3, XBUS 12)
gelb - SCL (RP6 Pin4, XBUS 10)
(Angaben natürlich ohne Gewähr)

(Aus: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=464955#464955)

Aber das hast du vermutlich auch schon gefunden.

Gruß

mic

Snaper
30.04.2010, 17:56
Hallo

Hier das Pinout meiner Nunchuck-Versuche:

rot - VDD (RP6 Pin1, XBUS 3/5)
weis - GND (RP6 Pin2, XBUS 1/2/14)
grün - SDA (RP6 Pin3, XBUS 12)
gelb - SCL (RP6 Pin4, XBUS 10)
(Angaben natürlich ohne Gewähr)

(Aus: https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=464955#464955)

Aber das hast du vermutlich auch schon gefunden.

Gruß

mic

Jap, in der Tat habe ich den Nunchuck so beschaltet. Hmm so langsam mach ich mir über die Funktionsfähigkeit meines Gerätes gedanken. Leider habe ich auch momentan keinen zweiten da und den an einer Wii anschließen ist auch erschwert worden :( Hab halt gedacht knipse mal das Kabel ab. Denn wenn ihr alle sagt, dass es soweit richtig sein muss und laufen muss dann kommt ein Defekt schon in Frage denke ich.

Kabel
24.02.2012, 02:25
Jap, in der Tat habe ich den Nunchuck so beschaltet. Hmm so langsam mach ich mir über die Funktionsfähigkeit meines Gerätes gedanken. Leider habe ich auch momentan keinen zweiten da und den an einer Wii anschließen ist auch erschwert worden :( Hab halt gedacht knipse mal das Kabel ab. Denn wenn ihr alle sagt, dass es soweit richtig sein muss und laufen muss dann kommt ein Defekt schon in Frage denke ich.

Hallo,
ich stehe vor dem gleichen Problem. Hast du mitlerweile eine Lösung?
MfG Tom

oderlachs
24.02.2012, 19:29
Von vorn auf den stecker gesehen ist links oben CLK rechts oben GND, links unten VCC und rechts GND (Arduino Buch O'REILLYS Verlag) Muss mal schauen habe noch irgendwo eine genauere Beschreibung...HIER (http://www.windmeadow.com/node/42)

halfdone
24.02.2012, 20:23
Die Anschlüsse vom Nunchuk sind sehr empfindlich. Vor allem bei nicht geübter Hand drückt man die Anschlüsse sehr schnell ein. Wenn das schon der Fall ist, hilft oft noch mal neu einzustecken.
Wer oft damit rumexperemtiert, dem kann ich empfehlen sich so ein Breakout für den Nunchuk zu holen. z.B. http://www.watterott.com/de/Leiterplatten/WiiChuck-Adapter

Ansonsten ist die Seite von oderlachs schon gut beschrieben.

Ich hab letztens den Nunchuk per Arduino angesteuert, wer da Interesse hat kann sich ja mal den Source vom dpunkt Verlag runterladen:
http://dpunkt.de/leseproben/3692/code_(Vers_1_0).zip

Dort unter MotionSensor/ befindet sich im Ordner NunChuckDemo/ ein Funktionstest, den man dann übers Terminal ansteuern kann.
Ein etwas spektakuläreren Test gibt es dann im Ordner Cube. Ist ein 3D Würfel der in Processing programmiert wurde.

Lg

Kabel
24.02.2012, 20:49
Danke für eure Antworten, bei mir liefert der Nunchuk auch ständig den Wert 16 zurück, so wie vom Threadstarter. Programmiere in Bascom. Hat jemand diesbezüglich noch eine Idee?
MfG Tom

RoboTido
28.02.2012, 09:45
Für die Kontaktierung des Nunchuk hat sich auch dieser Adapter bewährt: http://qc-copter.de/shop/index.php?a=15 (Siehe Anhang)

Damit wird der Nunchuk mechanisch verriegelt, man hat einen bidirektionalen I2C-Pegelwandler und einen 3,3V Spannungsregler. Einige Leute schließen den Nunchuk ja leider fälschlicherweise an 5V an und wundern sich über die begrenzte Lebensdauer.... ;-)

Wegen der Programmierung:

- Ich würde den Nunchuk erst einmal mit nur 100kHz betreiben, statt mit 400kHz
- Dann würde ich nach dem Initialisieren des I2C ein wenig (10ms) warten und an Adresse 0x52 die Daten 0x40 und 0x00 senden, um den Nunchuk zu initialisieren.
- Danach wieder 10ms warten
- Dann von Adresse 0x52 sechs Datenbytes lesen. Darin stecken dann sämtliche Infos, die der Nunchuk liefern kann.
- Sollte der Nunchuk nur 0xFFs ausspucken, ist das als Fehler zu werten und der Nunchuk muss neu initialisiert werden!

Gruß
Tido