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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.