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:
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...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
Gruß
mic







Zitieren

Lesezeichen