Abfrage eines PCF8574 ob Taste gedrückt oder nicht

  • es ist so sinnlos, was verstehst du an SCHALTPLAN nicht, warum versucht man überhaupt dir zu helfen?

    Die Schaltung ist eigentlich bekannt.

    Einen Pegelwandler für Int habe ich nicht eingebaut.

    und warum nicht?

    man man man!

    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)

  • Abfrage eines PCF8574 ob Taste gedrückt oder nicht? Schau mal ob du hier fündig wirst!

  • Habe die Schaltung gefunden. Habe die einzelnen Pins des Pico auf die Anschlüsse zu meinen Platinen geführt. Der Pegelwandler ist auch mit drin. Bisher habe ich für Int keinen gebraucht. Da ich bisher alles mit 5V gemacht habe brauchte ich keinen. Das man für denPico einen berauchen könnte habe ich schlicht weg vergessen. Was man am "Schaltplan" nicht versteht, ganz einfach, ,man kann einen Pegelwandler mit einem PCA.. oder einem BSS.. bauen. Die "Pegelangleichung" mit ein paar Widerständen ist für mich uninteressant. Mit den beiden Versionen hatte ich bisher keinerlei Probleme.

    Ein paar Erklärungen zum Schaltbild. Die beiden oberen Wannenstecker (links und rechts) dienen nur zur Verbindung mit anderen Platinen. Dabei geht es um die Verbindung von Vcc, Bus und GND. Die 4 anderen Platinen dienen zum Anschluss von LEDs und anderen Zusatzplatinen. Dabei wird auch 3,3V und GND mit verbunden. Durch diesen Aufbau kann ich mehrere Platinen, Displays oder Netzteile einfach zusammenschalten.

  • Moinsen,

    Das ist ja ein Machwerk ! Wer war dort Designer dieses Strickmusters ;)

    Aber Spass beiseite. Zum Ernst der Lage.

    Wenn du einen Portexpander in der INPUT Richtung nutzt, egal ob PCF8574, MCP23008, MCP23009, MCP23017, MCP23018 oder aus der TCA995xx Serie von TI - all diese haben einen INT Port. Das macht man aus diesem Grund, damit man nicht mit einer Dauerschleife / "State Machine" permanent die Regierter dieser Expander abfragen muss, und damit den BUS blockiert. Selbst die Äquivalenzmodelle für den SPI Bus verfügen über einen solchen Anschluss. Egal mit welcher Spannung du nun diese Expander betreibst, neben dem Vc, dem SDA und dem SCL muss auch der INT via Levelshifter an den Steuerungscontroller angepasst werden !

    Wenn du jedoch schreibst, du hast diese "INT-Meldung" bisher nicht gebraucht, dann hast du wahrscheinlich den Sinn dieser Funktion evt. noch nicht verstanden. Nun weiss keiner, wie du dieser Expander bisher genutzt hast. Aber ich gehe mal davon aus, dass du als alternativen µController bisher auf einen Arduino & CO gesetzt hast. Hier gibt es eine Vielzahl von Import Bibliotheken, teilweise einfach gestrickt, teilweise sogar mit der Nutzungsmöglichkeit des INT Signals. Leider, wenn man dann in diese Arduino IDE schaut, ist es weder professionell noch wirklich nutzbringend, wenn man sich an diese Vorgaben "void setup" und "void loop" hält. Hiermit wird man regelrecht genötigt, das Potential eines solchen µControllers zu ignorieren, und verlässt sich auf eine Endlosschleife "loop()"die immer und immer wieder auf den BUS zugreift. Jeder µController aus dem Hause Atmel heute Microchip ( AVR) kann auf einen externen GPIO Interrupt reagieren. Damit in der logischen Konsequenz muss man für solche User-Events ( Taster ) keine unnötige Traffic auf dem I²C Bus erzeugen.
    Das Grundprinzip hatte jar schon in seinem Beitrag #17 folgerichtig beschrieben. So kann man auch um Eingangs-GPIOs zu sparen, einen dieser Portexpander abstellen, der nur die INTs mehrerer Expander überwacht, und dann in der Abfragekette, solange es innerhalb von 20 mSek möglich ist, erst diesen einen "Überwachungs-Expander" und anschließend den "Eingang führenden Expander" via des i²C Busses abfragen. Dabei musst du nur darauf achten, dass dir keine weitere Komponente oder Programmroutine für einen Datenstrom auf dem BUS-System erzeugt. Dazu setzt man Flags, die in einer tabellarischen Routine angefragte, abgearbeitet und im Anschluss wieder zurückgesetzt werden. Hierfür verwendet man einfache boolsche Variablen ( Low oder High ), die nicht viel Speicherplatz / oder Register in dem µController benötigen.
    Wichtig bei der Nutzung dieser INT Ports ist nur, dass dein Programm es schaffen muss, deswegen auch Interrupt, innerhalb von 20 mSek diese Registerabfrage des Portexpanders auszuführen ( für einen richtig programmierten µController eigentlich schon fast eine Ewigkeit, vorausgesetzt man betreibt den Datenbus auch mit der richtigen Geschwindigkeit [Clock-Frequenz ] und macht nicht wie von dir kommentiert :

    Zitat

    Ob ich jetzt 100kHz oder 400 kHz angebe war nicht gefragt.

    solche hi-live Experimente.) -> Wenn du Bus-Slaves hast die nicht schneller können, warum auch immer, nun egal ob durch Leitungslängen, oder durch deren Hersteller-Spezifikation dann hängt man diese an einen getrennten BUS. Dafür bietet der PICO alle Möglichkeiten. Falls die Leitungslänge die hier bremsende Rolle spielen sollte, schaltet man einen Bus Extender wie den P82B715 dazwischen.

    Franky

  • Der Designer war ich selber. Das hängt mit dem Aufbau der anderen Platinen zusammen. Die Bedingung ist, das alle verwendeten Platinen die Anschlüsse an der gleichen Stelle haben müssen. Das hat den ganz einfachen Sinn. ,am kann verschiedne Platinen zusammen schalten. Es muss erstmal der Bus mit immer der selben Beschaltet zusammen passen. Die anderen Platinen hanem die gleiche Pinbelegung und Wannenstecker an der gleichen Stelle. Damit kann ich alles mögliche zusammen stecken.

    Da ich den I2C-Bus 0, GPIO 0 und 1 verwende, welcher Pin ist dann für Int zu empfehlen?

    Du hast ja eigentlich eine Lösung für mehrere Int angegeben. Da ich das noch nie gemacht habe muss muss ich noch mal fragen.

    Wie macht man das wenn mehrere Int von verschiedenen ICs, z.B. MCP, PCF, PCA usw. kommen?

  • Moinsen,

    Du solltest dir in Anbetracht deines µPython Code und dem hier schon präsentierten erst einmal Gedanken machen, oder eine Auflösung darstellen, warum du den I²C mit den genannten Komponenten, hier nur PCF8574, mit nur 1/4 der der möglichen Übertragungsgeschwindigkeit nutzt ?

    Das PICO hat 2 I²C Bus Hosts, die auch getrennt genutzt werden können.

    Alle mit mit I2C0 gekennzeichneten GPIOs können wahlweise vom HOST 0 angesprochen werden, und alle mit I2C1 vom HOST 1. Ob man beide HOSTs nutzen möchte hängt von verschiedenen Faktoren ab. Dazu zählt u.a. mit welcher Geschwindigkeit mit welcher diese einzelnen Bus-Slaves betrieben werden können. Hier wegen einer einzelnen Komponente den ganzen Bus auszubremsen wie du es macht, ist Kontraproduktiv.
    An welchen GPIO du diesen INT Ausgang des Expanders direkt hängst ist erst einmal vollkommen egal, du kannst dafür alle GPIOs mit Ausnahme der ADC-GPIOs nutzen. Jedoch darf der High Pegel diese 3,3 Volt nicht überschreiten.
    Das würde in der Konsequenz bei einer Kaskadierung mehrerer dieser PCF8574, falls diese als INPUT genutzt werden auch bedeuten, dass du für jeden einzelnen PCF8574 eine INT Leitung hast. Ausgehend von den möglichen Adressen der PCF8574 und PCF8574A kämst du auf 16 mögliche GPIOs am PICO, was jedoch die Kapazitäten der möglichen parallel laufenden Interrupt-Vectoren IRQ_FALLING und IRQ_RISING überschreiten würde. Zudem würden dabei 16 GPIOs draufgehen.
    Wenn du dich an die korrekte Beschaltung Taster zieht das Eingangssignal auf LOW hältst kannst du eine Kette aufbauen, und zB mit einem MCP23017/MCP23018 Sechzehn (16) dieser PCF8574/(A) bezüglich der INT Signale mit über diesen I²C Bus mit abfragen, und würdest nur 2 zusätzliche GPIOs benötigen. Dazu ist es aber unabdingbar, dass du dich an die Bus-Geschwindigkeit von 400_000 Hz hältst. Sonst schaffst du es nicht, wie in den Datenblättern nachzulesen, dass das INT Signal eines der PCF8574 einen Eingang am MCP23017 auf LOW zieht und dieser dann wiederum auch mit einem eigenen INT Signal ( Port_A / Port_B) dem PICO mitteilt, dass es einen Tasterbetätigung gegeben hat. Also muss du nur anhand der beiden GPIOs ( jeweils dem PORT_A INT oder dem PORT_B INT zugeordnet ) erst das betreffende Portregister des MCP23017 abfragen, damit du ermitteln kannst an welchem PCF8574 gerade eine Schaltfunktion stattgefunden hat. Sowie im Nachgang noch schnell den betreffenden PCF8574 mit der richtigen Adresse abfragen. Für das ganze Spiel ab dem Zeitpunkt wo der betreffende PCF8574 am INT Pin auf LOW schaltet bis zu dem Zeitpunkt wo du die Registerabfrage des betreffenden PCF8574 beendet hast, dürfen nicht mehr als 20 mSek vergehen ! Das schafft man über den Zwischenschritt eines weiteren Portexpanders welcher nur die INTs der PCF85741 interpretiert nur dann, wenn der I²C Bus auch mit voller Geschwindigkeit genutzt wird ( Minimum 400_000 kHz ).
    Solltest du allerdings auf deinen vielen Erweiterungsplatinen weitere I²C Komponenten haben, oder diese von dort abzweigen, solltest du auch im Interesse das solche Kaskadierungen ( nur bis knapp, und wenn überhaupt zuverlässig bis 0,5 Meter Gesamtleitungslänge bis zum Host-Master = PICO Board funktioniert der i²C Bus ohne Extender ) auch trotz der Tatsache das diese Portextender einiges an Geld kosten an jeder Wannenleiste einen solchen Extender vorsehen. Diese stellen dann nur sicher, dass die Kabellängen zwischen den Platinen länger werden dürfen und können, ohne das eine Geschwindigkeitsreduzierung notwendig wird, bzw. es zu Übertragungsfehlern kommt. Gesamtabstände zwischen dem letzten Slave in der Kette und dem I²C Master von bis zu über 20 Metern sind dann damit kein Problem mehr.
    Falls du beabsichtigst schneller Slave Komponenten wie Displays einzusetzen, und diese mit bis 1,2 MHz Clock-Takt angesprochen werden können, solltest du dafür den zweiten Host, also HOST 1 oder auch anderes herum HOST 0 schnell / HOST 1 langsam verwenden.

    Wie du das auf deinen kaskadierbaren Platinen umsetzt bleibt dir überlassen. Grundsätzlich könnte man einem MCP23017 mit auf der PICO Platine vorsehen, der sich in der Adresse nicht mit den PCF8574, oder auch den anderen I²C Slaves schneidet, und eine zusätzliche 16 PIN Eingangsleiste bei durchgeschleifter GND vorsehen, wo du dann solche INT Signale weiterer Erweiterungsplatinen zusammenführst. Die Portextender benötigen auch nur 5,0 Volt, das dürfte also rein von der Spannungsversorgung nicht das große Problem darstellen. Ob du nun anhand der aufgezeigten Möglichkeiten auch noch den zweiten I2C Bus mit nach außen führst, um schnelle Komponenten direkt anzubinden, dann aber nur bei einer Kabellänge bis 30 cm, bleibt deinem Ideenreichtum überlassen.
    Wie du das mit den INT Eingängen Spannunsgmäßg löst - den MCP23017 auch mit 5 Volt betreibst, dann aber noch 2 Levelshifter für die beiden INT Port_A und Port_B vorsiehst, oder den MCP23017 auch mit 3,3 Volt betreibst, und dessen Eingängen parallel geschaltet direkt 3,3 IN oder dann mit mehr Levelshiftern diese Eingänge 5,0 Volt Kompatibel machst, alles nur ein Frage der Planung, wenn man weiss wohin die Reise geht.

    Franky

  • Danke für deine ausführliche Erklärung. Die 100kHz sind nicht in Stein gemeisselt. Hatte es einfach vom AVR so übernommen. Dann war ich mir nicht sicher ob die "alten" PCF.. auch 400kHz vertragen. Werde es mal testen. Das mit dem schnellen oder langsamen I2C Bus lasse ich erst mal sein. Versuche mehr die vorhandenen Komponenten zum Leben zu erwecken. Da habe ich wohl schon genug zu tun. Dann bleibt noch der grosse Bereich Python. Da habe ich noch so viel zu lernen.

    Dann habe ich noch eine Frage zu den Dual LED. Habe leider keine Dual zu liegen. Kann ich einfach 2 x 2mA Leds mit unterschiedlicher Farbe nutzen? Da von habe noch einiges zu liegen. Beider LEDs natürlich antiparrell geschaltet mit Vorwiderstand 1KOhm?

  • Moinsen,

    Dann war ich mir nicht sicher ob die "alten" PCF.. auch 400kHz vertragen.

    Dafür gibt es von jedem Hersteller und fast jedem IC auch kostenlos Datenblätter.
    Einfach in der Google Suche, oder deiner bevorzugten Suchmaschine <Typenbezeichung des Schaltkreises / Bauelements> gefolgt von "Datasheet" eingeben. Und wenn der Hersteller oder FAB bekannt ist diese noch Anfügen. NXP zB für den PCF8574 , der aber auch von anderen FABs stammen kann, wie Texas Instruments dann aber leicht andere Werte hat. Prinzipiell sind alle dieser PCF8574 doch sehr ähnlich.

    Kann ich einfach 2 x 2mA Leds mit unterschiedlicher Farbe nutzen? Da von habe noch einiges zu liegen. Beider LEDs natürlich antiparrell geschaltet mit Vorwiderstand 1KOhm?

    Können kannst du alles ! Ob es sinnvoll ist und funktioniert, oder ein Schaden auch für dein PICO Board entsteht, steht dabei noch auf einem ganz anderen Blatt.

    Das sich der Vorwiderstand einer LED aus Durchlassspannung, und dem beabsichtigten

    Stromdurchfluss berechnet, ist es erst einmal bedeutungslos welche Maximalstromstärke eine LED aushält. Wichtiger damit die GPIOs mit ihren maximal 2mA nicht überfordert werden, ist die Durchlassspannung einer solchen LED. Hier wird es jedoch aufwendiger und komplizierter 2 Modelle / Ausführungen zu finden, die bei annähernd gleicher Durchlassspannung auch eine optisch vergleichbare Helligkeit abgeben. Jetzt kommt es auch wieder auf die Belastbarkeit in Sperrrichtung drauf an. Keine Ahnung was bei dir so rumliegt. Wenn du auf Nummer sicher gehen willst, und LEDs hast die mit unter 2,3 Volt ein brauchbares Leuchten erzeugen können, dann bringe in die Kette LED - Vorwiderstand noch eine Schottky Diode ein. Diese fungiert dann als Gleichrichterdiode und sorgt je nach Modell nur für einen Spannungsabfall in Durchflussrichtung von 0,4 Volt. Das musst du dann allerdings bei der Berechnung des Vorwiderstandes einkalkulieren. Hättest aber den Vorteil, dass du für jede Leuchtfarbe / LED den optimal passenden Vorwiderstand verwenden könntest ( jede LED hat dann ihren eigenen Vorwiderstand ). Kann man machen - muss man nicht machen, wenn man die genauen Daten der verwendeten LEDs kennt.

    Das mit dem schnellen oder langsamen I2C Bus lasse ich erst mal sein. Versuche mehr die vorhandenen Komponenten zum Leben zu erwecken.

    Wenn du ohnehin noch am Design deiner Platinchen feilst, was ist dann das große Problem, jede Komponente einzeln zu testen ? Bei einer definierten Leitungslänge im INIT des I²C Busses einfach die Frequenz hoch schrauben, und schauen ob diese sich noch ansprechen lässt. Damit hast du erst einmal, wenn du keine Datenblätter auf Lager hast, die Gewissheit welche Komponenten, besonders bei Displays, sich mit richtig Schmackes betreiben lassen, und wo du auf die Bremse drücken musst.
    Hier immer wieder das Augenmerk, sind Displays mit größeren Datenvolumina im Einsatz ( TFT / OLED ) und zeitgleich diese PCF8574 im Input Modus, zudem über diesen INT Pin Interrupt-Vektor gesteuert, hört höchst wahrscheinlich der Bildaufbau auf, oder der Bus crasht im Ganzen, wenn auf einmal eine zweite Komponente zeitgleich den Bus nutzen will.
    Also mal den Ansatz verfolgen, weil dann auch einfacher im Programmhandling das datenintensive Anwendungen wie Displayansteuerungen separat laufen. Dem PICO ist es egal, ob du in deinem Proggi einen oder beide I²c Busse aktivierst und nutzt. Nur mitten im Betrieb die Clock-Frequenz umzustellen geht zwar auch, aber dann musst du immer sicher stellen, bzw auch im Vorfeld testen, wie die langsameren Buskomponenten auf ein höheres CLOCK Signal reagieren, und ob sie dann nach der Wiederverlangsamung des CLOCKS auch noch ansprechen lassen. Einige, aber nicht jedes I²C Slave kommt damit klar, und blockiert dann den Bus. Mischbetrieb, bzw in der Laufzeit wechselnde CLK-Raten sind immer ein zusätzliches Fehler, und bis zum nächsten Neustart ein Ausfall Risiko. Hier sind die ICs Portexpander von Microchip MCP23008 / MCP23017 besser geeignet, denn diese kann man via des RESET Pins in der Laufzeit nach einem "Bus-Hänger" wieder zum Leben erwecken, ohne das man das gesamte System rebooten muss.

    Franky

  • Danke für deine Erklärung.

    Bisher betreibe ich das Display immer mit einem PCF8574. Du schlägst gerade den MCP23008 vor. Sind beide 8 Bit, ist klat. Habe eigentlich noch nie ein Display Imterface mit dem MCP gesehen. Muss mal danach suchen.

    Ansonsten verwende ich sehr gern Displays von EA z.B. OLED mit 2,2" oder TFT mit 3,2". Die sind sehr schnell, doch leider sind nicht alle Treiber verfügbar. Es gibt noch genug zu tun.

  • Moinsen

    Bisher betreibe ich das Display immer mit einem PCF8574.

    Also der klassische I²C -PCF8574 LCD Adapter. Mal ehrlich, was passiert denn dort selbst bei den größten Modellen 40x4 ? Nichts ! Die paar Bytes kannst du fast an beiden Händen abzählen. Oder sprichst du hier von Matrix Displays, ähnlich den OLED und TFT Modellen die irgendwo bei 128*64 anfangen ? -> Aber dazu findest du hier im Forum genügend Codebeispiele. Für die 3,2" 65k Color mit Touch, dafür findest du bei Github ausreichend Material. Aber das nur am Rande.

    Die MCP23008 waren jetzt nicht wirklich als Ersatz für den Displayadapter gemeint, sondern zur Erweiterung der Palette ggf späteren Umorientierung bei den schaltenden Expandern. Diese können problemlos mit bis zu 1,7 MHz befeuert werden ;)
    Aber nun musste ich selber erst einmal Umschau halten. Die PCF8574 sind bei den klassischen Anbietern NXP / früher Philips, Texas Instruments und beim Chinaman Xinluda wirklich nur auf 100 kHz ausgelegt. Ich habe hier welche die mit AS gelabelt sind ( keine Ahnung wer die zusammengeschmiedet hat ), die sich problemlos mit 400 kHz betreiben lassen. Aber wenn man den Basiscode für den PCF8574 to LCD hat, dürfte es kein Problem darstellen diesen auf einen MCP23008 umzuschreiben. Jedoch was mir auch gerade eingefallen ist, weil das Thema LCD to I²C Adapter schon einmal auf der Tagesordnung stand.
    RE: Zeichen selber erstellen mit dem Pico und LCD mit dem HD44..
    Das ging somit auch an deine Adresse diese AZ-Delivery LCD-I²C Adapter laufen auch mit 400 kHz !
    Der Schaltplan dieser PCF8574 Displayadapter ist kein Geheimnis, der ist öffentlich zugänglich. Also mit einer neuen Platine ließe sich das sicherlich auch auf einen MCP23008 umbauen, da dieser nicht mit dem PCF8574 Pin-Kompatibel ist. .

    Franky

  • Moinsen

    Noch eine Frage zu den LEDs. Ist es so wichtig das beide LEDs die gleiche Helligkeit haben, das sie doch eine unterschiedliche Farbe haben und eigentlich nur zur Anzeige von Fehlern dienen sollen?

    Sie sollten bei gleicher Spannung und gleichem Strom ( wenn nur über einen gemeinsamen Vorwiderstand betrieben ) auf annähernd die gleiche Helligkeit kommen. Das man auch wirklich ohne Augenkrebs zu bekommen die Unterschiede nicht nur in der Farbe sondern auch zwischen an und aus relativ einfach erkennen kann.

    Franky

  • Habe das Programm von Willy eingegeben. Neben dem Pico verwende ich 2 x PCF8574 und 1 x Display, auch mit dem PCF8574. Diese ICs haben die Adresse 0x20, 0x21, 0x27. Ein paar kleine Sachen musste ich beim Programm anpassen. Leider konnte ich nicht alles finden. Der Code sieht so aus:

    Die Fehlerangaben, bei denen ich nicht weiterkomme liegen in den Zeilen 25 und 107 mit der folgenden Angabe:

    Traceback (most recent call last):

    File "<stdin>", line 25

    SyntaxError: invalid syntax

    Traceback (most recent call last):

    File "<stdin>", line 107, in <module>

    ValueError: Timer doesn't exist

    Mein bisheriges Wissen erlaubt es mir nicht diese Fehler zu suchen. Vielleicht könnte jemand drüber schauen.

    Das Display wird zwar initiiert, aber ansonsten gibt es keinerlei Fuktion. Es könnten noch andere Fehler sein, die mir aber noch nicht angezeigt wurden.

  • "Ist gleich" fragt man mit '==' ab.

    Mein bisheriges Wissen erlaubt es mir nicht diese Fehler zu suchen.

    Du solltest dringend mal das Python Tutorial durcharbeiten:

    https://docs.python.org/3/tutorial/

    Das ist im übrigen kein Code auf dem man aufbauen kann und ist meiner Meinung nach auch nicht zum lernen der Sprache geeignet. Die ganzen globalen Zustände machen es nicht einfacher den Programmablauf nachzuvoll ziehen.

    Wenn du in Zukunft sollche Projekte machen willst, reicht es nicht Code zu kopieren.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Code
        if value = None: # Fehler

    = ist eine Zuweisung. Ein Vergleich macht man mit ==. Und is prüft die Identität eines Objektes. Das sind alles Grundlagen.

    Richtig wäre:

    Code
    if not value:
        ...

    if fragt immer nach __bool__ ab.

  • Grundlagen gehören dazu, ist mir vollkommen klar. Ist dir bewusst wie gross so ein Tut oder Python Buch ist?

    Da brauche ich noch einiges um die Grundlagen zu lesen, geschweige es zu verstehen.

    Das Wort "verstehen" bekommt dabei eine ganz andere Bedeutung für mich. Man kann eine Zeile verstehen, aber noch lange den ganzen Coder oder die Zusammenhänge begreiffen. Da muss ich noch eine ganze Menge lesen und lernen.

    Mit if und bool habe ich soweit verstanden. Bin jetzt am Timer dran.

  • Grundlagen gehören dazu, ist mir vollkommen klar. Ist dir bewusst wie gross so ein Tut oder Python Buch ist?

    Ich nutze Python seit ca. 15 Jahren. Die Dokumentation von Python habe ich mehrmals komplett gelesen.

    Wir wissen, wie viel Arbeit das ist.

  • Moinsen

    Mein bisheriges Wissen erlaubt es mir nicht diese Fehler zu suchen. Vielleicht könnte jemand drüber schauen.

    Das Display wird zwar initiiert, aber ansonsten gibt es keinerlei Fuktion. Es könnten noch andere Fehler sein, die mir aber noch nicht angezeigt wurden.

    Ich weiss zwar nicht woher der Code stammt, und auf welchem Weg du zu diesem Code gekommen bist, aber es wäre doch sinnvoller sich an den Autor zu wenden.

    Was ich auf den ersten Blick erkennen konnte und schon von @DeaD_EyE festgestellt wurde:

    Python
    if value == None:

    An dieser Stelle sind sicherlich auch andere Methoden möglich:

    Python
    if Is_Display:
            # Displaytext mit Leerstellen auffüllen und auf Länge abschneiden
            empty_field = ' ' * Display_Columns
            text_line1 = str(Display_Text1 + empty_field)[:Display_Columns]
            text_line2 = str(Display_Text2 + empty_field)[:Display_Columns]

    Hier an dieser Stelle gehe ich mal von einem Versionsunterschied der µPython Version bzw. der Endplattform aus.

    Python
    timer = Timer.init(period = Display_Timer, mode=Timer.PERIODIC, callback = display)
    
    timer_clock = Timer.init(period = Display_Timer, mode=Timer.PERIODIC, callback = clock)

    Diese Version Zeile 107 - 109 habe ich auf einem PICO W probiert, und erzeugt bei mir unter:

    Code
    MicroPython v1.19.1 on 2022-08-31; Raspberry Pi Pico W with RP2040
    Type "help()" for more information.

    keine Fehlermeldung.

    An deiner Stelle würde ich mich, weil es auch schon von jar im Beitrag #17 erwähnt wurde, ganz intensiv mit Handbüchern, sowohl zur Hardware wie auch zur Programmierung auseinandersetzen. Nur weil man es immer schon so gemacht hat, heißt nicht, dass man es auch richtig gemacht hat. Hier jetzt die INT Rückmeldeports der PCF8574 angesprochen.

    Franky

  • ich verstehe das Problem nicht wirklich,

    an 3,3V Devices gehören nun mal überall 3,3V ran. Man kann hinterher pegelwandeln zu 5V oder vorher.

    Um I2C mit 5V zu betreiben muss also vorher der Pegel gewandelt werden und da gibt es so tolle Platinchen mit 4 Kanäle fertig und klein, mit R und Transistoren bestückt, da sind nach Nutzung von I2C auch 2 Kanäle frei für mindesten 1-2 Ports das kann auch INT sein!

    https://www.ebay.de/itm/353815030425

    EDIT:

    Die RTC muss mit 5V betrieben werden so das der LiR2032 Akku aufgeladen werden kann!

    Von den Nokia 5110 Displays gibt es 2 Versionen rote Platine 5V tolerant, blaue Platine nur für 3.3V

    Bilder

    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)

    3 Mal editiert, zuletzt von jar (3. Dezember 2022 um 10:15)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!