Hallo
Nachdem der "Bug" entfernt ist sieht es nun richtig klasse aus:
Bild hier
http://www.youtube.com/watch?v=KKtTXcCFqGo
Somit würde ich sagen: Ziel erreicht. Das sollte auch mit einem Mega8 funktionieren :)
Hier noch der finale Code:
Damit beende ich mein kleines Bascom-Gastspiel und verkrümmel mich wieder in meine C-Ecke. Viel Spass und Erfolg beim Nachbau.Code:'WII-Nunchuk mit Bascom auslesen. Grundgerüst des Codes von Linux_80 7.8.08 mic 'https://www.roboternetz.de/phpBB2/viewtopic.php?p=389309 $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.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 = &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 Config Servos = 2 , Servo1 = Porta.0 , Servo2 = Porta.1 , Reload = 10 Servo(1) = 90 Servo(2) = 85 Config Porta.0 = Output Config Porta.1 = Output Enable Interrupts Dim A 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 Dim Tasten As Byte Dim Stick As Byte ' Startausgabe Print Print "I2C-TWI Demo mit Wii Nunchuck" Print "Ausgabe auf dem LCD beachten" Gosub Nunchuck_init Waitms 1000 Gosub Nunchuk_read Cls 'Lcd " WII-Nunchuk am RP6" Stick = 1 Do '( Gosub Getkeys Locate 1 , 1 Lcd Bin(tasten) ') 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.1 = 0 Then Lcd "C" Else Lcd "c" End If If Buttons.0 = 0 Then Lcd "Z" Else Lcd "z" End If Locate 3 , 1 Lcd "Accs X: " ; Hex(acc_x) ; " y: " ; Acc_y; Locate 4 , 6 Lcd "Z: " ; Acc_z '( Locate 2 , 1 Lcd "X: " ; Bin(acc_x) ; " " ; Acc_x ; " " Locate 3 , 1 Lcd "Y: " ; Bin(acc_y) ; " " ; Acc_y ; " " Locate 4 , 1 Lcd "Z: " ; Bin(acc_z) ; " " ; Acc_z ; " " ') If Buttons.0 = 0 Then Stick = 0 If Buttons.1 = 0 Then Stick = 1 If Stick = 0 Then Servo(1) = Acc_y - 40 Servo(2) = Acc_x - 40 Else Servo(1) = Pos_y - 40 Servo(2) = Pos_x - 40 End If 'Waitms 10 Loop End Nunchuck_init: I2cstart I2cwbyte Nunchuck_write I2cwbyte &H40 ' sends memory address I2cwbyte &H00 ' sends sent a zero. I2cstop Return Nunchuk_read: Dim Buffer(6) As Byte 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) Xor &H17 Tmp = Tmp + &H17 Pos_x = Tmp Tmp = Buffer(2) Xor &H17 Tmp = Tmp + &H17 Pos_y = Tmp Tmp = Buffer(3) Xor &H17 Tmp = Tmp + &H17 Acc_x = Tmp Tmp = Buffer(4) Xor &H17 Tmp = Tmp + &H17 Acc_y = Tmp Tmp = Buffer(5) Xor &H17 Tmp = Tmp + &H17 Acc_z = Tmp Tmp = Buffer(6) Xor &H17 Tmp = Tmp + &H17 Buttons = Tmp '( If Buttons.2 = 1 Then Set Acc_x.0 ' Die acc-LSB einlesen If Buttons.3 = 1 Then Set Acc_x.1 If Buttons.4 = 1 Then Set Acc_y.0 If Buttons.5 = 1 Then Set Acc_y.1 If Buttons.6 = 1 Then Set Acc_z.0 If Buttons.7 = 1 Then Set Acc_z.1 ') Return Getkeys: ' Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portb.7 , Db7 = Portb.1 , E = Portb.0 , Rs = Portc.6 Tasten = 0 Config Pinc.4 = Input Config Pinc.5 = Input Config Pinb.7 = Input Config Pinb.1 = Input Config Pinc.6 = Input Set Portc.4 Set Portc.5 Set Portb.7 Set Portb.1 Set Portc.6 If Pinc.4 = 0 Then Set Tasten.3 If Pinc.5 = 0 Then Set Tasten.2 If Pinb.7 = 0 Then Set Tasten.1 If Pinb.1 = 0 Then Set Tasten.0 If Pinc.6 = 0 Then Set Tasten.4 Reset Portc.4 Reset Portc.5 Reset Portb.7 Reset Portb.1 Reset Portc.6 Config Pinc.4 = Output Config Pinc.5 = Output Config Pinb.7 = Output Config Pinb.1 = Output Config Pinc.6 = Output Return
Gruß
mic







Zitieren

Lesezeichen