watterott ;title =
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: MPL115A2 kompensation

  1. #1
    Kabelträger
    Registriert seit
    14.11.2016
    Alter
    50
    Beiträge
    10

    MPL115A2 kompensation

    Hallo zusammen,

    habe ein kleines Problem beim auslesen von einem MPL115A2 über I2C

    die 16Bit Werte auszulesen funktioniert recht einfach, aber wie mache ich daraus Werte mit denen ich arbeiten kann ... Floating-point Notation

    die Werte müssten so ungefähr aussehen, Beispiel aus dem Manual
    a0 = 0x3ECE = 2009.75
    b1 =
    0xB3F9 = -2.37585
    b2 =
    0xC517 = -0.92047
    c12 =
    0x33C8 = 0.000790



  2. #2
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    371
    Es gibt ein polnisches Erklärbar Datenblatt.
    9623.pdf
    Geändert von DON (04.01.2017 um 12:46 Uhr)
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  3. #3
    Kabelträger
    Registriert seit
    14.11.2016
    Alter
    50
    Beiträge
    10
    Danke ...

    zum Glück ist der Code in englisch ... muss ich mir mal in ruhe rein ziehen

  4. #4
    Kabelträger
    Registriert seit
    14.11.2016
    Alter
    50
    Beiträge
    10
    Hallo

    hier meine Lösung um an die Kompensation zu kommen mit Berechnung ...
    Code:
    
    Dim M_tk1 As Integer            ' = 510
    Dim M_tk2 As Integer           ' = 535
    
    
    Dim M_a0 As Single
    Dim M_b1 As Single
    Dim M_b2 As Single
    Dim M_c12 As Single
    
    
    
    
    Dim M_ta As Single
    Dim M_pa As Single
    Dim M_c12x2 As Single
    Dim M_a1 As Single
    Dim M_a1x1 As Single
    Dim M_y1 As Single
    Dim M_a2x2 As Single
    Dim M_p As Single
    
    
    Dim Hpa As Integer
    Dim M_unn As Integer
    
    ' -------------------------------------------
    
    Buf(1) = &H04
    I2creceive &HC0 , Buf(1) , 1 , 8
    
    
    Pa = Buf(1)
    Pa = Pa * 256
    Pa = Pa + Buf(2)
    If Pa > 32767 Then
          Pa = Pa Xor &HFFFF
          M_a0 = Pa
          M_a0 = M_a0 / 8
          M_a0 = M_a0 * -1
    Else
          M_a0 = Pa
          M_a0 = M_a0 / 8
    End If
    Print "a0  = " ; M_a0
    
    
    
    
    Pa = Buf(3)
    Pa = Pa * 256
    Pa = Pa + Buf(4)
    If Pa > 32767 Then
       Pa = Pa Xor &HFFFF
       M_b1 = Pa
       M_b1 = M_b1 / 8192
       M_b1 = M_b1 * -1
    Else
       M_b1 = Pa
       M_b1 = M_b1 / 8192
    End If
    Print "b1  = " ; M_b1
    
    
    
    
    Pa = Buf(5)
    Pa = Pa * 256
    Pa = Pa + Buf(6)
    If Pa > 32767 Then
       Pa = Pa Xor &HFFFF
       M_b2 = Pa
       M_b2 = M_b2 / 16384
       M_b2 = M_b2 * -1
    Else
       M_b2 = Pa
       M_b2 = M_b2 / 16384
    End If
    Print "b2  = " ; M_b2
    
    
    
    
    Pa = Buf(7)
    Pa = Pa * 256
    Pa = Pa + Buf(8)
    
    
    If Pa > 32767 Then
       Pa = Pa / 4
       Pa = Pa Xor &HFFFF
       M_c12 = Pa
       M_c12 = M_c12 / 4194304
       M_c12 = M_c12 * -1
    Else
       Pa = Pa / 4
       M_c12 = Pa
       M_c12 = M_c12 / 4194304
    End If
    
    
    Print "c12 = " ; M_c12
    
    ' -------------------------------------------
          Buf(1) = &H12
          I2csend &HC0 , Buf(1) , 1
    
    
          Buf(1) = &H00
          I2creceive &HC0 , Buf(1) , 1 , 4
    
    
                            Pa = Buf(1)
                            Pa = Pa * 256
                            Pa = Pa + Buf(2)
                            Pa = Pa / 64
                            Ta = Buf(3)
                            Ta = Ta * 256
                            Ta = Ta + Buf(4)
                            Ta = Ta / 64
                            Temp1 = Ta - M_tk1
                            Temp1 = Temp1 * 100
                            Ta2 = M_tk2
                            Ta2 = Ta2 * -1
                            Temp = Temp1 / Ta2
                            Temp = 25 + Temp
                            Temp1 = Temp * 10
                            Temp1 = Temp1 + 2730
                            M_ta = Ta
                            M_pa = Pa
    
    
                            M_c12x2 = M_c12 * M_ta
                            M_a1 = M_b1 + M_c12x2
                            M_a1x1 = M_a1 * M_pa
                            M_y1 = M_a0 + M_a1x1
                            M_a2x2 = M_b2 * M_ta
                            M_p = M_y1 + M_a2x2
    
    
                            M_a1 = 115 - 50
                            M_a1 = M_a1 / 1023
                            M_a1 = M_a1 * M_p
                            M_p = M_a1 + 50
                            Hpa = M_p * 10
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Beispiel.jpg 
Hits:	11 
Größe:	83,6 KB 
ID:	370
    Ausgabe der gemessenen Werte über den Status ...
    Temp ist in Kelvin (x10)

  5. #5
    Kabelträger
    Registriert seit
    14.11.2016
    Alter
    50
    Beiträge
    10
    Hallo zusammen,

    irgendwie ist der Wurm drin,
    an den ersten Tagen waren die gemessenen Luftdruckwerte identisch mit ( http://www.wetter.net/2091/Duderstad...)-details-tag5 )

    seit einigen Tagen aber weit daneben ... ca. 40 HPa zu gering

    ausgelesene Werte:

    Code:
    ta  = 523
    pa  = 371
    a0  = 2014.0
    b1  = -2.384643553
    b2  = -0.98284912
    c12 = 0.000850674


    Formeln:
    Code:
    c12x2 = c12 * Ta
    a1 = b1 + c12x2
    a1x1 = a1 * Pa
    y1 = a0 + a1x1
    a2x2 = b2 * Ta
    Pcomp = y1 + a2x2
    Px = Pcomp * (115-50 / 1023) + 50
    HPA = Px * 10
    


    errechnete Werte:
    Code:
    c12x2 = 0.444053648
    a1    = -1.940589903
    a1x1  = -719.958862303
    y1    = 1294.041137695
    a2x2  = -513.04724121
    Pcomp = 780.993896483
    Px    = 99.623268126
    HPA   = 996


    HPA = 996 .... sollte aber um die 1031 HPa liegen

    z.B.
    gemessen am 08.01.2017

    Pa=362
    Ta=517
    HPa =1009
    Geändert von feuerring (15.01.2017 um 16:37 Uhr)

  6. #6
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    371
    Ganz wichtig die Temperatur muss reingerechnet werden.
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  7. #7
    Kabelträger
    Registriert seit
    14.11.2016
    Alter
    50
    Beiträge
    10
    Ganz wichtig die Temperatur muss reingerechnet werden.
    Hallo DON,

    wird sie doch ... siehe (Ta)

  8. #8
    Administrator Avatar von DON
    Registriert seit
    19.11.2016
    Ort
    Herford
    Beiträge
    371
    Hast du die Kondensatoren angelötet ?.

    im Datenblatt
    Tadc
    Geändert von DON (15.01.2017 um 20:31 Uhr)
    Ein Mensch mag noch so herausragende Fähigkeiten haben – wenn er arrogant und selbstsüchtig ist, sind sie nichts wert.
    Konfuzius


  9. #9
    Kabelträger
    Registriert seit
    14.11.2016
    Alter
    50
    Beiträge
    10
    Hast du die Kondensatoren angelötet ?.
    Es ist ein fertig aufgebautes Modul, mit allen externen Komponenten (https://www.adafruit.com/product/992)

  10. #10
    Moderator Avatar von Trexis5
    Registriert seit
    02.11.2016
    Ort
    Neu-Ulm
    Beiträge
    66
    An dem BMP085 habe ich mich auch schon versucht.
    Idioten Teil. Wie kann man nur solche Berechnungen fordern.
    Ich will nun einen anderen verwenden.
    Denke der ist Besser. Typ schreibe ich Morgen.
    Gruß Holger
    link zu mir..

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •