MAX31865 über SPI (für PT100 und PT1000 Temperatur Sensoren) auslesen

Begonnen von Adimarantis, 27 Juli 2020, 17:38:20

Vorheriges Thema - Nächstes Thema

Adimarantis

Ich wollte schon geraume Zeit die MAX31865 Platine ausprobieren um meine PT1000 besser auszulesen (über ADS1115 ist die Auflösung nicht so gut und das Modul ist eher mit heisser Nadel gestrickt).

Leider wird ja SPI in FHEM nicht so generisch unterstützt wie I2C.
Da ich nicht gerade der Perl Profi bin, habe ich mich eher an "C" und Python Beispiele gehalten und jetzt ein halbwegs lauffähiges C-Programm hingetüftelt. So ganz rund läuft es leider nicht (siehe Kommentare im Code) aber seinen Zweck erfüllt es soweit.
Das Programm geht direkt mit ioctl an die SPI device und den entsprechenden Pins MOS0,MOS1,SCLK,CE0 (oder CE1) und benötigt keine weiteren libraries. Theoretisch gehen mit der Lösung zwei Devices (noch nicht probiert). Ein Beispiel wie die Platine zu verdrahten ist inklusive einer Python library gibt es bei adafruit (Unterschied ist nur, dass adafruit eine normale GPIO für CS nimmt, bei mir werden eben CE0/CE1 genutzt).

Dieses starte ich jetzt einfach über ein DOIF und qx und lese die Ausgabe in ein Reading ein.


define DI_MAX DOIF ([+:01]) ({my $temp=qx(~/spi_max31865 1);fhem "setreading DI_MAX temperature $temp";})
   

Das compilierte C-Program steht im home vom fhem user. Instruktionen sind im header vom .c file.
Anregungen warum manche Dinge noch etwas seltsam/verzögert reagieren sind herzlich willkommen.

Viel Spass beim Ausprobieren,
Jörg

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU)/RfxTrx433XL/Zigbee
Module: 50_Signalbot, 48_HomeConnect, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)