Probleme bei I2C-Verbindung mit MPR121 unter BASCOM

OP #4190769
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
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren