Hallo
Mein Verdacht scheint sich zu bestätigen. Ich habe nun die Daten des ersten Accelerometer untersucht. Das niederwertige Nipple (bit0 bis 3) funktioniert tadellos, zusammen mit den zwei LSB aus dem 6ten TWI-Datenbyte erhalte ich beim Schwenken je nach Richtung aufsteigende oder abfallende Werte von 0 bis 63.
Leider funktioniert es aber mit dem hochwertigen Nipple (bit4-7) überhaupt nicht. Die Werte sind in einer für mich nicht erkennbaren Reihenfolge. Hier ein Beispiel:
Der Wert des Highnipples schwankt zwischen 10 (max links) und 3 (max rechts). Aber die Werte ändern sich nicht linear. Die Zuordnung der Werte zu den Winkeln ist immer gleich, aber eben nicht folgerichtig. Was nun? Kann das jemand in eine Formel fassen oder muss ich mit einer Umrechnungstabelle arbeiten?Code:Highnipple (links) und Lownipple jeweils binär und dezimal Schwenken von links nach rechts: (Werte low Nipple aufsteigend) 00001010 10 00010100 20 00001010 10 00000000 0 00001010 10 00010101 21 00001001 9 00011110 30 00001001 9 00100001 33 00001001 9 00011110 30 00001010 10 00010010 18 00001001 9 00100101 37 00001001 9 00101111 47 00001011 11 00010101 21 00001011 11 00001111 15 00001010 10 00100101 37 00001010 10 00011101 29 00001000 8 00000010 2 00001000 8 00001101 13 00000111 7 00101001 41 00001001 9 00001011 11 00001001 9 00001111 15 00001000 8 00101010 42 00001000 8 00111011 59 00000101 5 00111101 61 00000110 6 00001101 13 00000101 5 00100001 33 00000101 5 00110000 48 00000110 6 00111101 61 00000111 7 00001100 12 00000110 6 00011110 30 00000110 6 00110010 50 00000011 3 00111100 60 00000100 4 00000101 5 00000100 4 00011011 27 00000011 3 00100011 35 00000011 3 00111001 57 00000011 3 00101110 46 00000011 3 00111001 57 00000100 4 00111110 62 00000101 5 00000101 5 00000101 5 00000100 4 00000101 5 00001011 11 00000101 5 00001000 8 00000101 5 00001011 11 00000100 4 00111111 63 00000101 5 00000010 2 00000011 3 00110101 53 Und ca. ab hier zurück von rechts nach links: (Werte low Nipple abfallend) 00000100 4 00111100 60 00000011 3 00110100 52 00000011 3 00110100 52 00000101 5 00001011 11 00000101 5 00000111 7 00000101 5 00010000 16 00000101 5 00000111 7 00000101 5 00000000 0 00000101 5 00001010 10 00000101 5 00011010 26 00000101 5 00000101 5 00000101 5 00000000 0 00000101 5 00001101 13 00000101 5 00000011 3 00000100 4 00011001 25 00000110 6 00100001 33 00000101 5 00100100 36 00000110 6 00000001 1 00001000 8 00011111 31 00000111 7 00111001 57 00001000 8 00011001 25 00001000 8 00000110 6 00001010 10 00101101 45 00001010 10 00011111 31 00001011 11 00010011 19 00001011 11 00000110 6 00001001 9 00110101 53 00001001 9 00100101 37 00001001 9 00101011 43 00001001 9 00100001 33 00001001 9 00011100 28 00001010 10 00011001 25 00001001 9 00011100 28 00001010 10 00010100 20 00001010 10 00010101 21 00001010 10 00010101 21 00001010 10 00001110 14 00001010 10 00001010 10 00001010 10 00010010 18 00001001 9 00011111 31 00001001 9 00101000 40 00001010 10 00011000 24
Hier noch der Testcode:
GrußCode:Do While Buttons.1 = 1 ' solange z-Knopf nicht gedrückt Gosub Nunchuk_read Waitms 100 Wend While Buttons.1 = 0 ' solange z-Knopf gedrückt Gosub Nunchuk_read ' Werte einlesen Tmp = Acc_x / 16 ' linkes Nipple nach rechts schieben Print Bin(tmp) ; " " ; Tmp ; " "; ' und binär und dezimal ausgeben Tmp = Acc_x And 15 ' nur das rechte nipple Tmp = Tmp * 4 ' um zwei Bits nach Links Schieben If Buttons.2 = 1 Then Set Tmp.0 ' und die acc-LSB einlesen If Buttons.3 = 1 Then Set Tmp.1 ' binär und dezimal ausgeben Print Bin(tmp) ; " " ; Tmp Waitms 10 Wend Loop
mic







Zitieren

Lesezeichen