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