Kann MCP23017 nicht auslesen

  • Hallo

    ich habe eine Platine nachgebut mit 2x MCP 23017 die ich als Eingänge benutzen möchte.
    Alles was ich dazu gefunden habe kommt dann auf eine Interrupt Programmierung heraus.


    Wenn ich dierekt aus lese Funktioniert alles

    Allerdings in meinem Script Funktioniert es halb, das bedeutet das die Pins ausgelesen werden aber das Script es nicht zur Grafischen oberfläche schafft.
    Das erkläre ich mir so das das Sript in der Schleife festhängt.

    Nun weiß ich auch garnicht ob ich auf dem richtigen Weg bin.

    vom Grund her soll die Grafische Oberfläche gezeigt werden und die Pins ausgelesen werden.

    Das Problem ist auch das ich vermute den Interrupt auch noch nicht verstanden zu haben bzw brauch ich den Überhaupt ?

    Wäre froh wenn mich jemand in die richtige Richtung lenkt

    Wichtig wäre mir als Anfänger auch das ich bei smbus bzw (read_byte_data) bleiben könnte

  • Hallo.


    Das Problem ist auch das ich vermute den Interrupt auch noch nicht verstanden zu haben bzw brauch ich den Überhaupt ?

    Wäre froh wenn mich jemand in die richtige Richtung lenkt


    Interrupt's sind dazu da, Ereignisse "on the fly" zu erkennen, ohne dauernt Port's pollen zu müssen.

    ...evtl hilft dir <das> weiter.
    Mal in Ruhe durchlesen.

    gruß root

    Einmal editiert, zuletzt von root (14. Mai 2017 um 22:33)

  • Moin,

    Irgendwie herrscht hier (im Forum) ein allgemeines Definitionsproblem was "Interrupt - (ISR)" angeht.

    1)
    Wird ein Programm, welches durch ein Ereignis eine Funktion etc. ausführt in keinster Weise und zu keinster Zeit unterbrochen. Allein deshalb ist das Wort völlig falsch. Geschweige denn die Technik, die hinter einer ISR steckt.

    2)
    __deets__ hat es eh schon einmal erwähnt. Es wird lediglich ein Thread gestartet. Sei es mittels ``RPi.GPIO`` Modul oder ``gpiozero``. In beiden Modulen kann dies im Quellcode nachgeschaut werden. Im ``gpiozero`` Modul ist es ggf. einfacher nachvollziehbar, da dies rein in Python geschrieben wurde. Aber auch als c-Noob findet man die entsprechende Zeile im ``RPi.GPIO`` Modul.

    https://www.lowlevel.eu/wiki/Interrupt_Service_Routine
    https://de.wikipedia.org/wiki/Interrupt
    Python - Interrupt Prioritäten
    Buttoneingabe abfragen, während Schleife läuft

    PS:
    Diese verlinkte Seite muss man meiden wie der Teufel das Weihwasser!

  • Ja Danke schonmal für die Antworten

    Auf den Link von root bin ich schon ein paarmal gewesen und um so öffter ich mir das durchlese muß ich erkennen das ich erstmal verstehen muß wie so ein Script überhaupt funktioniert
    Ich habe als Kind mal Basic auf dem 64er Programmiert da ging alles schön Schrittweise.
    Ich muß das Python zeugs erstmal in die Rübe bekommen.

    Wo ich jetzt hänge ist das ich die Endlosschleife auf roots Link nicht so wirklich verstehe bzw Muß ich alles in die Scheife schreiben ??? Die abläufe ?

    Ich arbeite mal die Links vom bootsman durch

    Achja jetzt hab ich noch ne Frage

    Ich hatte jetzt den Debugger entdeckt und ausprobiert
    Kann ich mir den Verlauf des Programmes so vorstellen ?

    z.B. ich bekomme einen Zettel mit Anweisungen und lese ihn Zeile für Zeile durch.
    Aus dem Text ergibt sich dann das ich bei Grün über die Strasse laufen kann.
    Jetzt bin ich aber dabei eine andere Anweisung zu lesen wo die Ampel auf Grün springt.
    Weil ich diese Anweisung aber vorher gelesen habe und im Hirn gespeichert habe.

    Gehe ich jetzt los ? Weil es im Hirn gespeichert ist oder muß ich erst warten bis ich wieder in diese Zeile komme ?

    Solche Sachen muß ich verinnerlichen

  • Hallo.


    ...
    Irgendwie herrscht hier (im Forum) ein allgemeines Definitionsproblem was "Interrupt - (ISR)" angeht.
    ...


    ...seh ich nicht so.


    ...
    1)
    Wird ein Programm, welches durch ein Ereignis eine Funktion etc. ausführt in keinster Weise und zu keinster Zeit unterbrochen...


    ...diesen Satz versteht wohl kein Mensch.
    Ein Interrupt unterbricht sehr wohl ein laufendes Programm.
    Der Unterschied wann nach eintreffen eines Signals die Abarbeitung beginnt, ist abhängig von OS und Prozessor.

    In diesem Fall (Raspi und Python)
    1. Python ist ein Interpreter... kostet Zeit.
    2. Der Interrupt ist an den DMA Takt gebunden... kostet Zeit.

    Der schnellst mögliche Weg geht ausnamslos mit einem Microcontroler in Assembler programmiert, aber selbst der kostet Zeit.
    1. Ein äußeres Signal setzt im Prozessor ein IR Flag...der aktuelle Befehl wird abgearbeitet, und das Flag akzeptiert.
    2. Adresse des nächsten Befehls auf den Stack legen.
    3. jump auf die ISR
    4. PC (ProgrammCounter) vom Stack restaurieren und weitermachen.

    ...also Unterbrechung ohne wenn und aber...

    gruß root

    Einmal editiert, zuletzt von root (15. Mai 2017 um 18:44)


  • ...diesen Satz versteht wohl kein Mensch.


    1) = Erstens ==> Erstens wird ein Programm,[... ] nun verstanden?


    Ein Interrupt unterbricht sehr wohl ein laufendes Programm.[...]


    Zeig mir in Python ein Beispiel mit einem "Interrupt" und beweise, dass das Programm unterbrochen wird.
    Ich beweise dir das Gegenteil und zeige auf, dass das Programm nicht unterbrochen wird.

    Ausgehend dass ein Taster gedrückt wird

  • Hallo zusammen,

    wir hatten bzgl. Interrupt Service Request (ISR) schon einmal einen größeren Disput. Auch in größerer Runde. Offensichtlich hat's nix gebracht.

    Erfahrungshintergrund bestimmt die Sichtweise.

    Leute mit Assembler-Hintergrund müssen so argumentieren wie Root. Letztlich, weil es so richtig war und immer noch ist. Es handelt sich dabei um einen Scheduler-getriebenen Aufruf einer Routine, an die man sich einklinken kann.

    Leute ohne einen solchen Hintergrund faseln irgendwas von Threads und noch mehr Threads. ISR in Python bleibt Polling par excellence. Nennt es Interrupt, wenn Ihr es für Interrupt haltet. Und werdet glücklich damit. Für mich ist es in Python ein Pseudo-Interrupt.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (15. Mai 2017 um 19:10)

  • So nachdem was ich gelesen habe brauche ich wohl keinen Interrupt.
    Die Platine soll erfassen ob ein Fenster offen oder geschlossen ist, auch alle anderen "Taster" haben Zeit erfasst zu werden dabei gehts um Licht (An Aus) Jalousierelais zustand (gerade in irgendeiner richtung im gange
    Tür abgeschloßen usw .
    Es ist also kein "Taster" dabei der irgendetws steuern soll

    So was ich nun verstanden habe ist das für mich dieses Polling in frage kommt und das mach ich dann mit der while true schleife ?

  • Challanger72
    Zu deinem obigen Programm - welches so gar nicht laufen kann - sei gesagt, dass:

    1) auf Modulebene sich nur Konstanten, Klassen und/oder Funktionen/Methoden zu stehen haben
    2) bei GUI Programmierung ist es sehr wichtig, dass du die Programmlogik von der GUI trennst (siehe Links unten)
    3) * Imports sind nicht gut, da du so die Kontrolle verlierst, was alles in den Namensraum geladen wird. ggf. überschreiben sich Funktionen/Methoden von Modulen, da sie gleich lautend sind...

    zum smbus-Modul kann ich nichts sagen. gpiozero wird das in der nächsten v1.4 oder übernächsten v1.5 Version unterstützen. Aktuell nicht.


    Bei GPIO Eingang HIGH in txt Datei loggen
    wiedermal zeiterfassung

  • Hallo.
    Da das Problem des TE durch Polling offensichtlich erledigt ist. was für seine Sache völlig ausreichend ist, zum Abschluß paar Worte zu Interrupt's.

    Vorweg... ich hab die Weisheit nicht mit Löffeln gefressen und es gibt weitaus intelligentere Menschen als mich.
    Fakt ist jedoch...
    1. Ich bin mit Microcontrolern und Assembler qasi groß geworden, und weis was in einem Prozessor vor sich geht.
    2. Wer in meinem Augen kein Assembler beherrscht, und den Prozessor nicht kennt, weiß nur unzureichend was ein Interrupt ist und bewirkt.
    3. Ein heute fertiger Diplom-Informatiker mag super Algorythmen entwickeln, die ich voll anerkenne.Er weiß aber nicht wie der Prozessor dies löst... brauch er auch nicht.

    Warum wohl werden heute noch verstärkt Embeddet Systeme in Autos in Assembler programmiert???... Interrupt läßt grüßen

    Wenn aber jemand kommt mit Aussagen wie "nur Fakes" bei dem selbst angegebenen <link> von sich geben.
    ...armes Deutschland... sch... auf Interrupt's von denen viele labern, aber nicht wirklich verstanden haben.

    nix für ungut.. gruß root

    Einmal editiert, zuletzt von root (15. Mai 2017 um 23:31)


  • Wenn aber jemand kommt mit Aussagen wie "nur Fakes" bei dem selbst angegebenen <link> von sich geben.
    ...armes Deutschland... sch... auf Interrupt's von denen viele labern, aber nicht wirklich verstanden haben.

    nix für ungut.. gruß root

    Also dann lies die Artikel nochmals durch und zeig mir auf, wo und wie das in Python gemacht wird!?
    Ich kann dir die Antwort schon vorweg nehmen: gar nicht!
    Und von Mikrocontrollern rumlabern ist noch lächerlicher im Zusammenhang mit Python.

  • Merkwürdig - wenn ich solche Bezeichner mit Umlauten verwende wie Challanger72 in seinem Programm, dann kriege ich immer Fehlermeldungen.

    Räume = ("Schlaf1","Schlaf2","Gallerie","Flur","Küche1","Küche2","Hof","Garten","Essen",
    "Wohn","TV","Couch","Wintergarten","Couch2","Schuppen","irgendwas")

    Meine Standardmethode ist Versuch und Irrtum in Endlosschleife mit Interrupt.
    Weiterhin viel Spaß wünscht
    OPi

  • Verstehe den letzten Satz von Buschkin nicht ??

    Ich bedanke mich schon ml für die versuche mir zu helfen, aber ich muß ersteinmal noch mehr lernen.
    Werde jetzt ein zwei Bücher durchlesen und dann mal weiter sehen.
    Habe das Buch Raspberry Pi programmieren mit Python
    Habe schon etwas gelesen in diesem Buch und denke das es nicht schlecht ist.

    Würde mich aber trotzdem über ein paar Büchertipps freuen die wirklich etwas bringen.

    Sonst habe ich noch Raspberry Pi Das umfassende Handbuch

    Habe auch dort einige Sachen nachgeschlagen finde es aber recht kurz und knapp gehalten.

    Naja mal sehen

  • Wenn Du meine Standardmethode meinst: Das ist meine Arbeitsweise - nicht etwa ein Programmaufbau. Manchmal sitze ich "ewig" an einem Problem, unterbreche aber mitunter für ein Bierchen oder dgl. ;) ... und schon geht's weiter.

  • Hallo Challanger72,


    Würde mich aber trotzdem über ein paar Büchertipps freuen die wirklich etwas bringen.


    Bücherliste

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (17. Oktober 2017 um 23:10)

Jetzt mitmachen!

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