Hallo

Spannender als die Knöpfe und der analoge Stick sind wohl die Beschleunigungssensoren. Um es Vorweg zu nehmen, die funktionieren prima. Was man vom Abfilmen des LC-Displays nicht sagen kann:
Bild hier  
http://www.youtube.com/watch?v=nzs39xchhN4

Die zweiseitige Platine für den Adapter habe ich übrigens aus einer alten ISA-Karte (Paradise Accelerator24 mit EEprom von 1994...)rausgebissen.

Der obere Balken ist Neigen links/rechts, der untere Balken Kippen vor/zurück. Es werden nur 8-Bit ausgewertet, aber mit 20 Zeichen/Zeile kann man das nicht vernünftig auflösen. Die LSB im 6ten Datenbyte sind extrem empfindlich. Ich werde mal eine kleine Anwendung mit Servos dazu basteln. Fahren wäre schwieriger weil ich erst die Bascom-Motorroutinen für den RP6 schreiben müßte.

Das Initialisieren funktioniert jetzt, wichtig scheint zudem eine kurze Pause zwischen dem Senden der "0" und der Abfrage der Bytes zu sein. Der Code sieht nun so aus:
Code:
'WII-Nunchuk mit Bascom auslesen. Grundgerüst des Codes von Linux_80  4.8.08 mic

'https://www.roboternetz.de/phpBB2/viewtopic.php?p=389309

'$regfile = "M8def.dat"                                      ' the used chip
'$crystal = 16000000                                         ' frequency used
'$baud = 9600

$regfile = "M32def.dat"                                     ' RP6 mit Mega32
$crystal = 8000000                                          ' taktet mit 8MHz
$baud = 38400                                               ' Loader-Baud

$lib "i2c_twi.lbx"                                          ' Für Hardware TWI

'Config Scl = Portc.5                                        ' Ports fuer IIC-Bus
'Config Sda = Portc.4

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

'Const Nunchuck_write = &H52                                 ' Slaveadresse
'Const Nunchuck_read = &H53
Const Nunchuck_write = &HA4                                 ' Slaveadresse
Const Nunchuck_read = &HA5

Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portb.7 , Db7 = Portb.1 , E = Portb.0 , Rs = Portc.6
Config Lcd = 20 * 4
Deflcdchar 0 , 63 , 63 , 63 , 63 , 63 , 63 , 63 , 63
Cls                                                         'clear the LCD display
Cursor Off Noblink
Lcd "  RP6 ROBOT SYSTEM"                                    'display this at the top line



Dim Buffer(6) As Byte
Dim B As Byte
Dim Tmp As Byte
Dim Pos_x As Byte
Dim Pos_y As Byte
Dim Acc_x As Byte
Dim Acc_y As Byte
Dim Acc_z As Byte
Dim Buttons As Byte

' Startausgabe
Print
Print "I2C-TWI Demo mit Wii Nunchuck"
Print "Ausgabe auf dem LCD beachten"

Waitms 1000
Gosub Nunchuck_init

Cls
Lcd " WII-Nunchuk am RP6"

Do
   Gosub Nunchuk_read

   'Print Hex(pos_x) ; "  " ; Hex(pos_y)

   Locate 2 , 1
   Lcd Hex(pos_x)
   Lcd "  "
   Lcd Hex(pos_y)
   Locate 2 , 19
   If Buttons.0 = 1 Then
      Lcd "Z"
   Else
      Lcd "z"
   End If

   If Buttons.1 = 1 Then
      Lcd "c"
   Else
      Lcd "C"
   End If

   Locate 3 , 1
   Tmp = Acc_x / 10
   For B = 1 To Tmp
      Lcd Chr(0)
   Next
   For B = Tmp To 19
      Lcd " "
   Next

   Locate 4 , 1
   Tmp = Acc_y / 10
   For B = 1 To Tmp
      Lcd Chr(0)
   Next
   For B = Tmp To 19
      Lcd " "
   Next

   Waitms 100
Loop

End

Nunchuck_init:
    I2cstart
    I2cwbyte Nunchuck_write
    I2cwbyte &H40                                           ' sends memory address
    I2cwbyte &H00                                           ' sends sent a zero.
    I2cstop

Return

Nunchuk_read:
   I2cstart
   I2cwbyte Nunchuck_write
   I2cwbyte &H00                                            ' sends one byte
   I2cstop

   Waitms 1
   Buffer(1) = 0
   I2creceive Nunchuck_read , Buffer(1) , 0 , 6

   Tmp = Buffer(1) Eor &H17
   'Tmp = Tmp + &H17
   Pos_x = Tmp

   Tmp = Buffer(2) Eor &H17
   'Tmp = Tmp + &H17
   Pos_y = Tmp

   Tmp = Buffer(3) Eor &H17
   'Tmp = Tmp + &H17
   Acc_x = Tmp

   Tmp = Buffer(4) Eor &H17
   'Tmp = Tmp + &H17
   Acc_y = Tmp

   Tmp = Buffer(5) Eor &H17
   'Tmp = Tmp + &H17
   Acc_z = Tmp

   Tmp = Buffer(6) Eor &H17
   Tmp = Tmp + &H17
   Buttons = Tmp

Return
Die &H17-Addition braucht man zwingend beim 6tem Byte und wenn man mehr als die hochwertigen 8 Bit der Beschleunigungsmesser auswerten möchte ;) Die blockierenden Funktionen gefallen mir noch nicht besonders, soweit ich weiß, kann TWI auch einen Interrupt auslösen. Muss ich mich aber erst etwas einlesen...

Gruß

mic