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.
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
und DAS kommt im Terminal an:
Code:
Nunchuk Init
Error data sending
Error data sending
Error IC2 Stop
Nunchack Init finished
Nunchuck active
Error data sending
Es scheint NICHTS zu funktionieren. Warum?
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.
Lesezeichen