Hilft alles nix.. :( hab jetzt extra noch nen 100nF Kerko und 220uF Elko an die Spannungsversorgung des Nunchuk gehängt, hat aber nichts gebracht...
wenn ich es so nicht hinbringe, muss ich halt nen "i2C to I2C" Adapter basteln ;)
gruss Bluesmash
Druckbare Version
Hilft alles nix.. :( hab jetzt extra noch nen 100nF Kerko und 220uF Elko an die Spannungsversorgung des Nunchuk gehängt, hat aber nichts gebracht...
wenn ich es so nicht hinbringe, muss ich halt nen "i2C to I2C" Adapter basteln ;)
gruss Bluesmash
Hallo,
hast du mal versucht zusätzliche delays zwischen die i2c Übertragungen einzubauen? Vielleichts hilft das ja.
Habe ich leider auch schon versucht... leider ohne Erfolg... :(
gruss Bluesmash
Hallo,
mir ist noch etwas eingefallen. Du verwendest als I2C Adressen 2,4,6,8. Diese Adressen sind laut Wiki reserviert. Gültige I2C Adressen müssen zwischen 0x10 und 0xEF liegen.
Danke für den Tipp! werde es heute Abend mal ausprobieren, und die Adressen in den gültigen Bereich verschieben. Gestern war ich soweit dass der Betrieb immer so ca. 2-8sec funktionierte, danach hat sich irgendwie der Bus und der Master aufgehängt und machte nix mehr...
gruss Bluesmash
So jetzt läuft es (fast) einwandfrei :)
Ich habe die Adressen auf 100-112 verschoben, dies brachte aber keine Verbesserung. Aber dank deinem Versuch (nochmals ein herzliches dankeschön!) wusste ich dass irgendwas an meine Programm nicht ganz sauber ist. Ich habe es jetzt mal ein bisschen umgestrikt und noch vor jeder I2C übertragung ein delay von 200us gemacht und jetzt läuft es recht gut. der Bus hängt sich nur noch sehr selten auf...
Es macht riesigen Spass den Hexa mit dem Nunchuk zu steuern :)
Ich habe jetzt aber noch ein anderes Problem... ich habe mir noch ein Wireless Nunchuk von nyko gekauft, in der Annahme dass dieses ja eigentlich genau gleich angesteuert werden muss. Das Auslesen der Daten funktionert grundsätzlich, der Wireless Adapter antwortet auch. Aber leider erhalte ich für alle Werte 0. Da der Wireless Adapter den Funkteil für die Übertragung zum Nunchuk nicht einschaltet....
Wenn ich den Adapter an die Wiimote anstöpsle fängt eine Blaue Led am Nunchuk empfänger an zu blinken und sobald das nunchuk erkannt wurde Leuchtet sie konstant blau. Doch wenn ich den Adapter an meinen M32 anschliesse kann ich die Daten auslesen (alle Daten immer 0) aber die Led fängt nicht an zu blinken :( da muss es wohl noch irgend ein Kommando geben welches den Funkteil des Adapaters einschaltet, nur wie finde ich dieses Kommando heraus? Oder kennt Jemand dieses Kommando?
gruss Bluesmash
Hallo,
ich habe mir eine (Original) Nunchuk gekauft und bekomme Sie partout nicht zum laufen.
Zwischenstand:
Spannung: 3,3V
Stromverbrauch (Ruhe): 1,7mA
I2C Pullup: 10kohm (ist egal - siehe unten)
Messungen haben ergeben, dass der CLK-Eingang(!!) der Nunchuk derart niederohmig ist und auf High liegt, dass mein Master-µC (anderes Design als bei Euch) den Pegel nicht runtergezogen bekommt. Um den CLK-Pegel auf LOW zu ziehen müsste ich den Bus mit >1 mA treiben. Mein LOW-Pegel liegt bei 2,5V. Ihr verwendet einen Atmega. Der zieht den Pegel auf LOW problemlos bis 20mA.
An den externen Pullups liegt das nicht. Ich kann sie auch entfernen, da die Nunchuk auf High zieht.
Die Pin-Belegung ist klar. Ich habe auch mal das Board durchgemessen. Der ST Microelectronics LIS3L02AL Beschleunigungssensor hat Spannung und liefert auch Analogwerte. Am TQFP48-µC habe ich kein PIN gefunden, an dem irgendein Clock-Signal messbar war - das hat aber nichts zu sagen, da das Board nur Analog-Sensoren besitzt.
Bevor ich jetzt weiter herumfummel und einen I2C-Treiberstufe für meinen µC bastel, um den Bus mit 8mA zu treiben oder ein Atmega-Board zusammenstecke:
Kann mir jemand dieses ungewöhnliche I2C-Verhalten bestätigen? Ich habe noch nie erlebt, dass ein so kurzer I2C-Bus so niederohmig ausgelegt wurde.
EDIT: siehe unten, das Problem sind die Eingangsschutzwiderstände des µC
Muss man erst die Nunchuk aufwecken (schütteln, Taste etc)?
Wie hoch ist Euer Ruhestrom?
Ich habe keine Wii, so dass ich keinen Funktionstest der Nunchuk machen kann.
Hallo!
Also das Nunchuk hat nach meinen Messungen Pullup-Widerstände im Bereich von ca. 1,8kOhm ich habe sie auch ausgelötet und an meinem Master 10kOhm Pullups verwendet...
Die Pullups sind beim Nunchuk in der Nähe wo die Anschlusskabel angelötet sind.
vielleicht hilft dir das weiter...
gruss Bluesmash
--Edit--
Das Nunchuk muss nicht aufgeweckt werden. einfach Spannung dran und auslesen...
Danke für den Tip.
Ich habe mir mal das Board-Layout angesehen, vor dem ich sitze:
Lego hat bei dem NXT die Eingänge des Atmega48 mit 4,7k geschützt und gibt eine Pullup-Empfehlung von 82k heraus.
Lego NXT Hardware Developer Kit (HDK)
Wenn der Nunchuk Pullups von 1,8k verwendet, kann der NXT den 3,3V-Bus nur noch auf 3,3*4,7/6,5=2,4V herunterziehen. Das entspricht meiner Messung.
Dann passt alles zusammen.
Ich fummel weiter...
Ist zwar schon älter der Thread, aber ich wollte keinen neuen aufmachen.
Ich bin grade beim Bau eines Rasenmäh Roboters, und suche noch nach einer Handsteuerung. Da bin ich auf diesen Thread hier gestoßen.
Der Nunchuck ist echt spitze (spiele ab und zu Wii). Ich würde ihn gern auf meinem Bot einrasten und als Neigungssensor verwenden, aber auch rausnehmem können, zum Steuern im Handbetrieb.
Bei Handbetrieb wäre ja ein wireless Nunchuck nicht schlecht. Hat den schon jemand am laufen. Ich will mir so ein Ding bald bestellen, damit ich meinen Mähbot mal fahren lassen kann.
Bitte schnelle Antwort!
Silas
Ja klar, sende mir bitte einen wireless Nunchuk zur Ansicht.Zitat:
Bitte schnelle Antwort!
Ich vermute, der wireless Nunchuk funktioniert mit Bluetooth
Hallo
Ich seh den Thread auch gerade erst. Das scheint ja wirklich praktisch zu sein. Könnt mir irgendjemand mal sagen, wie groß die Platine von Nunchuck ist?(am besten mit Foto) Ich würd das nämlich gerne anstatt nem ADXL330 - der ja mit Versand und Adapterplatine(smd auf Lochrster löten kann ich nicht :wink: ) bald das selbe kostet - verwenden. Nur zu groß dürfts halt nicht sein. Wär sehr nett, wenn mir da jemand weiterhelfen könnte.
Gruß Justin
Ich hab halt noch keinen, da ich nicht weis, ob der kabellose nun zu betreiben geht. Bluesmash hats ja schon versucht, ohne Erfolg (also fals doch, noch nicht Berichtet).
Kabelgebunden würde ich dann mit einer Ringel-Telefonleitung machen.
Wenn ich von der Außengröße von meinem Schwiegervater seiner Wii ausgehe, müßte die Platine nicht größer als 3x6cm sein.
hallo zusammen
nach den fehlversuchen mit dem kabellosen nunchuck habe ich es nicht mehr weiter verfolgt... und ich habe es auch nicht zum laufen gebracht...
gruss bluesmash
schade.
Ich habe noch was schönes gefunden
http://www.arduino.cc/cgi-bin/yabb2/...num=1215475673
So kann man auch einen Wireless draus machen. Da sieht man auch die Platine im Inneren.
Also wirds bei mir auch nur einer mit Kabel (mit Umbauoption)
Der Wireless Nunchuck hat doch auch nur einen Stecker, der in die WiiMote kommt.
Die Funkstrecke interessiert daher nicht, ist garantiert wieder I2C am Stecker... Ggfs. musst du die I2C Adresse anpassen.
Den normalen Nunchuck habe ich ohne Probleme angesteuert:
http://www.ledstyles.de/fpost131515.html
Vorlage war hier aus dem Forum: https://www.roboternetz.de/phpBB2/ze...42153&start=22
@silas: Danke
Ich denke, das wird von der größe her gerade gehen
Hallo Bluesmash,
Ich habe vor zwei Wochen mal hier beschrieben, wie man das mit dem Wireless Nunchuck (und anderen Wii Controllern) zum laufen bekommt:Zitat:
Zitat von Bluesmash
http://www.windmeadow.com/node/42#comment-3130
Der Code ist für die Arduino Umgebung geschrieben, lässt sich aber sehr leicht anpassen.
nospam2000
Kennt jemand zufällig eine ähnlich gute beschreibung in Deutsch?Zitat:
Zitat von nospam2000
ich besitze eine WII und würde diese gerne mit nen AVR auswerten.
Wenn möglich ohne die WII zu "schlachten".
Gruß Richard
Hallo Richard,
Die Wii Fernbedienung selbst arbeitet mit Bluetooth und dem HID Profile. Um das mit einem AVR auszuwerten musst du schon einiges für die Bluetooth Hardware und Programmierung des HID Profils (Server Seite) investieren. Mit dem PC ist das kein Problem, da gibt es spezielle Treiber.Zitat:
Zitat von Richard
Die Controller, welche an die Wii Fernbedienung angeschlossen werden (z.B. Nunchuck), arbeiten mit I2C und sind daher einfacher in der Verwendung mit dem AVR.
95% zu dem Thema werden in entweder in englisch oder in C/C++ sein. Wenn Du dir den Sourcecode unter http://www.windmeadow.com/node/42#comment-3130 ab "The whole code put together:" anschaust, sollte schon einiges klar werden.
Hier die Beschreibung für den Nunchuck:
1. Kommunikation über I2C (TWI) mit 400 kHz
2. Initialisierung und Ausschalten der Verschlüsselung (in Funktion nunchuck_init()):
Teil 1:
I2C Adresse: 0x52
Register Adresse: 0xF0
Daten: 0x55
Teil 2:
I2C Adresse: 0x52
Register Adresse: 0xFB
Daten: 0x00
3. zyklisch 6 Bytes über I2C lesen
I2C Adresse: 0x52
Register Adresse: 0x00
4. Die 6 Bytes auswerten
a) Rohdaten extrahieren (siehe Tabelle unter http://wiibrew.org/wiki/Wiimote/Exte...ollers#Nunchuk):
Buttons
Joystick
Beschleunigungs-Sensoren
b) Werte der Beschleunigungswerte umrechnen
Erdbeschleunigung für Orientierung (Ruhelage)
Beschleunigungsrichtung- und Betrag der Bewegung
Kalibrierungswerte (Nullpunkte) für Joystick und Beschleunigung müssen ermittelt und verwendet werden.
Michael
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 "I2C-TWI Demo mit Wii Nunchuck"
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
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:
Meins: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
Wo ist dein I2cinit?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
Die Pause zwischen dem Initialisieren und dem Auslesen der I2C-Daten ist wichtig:
Das war die letzte und funktionierende Version:Code:Gosub Nunchuck_init
Waitms 1000
Gosub Nunchuk_read
https://www.roboternetz.de/phpBB2/vi...=389966#389966
Gruß
mic
Danke schonmal für die schnelle Antwort!
Hmm, ja das I2Cinit ist mir wohl unter den Tisch gefallen, aber wenn mich jetzt nicht alles Täuscht (was durchaus sein kann, ich hab heut nacht nur noch bascom code vor augen gehabt), dann fehlt das in deinem Code den du damals gepostet hast, aber auch.
Ich habe jetzt aber wo anders einen funktionierenden Code gefunden, der bei mir auf Anhieb funktionierte. Ich hab das I2cinit in deinem mal schnell eingefügt, aber da hats auch nicht funktioniert, ich versteh das grad einfach nicht.
Aber hier mal der Code der funktioniert, ich werde jetzt nur die auswertung ändern, da ich eigentlich einen Classic Controller verwenden möchte
Code:$regfile = "m168def.dat"
$crystal = 20000000
$baud = 9600
$hwstack = 64
$swstack = 64
$framesize = 64
$lib "i2c_twi.lbx"
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 100000
I2cinit
Const Nunchuck_write = &HA4
Const Nunchuck_read = &HA5
Dim Buffer(16) As Byte
Dim Joy_x As Byte
Dim Joy_y As Byte
Dim Accel_x As Integer
Dim Accel_y As Integer
Dim Accel_z As Integer
Dim Buttons As Byte
Dim But_c As Byte
Dim But_z As Byte
Waitms 250
Print "Nunchack Init"
I2cstart
I2cwbyte Nunchuck_write
I2cwbyte &H40
If Err <> 0 Then
Print "Error data sending"
End If
I2cwbyte &H00
If Err <> 0 Then
Print "Error data sending"
End If
I2cstop
If Err <> 0 Then
Print "Error IC2 Stop"
End If
Waitms 250
Print "Nunchack Init finished"
Waitms 250
Print "Nunchuck active"
Do
Gosub Nunchuk_read
Print Accel_x ; "," ; Accel_y , ; "," ; Accel_z ; "," ; Joy_x ; "," ; Joy_y ; "," ; Buttons.0 ; "," ; Buttons.1
Waitms 500
Loop
End
Nunchuk_read:
Dim I As Byte
Dim Tmp As Byte
I2cstart
I2cwbyte Nunchuck_write
I2cwbyte &H00
If Err <> 0 Then
Print "Error data sending"
End If
I2cstop
Waitms 5
Buffer(1) = 0
I2creceive Nunchuck_read , Buffer(1) , 0 , 6
If Err <> 0 Then
Print "Error data receving"
End If
For I = 1 To 6
Tmp = Buffer(i) Xor &H17
Tmp = Tmp + &H17
Buffer(i) = Tmp
Next I
Joy_x = Buffer(1)
Joy_y = Buffer(2)
Accel_x = Buffer(3) * 4
Accel_y = Buffer(4) * 4
Accel_z = Buffer(5) * 4
Buttons = Buffer(6)
If Buttons.2 = 1 Then Accel_x = Accel_x + 1
If Buttons.3 = 1 Then Accel_x = Accel_x + 2
If Buttons.4 = 1 Then Accel_y = Accel_y + 1
If Buttons.5 = 1 Then Accel_y = Accel_y + 2
If Buttons.6 = 1 Then Accel_z = Accel_z + 1
If Buttons.7 = 1 Then Accel_z = Accel_z + 2
Return
Hallo Leute!
Ich bin neu hier und hab mir so einiges angelesen, programmiert und so...
Klasse Sache so ein Atmel!
Bisher haben meine Programme alle funktioniert. nun hab ich mir mal den Nunchuk vorgenommen. Ich hab vor, ihn als Steuerung für Roboter etc zu verwenden.So weit bin ich noch lange nicht, erstmal muss das Ding Werte liefern, mit denen man arbeiten kann.
Irgendwas mach ich falsch. Sämtliche versionen des Programms aus dem Thread hab ich durch. Es kommen keine Werte an!
Hier der letztgenannte Code, ein wenig abgeändert.
An Port D hingen eh einige LEDs rum. Die CLK und DAT hab ich an Port D 4/5 Wahlweise wird mit Levelshifter und 3,3V oder ohne Levelshifter und mit 5,0V getestet. Ergebnis immer gleich.
und DAS kommt im Terminal an:Code:$regfile = "m32def.dat"
$crystal = 16000000
$baud = 9600
$hwstack = 32
$swstack = 32
$framesize = 32
$lib "i2c_twi.lbx"
Config Portd.4 = Output ' Port d.4/5/6 LEDs - für Startsequenz / Statusanzeige
Config Portd.5 = Output '
Config Portd.6 = Output
Config Scl = Portc.5
Config Sda = Portc.4
Config Twi = 100000
I2cinit
Const Nunchuck_write = &HA4
Const Nunchuck_read = &HA5
Dim Buffer(16) As Byte
Dim Joy_x As Byte
Dim Joy_y As Byte
Dim Accel_x As Integer
Dim Accel_y As Integer
Dim Accel_z As Integer
Dim Buttons As Byte
Dim But_c As Byte
Dim But_z As Byte
Waitms 250
' Startausgabe
Portd.4 = 1 'alle LED aus
Portd.5 = 1
Portd.6 = 1
Waitms 5000 'led nacheinander einschalten
Portd.4 = 0
Waitms 500
Portd.5 = 0
Waitms 500
Portd.6 = 0
Print "--- nunchuk ---"
Print " "
Print "Nunchuk Init"
I2cstart
I2cwbyte Nunchuck_write
I2cwbyte &H40
If Err <> 0 Then
Print "Error data sending"
End If
I2cwbyte &H00
If Err <> 0 Then
Print "Error data sending"
End If
I2cstop
If Err <> 0 Then
Print "Error IC2 Stop"
End If
Waitms 250
Print "Nunchack Init finished"
Waitms 250
Print "Nunchuck active"
Do
Gosub Nunchuk_read
Print Accel_x ; "," ; Accel_y , ; "," ; Accel_z ; "," ; Joy_x ; "," ; Joy_y ; "," ; Buttons.0 ; "," ; Buttons.1
Waitms 500
Loop
End
Nunchuk_read:
Dim I As Byte
Dim Tmp As Byte
I2cstart
I2cwbyte Nunchuck_write
I2cwbyte &H00
If Err <> 0 Then
Print "Error data sending"
End If
I2cstop
Waitms 5
Buffer(1) = 0
I2creceive Nunchuck_read , Buffer(1) , 0 , 6
If Err <> 0 Then
Print "Error data receving"
End If
For I = 1 To 6
Tmp = Buffer(i) Xor &H17
Tmp = Tmp + &H17
Buffer(i) = Tmp
Next I
Joy_x = Buffer(1)
Joy_y = Buffer(2)
Accel_x = Buffer(3) * 4
Accel_y = Buffer(4) * 4
Accel_z = Buffer(5) * 4
Buttons = Buffer(6)
If Buttons.2 = 1 Then Accel_x = Accel_x + 1
If Buttons.3 = 1 Then Accel_x = Accel_x + 2
If Buttons.4 = 1 Then Accel_y = Accel_y + 1
If Buttons.5 = 1 Then Accel_y = Accel_y + 2
If Buttons.6 = 1 Then Accel_z = Accel_z + 1
If Buttons.7 = 1 Then Accel_z = Accel_z + 2
Return
Es scheint NICHTS zu funktionieren. Warum?Code:Nunchuk Init
Error data sending
Error data sending
Error IC2 Stop
Nunchack Init finished
Nunchuck active
Error data sending
JTAG ist ausgefust, sonst gingen die i2C-Ports nicht.
Der Nunchuk ist per Isakartenadapter angeschlossen. Sowohl mit Levelshifter als auch ohne ist das Ergebnis gleich.
Au Weia!
Jetzt gehts. Ich hab mal die Datenblätter der Chips verglichen. Beim Atmega32 liegen die L2C / TWI Pins auf C0 und C1
und ich wundere mich warum in vielen Codes das schon auskommentiert drin steht----- AUA!
nun fliessen die Daten und alles ist plüschi!
Matahalii
Hallo zusammen,
wenn ich einen Wii Nunchuk Wireless verwenden möchte,
kann ich dann den BASCOM - Code genau so verwenden,
oder muss ich Änderungen durchführen?
Grüße High Light
1 Jahr ist es zwar schon her, aber weiß es denn keiner???
Grüße High Light
Hast dus in dem Jahr mal ausprobiert?
Nein, habe ich noch nicht, sonst müsste ich nicht fragen...
Es wäre halt interesant zu wissen, denn es wäre nicht so toll, wenn ich mir einen mit Wireless kaufe und es dann nicht funktioniert!
Hallo Leute,
ich weiß, der Thread hier ist schon ewig alt, aber ich hol ihn doch nochmal raus aus der Versenkung :)
Ich habe das ganze vor kurzem nachgebaut und mit dem finalen Code auf Seite 3 getestet, alles funktioniert. Allerdings habe ich ein Verständnisproblem bei dem Code. Und zwar kann mir vielleicht jemand erklären was es damit auf sich hat:
Ich hatte bisher noch nichts mit dem I2C-Bus zu tun, würde aber gerne verstehen, was es mit dem Xor &H17 und der Addition auf sich hat.Code:Tmp = Buffer(1) Xor &H17
Tmp = Tmp + &H17
Pos_x = Tmp
Was bringt dich zu der Annahme, daß dieser Code etwas mit I2C zu tun hat?Zitat:
Zitat von RAM;562337
[CODE
MfG Klebwax
Hallo klebwax,
dass es nicht direkt etwas mit i2c zu tun hat sondern mit der Umwandlung der empfangenen Bytes ist mir klar, allerdings nicht, warum das ganze gemacht bzw. gebraucht wird.