Guten Tag,
wie im Titel bereits beschrieben habe ich Probleme bei der I2C
Kommunikation zwischen einem Arduino Mega 2560 und diesem Touch-Modul
https://learn.adafruit.com/adafruit-mpr121-12-key-capacitive-touch-sensor-breakout-tutorial/overview.
Das Datenblatt des verwendeten Controllers habe ich beigefügt.
Eine fehlerhafte Verkabelung kann ich hoffentlich ausschließen, da der
zum Modul gehörende Arduino-Code funktioniert hat. Verwendet habe ich
den HW TWI.
Anbei der von mir verwendete Code
1 | $regfile = "m2560def.dat"
|
2 | $crystal = 16000000
|
3 | $baud = 19200
|
4 | $framesize = 64
|
5 | $swstack = 50
|
6 | $hwstack = 50
|
7 |
|
8 | ' Adresse und Register gem. Datenblatt
|
9 | const MPR121_I2CADDR_DEFAULT = &H5A
|
10 | const MPR121_SOFTRESET = &H80
|
11 | const MPR121_CONFIG2 = &H5D
|
12 |
|
13 |
|
14 | $lib "i2c_twi.lib" ' Für Hardware TWI
|
15 | Config Twi = 400000
|
16 |
|
17 |
|
18 | Dim retValue as Byte
|
19 | Dim i as Byte
|
20 | Dim tempErr as byte
|
21 | for i = 0 to 255
|
22 | I2cinit
|
23 |
|
24 | I2cstart 'start condition
|
25 | I2cwbyte i 'slave address
|
26 | I2cwbyte MPR121_SOFTRESET 'register
|
27 | I2cwbyte &H63 'value to write
|
28 | I2cstop
|
29 | tempErr = Err
|
30 |
|
31 | waitms 50
|
32 |
|
33 | I2cstart
|
34 | I2cwbyte i
|
35 | I2cwbyte MPR121_CONFIG2
|
36 | I2crbyte retValue , ack
|
37 | i2cstop
|
38 |
|
39 | Print "Adresse:= ";i;" Softreset Err:= ";tempErr;"retValue:=";retValue; " retValue Err:=";err
|
40 | waitms 50
|
41 | next i
|
42 |
|
43 | Print "Programm gestartet"
|
44 |
|
45 | Do
|
46 | waitms 20
|
47 |
|
48 | loop
|
49 | End
|
Etwas gerafft sieht die Ausgabe dann wie folgt aus:
1 | Adresse:= 0 Softreset Err:= 1 retValue:=93 retValue Err:=0
|
2 | Adresse:= 1 Softreset Err:= 1 retValue:=93 retValue Err:=1
|
3 | Adresse:= 2 Softreset Err:= 1 retValue:=93 retValue Err:=0
|
4 | Adresse:= 3 Softreset Err:= 1 retValue:=93 retValue Err:=1
|
5 | ...
|
6 | Adresse:= 178 Softreset Err:= 1 retValue:=93 retValue Err:=0
|
7 | Adresse:= 179 Softreset Err:= 1 retValue:=93 retValue Err:=1
|
8 | Adresse:= 180 Softreset Err:= 0 retValue:=93 retValue Err:=0
|
9 | Adresse:= 181 Softreset Err:= 1 retValue:=255 retValue Err:=0
|
10 | Adresse:= 182 Softreset Err:= 1 retValue:=93 retValue Err:=0
|
11 | Adresse:= 183 Softreset Err:= 1 retValue:=93 retValue Err:=1
|
12 | Adresse:= 184 Softreset Err:= 1 retValue:=93 retValue Err:=0
|
13 | ...
|
14 | Adresse:= 254 Softreset Err:= 1 retValue:=93 retValue Err:=0
|
15 | Adresse:= 255 Softreset Err:= 1 retValue:=93 retValue Err:=1
|
Ich kann mir leider daraus keinen Reim machen. Der korrekte Rückgabewert
sollte allerdings gemäß Datenblatt 0x24 sein.
Was mir allerdings bei einem anderen Touch-Modul (cap1188) aufgefallen
ist, war dass sich die Adressierungen zwischen C bzw Arduino und BASCOM
unterschieden haben. Hier war die Arduino-Adresse 0x28, die
BASCOM-Adresse hingegen lautete 0x52. Aber das hat mir bei dem oben
beschriebenen Problem nicht weitergeholfen.
Für Tipps und Hinweise zur Problemlösung wäre ich euch dankbar
Gruß Magelan