PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kompass-Modul CMPS10 I2C-Adresse ändern (Bascom)



t0bias
24.12.2013, 20:13
Fröhliche Weihnachten allerseits!

Ich versuche seit zwei Tagen, die I2C-Adresse eines CMPS10-Moduls zu ändern.
Laut Datenblatt muss dazu die Sequenz 0xA0, 0xAA, 0xA5, 0xC2 (resp. die neue Adresse) mit einer Verzögerung
von 100ms in das Register 22 geschrieben werden.

Ich verwende dazu folgenden Code:



...
Config Scl = PORTC.5
Config Sda = PORTC.4

Config I2cdelay = 100

I2cinit

...

Dim Sendbytes(5) as Byte

Cmps_slaveid = &HC0

Sendbytes(1) = 22
Sendbytes(2) = &HA0
Sendbytes(3) = &HAA
Sendbytes(4) = &HA5
Sendbytes(5) = &HC2

I2csend Cmps_slaveid , Sendbytes(1) , 5

Print Err

...


Der Code kompiliert und wird auch ausgeführt, aber das Modul reagiert weiterhin an der Adresse 0xC0, nicht 0xC2.

Hat jemand eine Idee, was ich anders machen müsste?

Danke & Gruss

Tobi

Dirk
24.12.2013, 21:19
Hi Tobi,
jedes Byte muss einzeln gesendet werden mit Pause und ohne Unterbrechungen, etwa so:

Disable Interrupts 'Keine Unterbrechungen!
I2cstart
I2cwbyte Srf10_adr 'Alte I2C Adresse
I2cwbyte 22 'Register = 22
I2cwbyte &HA0
I2cstop
Waitms 100
I2cstart
I2cwbyte Srf10_adr
I2cwbyte 22 'Register = 22
I2cwbyte &HAA
I2cstop
Waitms 100
I2cstart
I2cwbyte Srf10_adr
I2cwbyte 22 'Register = 22
I2cwbyte &HA5
I2cstop
Waitms 100
I2cstart
I2cwbyte Srf10_adr
I2cwbyte 22 'Register = 22
I2cwbyte Srf10_newadr 'Neue I2C Adresse!
I2cstop
Enable Interrupts
Waitms 50

t0bias
24.12.2013, 23:31
Hi Dirk,

vielen Dank für deine Antwort, damit hats geklappt.
Tatsächlich war dein Hinweis, dass keine Unterbrechungen dazwischenkommen dürfen, der entscheidende Punkt.
Die Abfolge, welche die Bytes mittels "i2cwbytes" einzeln sendet, hatte ich auch schon probiert - allerdings ohne Interrupts zu unterbinden.


Disable Interrupts

ist die wirklich kritische Zeile!

Danke

Tobi