Forum: Mikrocontroller und Digitale Elektronik I2C PIC24 dsPIC33 Sensor


von N. Z. (w47)


Lesenswert?

Guten Tag

Ich möchte mit einem dsPIC33F oder meinem PiC24H einen Sensor mit I2C 
ansteuern. Meine Frage bezieht sich auf die Baudrate, welche im 
Datenblatt (DS70000195F I2C der dsPIC33/PIC24 Family) auf Seite 19 durch 
die Formel I2CxBRG=((1/FSCL - Delay) * FCY/2)-2 definiert ist. In 
anderen Quellen (Foren und das Buch „Handbuch 
PIC24/dsPIC-Mikrocontroller“) welche sich ebenfalls auf den dsPIC33F 
beziehen wird die Baudrate ganz anders berechnet. Habt ihr eine Idee 
woran das liegen könnte bzw. welche die richtige ist?
Zudem ist mir unklar was in der Formel das „Delay“ sein soll. Ich konnte 
im Datenblatt (auch nicht im Hauptdatenblatt) eine Definition dafür 
finden. Es wird lediglich angegeben das es sich dabei meistens um einen 
Wert zwischen 110ns und 130ns handelt. Aber woher bekomme ich den 
tatsächlichen Wert?

Ich hätte noch eine weitere Frage: Mein Sensor befindet sich nach dem 
Einschalten (bzw. nac dem POR) im Sleep mode (führt keine Messungen 
durch). Um ihn in den Force mode zu bringen muss man in ein spezielles 
Register des Sensors einen Wert schreiben. Mir ist klar wie man mithilfe 
einer I2C_write Funktion Werte sendet jedoch ist mir unklar wie genau 
ich es erreiche das die Werte in exakt diesem Register ankommen. In 
meiner Schreibfunktion speichere ich den zu übertragenden Wert in ein 
Buffer-Register (I2C1TRN=data_w).

Ich hoffe es kann mir jemand helfen und bedanke mich schon einmal für 
die Antworten.

von Klaus (Gast)


Lesenswert?

Das ist ja interessant, daß Microchip bei den PIC24H keine 
Beispielrechnung im DS hat. Bei den PIC24F sind im DS39702B ein paar 
Beispiele drin. Ich bin meißt zu faul zum Rechnen, ich schätze und messe 
dann mit dem Scope nach. Der wirkliche Wert ist aber nicht so wichtig, 
darf nur nicht zu schnell für den Slave sein. 100kHz müssen alle können, 
ich hab noch keinen modernen Slave erlebt, der nicht auch 200kHz konnte.

MfG Klaus

von N. Z. (w47)


Lesenswert?

Hallo Klaus,

erst einmal vielen Dank für deine Antwort.
Die Formel in dem von dir vorgeschlagenen Datenblatt ist identisch mit 
den Formeln die ich bei anderen Quellen finden konnte.

Ich fände es trotzdem interessant zu wissen, was es mit der 
spezifizierten Formel aus dem zugehörigen Datenblatt auf sich hat.

Hast du einen Rat bezüglich der Speicherung in ein bestimmtes Register? 
Bei dem Sensor handelt es sich um den BME280 von Bosch.

von Klaus (Gast)


Lesenswert?

N. Z. schrieb:
> Ich fände es trotzdem interessant zu wissen, was es mit der
> spezifizierten Formel aus dem zugehörigen Datenblatt auf sich hat.

Eigentlich gibt es bei I2C keine Baudrate. In den Beschreibungen im 
Datenblatt sieht man das auch. Da ist ständig von TBRG die Rede. Das 
I2CxBRG ist eigentlich ein Timer, der nacheinander immer wieder 
gestartet wird. Dabei gehen die Signale aber aus dem Chip heraus und 
werden dann wieder eingelesen. Das ist für das "Clock Stretching" nötig. 
Auf die Art kommen jetzt aber die physikalischen Delays der I/Os ins 
Spiel. Die 20ns Unterschied würden da ganz gut passen. In Realität geht 
da noch die Kapazität des ganzen Busses mit ein. Da die Zeit bei 100kHz 
5µs ist, gehen da aber die paar ns komplett unter.

N. Z. schrieb:
> Hast du einen Rat bezüglich der Speicherung in ein bestimmtes Register?
> Bei dem Sensor handelt es sich um den BME280 von Bosch.

Ich kenne den nicht, gehe aber davon aus, daß er wie die meißten Devices 
funktioniert. Wenn man ihn mit einem Write adressiert, erwartet er als 
erstes Byte die Registeradresse. Wenn man lesen will, bricht man hier 
mit einem Stop ab, adressiert ihn mit Read und liest das Register. 
Ansonsten schreibt man nach der Registeradresse den Wert in das 
Register. Viele Chips incrementieren nach jedem Zugriff automatisch die 
Registeradresse. Das sollte aber alles im Datenblatt stehen.

MfG Klaus

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.