Abfrage eines PCF8574 ob Taste gedrückt oder nicht

  • Hallo

    diese kleine Platine kenne ich. Jeder Kanal (von den 4) besteht jeweils aus einem Mosfet und 2xR. Genau diese Schaltung verwende ich.

    Noch etwas zu den 3,3V und 5V. Ich verwende eine einheitliche Spannung von 5V. Es ist leichter von 5V auf 3,3V zu kommen als umgekehrt. Leider hatte ich schon mehrmals das Problem der Leitungslänge und Stromverbrauch. Da man mit einem oder mehreren HT16K33 viele LEDs betreiben kann kam es dazu bei 512 LEDs zu 10mA auf über 5A. Da merkt man jeden cm Kabel.

    Da der I2C Bus bei mir mit 5V läuft befindet sich an den Platinen mit 3,3V immer eine Wandler von 5V zu 3,3V und Pegelwandler von 5 auf 3,3.

    Das Programm stammt von Willy ist hier oben auf der Seite drin.

    Mit dem lesen hast du recht. Da muss ich noch viel machen. Mache es sehr nicht so trocken. Nicht das ganze Buch durchlesen und hinterher feststellen das es im Leben ganz anders aussieht. Mache lieber es am Objekt, etwas lesen und der Test an der Hardware dazu. Das ergibt seh^r schnell ein Erfolgserlebnis.

  • Moinsen,

    ich verstehe das Problem nicht wirklich,

    Das Problem wird wohl sein, dass ihm gerade ein Planungsfehler aus früheren Zeiten, wo er noch wie in Beitrag #26

    zu lesen, als er noch mit AVR, wahrscheinlich irgendwelchen 5,0 Volt Arduino Boards rumgemacht hat jetzt auf die Füße fällt. Wenn dieser Schaltplan aus #22 und seinen dazugehörigen Erweitungsplatinen aus dieser Zeit stammt, und zudem zu lesen ist

    Bisher habe ich für Int keinen gebraucht.

    hat er diese PF8574 INPUT-Abfragen immer mit einer Staemachine erschlagen. Nur kommt er bei der Mehrfachverwendung und dem PICO in Verbindung mit µPython auf diesem Weg nicht weiter. Ich würde jetzt behaupten - unabhängig der VC / bzw. GPIO Input-Spannung hat er eine ausreichend große Lücke im Basiswissen um die Funktionen und die Verwendung von Portexpandern an einem µC-Bus hat. Deswegen stolpert er nicht nur über die Levelshifter 3,3 V to 5,0 V für SDa / SCL und INT, sondern hat auch mit der Programmierung von µC noch erhebliche Defizite, wie man solche Schaltungen so aufbaut, zudem wie man mit möglichst geringer CPU Auslastung dennoch den gewünschten Effekt erzielen kann. Eigentlich muss diese Masterplatine mit dem PICO als HAT noch einmal komplett auf den Konstruktionstisch, damit man mögliche Verdrahtungsfehler auch zu den Erweiterungsoplatinen für andere I²C Slaves vollständig ausschließen kann, oder man schafft eine andere geeignete Möglichkeit, diese Master-Platine auch mit Vc 5,0 V gespeist zu betreiben, sieht dann aber, wenn alle anderen wohl / offensichtlich schon vorhandenen Platinen ausschließlich mit 5,0 Volt betrieben werden entsprechend viele Levelshifter vor. Zumal er, der TO bedenken muss, das die OUTPUT GPIOs des PICOs nur mit 2mA belastet werden können. Ausgehend von den genannten AVR die bis zu 20 mA liefern können, muss aus meiner persönlichen Sicht diese ganze, den PICO tragende, MASTER Platine noch einmal komplett überarbeitet werden, wenn er sein PICO nicht riskieren will.

    Franky

  • Das Problem wird wohl sein, dass ihm gerade ein Planungsfehler aus früheren Zeiten, wo er noch wie in Beitrag #26

    zu lesen, als er noch mit AVR, wahrscheinlich irgendwelchen 5,0 Volt Arduino Boards rumgemacht hat jetzt auf die Füße fällt

    Ist auch lösbar, neue Platinen kosten nicht die Welt und bis dahin tun es auch fliegende Verdrahtungen, man darf sich halt nicht selbst beschränken!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Moinsen

    Jeder Kanal (von den 4) besteht jeweils aus einem Mosfet und 2xR. Genau diese Schaltung verwende ich.

    Definitiv nicht ! Wenn man auf diese Platinen schaut verwenden die dort eine 2N7000 und keinen BS138 ! Das macht auch den Unterschied, bis zu welcher Signal Frequenz diese Schaltung überhaupt noch mitspielt. Das diese Schaltungen als 4-Channel auch für den SPI-Bus bestimmt sind, kommt diese Schaltung ( auch wenn der Schaltplan anhand der Schaltplansymbolik gleich zu sein scheint ) mit höheren Signalraten klar.

    Da man mit einem oder mehreren HT16K33 viele LEDs betreiben kann kam es dazu bei 512 LEDs zu 10mA auf über 5A. Da merkt man jeden cm Kabel.

    Dann solltest du dir auch um das Ausgangssignal des PICO ebenfalls Gedanken machen. Auch wenn es mit einem oder zwei solcher Module vielleicht noch funktionieren möge, der HT16K33 saugt dir aus dem GPIO des PICO immerhin schon das, was das PICO maximal liefern kann, satte 2 mA ( siehe Datenblatt für das Adafruit Modul 16x8 ) !!!
    Also solltest du auch hier einen entsprechenden Levelshifter, oder einen MOSFET Leistungstreiber für das Din Signal vorsehen. Wie man Kabel entsprechend der zu übertragenden Stromstärke, und damit auch die Breite / Dicke entsprechender Leiterbahnen auslegt, ist wohl kein Geheimnis. Wenn du versuchst 2 Ampere bei 5 Volt durch einen ordinären Bastler-Klingeldraht über einige Meter zu übertragen, dann holt dich das ohmsche Gesetz eine. Da muss man dann halt auch den entsprechenden Leiterquerschnitt, der auch auf den Leiterbahnen irgendwelcher Erweiterungsplatinen eingehalten werden muss, vorsehen.

    Franky

  • Definitiv nicht ! Wenn man auf diese Platinen schaut verwenden die dort eine 2N7000 und keinen BS138 !

    unterschreibe ich, deswegen war meine Schaltung mit BS138 bei 400kHz instabil. Mit 100kHz klappts aber immer und oft werden die 400kHz ja nicht benötigt, wenn dann kann man auf der Software viel mehr beschleunigen. Niemand muss mehr als 4 bis maximal 10 LCD Ausgaben pro Sekunde machen, das kann eh keiner lesen!

    LCD Ausgaben die nicht gemacht werden müssen beschleunigen auch!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Moinsen,

    und oft werden die 400kHz ja nicht benötigt,

    Wenn man dann aber den INT des PCF8574, ggf Kaskadiert für mehrere dieser INT's über einen MCP230XX, nutzen will, kommt man mit 100 kHz schon ins schleudern. Dann sind die 20 ms schneller als man denkt abgelaufen, damit man aus dem Portregister des PCF8574 noch den realen Auslösezustand des INT auslesen kann, bzw. den tatsächlichen zum Zeitpunkt der INT Generierung vorhandenen Registerinhalt erhält.
    Wenn dann noch Interrupt-Sperren, ins Spiel kommen, weil parallel über den gleichen Bus auch noch irgendwelche Displays ( gleich welcher Ausführung ) betrieben werden sollen, dann sind 100 kHz einfach zu wenig. Hier sollte das gesamte Bus-System mit so vielen Slaves schon auf Minimum 400 kHz laufen, und alle Komponenten die schneller könnten, dann auch entsprechend schneller versorgt / abgearbeitet werden. Das Problem hier ist nicht der µC sondern die reine Verdrahtung. Levelshifter mit 2N7000 lassen sich problemlos bis 1,2 MHz und mit einem 2N7002 mit einem zusätzlichen Stützkondensator ( Vhigh - GND ) bis 1,8 MHz nutzen. Davon ist man mit so einer BSS138 Gurke weit entfernt !

    Franky

  • Dann sind die 20 ms schneller als man denkt abgelaufen

    ich habe mit dem Oszi die Auslesung vermessen 1,5µs weiss nur nicht mehr ob mit 100kHz oder 400kHz.

    Egal, das sind maximal 6µs im INT wer die nicht überhat sollte andere Wege gehen!

    Diese doofen LCD Ausgaben haben vielfache zig µs Wartezeiten, wer meint >4 x/s das LCD zu beschreiben hat nichts verstanden!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Habe mir das DB zum 2N7000 angesehen. Konnte auf die schnelle nicht nachvollziehen warum der besser ist, egal vertraue euch dabei.

    Dabei ist mir aufgefallen, das es 2 verschiedene Typen gibt. den

    2 N 7000 mit Gehäuse TO92

    2 N 7002 mit Gehäuse SOT23 (SMD)

    Ansonsten bei SMD gleiche Pins. Dadurch kann ich einfach tauschen.

    Prima wieder was gelernt. Danke für eure Infos.

  • Moinsen,

    ich habe mit dem Oszi die Auslesung vermessen 1,5µs weiss nur nicht mehr ob mit 100kHz oder 400kHz.

    Egal, das sind maximal 6µs im INT wer die nicht überhat sollte andere Wege gehen!

    Diese doofen LCD Ausgaben haben vielfache zig µs Wartezeiten, wer meint >4 x/s das LCD zu beschreiben hat nichts verstanden!

    Wenn man auf den Code aus #32 eingeht, ist das Thema LCD Anzeigen schon dahingehend entschärft, das deren Aktualisierung nur Sekündlich stattfindet.
    Mit einem PCF8574 + INT habe ich es jetzt nicht getestet. Jedoch wenn er einen "INT Sammel MCP23017" verwendet, damit er nur 2 INT Eingänge hat, jeweils für PORT-Register-A und PORT-Register-B des MCP23017, dazu µPython verwendet, nicht C/C++ , dabei über eine LIST sich den betreffenden PCF8574 mit seiner dazugehörigen I²C Bus Adresse heraussuchen muss, um in der unmittelbaren Folge diesen PCF8574 abzufragen, vergehen laut interner Laufzeitbestimmung mit time.ticks_us() bei 100 kHz I²C-Busfrequenz, und einem Trigger-Event über einen GPIO IRQ_FALLING über 21 ms ! Dabei ist an dem PICO nur ein MCP23017 und ein PCF8574 über den I²C Bus verbunden. Der INT des PCF auf auf einen Eingang am MCP23017 und diese sendet bzw. gibt aus für das Port-Register-A einen INT an das PICO weiter. Da ja an dieser Stelle keine Aussagen, also dem bisherigen Threadverlauf keine Festlegungen getroffen wurden, ob er immer nur einen PCF8574 für Eingabefunktionen nutzen will - Kann es natürlich gut gehen, kann aber auf dem Umweg über den MCP23017 oder wenn der Taster zu kurz gedrückt wird, oder noch am prellen ist, zu Fehlinterpretationen führen. Bei 400 kHz schafft er es auch über den Umweg MCP23017 ganz locker.
    Da der TO aber in seinem Beitrag #28 davon sprach, dass er auch andere Display-Typen und wahrscheinlich parallel über den gleichen Bus mit betreiben will, halte ich es für keine gute Idee, wenn man diese Datenstrom verursachenden Gerätschaften mit über den gleichen Bus betreiben will, zumal er dann auch wieder oder erst einmal ermitteln müsste was so eine vollständige TFT- oder OLED-Display- Aktualisierung ihm bei 100 kHz an Zeit kosten würde und damit, ob er deswegen auch auf Interrupt-Sperren zurückgreifen müsste. Alles oder vieles ist hier noch im unklaren.

    Franky

  • Moinsen,

    Vielleicht GPIO 4?

    Wurscht egal, der der frei ist, und solange es kein GPIO ist, der als ADC verwendet werden kann. Auch das wurde schon einmal erwähnt !

    2 N 7000 mit Gehäuse TO92

    2 N 7002 mit Gehäuse SOT23 (SMD)

    Auch falsch oder beim falschen Hersteller nachgesehen. Den 2N7000 gibt es sowohl in TO-92, wie auch SOT-23. Den 2N7002 nur in SOT-23, der sich nur Minimal in der ELECTRICAL CHARACTERISTICS unterscheidet. Jedoch auch mit etwas mehr Speed aufwartet. Dabei kann er nicht diese Stromstärken schalten wie der 2N7000 ( Was aber bei einem Levelshifter eher unrelevant ist ). Ansonsten hättest du noch den Art-ähnlichen BS170, den es auch in TO-92 und SOT-23 gibt, aber eigentlich fast der Gleiche ist - wie der 2N7000. Für die Geschichte mit dem I²C Bus sind alle diese Typen gleichermaßen geeignet solange du die 1,2 MHz nicht überschreiten willst.

    Franky