-
Guten Morgen Richard,
schau mal hier, wie ich das gemacht habe:
https://www.roboternetz.de/phpBB2/ze...390&highlight=
Ich benutze mit Absicht die serielle Schnittstelle, damit die Wii bzw. der Nunchuk nicht fest mit dem Controller verbunden ist und somit eine gewisse Freiheit gegeben ist. Mittlerweile fliege ich mein Modell mit Nunchuk.
Gruß Peter
-
Frage zum Nunchup I2C Interface:
Habe einen RN-Mini (mega168) und den Nunchuk zusammengeschaltet. Der Nunchuk bekommt genau 3,66 V (2 Dioden in Plus geschaltet - zur Spannungsabsenkung + Elko).
Als Konverter der I2C Spannungen habe ich obigen Schaltplan (mit den 2 FETs BSN10A nachgebaut). Die Software ist der letzte Stand aus diesem Thread.
Auf der RN-Mini Seite sind ja schon 2x10K Pullups vorhanden. Auf der Nunchuck seite sind wahrscheinlich im Nunchuk auch schon Pullups.
D.h. Die Philips schaltung besteht nur aus den beiden FETs.
Alles läuft wunderbar, aber nach einiger Zeit (1-3 minuten) läuft gar nichts mehr - keine Auslesung der Werte mehr.
Hatte vorher schon mal die Pullups auf den Nunchuk Seite eingelötet (2x 4,7k) aber damit lief nichts - alle Werte nur konstant 255.
Nebenbei ist sonst nichts am I2C Bus. Das kommt später noch...
Jetzt weiß ich auch nicht mehr weiter - löte ich die Nunchuck Pullups ein, dann geht nichts. lasse ich sie weg, dann geht nach einiger Zeit nichts.
Woran kann das liegen?
Anm: habe schon mal einen 4700müF an die 3,66 V gehängt - war auch nicht besser.
habe verschiedene Delay eingebaut - auch nicht besser.
-
Was ich noch fragen(/sagen) wollte:
Kann man nicht einfach die Pullups vom Nunchuk auslöten, den Nunchuck mit 3,3V versorgen und als Pegel für Clk und DAT auf 5V lassen? Es ist doch alles Opendrain und müsste deswegen etwas mehr Spannung vertragen.
-
Ich verstehe es auch nicht ganz. Eigendlich ist alles opencollector und sollte nur auf 0 gezogen werden um keine 1 zu sein. das sollte auch bei den unterschiedlichen Spannungen funktionieren.
Mittlerweile habe ich noch die Spannung auf 3,4 Volt stabilisiert - also nicht einfach 2 Dioden - sondern geregelt. Klappt aber auch nicht.
Komischerweise habe ich die gleiche Schaltung ein zweites mal (mit den FETs und den stabilen 3,4V) auch an meinem RN-control MEGA32 gebaut - und dort laufen die Daten vom Nunchuk ohne Ende.
Den Unterschied verstehe ich nicht. Scheint Hardware zu sein. Beim Mega168 ist nach spätestens 1 min Schluss mit den Daten vom Nunchuk und alles steht still bis RESET.
Cooler wäre aber der Mega168 - ist halt kleiner als der 32.
-
@radbruch das weiße kabel ist an analog pin 5 oder? und das grüne an 4
-
Hallo
Ähm, da muss ich jetzt echt passen. Das war vor über einem Jahr und ich hatte den Nunchuk ungeöffnet mit Stecker verwendet:
Bild hier
(Bild aus: https://www.roboternetz.de/phpBB2/vi...=389157#389157)
Ich vermute, du meinst die TWI/I2C-Pins auf dem RP6-Board. Dort ist Pin 5 der Interrupteingang der beim Nunchuk-Anschluss nicht verwendet wird. Benötigt werden, neben VDD und GND, noch SDA (Pin3) und SCL(Pin4). Die Belegung des Nunchukkabels findet man z.B. hier:
http://todbot.com/blog/2007/10/25/bo...nunchuck-servo
Allerdings muss man hier etwas um die Ecke denken:
Das Arduino-Board läuft mit einem Mega8 (glaube ich) und bei diesem sind die SDA/SCL-Pins die Eingänge PC4/5 oder eben ADC4 und 5. Es würde sich dann diese Anschlussbelegung ergeben:
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)
Viel Erfolg
mic
-
deine angaben stimmen ich hatte mich irgendwie verguckt und weiß und gelb verwechselt da ging natürlich nichts und zum glück auch nichts kaput es geht jetzt jedenfals auch bei mir. ich hab den arduino mit nem atmega 328 und usb
-
Hallo,
ich habe mir gerade einen nunchuk demontiert und an meinem bot angeschlossen. ich möchte den joystick und die buttons für die spätere menüführung nutzen und den beschleunigungssensor um die lage bestimmen zu können. das ganze erstmal alles experimentel habe noch nie mit beschleunigungssensoren gearbeitet.
nun habe ich das program ein wenig meinen bedürfnissen angepasst (lcd anzeige) der kern ist der selbe. die werte vom nunchuk lasse ich mir dezimal anzeigen.
beim joystick passt alle von einem anschlag zum anderen reichen die werte von 5 - 255 - alles okay
bei den beschleunigungssensor allerdingt bekomme ich schon bei einem winkel von 45° den vollausschlag - wert: 255 - und das in alle drei achsen. wird da evtl ein word oder 10bit ausgegeben?
zudem wenn ich C und Z gleichzeitig drücke stürzt der bus ab.
habe den nunchuck über 5volt mit spannungsteile an 3,4volt angeschlossen und an den I2C leitungen habe ich nicht gemacht. muss ich umbedingt so ein levelshifter einbauen?
über den spannungteiler habe ich es auch nur gemacht da ich keinen festspannungsregler für 3,3volt da habe das soll aber sowieso noch auf meinen bot mit rauf.
freundlicher gruß, Bammel
-
Ich versuche jetzt schon seit gestern Mittag das Nunchuck auszulesen, aber ich bekomme immer nur die 255 ausgegeben. Habe jetzt schon viel ausprobiert, aber immer das gleiche ergebnis. Was ich halt nicht verstehe, ist das es bei anderen mit diesem beispielscode ja zu funktionieren scheint.
Hoffe mir kann hier jemand weiter helfen
Code:
$regfile = "m168def.dat"
$crystal = 20000000
$baud = 9600
$lib "i2c_twi.lbx" ' Für Hardware TWI
Config Scl = Portc.5 ' Ports fuer IIC-Bus
Config Sda = Portc.4
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 = &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
Tmp = Buffer(b) Xor &H17
Tmp = Tmp + &H17
Print B ; ": " ; Tmp ; " ";
Buffer(b) = 0 ' löschen
Next B
Gosub Send_zero
Print
Waitms 500
Loop
End
Nunchuck_init:
I2cstart
I2cwbyte Nunchuck_write
I2cwbyte &H40 ' sends memory address
I2cwbyte &H00 ' sends sent a zero.
I2cstop
Return
Send_zero:
I2cstart
I2cwbyte Nunchuck_write
I2cwbyte &H00 ' sends one byte
I2cstop
Return
-
Hallo
Deins:
Code:
$lib "i2c_twi.lbx" ' Für Hardware TWI
Config Scl = Portc.5 ' Ports fuer IIC-Bus
Config Sda = Portc.4
Config Twi = 400000 ' Init TWBR und TWSR
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
Twcr = &B00000100 ' nur TWEN setzen
Meins:
Code:
$lib "i2c_twi.lbx" ' Für Hardware TWI
Config Scl = Portc.0 ' Ports fuer IIC-Bus
Config Sda = Portc.1
Config Twi = 400000 ' Init TWBR und TWSR
I2cinit
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
Twcr = &B00000100 ' nur TWEN setzen
Wo ist dein I2cinit?
Die Pause zwischen dem Initialisieren und dem Auslesen der I2C-Daten ist wichtig:
Code:
Gosub Nunchuck_init
Waitms 1000
Gosub Nunchuk_read
Das war die letzte und funktionierende Version:
https://www.roboternetz.de/phpBB2/vi...=389966#389966
Gruß
mic