Posts by Franky07

    Moinsen,

    Es kommt ganz darauf an wie du das Programmieren möchtest !
    Man kann es manuell Step by Step machen, dann musst du jede GPIO Ausgabe mit allen Verweilzeiten entsprechend dem Datenblatt des SPI Slaves händisch programmieren. Du kannst fertige oder vorgefertigte Bibliotheken sowohl für den SPI Bus, wo dir dann nur das Timing der Pegeländerungen abgenommen wird, oder du verwendest fertige Bibliotheken für die SPI-Slaves selber. Dann musst du schauen, was in und mit dieser Bibliothek möglich ist, und ob du eine erweiterte Funktion zum Setzen des MMCP23x17 Basierten CS möglich ist, oder oder oder...

    Ich habe keine Ahnung auf welcher SW Grundlage du das ganze aufbauen willst.

    Moinsen,

    Ja, du kannst pro CS bis zu MCP27x17 anschließen.

    Und ja, du entsprechend der Programmiersprache und Bibliothek dem RasPI Mitteilen, welcher CS für diesen Funktionsblock zuständig ist, und welche Adresse angesprochen werden soll. Einiges Bibliotheken bieten es bereits an, dass man den CS Pin separat angeben muss. Damit musst du dich als Programmierer dann nicht mehr darum kümmern, welcher CS für eine Datenübermittlung geschalten werden muss. Damit erzeugst du das CS für die DigiPots. Also musst du den Code entsprechend schachteln damit das ganze funktioniert.

    Ich hatte die Frage nur gestellt um zu verstehen wo dein dritter CS Pin aus deinen Erklärungen her kommt ich will nicht alle MCP23S17 auf einen eigenen CS Pin am Raspi legen.

    Das geht auch nicht ! Du kannst mit einem CS - Signal , bzw einem CS Port am RasPi, wie auch beim I²C immer nur 8 dieser MCP23x17 zusammenschalten,

    Dazu musst du eine, am besten OOP Routine programmieren, die diese 288 Digipots als Verwaltungsnummer behandelt. Als Parameter wird dann CS-Port am RasPi, die Slvae Adresse binär A0-A2, das Register A- oder B, sowie die Portnummer benötigt, um ganz gezielt einen GPIO der viele MCP23x17 im Ausgang umzuschalten.

    Moinsen,
    Wenn du einen LVT - Typ Optokoppler nimmst ( Preisgünstig ) musst du am EIngang auch einen gewissen Strom anliegen lassen, damit die interne LED auch schon hell leuchtet ;) Nur dann ist gewährleistet das der Optokoppler schaltet und nicht nur als Lichtgesteuerter Verstärker arbeitet.
    Damit brauchst du zwar nicht viel Spannung am Eingang ( meist nur um die 1,3 Volt ) was man mit einem Vorwiderstand einstellen kann, aber schon etwas Strom, um diesen Optokoppler zum Schalter zu machen. Oder du nimmst einen Optokoppler mit Schmitt-Trigger Eingang, der einiges mehr kostet, aber auch als Schalter sauber arbeitet, selbst wenn die Eingangsspannung mal schwanken sollte. Trotzdem die Ausgangsbeschaltung bleibt die gleiche, nur das du den abgezweigten Eingangsstrom minimal reduzieren kannst.
    Entweder du hast einen höheren Flächenbedarf bei geringeren Investitionskosten, oder einen geringeren Flächenbedarf bei höheren Bauelementekosten. Es ist im Prinzip erst einmal eine Frage der Umsetzbarkeit, denn ich hatte dir schon gesagt, oder geschrieben: Auf Grund der höheren Taktrate des SPI Busses unterliegen die Leitungslängen noch strengeren Anforderungen wie beim I²C Bus. Du muss das alles innerhalb der technischen Grenzen auch auf eine Platine bekommen, bzw du musst das HAT Prinzip von mehreren gestapelten Platinen anwenden, sonst die die Funktion bis zur letzten, Leitungslängen bedingten letzten Komponente bei diesem Spiel der Kaskadierung nicht mehr gewährleistet.

    Ich meinte eigentlich, dass jeder GPIO Pin des Rapberry pi am Ende ein CS Pin sein kann 😬 zumindest hab ich das so von dir verstanden.

    Ja, das kann sein ! Aber ich verstehe nicht wie du bei potentiell 24 Stück dieser MCP23S17 zuzüglich der noch ausstehenden Meßkanäle so viele GPIOs auf dem RasPI finden willst ?


    Wenn ich hier die blauen Kreuzchen zähle, hättest du maximal 19 GPIOs die du als CS Pin direkt von RasPI aus gesteuert nutzen könntest.
    Daher verstehe ich diese deine wiederholte Nachfrage nicht. Wenn du 288 CS für die DigiPOTs brauchst, musst du über einen Umweg gehen, wie gesagt entweder Schieberegister oder eine geeignete Zusammenschaltung von Portexpandern um diese gezielt und einzeln ansteuern zu können.

    Wie sich wiederholt schon sagte, ja es geht, aber du musst gedanklich loslassen, das du alle CS Schaltfunktionen direkt vom RasPI aus steuern kannst . Das geht nur über einen Umweg,

    Moinsen,

    Ich verstehe nun fast gar nichts mehr !
    Im Prinzip kannst du mit deinem DigiPOT eine Spannung einstellen. Soweit schön und gut. Aber wenn dir der Ausgangsstrom nicht reicht, egal ob für eine Messung oder eine Ansteuerung, die Kosten wie genannt aber nebensächlich sind, dann nimm doch einen z.B. LM358 OPV, der kann als Impedanzwandler fungieren, das DigiPOT entlasten, und einen höheren Ausgangsstrom bei UIN = UOUT liefern.
    Es gibt zahlreiche OPVs die sowohl mit einer höheren Eingangsspannung klar kommen, und sowohl in den Ausführungen Dual- oder Quad- OPV verfügbar sind. Dabei ist die maximale Eingangsspannung aus dem DigiPOT kommen von 24 Volt nicht das wirkliche Problem.

    Wenn das sofortige Erkennen einer Schaltzustandsänderung für die Gesamtfunktion so wichtig ist, kannst du auch wieder mittels eines OPVs , einem Vorwiderstand und einem Optokoppler des resultierende Signal aus dem Optokopplerausgang auf einen als INPUT arbeitenden MCP23x17 schicken. Eine Hilfsspannungsquelle für 3,3 volt bzw. 5,0 Volt kann man mit einem 2950 LDO aus der ohnehin vorhanden 24 Volt Spannung gewinnen. Diese wird nur benötigt um am Ausgang des Optokopplers eine kompatible Eingangsspannung für den MCP23x17 bereitzustellen.

    Dazu legt man eine Spannung am Collektor des Optokoppler-Ausgangs an, und am Emitter verbindet man diesen mit einen 2,2 K Widerstand mit Masse, und führt das Spannungssignal zwischen Emitter und Pulldown über einen weiteren Widerstand zum Input-GPIO des Portexpanders.
    Nun musst du allerdings dafür sorgen, das das RasPI selber über diesen Event informiert wird. Das geschieht über die Ausgänge INT_A und INT_B am Portexpander. Weiterhin musst du nun eine Programmroutine schreiben, welche auf diese GPIOs die mit diesen INT-Rückmeldern verbunden sind, auf einen Flankelwechsel triggern. Also einen Input Interupt auslösen, damit du sofort ( und innerhalb von 20 mSek ) dieses betreffende PORT-Register auslesen kann, um festzustellen an an welchen Input Pin des Portexpanders eine Spannungsänderung festgestellt wurde.

    Wenn die Anzahl der Messkreis übersichtlich bleiben, also nicht jeder DigiPOT Ausgang einzeln überwacht werden muss, kannst du hierfür den immer noch freien I²C Bus nutzen, und die I²C-Typen MCP23017 verwenden. Aber auch hier kann man dank der Skalierbarkeit durch Bus-Adressen 8 dieser MCP23017 an einem I²C Bus betreiben.

    Um noch ein Wort zu den Kosten zu verlieren. Die OPVs an den Ausgängen der DigiPOTs sind eher nicht das wirkliche Problem. Eher und viel teurer wäre eine DigiPOT zu finden, der sowohl mit dieser höheren analogen Eingangsspannung klar kommt, wie auch einen höheren Ausgangsstrom dauerhaft standhält.

    OPVs als Impedanzwandler am Ausgang sind im Bild 8-6 des Datsheets des MCP 41HV51-50K beschrieben.
    allerdings solltest du auf einen geeigneten OPV achten, der mit diesen Spannungen auch noch arbeiten kann.

    Da mit immer noch nicht ganz klar ist, warum du einen Ausgang eines DigiPOTs überwachen willst, oder ob es sich nur um eine Schaltzustandsüberwachung eines Result-Elementes ( hart geschaltete Komponente [ Buzzer , Kontrolllampe usw ] an oder aus ) handelt, wäre es besser wenn du hier mal eine Auszugsskizze anfertigst was du wirklich Messen, oder Kontrollieren willst, bzw. wie dieser DigiPOTs mit diesen zu überwachenden Stromkreisen in direkter Verbindung stehen.

    Moinsen jumbo125 ,

    ich kenne zwar nicht deine möglichen Bezugsquellen, und ich werde hier auch keine Werbung für einen speziellen Händler oder Online-Shop machen.
    Diese Sub-µC Schaltung die sich um die Bereitstellung der Stromversorgung des PI ( allgemein ) kümmert, ein echtes Aus, ein echtes An, realisiert mit einer sofortigen Wiederstartfähigkeit kostet, ohne das ich diesen Versandkostenanteilen zustimmen kann, inkl. Controller, MOSFET, Status LED und all dem benötigten Kleinkram genau 3,12 € inkl. MwSt.
    Damit wird der Schalter zu einem Schalter, oder bleibt es ! Dennoch wird das PI jedesmal auch wieder vollständig und korrekt heruntergefahren. Man muss es nicht so machen, man könnte es, und es schließt potentielle Fehler in der Bedienlogik aus.

    In diesem Sinne wünsche ich dir maximale Erfolge, immer eine fehlerfreie Bedienung, eine hohe und lange Lebensdauer aller deiner Komponenten. :thumbup:

    Moisnen,

    Wer bei seiner solchen Technik nicht die Weitsicht mitbringt, aber unbedingt weil sie gerade herumliegen "Schalter" verwenden will. Des Menschen Willen ist sein Himmelreich.
    Ich hoffe du vergisst niemals den Schalter wieder auf ON zu stellen bevor du manuell die Stromversorgung für einen Reboot unterbrichst. Dann läuft diese Shutdown-Routine im Kreis und schaltet deinen Server sofort weder ab, sobald das Shutdown Script aktiv wird.

    Ich hoffe nur du wirst dauerhaft Glücklich mit dieser Lösung, und stolperst niemals über diesen kleinen Fehler statt eines Tasters einen Schalter zu verwenden.

    wo ist das gefordert in #1? ahh warte nirgendwo

    Das sollte dir als Fachkraft der Elektronik aber bekannt sein das man mit einem Schalter, und das war meine Grundannahme aus dieser Wortverwendung Schalter, das er 2 getrennte Zustände wirklich herbeiführen will.
    Schalter ein , Pi geht ein. Schalter auf aus, Pi fährt herunter und wird vom Strom getrennt.
    Aber ich hatte auch schon geschrieben :

    Vielleicht sollten der TO sich mal detaillierter Äußern, was der Schalter genau machen soll, vor allen ob er mit diesem selben Schalter dann das PI auch wieder starten will ?

    Also was wird das nun mit einer Unterstellung ? Solange der TO nicht eindeutig verlauten läßt, er will das Pi nur mit einem "Schalter" herunterfahren, bekommt er es so auch nicht und ohne weitere Zusätze wieder mit dem selben Schalter an. Gut wenn man unbedingt ein Pi in den Shutdown schicken will, aber dann nochmal eine gesonderte Stromversorgungstrennung vornehmen um den Kasten wieder an zu bekommen - geiles Konzept.

    Solange der TO hier weiterhin mitliest aber sich nicht traut ein Statement abzugeben, warum er eine Schalter statt eines Tasters verwenden will, oder ob er nur die Begriffe verwechselt hat, kann ich auch dir vorwerfen, du hast möglicher Weise das Ziel des TO verfehlt.
    Für Klarheit kann nur er sorgen, in dem er sagt, was das Ziel sein soll. Diese Kombination aus Schalter und der reinen getasteten Funktion des Auslösens eines Shutdowns widerspricht sich.

    Für was willst du wieder grundlos den TE verwirren und überfordern?

    Erkläre dem TO bitte wie er mit einem Schalter ( nicht Taster ) sowohl das Pi einschalten wie auch ausschalten kann ? Ansonsten würde ja ein Taster zum Shutdown ausreichen !
    Ich erkenne den Sinn nicht, eine Schalter zu verwenden, wenn man bewusst den Begriff Schalter verwendet.

    Als Elektroniker solltest durchaus auch den Unterschied zwischen einem Taster und Schalter kennen ? Ich vermute mal das es so sein sollte.

    Denn wenn er ein Schalter verwenden will, aber das Prinzip eines Schnurschalter als harte Methode abzulehnen ist , keine Ahnung. Vielleicht sollten der TO sich mal detaillierter Äußern, was der Schalter genau machen soll, vor allen ob er mit diesem selben Schalter dann das PI auch wieder starten will ?

    ?? Was soll das denn schon wieder

    Er sprach von einem Kippschalter !
    Für meine Verständnis des Begriffes Schalter ist dieser kein Taster, sondern verbleibt in seiner Schalterstellung, bis eine erneute Änderung eintritt.
    Aus diesem Grund, wenn er Einschaltet also der Schalter dann auch in diesen Zustand LOW oder HIGH verharrt, muss er diesen Zustand weiterführend umsetzen. Denn wenn er dann diesen Schaltzustand ohne Zwischenschaltelement umkehrt wäre bei einen PowerOFF die Arbeitsweise wie bei einem Schnurschalter, welcher ja allgemein abzulehnen ist !

    Einschalten ist Einschalten = Herstellung der Stromversorgung. Und Ausschalten als zweite Schalterstellung ist dann das Auslösen des Shutdown mit anschließender Unterbrechung der Stromversorgung nach Beendigung des Herunterfahrprozesses.

    Muss man nicht so machen, man kann auch den PI herunterfahren lassen und weiterhin den Ruhestrombedarf in Kauf nehmen. Nur wie bekommst du dann mit dem selben Schaltelement das PI wieder an ?

    Moinsen,

    Nimm einen ATTiny, ein ESP ist weit aus und mehr als übertrieben.
    Dann nimmst du einen größeren MOSFET, damit du aktiv das PI schalten kannst.
    Wenn der Kippschalter den Status On bekommt, schaltest den MOSFET via des Tiny-GPIOs auf High damit der PI Strom bekommt. Dann brauchst du noch zwei Leitungen zum RasPI einmal als Eventauslöser für deinen Shutdown Script, und einmal um den Status am TX Pin zu erfassen. Wenn das RasPi, wahrscheinlich auch der andere PI-Clone vollständig herunter gefahren ist, fällt die Spannung am TX-GPIO auf LOW ab, und du kannst mit dem Tiny feststellen das der Shutdown Prozess abgeschlossen ist. Als Reaktion auf dieses Pegelwechsel "to Low" kannst du dann gefahrenlos den MOSFET veranlassen, die Stromversorgung zu unterbrechen. Dafür reicht ein Tiny25 oder 412 , welche dann selber in den Energiesparmodus gehen können. GGF wäre beim 412er sogar noch ein Pin / GPIO frei, um eine Status LED zu betreiben.

    Moinsen,

    Zur Nachfrage:
    Ja, jeder OUTPUT Chanel eines Portexpanders kann als eigenständig wirkender CS Chanel für einen weiteren SPI-Slave dienen.

    Und der ganze Rest:
    Ich weiss zwar immer noch nicht was dir so vorschwebt, aber :

    Ein MOSFET ist kein Schalter im Sinne eines Relais, außer du meinst einen Optokoppler mit MOSFET Ausgang, alternativ einer Levelshifterschaltung aber auch hier kann ich dir gleich den Wind aus den Segeln nehmen.

    LevelShifter als N-Kanal-MOSFET Schaltungen funktionieren, wenn die LOW-Side bei 3,3 Volt liegt nur bis max. 18 Volt auf der High Side. Mit alle den Vorwiderständen und Einkoppelwiderständen um einen Optokoppler zu betreiben, bzw einen solchen OPTO -MOSFET kommst du nicht nur auf einen höheren Bauteileaufwand, sondern auch auf einen höheren Platz- und Investitionskostenbedarf.

    Grundsätzlich ist die Frage zu stellen, sind diese "Spannungserkennungssysteme" eine Event-Funktion, also der RasPI muss umgehend auf eine Spannungsänderung reagieren, oder reicht es wenn diese innerhalb einer Programmroutine ( Statemachine ) nur regelmäßig oder bei Bedarf abgefragt werden.

    Wenn es sich um ein Eventsystem handelt, wird es ohnehin um einiges Aufwendiger. Wenn es ausreicht nur zyklisch die Spannung zu prüfen, ist die reine ADC Messung, dann auch ohne besondere Referenzspannungsquelle vom Materialeinsatz her günstiger, und platzsparender.

    Bei einem Eventsystem müsstest du zudem die INT_A und INT_B Ausgänge jedes MCP23x17 ( 16 Input Chanels ) noch mit dem RasPI verbinden, damit dieser Chip den RasPI anstoßen kann "Hallo, hier ist gerade etwas an einem GPIO passiert". Anschließend musst du dieses Portregister des betreffenden Portexpanders innerhalb von 20 mSek auslesen um zu erfahren, welcher GPIO eine Veränderung des Pegels festgestellt hat. Zudem kannst du auch hier keine 24 Volt auf den INPUT GPIO des Portexpanders prallen lassen, so das in diesem Fall sogar wieder sehr materialaufwendig Optokoppler notwendig werden.
    Da alle MCP23x17 über 2 getrennte Port-Register verfügt, bedeutet jeder weitere MCP23x17 als Input am RasPI ( egal wie abgefragt ) nochmals 2 zusätzliche GPIOs !

    -> Fall "Statemachine mit ADC"
    Widerstände für den ADC sind Cent-Ware ( 0,7 Euro-Cent SMD ) und mit ca. 3 Euro Materialeinsatz für einen ADC hast du 8 Eingangskanäle abgefrühstückt. Und du kannst sogar eine Aussage treffen ob die Spannung bei ungefähr 24 Volt liegt, oder ob durch eine anderen / äußeren Einfluß ( Leitungsbeschädigung / Korrosion / eingedrungene Feuchtigkeit ) sich ein potentieller Ausfall anbahnt.


    -> Fall "Portexpander als Inputconector":

    Im Vergleich mit einem Optokoppler brauchst du noch eine Hilfsspannung, 3 Widerstände und diesen Optokoppler pro Kanal -> mehr als die doppelten Kosten für 8 Kanäle plus zusätzlichen Aufwand für eine Event Programmierung und entsprechend viele freie GPIOs am RasPi .

    Wie gesagt, machbar ist vieles oder einiges, aber ohne das Ziel klar zu wissen, kann ich hier auch nur mehr oder minder im Nebel herumstochern.

    Grundsätzlich, wenn es eine Überwachungsfunktion ist, sollte man sich nicht auf einen digitalen boolschen Werte ( ja oder nein ) verlassen, dann sollte die vorausschauende Selbstdiagnose einen höheren Stellenwert einnehmen. Dazu kannst du auch um das Ganze zu parallelisieren den I²C und einem MCP23017 verwenden, um in einem eigenen Thread / Programm die ADCs mittels des sekundären SPI Busses abzufragen, um einfach schneller Zugriff auf die Werte zu erhalten, und natürlich eine schnellere Verarbeitung unabhängig des primären SPI Bus OUTPUT Controllings zu haben. Damit könnt eine SW Routine sich mit dem primären SPI Bus um die ganzen DigiPOTs kümmern, und eine eigenständige Programmroutine mittels MCP23017 ( 16 Ports mal 8 ADC Chanels ) oder MCP23008 ( 8 Ports a 8 ADC Chanels ) in dem I²C zuzüglich des sekundären SPI Bus um die Spannungsüberwachung.


    Moinsen,

    Zur Frage 1:
    Du kannst jeden freien GPIO der nicht von MOSI, MISO, und SCLK (SPI ) belegt wird, bzw. dann in der Erweiterung SDA und SCL ( I²C) als CS Pin nutzen.

    Zur Frage 2: Das ist ganz einfach, Du musst die Spannungsversorgung der DigiPots mittels eine MOSFETS unterbrechen können. Damit wird gewährleistet, wenn das System als Ganzes startet nur die Portexpander MCP23x17 am Bus aktiv sind. Jetzt sendet du an alle Portexpander den Befehl all ihre vielen GPIOs / Ausgänge auf HIGH zu setzen. Jeder dieser Ausgang stellt einen eigenständigen CS-Kanal dar, der mit einem der DigiPOTs verbunden ist. Dann kannst du diesen vielen DigiPOTs mit einem und einem GPIO vom RasPI verstärkt über einen P-Chanal MOSFET ( die Spannungsführende Seite schaltend ) mit einem Befehl unter Spannung setzen, damit diese aktiv werden. oder erst einmal grundsätzlich mit einer Betriebsspannung versorgt werden. Wenn du dann einen dieser DigiPOTs ansprechen willst, muss du nur dem entsprechenden Portexpander den Befehl geben, schalte bitte den dazugehörigen Port auf LOW, damit wird durch das CS to LOW der entsprechende DigiPOT aktiv und nimmt die Weisungen vom SPI Bus entgegen. Wenn der seine Befehle erhalten hat, dann gibts du im Programm wieder die Anweisung, diesen eine PORT des betreffenden Portexpanders auf HIGH zu setzen. Und nur wenn du eine Anweisung an einer der Portexpander absetzen willst, musst du den RasPi sagen, des den CS PIN ( Raspi GPIO ) auf LOW schaltet, damit der Portexpander zur Befehlsannahme aktiv wird. Also so viel CS-Pins am RasPi benötigst du nicht - maximal 3 Stück, oder gar nur einen, wenn du das Matrixverfahren anwendest.
    Oder kurz zusammengefaßt:
    CS am PI auf LOW, Portexpander den Befehl geben einen der CS- Ports für die DigiPOTS auf Low setzen, CS am PI wieder auf HIGH, Befehl an das DigiPOT senden, dessen Ausführung abwarten, den VIPER Wert intern speichern, den RasPI CS wieder auf Low, dem Portexpander die Anweisung geben, den DigiPOT CS wieder auf HIGH, und dann auch den RasPI CS wieder auf High.

    Zur Zusatzfrage:
    Der SPI ist noch längst nicht an der Kapazitätsgrenze ;) Du kannst bei den RasPI der 3er Generation auch einen zweiten SPI HOST aktiveren. Also wo sollte das Problem sein ?
    Aber Spass beiseite ;) Das geht auch noch mit dem einem SPI ! Du hast definitiv aus der 8 Fachkaskadierung für den CS noch einige Reserven, wo du weitere SPI Komponenten mit einem CS Signal versorgen könntest.
    Den 3 ( CS ) * 8 ( Portexpander ) *16 ( Ports ) = 384 CS- Ports ! In der Summe 24 dieser MCP23S17 !
    Und hier nun zu deinem Irrtum. Mit einem MOSFET kannst du nichts messen, höchsten etwas verstärken oder Schalten !
    Also musst du auf ADC ( Analog-Digital-Wandler ) zurückgreifen, wenn du wirklich Messen willst. Andernfalls könnte man auch über die VIPER Stellung der DigiPOTs auf die resultierende Spannung zurückrechnen !?
    Aber bleiben wir mal bei den Methode echtes Messen.
    Hier kann man z.B. 8 Chanal ADCs verwenden, wo auch wieder nur ein CS Pin für 8 Messkanäle benötigt wird. Hier kann man nun die Entscheidung treffen, besser gesagt man muss sie treffen, wie genau soll das Meßergebnis werden oder sein, bzw. auf wie viele Nachkommastellen soll das Meßergebnis genau sein ? Davor hängt ab welche Auflösung dein ADC haben sollte. Aber das ist noch nicht alles, du brauchst noch einen Spannungsteiler ! Denn ein ADC kann nur bis zu seiner Referenzspannung einen Meßwert erfassen.
    Gehen wir von max. 24 Volt aus, du eine Referenzspannung von 4,096 V ( MCP1542) bereitstellen kannst, benötigst du einen Spannungsteiler 41kOhm zu 8,2 kOhm um diese 24 Volt auf 4,096 Volt herunter zu skalieren. Und nun kommt es drauf an wie genau du es haben willst ? Bei 10 bit teilt sich diese Referenzspannung in 1023 Schritt auf. Das heißt du hast eine Spannungsauflösung von 4,096 V/1023 = 0,004 * des Teilungsfaktors des Spannungsteilers. Also in diesem Fall mit einem 10 Bit ADC MCP3008 hast du eine Auflösung der 24 Volt bis hinab zu 0 Volt in 0,024 Volt Schritten. Genauer wird es nicht, oder du erhöhst die Auflösung des ADCs z.B. auf 12 Bit so das der Teilungsmaß nicht mehr nur 1023 sonder dann 4095 ( MCP 3208) ist !
    Also kannst du mit einem CS Chanal 8 Meßkanäle mit einmal abfrühstücken. Ausgehend 384 - 288 = 96 frei CS Chanals das wiederum mal 8 Kanäle pro ADC = 768 Meßkanäle !!!

    Dann das Thema Spannungsteiler und Strombelastbarkeit der DigiPOTs, ob du dieses Ausgangssignal der VIPER Abgänge noch verstärkst ( Stichwort: Impedanzwandler -> LM358 ) damit die parallel Messung zu keiner Überbelastung der DigiPOTs führt - keine Ahnung was du insgesamt vor hast.

    Aber grundsätzlich sind hierfür die 3 angedachten CS-PINs am RasPi ausreichen, wenn du nur die CS Pins an den DigiPOTs und ADC schalten willst. Wenn du allerdings die Matrix Methode Anwenden wolltest, hättest du noch 5 * 16 Ports a 8 Meßkanäle - also für 640 Meßkanäle Luft, und bräuchtest nur einen einzigen CS Pin am RasPI !

    Alles ein Frage des Investitionsvolumens, und des Verdrahtungsaufwandes.

    Moinsen,
    Dein POT hat einen PIN der nennt sich SHDN [ mit Überstrich ] bei allen Gehäusebauformen Pin-Nr.7.
    An diesem muss eine Spannung für "ausgeschaltet" zwischen 0,0 V und 0,2 * VC V anliegen. Oder vereinfacht gesagt:
    - bei VC 3,3 Volt ist der Chip abgeschaltet wenn dort 0,0 V bis 0,66 V anliegen
    - bei VC 5,0 V entsprechend 0,0 bis 1,0 Volt

    und wenn du diesen POT einschalten willst muss eine Spannung 0,45 * VC bis VC + 0,3 V ->:
    - bei VC 3,3 V zwischen 1,49 V und 3,6 V
    - bei VC 5,0 V zwischen 2,25 V und 5,3 V

    an diesem Pin anliegen. Oder man verbindet diesen Pin gleich mit dem VL ( digital ) damit der Chip ständig via CS zur Befehlsannahme bereit ist. Allerdings benötigt man dann genauso viele CS Ports die einzeln und gezielt auf LOW gesetzt werden können wie du POTs beabsichtigst zu verbauen. In deinem Fall 288 Stück.
    Ein MCP23S17 bietet 16 Ports die einzeln geschaltet werden können, und es aber nur maximal via Bus-Adresse 8 dieser MCP23x17 parallel geschaltet werden. Das heißt du kannst mit einem solchen Block aus 8 dieser MCP23x17 nur 128 GPIOs bereitstellen. Bei der I²C Variante wäre hier Schluss, außer du stellst einen weiteren I²C Host zur Verfügung, welcher dann aber nur als SW- Emulation läuft. Dieser läuft nur mit dem Minimal-Themo von 400 kHz ! In der Summe kämst du auf 2 x 128 = 256 GPIOs aus diesen MCP23017 ( I²C Version ) -> also fehlen dir noch irgendwo 288 - 256 = 32 GPIOs mit denen du die notwendigen CS Signale generieren könntest.

    Also zurück zum Thema SPI Bus:
    Hier kannst du mit einem CS GPIO des RasPi auch wieder durch Parallelschaltung der MCP23S17 ( SPI Version ) jeweils 8 dieser Expander koppeln. Also auf deine beabsichtigte Stückzahl der POTs müßtest du 18 dieser MCP23S17 verbauen. In der Aufteilung CS0 = 8 x MCP23S17 = 128 Ports mit CS1 = 8 x MACP23S17 = 128 Ports und CS2 = 2 x MCP23S17 = 32 Ports in der Summe 288 CS-Ports !

    Das gescheit auf einer Platine unterzubringen, wo die Leitungslänge ( MOSI, MISO, SCLK ) bei High-Speed SPI < 1,2 MHz nur 12 cm betragen darf - nahezu unmöglich, wenn man von einer 2 Layer-Platine ausgeht. Ab 6 Lagen wäre es dann innerhalb der Leitungslängengrenzen möglich. Aber eine 6 Layer-Platine bekommt man nicht für einen Apfel und Ei.

    Aber dann gibt es ja noch die Methode CS und SHDN als Matrix zu verwenden.
    Hier könnte man sagen, 2 MCP23S17 schalten jeweils die CS, und ein weiterer MCP23S17 schaltet die SHDN, damit immer nur in der Paarung einer überkreuzenden Matrix jeweils 32 dieser POTs unter Strom gesetzt werden, aber nur einer das CS Signal erhält um den Befehl entgegen zu nehmen. Alle anderen POTs die SHDN auf LOW sind interessieren sich dann ohnehin nicht für das CS LOW Signal, sie ignorieren es.

    Vereinfacht gesagt: 32 CS Leitungen und horizontalen und bis zu 16 SHDN Leitungen in der Vertikalen ergeben dann diese Schaltungsmatrix, wobei jeder Kreuzungspunkt eines dieser POTs darstellt. Allerdings sehr aufwendig, weil du vor der Trennung des SHDN Signal des VIPER Wert im RAM speichern musst. Besser wäre hier die EEPROM Variante dieses POTs ! Da macht die Programmierung allerdings auch etwas komplizierter, denn du musst erst den VIPER Wert setzen, die Bestätigung abwarten, und dann diesen gleichen Value in den RAM, bzw. EEPROM schreiben lassen. Laut Datasheet soll die RAM-Version den VIPER Wert auch bei SHDN LOW nicht verlieren. Allerdings geht die Information dann dauerhaft verloren, wenn die Schaltung komplett Stromlos gemacht wird. Mit der EEPROM Variante bliebe die letzte eingestellte VIPER Position im EEPROM jedes POTs erhalten und könnte mit den vollständigen Power ON sofort wieder eingenommen werden. Andernfalls ( RAM Version ) starten die POTs immer mit dem höchste VIPER Value Wert -> Größter einzustellender Widerstandswert.

    Wie gesagt es geht. Du kannst auch die MATRIX Encoder MAX7219 verwenden, wo du jeweils 8 * 8 = 64 dieser POTs von einem solchen Encoder ansteuern könntest. Hier müsstest du 5 dieser MAX7219 kaskadieren um deine 288 DigiPOTs anzusteuern. Das Verdrahtungsprinzip währe ähnlich, nur das du 8 SHDN Leitungen mit jeweils nur 8 CS Leitungen verknüpfen kannst. Also diese Matrix 8x8 müsstest du jeweils 5 mal und getrennt aufbauen. Das würde zwar das PCB vereinfachen, aber die Programmierung merklich verkomplizieren.

    MOSI, MISO, SCLK bleibt alles das selbe. Dieses wird einfach sternförmig auf alle SPI-Slaves verteilt. Nur der jeweils mit CS Low angesprochene Slave nimmt die Befehle via MOSI entgegen und führt diese aus.

    Moinsen,

    Grundsätzlich ja !
    Die Art und Weise der Ansteuerung wird dadurch bestimmt, welche Zugriffsraten du benötigst.
    Einmal kannst du das direkt machen, in dem du direkt via z.B. eines / mehrerer Portexpander oder Schiebergister den CS steuerst. Dieser muss im Fall der Ansprache eines der DigiPOTs von High auf LOW fallen. Das setzt natürlich entsprechende viele CS Ports voraus.
    Du kannst auch mit einer Kombinationsmatrix aus CS und SHDN arbeiten, in dem du mehrere diese POTs mit einem CS ansteuerst, aber als Trennung zwischen den einzelnen Chips das SHDN Signal ( Pin 7 ) jeweils auf HIGh schaltest. damit könnte man in einer Matrix Ansteuerung aus CS und SHDN den Verwaltungsaufwand der Gerätebestimmenden GPIOs reduzieren, und dem du immer ein CS auf Low setzt, an welchem mehrere dieser POTs angeschlossen sind, aber und zuvor aber mittels des SHDN "to High" das spezielle POT aktivierst welches du ansprechen willst. Natürlich musst du dafür auch gewissen Signallauf- und Verarbeitungszeiten zB. die og. Portexpander oder Schieberegister einplanen.

    Allerdings musst du bei der Nutzung des SHDN Ports "to High" mind. 20 µSek warten, bevor das betreffende POT auf das nachfolgende CS "to LOW" reagiert, und du dann deine Anweisungen senden kannst.

    Falls du beabsichtigst MCP23S17 als schnelle Portexpander zu verwenden, um ein möglichst schnelle Umschaltung zwischen den verschiedenen POTs zu erreichen, musst du diese wie auch die POTs mit einer VC von 5,0 Volt betreiben, um die maximale Datenrate über das Bussystem ( 10 MHz Bus-Clock ) nutzen zu können. Allerdings von einem PI zu verlangen des es Dauerhaft und permanent diese 10 MHz auf dem SPI Bus, bzw 1,7 MHz auf dem I²C Bus erbringt ( wenn du den günstigeren MCP23017 verwenden möchtest ) erbringt und das mit einem "Non Realtime OS" grenzt schon etwas - vorsichtig ausgedrückt an Wagemut bis Großenwahn.

    Hier wie schon gesagt, ohne zu wissen in welcher Abfolge und mit welcher Geschwindigkeit diese POTs geschaltet werden sollen, könnte man wenn Latenzen von einigen bis 10 mSek zulässig wären das ganze auch mittels I²C oder einem langsameren SPI SCLK Takt umsetzen. Im Idealfall mit 3 Portexpandern MCP23S17 und SPI 20 MHz SCLK Takt könnte man diese Verschaltungsmatrix aus CS mit SHDN Materialarm aufbauen.
    Schieberegsiter sind nur dann sinnvoll, wenn der Zugriff auf die POTs in ihrer Positionierung am den Steuerkanälen CS ( Primär ) SHDN (Sekundär ) in einer festen seriellen Reihenfolge stattfinden soll. Wenn der Zugriff eher einem RANDOM Zugriff und Eventbasierend erfolgen soll, ergibt sich bei und mit Schieberegistern kein Zeitvorteil.

    Moinsen,

    Wer rufst den bei einem piependen Rauchmelder sofort die Feuerwehr und schaut nicht erst einmal, ob er jemanden in der Wohnung erreichen kann?

    Das ist wieder so eine Gegenfrage wo man sieht, das du wirklich nicht eine Situation konsequent durchdenken kannst !
    Sorry, das ich das so knallhart sagen muss.
    Dann nimm ein Mehrfamilienhaus oder eine typische Berliner Mietskaserne, und dann piept da so ein Ding vor sich hin, was auch im Treppenhaus zu hören ist.

    Was machst du ?
    - Du klingelst bei allen Mietern die auf dieser Etage wohnen, in der Hoffnung das jemand freudestrahlend die Tür öffnet und dir berichtet es ist ein Fehlalarm ?
    - Du brichst widerrechtlich in fremde Wohneinheiten ein, um nachzusehen ?
    - Du holst erst einmal die Polizei, die das Überprüfen sollen, weil gerade niemand die betreffenden Türe aufmacht ?
    - Oder du rufst gleich die Feuerwehr ?

    Entscheiden sie sich jetzt !

    Nachtrag aus öffentlicher Quelle:
    "Laut Berliner Feuerwehr waren im vergangenen Jahr 81 Prozent dieser Einsätze Fehlalarme! Insgesamt gab es berlinweit 18.708 Einsätze zu Bränden im Jahr 2022. Dabei musste die Feuerwehr 4885-mal wegen einer ausgelösten Brandmeldeanlage ausrücken. Darunter: 3961 Fehlalarme! Veröffentlichungsdatum 1.12.2023"

    Moinsen

    Was ist denn ein Menschenleben wert? Wären 500 € pro Einsatzfahrt ok oder ist eine potenzielle Rettung nur 100 € wert? Macht es einen Unterschied ob es einen Erwachenen oder ein Kind treffen könnte oder den Opa oder die eigene Frau? Was würdest Du machen, wenn Dein Nachbar den Signalton hört, aber sich denkt ach, ich rufe nicht die Feuerwehr! Das kostet die Gemeinde wieder 1200 € und dann hat die Nachbarin vielleicht nur den Braten anbrennen lassen. Was würdest Du dann machen, wenn Deine Frau in so einem Fall bestenfalls nur verletzt wird?

    Darauf möchte ich mit einer Statistik antworten.
    Dazu muss man nicht wieder mit der Moralkeule antworten, oder die zum Einsatz bringen sondern sich nur mit reinen Zahlen und Fakten beschäftigen.
    Diese Frage, nach dem was ein Menschenleben wert ist, kann man in diesem Fall auch damit beantworten:
    Wenn man nicht im Einzugsgebiet einer Berufsfeuerwehr wohnt, sondern wo diese Leistungen von freiwilligen Feuerwehren erfüllt werden, was ist dann wenn diese gerade zu einem Fehlalarm ausgerückt sind, oder wieder sich danach gerade noch in der Nachbereitung befinden und ein wirklicher Alarm eingeht. Was dann ? Dann kommen die Kameraden auch verspätet, oder es müssen Kameraden aus benachbarten Städten und Gemeinden mit einem längeren Anfahrtsweg anrücken -> was dann ?
    Dazu verweise ich auf ausreichend vorhandene Quellen, die man sich zusammensuchen muss, oder man verfolgt den "Sachsenkanal" einem Regionalsender für den Raum Dresden. Dazu gab es schon Ende Nov. letzten Jahres ein ganz tolle Aufstellung und Übersicht. Durchschnittlich werden für den Bereich Ostsachsen ( nahezu das Gebiet des ehemaligen Bezirks Dresden ) welche mit einer Bevölkerung von knapp 1 Millionen Einwohnern, die zum Einzugsgebiet der freiwilligen Feuerwehren gehören also nicht durch Berufsfeuerwehren abgedeckt werden - durchschnittlich 7 Fehlalarme pro Tag, was in der Aufwandssumme nur für diesen Teil, und ohne die Landeshauptstadt Dresden mit über 5 Millionen Euro Entschädigungskosten den Gemeinden entzogen werden, weil diese "Sonderleistungen" von keiner Gemeindeversciherung gedeckt werden. Das heißt nichts anderes, das dieser Zwang zur Verwendung von Rauchmeldern nicht nur Leben rettet ( wenn man sich dazu aber anschaut wie hoch der Anteil der tatsächlichen Wohnungsbrände ist, dass im Vergleich zu Hilfs- und Unterstützungsleistungen, und wie hoch dabei noch der Anteil der Fehlalarme ist ), sondern auch Leben gefährdet und unnötige Kosten aufwirft. Wenn man dann dazu noch ganz objektiv die Lage in den Ballungszentren betrachtet, wo Großstädte Berufsfeuerwehren haben und unterhalten, kostet dieser Fehlalarm, weil das Personal ohnehin entlohnt werden muss nur max. die Fahrtkosten. Unter Einhaltung der 12 min Regel bis zum Einsatzort maximal 20€ pro eingesetztes Fahrzeug.
    Und gerade weil die Dichte und Kapazitäten in den "Nichtballungszentren" zum Teil so gering ist, das wegen solchen Fehlalarmen weiter entfernte Kameraden zum Einsatz müssen, längere Anfahrtszeiten haben passiert auch genau das Gegenteil. Dazu hatten wir etwas nördlich in der Gemeinde Diesbar Seislitz erst unlängst so einen Fall, wo eine ältere Frau verbrannte. Aber nur deswegen, oder mitursächlich, weil die zustände Ortsfeuerwehr zu einem "Fehlalarm gerufen wurde, und aus anderen umliegenden Gemeinden und sogar die Werksfeuerwehr des Chemiewerks Wacker aus Nünchritz anreisen musste. Die Feuerwehr ist keine 150 Meter von dem Haus entfernt gewesen, wo diese ältere Frau verbrannte. Aber die ortsansässigen Kameraden waren gerade woandershin unterwegs. Was nützt dir eine Alarmierung, die sich dann als Fehlalarm herausstellt, aber die Personalkräfte dann nicht für den tatsächlichen Ernstfall zur Verfügung stehen ?
    Also Moral hin oder her, man kann es sehen wie man will, man kann aber eben nicht einfach die allgemeine Keule auspacken und alles über alles Stülpen, und Gebiete mit einer geringeren Besiedlungsdichte mit einem Ballungszentrum gleichsetzen.

    Wenn du der Meinung bist, dass es sich die Gemeinden leisten können müssen, die ohnehin sich schon keine Berufsfeuerwehr leisten können, dann auch noch Einsatzentschädigungen wegen einem technischen Ding bezahlen müssen, was nicht zu 100 % zuverlässig funktioniert, und damit jährlich Abermillionen aus den Stadt- und Gemeindekassen verbrannt werden, dann ist deine Einstellung sehr einseitig.

    Ich habe nichts gegen diese Dinger in Altenheimen und öffentlichen Gebäuden oder Krankenhäusern, aber ob es wirklich notwendig ist, jede Wohneinheit damit auszustatten ? Zumal wie viele Menschen sterben wirklich pro Jahr bei einem Wohnungsbrand ? Das ist die Versicherung auf den 1 Fall von 1 Millionen .
    Unter dem Strich kann man zusammenfassend sagen für diese 1 Millionen Menschen wo die Zahlen aus dem letzten Jahr veröffentlicht wurden - außer Spesen ( mehr als 5 Millionen € ) nichts gewesen. Es sind nicht mehr Menschen gerettet worden, im Gegenteil, in den ganzen Randgebieten um diese Ballungszentren ( oder hier nur das ein Dresden selber ) sind sogar mehr Menschen ge- oder verstorben, weil die Einsatzkräfte nicht pünktlich am Einsatzort sein konnten.

    Lässt sich anhand des Bildes schon was sagen? Ist nur der Ausschnitt bei dem der Buzzer tatsächlich piept (über Prüftaste). Ich kann auch nochmal eine Aufnahme machen wenn er nicht piept.

    So wie ich das sehe sind das Impuls von ca. 3 mSek, was ungefähr eine Tonfrequenz von 330Hz entsprechen würde. Also eher ein tiefer Ton. Aber das ist dann ein passiver Buzzer, der auf diese Anschwindimpulse angewiesen ist. Da kannst du mit einer Z-Diode oder einen Glättungskondensator nicht viel machen, bzw gar nichts, wenn auch noch ein Ton erhalten bleiben soll.

    Ich würde hier zur Methode Sub-Controller mit Optokoppler greifen, und dann den µC so lange warten lassen bis das gepiepe aufhört. Das heist mit der ersten Feststellung einen mind. 20 mSek Impuls an den PI rausgeben, und dann aber solange warten bis keine Impulsfolger mehr festgestellt werden kann, bevor er den nächsten Auslöseimpuls an den PI senden kann, oder darf.

    Moinsen

    OT

    Wenn durch nur eine von hundert Meldungen bei der Feuerwehr auch ein Menschenleben gerettet wird, dann ist der Einsatz von Rauchmeldern schon gerechtfertigt.

    Das mag für Großstädte mit einer Berufsfeuerwehr zutreffend sein, aber denke auch mal an die kleinen Gemeinden und Städte, wo solche Falschalarme nur Kosten für die Gemeindekasse verursachen. Dazu muss man sich nur mal regional mit den Kreistagssitzungen der Gemeinen und sg. Kreisstädte beschäftigen. Da erfährt man dann genau das Gegenteil. Wenn du bei einem von 100 Einsätzen eine Menschenleben rettest, okay, unbestritten. Aber wenn du Feuerwehreinsätze von freiwilligen Feuerwehren betrachtest die dann zu einem sg Wohnungsbrand ausrücken, und mit der entsprechenden Technik und Personal , dann schlägt jede sinnlose Anfahrt in der Gemeindekasse mit Minimum 1.200 € zu Buche, die dann die Gemeinen an die Kameraden der Feuerwehr entrichten müssen. Und wenn dann eine kleine Gemeinde mit nur 20-30.000 Einwohnern so auf 20 oder mehr Fehlalarme im Monat kommt, wo jedesmal die freiwillige Feuerwehr ausrücken musste, dann reißt das weitere Löcher in die ohnehin klammen Kassen der Städte und Gemeinden. Das ist halt der Unterschied zwischen eine Großstadt wie Leipzig, Dresden, München oder so, und den vielen kleineren Gemeinden, die sich keine hauptamtliche Berufsfeuerwehr leisten können.