MPL115A2 Start Conversion

Gast #4262695
Lesenswert?

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
Gast #4263455
Lesenswert?

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
Moderator Persönliche Seite #4263470
Lesenswert?

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.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren