Hallo
Nur um es gleich klarzumachen: Ich habe keine Ahnung von I2C/TWI, dies sind meine ersten Versuche.
Ich habe mir einen kleinen Adapter gebastelt:
Bild hier
Und das Programm von linux_80 (danke) an den RP6 angepasst:
Code:
'$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
' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart !
Twcr = &B00000100 ' nur TWEN setzen
Const Nunchuck_write = &H52 ' Slaveadresse
Const Nunchuck_read = &H53
Dim Buffer(6) As Byte
Dim B As Byte
Dim Tmp As Byte
' Startausgabe
Print
Print "I2C-TWI Demo mit Wii Nunchuck"
Print
Do
Gosub Nunchuck_init
Buffer(1) = 0
I2creceive Nunchuck_read , Buffer(1) , 0 , 6
For B = 1 To 6
' Hier soll noch etwas rumcodiert werden:
Tmp = Buffer(b) Eor &H17
Tmp = Tmp + &H17
Print B ; ": " ; Hex(tmp )
Buffer(b) = 0 ' löschen
Next B
Gosub Send_zero
Print "------"
Waitms 1000
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
Die Ausgabe dazu in meinem Terminal:
I2C-TWI Demo mit Wii Nunchuck
1: 6A
2: 6A
3: 6A
4: 6A
5: 6A
6: 6A
------
1: 6A
2: 6A
3: 6A
4: 6A
5: 6A
6: 6A
------
1: 6A
2: 6A
3: 6A
4: 6A
5: 6A
6: 6A
------
[RP6BOOT]
[READY]
Egal ob der Nunchuk eingesteckt ist oder nicht, die Werte sind immer gleich
Vielleicht könnten die TWI-Profis mal drüberschaun. Ich versuche es nun erstmal in C mit der TWI-Libray des RP6...
Gruß
mic
Lesezeichen