Forum: Mikrocontroller und Digitale Elektronik Probleme bei I2C-Verbindung mit MPR121 unter BASCOM


von Oliver S. (magelan1979)


Angehängte Dateien:

Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.