Che Guevara
17.08.2011, 19:46
Hallo,
in letzter Zeit habe ich mich etwas in die Aktivierung des Passthrough-Modes des WMP (und Nunchuk) eingelesen. Gestern Abend hab ich dann mal beide Teile auf je eine eigene Platine mit LM317 gelötet. Jedes einzelne Modul funktioniert auch bestens, nur sobald ich in den Passthrough Modus will, bekomme ich einen Fehler bei der I2C Kommunikation. Habe mir schon versch. Programme im Arduino-Forum (z.b. von DogP) angesehen, welche scheinbar alle funktionieren! Habs dann mal in Bascom versucht, aber leider gehts nicht. Die ersten gesendeten Befehle zur Initialisierung funktionieren noch (Error = 0), aber das auslesen der 6 Bytes macht mir irgendwie Probleme (Error = 1). Ich kann mir mittlerweile nicht mehr erklären, wo der Fehler liegen könnte, zumal die Module seperat ja funktionieren....
Hier mal mein Code:
$regfile = "m32def.dat"
$crystal = 16000000
$framesize = 80
$hwstack = 80
$swstack = 80
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Config Lcdbus = 4
Initlcd
Cls
Cursor Off Noblink
Locate 1 , 1
Lcd "WMP + NUNCHUK"
$lib "I2C_TWI.LBX"
Config Scl = Portc.0
Config Sda = Portc.1
Config Twi = 100000
I2cinit
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 Buffer(6) As Byte
Dim Xid As Byte
Buffer(1) = 0
Buffer(2) = 0
Buffer(3) = 0
Buffer(4) = 0
Buffer(5) = 0
Buffer(6) = 0
Waitms 200
'##############
'INITIALISIEREN
'##############
I2csend &H53 ; &HFE ; &H05
Locate 2 , 1
Lcd "ERROR: " ; Err
Waitms 100
I2csend &H53 ; &HF0 ; &H55
Locate 2 , 1
Lcd "ERROR: " ; Err
Waitms 100
I2csend &H52 ; &HFA
Locate 2 , 1
Lcd "ERROR: " ; Err
Waitms 100
'Wire.requestFrom (0x52,6);
'Outbuf[0] = Wire.receive() ; Serial.print(outbuf[0] , Hex) ; Serial.print( " ");
'Outbuf[1] = Wire.receive() ; Serial.print(outbuf[1] , Hex) ; Serial.print( " ");
'Outbuf[2] = Wire.receive() ; Serial.print(outbuf[2] , Hex) ; Serial.print( " ");
'Outbuf[3] = Wire.receive() ; Serial.print(outbuf[3] , Hex) ; Serial.print( " ");
'Outbuf[4] = Wire.receive() ; Serial.print(outbuf[4] , Hex) ; Serial.print( " ");
'Outbuf[5] = Wire.receive() ; Serial.print(outbuf[5] , Hex) ; Serial.print( " ");
I2creceive &H52 , Buffer(1) , 0 , 6 'Ab hier geht nichts mehr!!!
Locate 2 , 1
Lcd "ERROR: " ; Err
Xid = Buffer(1) + Buffer(2)
Xid = Xid + Buffer(3)
Xid = Xid + Buffer(4)
Xid = Xid + Buffer(5)
Xid = Xid + Buffer(6)
Locate 2 , 10
Lcd "ID: " ; Xid
Wait 1
Waitms 100
I2csend &H52 ; &H08
Locate 2 , 1
Lcd "ERROR: " ; Err
Waitms 500
Gosub Send_zero
Waitms 500
Cls
Do
'Send_zero() ; / / Send The Request For Next Bytes
'Delay(100);
'Wire.requestfrom(0x52 , 6);
'Outbuf[0] = Wire.receive();
'Outbuf[1] = Wire.receive();
'Outbuf[2] = Wire.receive();
'Outbuf[3] = Wire.receive();
'Outbuf[4] = Wire.receive();
'Outbuf[5] = Wire.receive();
Gosub Send_zero
Waitms 1
I2creceive &H52 , Buffer(1) , 0 , 6
'I2cstart
'I2cwbyte &H52
'I2crbyte Buffer(1) , Ack
'I2crbyte Buffer(2) , Ack
'I2crbyte Buffer(3) , Ack
'I2crbyte Buffer(4) , Ack
'I2crbyte Buffer(5) , Ack
'I2crbyte Buffer(6) , Nack
'I2cstop
Locate 1 , 1
Lcd Buffer(1) ; ":" ; Buffer(2) ; ":" ; Buffer(3) ; " "
Locate 2 , 1
Lcd Buffer(4) ; ":" ; Buffer(5) ; ":" ; Buffer(6) ; " "
Loop
Send_zero:
I2csend &H52 ; &H00
Return
End
Hat jemand evtl. schonmal was mit dem Passthrough Modus gemacht und könnte mir evtl. ein bisschen unter die Arme greifen? Ich weiß momentan nicht mehr weiter, da ich schon so ziemlich alles ausprobiert habe. Natürlich habe ich die WMP gemäß http://radio-commande.com/wp-content/uploads/2010/06/WMP_NK_wiring1.jpg angeschlossen.
Vielen Dank & Gruß
Chris
in letzter Zeit habe ich mich etwas in die Aktivierung des Passthrough-Modes des WMP (und Nunchuk) eingelesen. Gestern Abend hab ich dann mal beide Teile auf je eine eigene Platine mit LM317 gelötet. Jedes einzelne Modul funktioniert auch bestens, nur sobald ich in den Passthrough Modus will, bekomme ich einen Fehler bei der I2C Kommunikation. Habe mir schon versch. Programme im Arduino-Forum (z.b. von DogP) angesehen, welche scheinbar alle funktionieren! Habs dann mal in Bascom versucht, aber leider gehts nicht. Die ersten gesendeten Befehle zur Initialisierung funktionieren noch (Error = 0), aber das auslesen der 6 Bytes macht mir irgendwie Probleme (Error = 1). Ich kann mir mittlerweile nicht mehr erklären, wo der Fehler liegen könnte, zumal die Module seperat ja funktionieren....
Hier mal mein Code:
$regfile = "m32def.dat"
$crystal = 16000000
$framesize = 80
$hwstack = 80
$swstack = 80
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.4 , Rs = Portd.5
Config Lcdbus = 4
Initlcd
Cls
Cursor Off Noblink
Locate 1 , 1
Lcd "WMP + NUNCHUK"
$lib "I2C_TWI.LBX"
Config Scl = Portc.0
Config Sda = Portc.1
Config Twi = 100000
I2cinit
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 Buffer(6) As Byte
Dim Xid As Byte
Buffer(1) = 0
Buffer(2) = 0
Buffer(3) = 0
Buffer(4) = 0
Buffer(5) = 0
Buffer(6) = 0
Waitms 200
'##############
'INITIALISIEREN
'##############
I2csend &H53 ; &HFE ; &H05
Locate 2 , 1
Lcd "ERROR: " ; Err
Waitms 100
I2csend &H53 ; &HF0 ; &H55
Locate 2 , 1
Lcd "ERROR: " ; Err
Waitms 100
I2csend &H52 ; &HFA
Locate 2 , 1
Lcd "ERROR: " ; Err
Waitms 100
'Wire.requestFrom (0x52,6);
'Outbuf[0] = Wire.receive() ; Serial.print(outbuf[0] , Hex) ; Serial.print( " ");
'Outbuf[1] = Wire.receive() ; Serial.print(outbuf[1] , Hex) ; Serial.print( " ");
'Outbuf[2] = Wire.receive() ; Serial.print(outbuf[2] , Hex) ; Serial.print( " ");
'Outbuf[3] = Wire.receive() ; Serial.print(outbuf[3] , Hex) ; Serial.print( " ");
'Outbuf[4] = Wire.receive() ; Serial.print(outbuf[4] , Hex) ; Serial.print( " ");
'Outbuf[5] = Wire.receive() ; Serial.print(outbuf[5] , Hex) ; Serial.print( " ");
I2creceive &H52 , Buffer(1) , 0 , 6 'Ab hier geht nichts mehr!!!
Locate 2 , 1
Lcd "ERROR: " ; Err
Xid = Buffer(1) + Buffer(2)
Xid = Xid + Buffer(3)
Xid = Xid + Buffer(4)
Xid = Xid + Buffer(5)
Xid = Xid + Buffer(6)
Locate 2 , 10
Lcd "ID: " ; Xid
Wait 1
Waitms 100
I2csend &H52 ; &H08
Locate 2 , 1
Lcd "ERROR: " ; Err
Waitms 500
Gosub Send_zero
Waitms 500
Cls
Do
'Send_zero() ; / / Send The Request For Next Bytes
'Delay(100);
'Wire.requestfrom(0x52 , 6);
'Outbuf[0] = Wire.receive();
'Outbuf[1] = Wire.receive();
'Outbuf[2] = Wire.receive();
'Outbuf[3] = Wire.receive();
'Outbuf[4] = Wire.receive();
'Outbuf[5] = Wire.receive();
Gosub Send_zero
Waitms 1
I2creceive &H52 , Buffer(1) , 0 , 6
'I2cstart
'I2cwbyte &H52
'I2crbyte Buffer(1) , Ack
'I2crbyte Buffer(2) , Ack
'I2crbyte Buffer(3) , Ack
'I2crbyte Buffer(4) , Ack
'I2crbyte Buffer(5) , Ack
'I2crbyte Buffer(6) , Nack
'I2cstop
Locate 1 , 1
Lcd Buffer(1) ; ":" ; Buffer(2) ; ":" ; Buffer(3) ; " "
Locate 2 , 1
Lcd Buffer(4) ; ":" ; Buffer(5) ; ":" ; Buffer(6) ; " "
Loop
Send_zero:
I2csend &H52 ; &H00
Return
End
Hat jemand evtl. schonmal was mit dem Passthrough Modus gemacht und könnte mir evtl. ein bisschen unter die Arme greifen? Ich weiß momentan nicht mehr weiter, da ich schon so ziemlich alles ausprobiert habe. Natürlich habe ich die WMP gemäß http://radio-commande.com/wp-content/uploads/2010/06/WMP_NK_wiring1.jpg angeschlossen.
Vielen Dank & Gruß
Chris