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.






Zitieren

Lesezeichen