Hallo, wir möchten den Sensor MS5803 mit I2C einsetzen. Wir kommen allerdings nur bis zum RESET-Command. Nachdem wir das Kommando PROMREAD /0xA6) absetzen, antwortet der Sensor nicht mehr. Hat jemand schon Erfahrung mit diesem Sensor und I2C? Es muss I2C sein, da die HW schon fertig ist. Danke, Viete
Wartet ihr nach dem Reset auch mindestens 2.8ms? Device-Adresse auch richtig (achtung CSB ist negiert)
Hallo Timo, die Device-Adresse ist richtig (CSB negiert), nach dem RESET Befehl bekommen wir auch ein ACK. Dann warten wir 3ms und setzen das PROMREAD- Kommando ab. Danach bekommen wir kein ACK mehr. Sollten wir nur 2.8ms warten? Erwartet der Baustein noch ein anderes Kommando vor dem PROMREAD? Gruß Viete
Dieter Zumkehr schrieb: > Hallo Timo, > die Device-Adresse ist richtig (CSB negiert), nach dem RESET Befehl > bekommen wir auch ein ACK. > Dann warten wir 3ms und setzen das PROMREAD- Kommando ab. Danach > bekommen wir kein ACK mehr. Sollten wir nur 2.8ms warten? Erwartet der > Baustein noch ein anderes Kommando vor dem PROMREAD? > Gruß Viete Nein du kannst natürlich auch etwas länger warten. Die Application Note kennst du? (ab S.6 ist I²C): http://www.servoflo.com/pressure-sensors/suppliers/measurement-specialties/227-measurement-specialties-a-intersema/781-an520.html
Hallo, ich habe ebendfalls das Problem dass ich an dieser Stelle nicht weiter komme. Ich nutze den Code aus der oben genannten Application Note(http://www.servoflo.com/pressure-sensors/suppliers/measurement-specialties/227-measurement-specialties-a-intersema/781-an520.html), aber der Sensor gibt keine Antwort. Wo lag denn bei euch der Fehler? vG. David
@David Tut mir leid, das ist schon ein wenig her, wir müssen das Projekt erst wieder hervorkramen. Bitte beachte den Fehler im Schaltplan der Applikation, natürlich müssen beide Leitungen einen pull-up haben. Das war aber nicht unser Fehler. VG Viete
Hi Viete, na ebend, das ist mir noch garnicht aufgefallen dass es dort falsch gezeichnet ist. Der Fehler ist es bei mir aber auch nicht. Ich habe keine Ahnung wo der fehler liegt, ich vermute dass ich bei den Definitionen etwas übersehen habe. In der Note steht es ja wie folgt: #define TRUE 1 #define FALSE 0 #define F_CPU 4000000UL // 4 MHz external XTAL #define SCL_CLOCK 100000L // I2C clock in Hz #define ADDR_W 0xEF // Module address write mode #define ADDR_R 0xEF // Module address read mode #define CMD_RESET 0x1E // ADC reset command #define CMD_ADC_READ 0x00 // ADC read command #define CMD_ADC_CONV 0x40 // ADC conversion command #define CMD_ADC_D1 0x00 // ADC D1 conversion #define CMD_ADC_D2 0x10 // ADC D2 conversion #define CMD_ADC_256 0x00 // ADC OSR=256 #define CMD_ADC_512 0x02 // ADC OSR=512 #define CMD_ADC_1024 0x04 // ADC OSR=1024 #define CMD_ADC_2048 0x06 // ADC OSR=2048 #define CMD_ADC_4096 0x08 // ADC OSR=4096 #define CMD_PROM_RD 0xA0 // Prom read command und an sich sollte ja nur die Adresse geändert werden müssen zu: #define ADDR_W 0b1110111 // Module address write mode #define ADDR_R 0b1110111 // Module address read mode Das CSB kann ich über Jumper umstellen. Wie gesagt wäre super wenn du dir die Mühe machen würdest und es nochmal hervor kramst. Schoneinmal vielen Dank. David
Hallo David, tut mir leid, dass ich dich auf die nächste Woche vertrösten muss, ich komme jetzt nicht mehr an das Projekt. Ich hoffe, das geht noch. Bis Dann Viete
Hallo David, wie versprochen hier die Lösung: Schau Dir bitte die Adressen an, sie sind falsch! Es muss heissen #define ADDR_W 0xEC // Module address write mode #define ADDR_R 0xED // Module address read mode dann gehts! Das CSB ist bei uns High! Viel Vergnügen Viete!
Wow, Viete wahnsinn, das war echt die Lösung. Du bist der Beste,vielen vielen Dank.
Ah ok, dann danke ich euch Dreien natürlich unheimlich und dann seid ihr die Besten.
Hallo ihr Drei, ich muss euch noch einmal belästigen, hattet ihr auch den Fehler dass euer Sensor ca. 200mBar zu wenig angezeigt hat? natürlich kann man die ja einfach im Programm aufaddieren, aber so richtig schön ist das ebend auch nicht. Wobei man ja fast davon ausgehen kann dass die einfach nur im Datenblatt wieder einen Fehler gemacht haben.^^ Im Voraus schon vielen Dank. vG. David
Hast du auf Normalnull umgerechnet? Die Wetterstationen beziehen den Luftdruck immer auf Normalnull soweit ich weiß. Temperaturkompensation durchgeführt?
Hallo Timmo, den Luftdruck habe ich auf meine Höhe (rund 250m) umgerechnet und zusätzlich dazu habe auch noch ein Barometer als Referenz verwendet. Naja um ehrlich zu sein habe ich die Kompensation noch nicht gemacht, ich dachte das könnte ich mir am Anfang noch ersparen. Da es ja momentan meist grob um die 20°C ist und in dem Fall ja T2=OFF2=SENS2=0, das heißt eigentlich muss bei den Bedingungen nichts kompensiert werden. Ich schau da aber auf jeden Fall nochmal genauer hin. Wobei ja 200 mBar schon eine extreme abweichung wären. Also bei euch hat er keine so Fehlerhafte Werte übergeben, trotz dass Ihr die Formeln aus dem originalen Datenblatt verwendet habt?
Timmo H. schrieb: > Hast du auf Normalnull umgerechnet? Die Wetterstationen beziehen den > Luftdruck immer auf Normalnull soweit ich weiß. Um damit einen Fehler von 200 mbar zu erklären, müßte sich der Drucksensor schon auf 1800m Höhe befinden ;-)
Wetterfrosch schrieb: > Timmo H. schrieb: >> Hast du auf Normalnull umgerechnet? Die Wetterstationen beziehen den >> Luftdruck immer auf Normalnull soweit ich weiß. > > Um damit einen Fehler von 200 mbar zu erklären, müßte sich der > Drucksensor schon auf 1800m Höhe befinden ;-) Ich habe ja auch NN UND Temperaturkompensation gesagt. Ich habe mir die Temperaturkompensation des MS5803 jetzt nicht im Detail angeschaut, aber bei Freescale MPL115A2 ist die Abweichung ohne die Temperaturkompensation schon recht groß: Pcomp = a0 +( b1 + c12 * Tadc) * Padc + b2 * Tadc wobei a0, b1, c12 und b2 die 16bit Kompensationskoeffizienten des MPL115A2 sind welche bei der Herstellung individuell im ROM abgelegt werden. Hatte nicht gesehen, dass man beim MS5803 < 20°C angeblich nichts kompensieren muss.
Also der MS muss schon auch kompensiert werden, außer die Temperatur ist über 20°C und unter 45°C, denn dann sind die Koeffizienten für die Kompensation wie folgt T2=0, OFF2=0 und Sens2=0. Und die Komepnsation sieht wie folgt aus: TEMP = TEMP - T2; OFF = OFF - OFF2; SENS = SENS - SENS2; Die Berechnung für den Druck sieht laut Datenblatt wie folgt aus: P = (D1 * SENS / 2^21 - OFF) / 2^15; mit SENS = C1 * 2^15 + (C3 * dT ) / 2^8; OFF = C2 * 2^16 + (C4 * dT ) / 2^7; TEMP = 2000 + dT * C6 / 2^23; Und bei diesen Formeln vermute ich einen Fehler. Aber wenn ihr die gleichen Formeln verwendet habt und bei euch keiner Fehler aufgetreten ist kann ich mich natürlich auch irren.
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.