Hallo, wie der Name im Betreff schon wiedergibt geht es um den Sensor MPL115A2. Habe den Sensor mittels µC angesteuert mit selbst geschriebenen I2C Routinen. Habe beispielsweise die internen Koeffizienten ausgelesen, mit Erfolg. Nun zum Problem, leider bekomme ich keine bzw. nur Null-Werte aus der ADC Wandlung. Dafür rufe ich das ganze mit dem Befehl "0x12" für Start Conversion auf und nach mehr als 3ms lese ich das Register entsprechend aus, doch leider bekomme ich immer Nullen vom Sensor zurück. Habe alles nach Anleitung befolgt doch leider komme ich nicht an Daten ran. Hat irgendwer den Sensor mal angesteuert? Gab es Probleme mit der Konvertierung? Stehe grad echt auf dem Schlauch, würde mich über jede Anregung sehr freuen. bis denn lg Yafes
Also ich arbeite mit dem MPL3115A2. Aber dein Problem kann ich leider nicht nachvollziehen. Sieh dir halt mal deine I2C Kommunikation auf einem LA an. Wenn man alles nach Datenblatt macht, kommen auch die Daten wie erwartet raus. Mehr kann man ohne Code hier nicht dazu sagen.
Endlich mal einer :-) Ok, dann nun konkreter. Die Routinen wie ich den Sensor auslese und die LA Bilder dazu sind nun komplett im Anhang. Das einzige was mir auffällt ist, zu sehen im Bild "MPL115A2_ReadPressureTemp_CMD.jpg", dass nach dem letzten Byte ich ein NACK zurückbekomme. Normalerweise sollte der Befehl auch ohne Start-Repeat erfolgen laut Datenblatt, bekomme dann zwar im Befehl ein ACK statt NACK, aber die restlichen Befehle kommen dann nur noch mit NACK zurück, sodass ich nichts mehr aus dem Senosr auslesen kann! Was mache ich falsch, ich vermute beim Komando für Start Conversion liegt der Fehler, evtl. sehe ich ihn nicht. Freu mich auf eure Hilfe. lg Yafes
Bei den Bildern ist was schief gelaufen, hier mal eine gezoomte Version der Bilder. lg
Habe im Moment keine Zeit, mir das bei dir anzusehen. Anbei meine Implementierung, hier das Stück C-Code, mit dem sie angesprochen wird:
1 | barometer_init(); |
2 | |
3 | uint8_t params[8]; |
4 | barometer_read(4, 8, params); |
5 | |
6 | int a0_int = (params[0] << 8) + params[1]; |
7 | a0 = a0_int / 8.0; |
8 | int b1_int = (params[2] << 8) + params[3]; |
9 | b1 = b1_int / 8192.0; |
10 | int b2_int = (params[4] << 8) + params[5]; |
11 | b2 = b2_int / 16384.0; |
12 | int c12_int = (params[6] << 8) + params[7]; |
13 | c12 = c12_int / (16384.0 * 1024.0); |
14 | |
15 | //...
|
16 | |
17 | |
18 | time_t
|
19 | barometer_timer(timer_arg_t p __attribute__((unused))) |
20 | {
|
21 | uint8_t results[4]; |
22 | |
23 | barometer_read(0, 4, results); |
24 | unsigned padc = (results[0] << 2) + (results[1] >> 6); |
25 | unsigned tadc = (results[2] << 2) + (results[3] >> 6); |
26 | |
27 | double pcomp = a0 + (b1 + c12 * (double)tadc) |
28 | * (double)padc + b2 * (double)tadc; |
29 | double pressure = pcomp * ((115 - 50) / 1023.0) + 50; |
30 | |
31 | PRINTF("0000: %.1f hPa" NL, pressure * 10); |
32 | |
33 | return (time_t)0; |
34 | }
|
Vielleicht kannst du dir ja einen Reim drauf machen, ansonsten guck' ich später nochmal rein.
Danke für den Code. Soweit überflogen siehts bei mir nicht anders aus :-(
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.