SDP810

andrax
2022-06-28
2024-10-17
  • andrax

    andrax - 2022-06-28

    Hallo zusammen,

    ich versuche einen Driver fĂĽr den SDP810 zu erstellen.
    Ich habe hier einen lauffähigen Code in Python.

    ## --------------- consts ---------------
    
    SDP810_I2C_ADDRESS = 0x25 # Sensoradresse
    sdp810 = SMBus(27) # Kanal auf Multiplexer
    
    
    def initSdp810():
        global sdp810
    
        sdp810.write_i2c_block_data(SDP810_I2C_ADDRESS, 0x3F, [0xF9]) #Stop messunf 0x3F + 0xF9 = 0x3FF9  (Adresse,register, daten)
        time.sleep(0.1)
        sdp810.write_i2c_block_data(SDP810_I2C_ADDRESS, 0x36, [0x1E]) # setze Diferentialmessung time=0.5ms 0x36 + 0x1E = 0x361E
        time.sleep(0.1)
    
    
    def readPressure():
        global sdp810
    
        data = sdp810.read_i2c_block_data(SDP810_I2C_ADDRESS, 0, 9) # adresse, register, länge in bytes
    
        press = twos_comp((256 * data[0] + data[1]), 16) / 240.0
        temp = twos_comp((256 * data[3] + data[4]), 16) / 200
    
        return press(1)
    
    
    def twos_comp(val, bits):
        if (val & (1 << (bits - 1))) != 0: # if sign bit is set e.g., 8bit: 128-255#
            val = val - (1 << bits)        # compute negative value
        return val    
    
    ## ---------------------------------------------------------------------
    
    
    
    
    initSdp810()
    pressureDiff = readPressure()
    

    Allerdings finde ich den Einstig zur Umsetzung nicht so recht.
    Kann mir jemand helfen?

    GrĂĽĂźe

    Andre

     
  • andrax

    andrax - 2022-06-30

    Guten Morgen,

    der SDP810 hängt normalerweise hinter einem Mux.
    Aktuell habe ich diesen Entfernt und er ist direkt angeschlossen.
    Adresse ist SMBUS 1 Gerät 0x25

    Mit der Library bin ich soweit, dass ich alles erstellt habe.

    Problem:
    _istate bleibt immer auf 0:

    Die Library scheint nicht zu laufen
    Muss SMBUS irgendwie berĂĽcksichtigt werden und wie?
    Wie sieht das aus wenn der MUX wieder dran hängt.
    Dann wäre es SMBUS (23), mit seiner Adresse 0x25
    Weiterhin ist mir unklar, wie ich den Gerätetreiber erstelle.
    Im Moment kann ich den Treiber nur als Funktionsbaustein benutzen.

     
  • andrax

    andrax - 2022-07-05

    Moin,

    ein Schritt vor und ein zurĂĽck.
    Hab jetzt den Mux (TCA9548A) wieder dran gehangen und verwende jetzt einen BMP280, da es hier einen Gerätetreiber gibt.
    i2cdetect -y 22 sagt mir, dass der Sensor dort mit der Adresse 76 gefunden wurde.
    Erster Versuch, I2C_Master dran gehangen und den BMP280.
    Zunächst rotes Dreieck vom BMP280. Danach den I2C port auf '/dev/i2c-22' gesetzt und siehe da es läuft.
    Heute Morgen Raspi gestartet und nichts geändert, wieder rotes Dreieck.
    Status im Stopmodus >> kein Treiber gefunden
    Status im Runmodus >> I2C-Bus läuft nicht

    Fehlerursache ???

     
  • eschwellinger

    eschwellinger - 2022-07-05

    was sagt hier dann i2cdetect -y 22?

     

    Last edit: eschwellinger 2022-07-05
  • andrax

    andrax - 2022-07-05

    I2cdetect -y 22 sagt folgendes:

    user@dev01raspi:~ $ i2cdetect -y 22
    0 1 2 3 4 5 6 7 8 9 a b c d e f
    00: -- -- -- -- -- -- -- --
    10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
    70: UU -- -- -- -- -- 76 --

    Mein Python-testscript bringt mir ebenfalls Werte.

    Chip ID : 96
    Version : 0
    Temperature : 26.56 C
    Pressure : 1001.0047602032474 hPa
    Humidity : 26.872745329201503 %

    Im Script habe ich folgendes eingetragen:
    DEVICE = 0x76
    bus = SMBus(1)

    Jetzt kann es nur noch sein, dass irgendwas blockiert und ich am besten den Raspie neu aufsetze oder ich hatte gestern in den Geräteeistellungen zufällig die richtigen Werte drin und natürlich nicht gespeichert :-(

     
  • eschwellinger

    eschwellinger - 2022-07-05

    nein, lieber mal das Projekt anhängen

     
  • andrax

    andrax - 2022-07-05

    Ja gerne,
    Den Code hab ich rausgehauen, bis auf den Aufruf vom BMP280.

     
  • eschwellinger

    eschwellinger - 2022-07-05

    aber muss dann hier nicht die Adresse angepasst werden?
    Wird der I2C Master denn grün im Gerätebaum wenn du online bist?

     

    Last edit: eschwellinger 2022-07-05
  • andrax

    andrax - 2022-07-06

    Moment,
    wie verhält sich das eigentlich mit dem Mux?
    wird der automatisch erkannt?

     
  • andrax

    andrax - 2022-07-08

    Guten Morgen,

    zur Info, hatte ich nicht erwähnt. Ich verwende die Gerätetreiber von Stefan Dreyer.
    Fehlersuche:
    Ich hab den TC9548 als gerät eingefügt und dieser wurde zunächst nicht erkannt.
    Ich hab nun >>dtoverlay=i2c-mux,pca9548<< in /boot/config.txt deaktiviert. nun wird der Mux erkannt.

    Nächster schritt, ich hab den Mux rausgenommen und den BMP280 direkt angeschlossen. Ging natürlich wieder nicht. Gerätetreiber gewechselt auf BME280 und siehe da er läuft. Auf dem Board steht >>BME / BMP280

    Wieder alles zusammengestöpselt, so wie ich es benötige.
    Raspi > MUX > BME280
    Bekommene keine ´Verbindung auf den BME280 (Rest läuft)

    Weis jemand was ich Einstellen muss oder kann mir ein Sample zur VerfĂĽgung stellen, so dass ich vergleichen kann warum ich keine Verbindung bekomme?

    GruĂź

    Andre

     
  • andrax

    andrax - 2022-07-08

    Guten Morgen,

    zur Info, hatte ich nicht erwähnt. Ich verwende die Gerätetreiber von Stefan Dreyer.
    Fehlersuche:
    Ich hab den TC9548 als gerät eingefügt und dieser wurde zunächst nicht erkannt.
    Ich hab nun >>dtoverlay=i2c-mux,pca9548<< in /boot/config.txt deaktiviert. nun wird der Mux erkannt.

    Nächster schritt, ich hab den Mux rausgenommen und den BMP280 direkt angeschlossen. Ging natürlich wieder nicht. Gerätetreiber gewechselt auf BME280 und siehe da er läuft. Auf dem Board steht >>BME / BMP280

    Wieder alles zusammengestöpselt, so wie ich es benötige.
    Raspi > MUX > BME280
    Bekommene keine ´Verbindung auf den BME280 (Rest läuft)

    Weis jemand was ich Einstellen muss oder kann mir ein Sample zur VerfĂĽgung stellen, so dass ich vergleichen kann warum ich keine Verbindung bekomme?

    GruĂź

    Andre

     
  • andrax

    andrax - 2022-07-12

    Guten Morgen,

    Problem gelöst.
    Es lag am MUX. ich habe jetzt den Sparkfun Qwicc Mux dran und es läuft.
    Es lag also an den Pullup Wiederständen.

    GruĂź

    Andre

     
  • eschwellinger

    eschwellinger - 2022-07-12

    Danke fĂĽr die RĂĽckmeldung, ist halt echt schwierig ohne die passende Hardware zuhaben zu helfen.

     
  • andrax

    andrax - 2022-07-12

    Ja, ist halt schwierig die Ursache zu finden wenn das Projekt schlecht Dokumentiert ist.
    Mir ist nur gestern aufgefallen, dass ich ein paar Werte von den BME280 bekommen hatte, bevor er in Störung ging. Dazu bin ich noch auf eine Seite Gestoßen wo der Mux mit Sensor und Pullup dargestellt war. Da war mir alles klar was los ist.

    GruĂź

    Andre

     
  • andrax

    andrax - 2022-08-04

    Hallo zusammen,

    geschafft.
    Der Gerätetreiber für den SDP810 läuft.
    Ich hab den Treiber in Stefans Bibliothek mit eingebaut.
    Getestet auf Raspi 4 >> sparcfun i2c mux >> SDP810
    Funktionalität:
    Ausgabe Temperatur und Differenzdruck.
    Ausgabe Massenstrom noch nicht getestet.
    Triggermodus parametrisiert aber noch nicht implementiert.
    Wer will kann es noch mit einbauen.
    Was mir noch nicht ganz klar ist, ist >Stage mux channel numbers<
    Der Sensor hängt am mux Port 2 (i2cdetect -y 23)
    Ich musste hier 2,0,0,0,0,0,0,0 eintragen damit er läuft.
    Warum?? weis nur Stefan.

    Als nächstes muss Treiber für
    -BMA456
    -ICP10125
    -ICP20100
    schreiben

    GruĂź

    Andre

     

Log in to post a comment.