- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: I2C PCF8574A Interruptleitung nutzen ??

  1. #11
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Anzeige

    Praxistest und DIY Projekte
    Das Problem ist, das ein Interrupt dann auftritt, wenn man ihn nicht erwartet, deshalb heisst er auch Interrupt. Im ungünstigsten Fall, wenn das Hauptprogramm grad mitten dabei ist Zeichen an das LCD zu senden, und in der ISR auch wieder Zeichen an das LCD gesendet werden sollen, gibts Chaos, weil sich das LCD nimmer auskennt wo es grad ist, und eben Buchstabensalat anzeigt.

    Der Interrupt wartet nämlich nicht bis irgendein Programmteil abgeschlossen ist, der kommt mittenrein, deswegen ist es besser in der ISR nur Flags zu setzen die im Hauptprogramm ausgewertet werden.
    Das ist dann zwar nicht aufs 100stel Zeitnah, aber i.d.Regel reicht das trotzdem.

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo Linux_80

    Könnte man z.B. in der ISR das LCD Reseten ? (z.B. mit CLD ?)

    Macht es dem I2C auch was aus, wenn man ihn unterbricht?
    Könnte ja in der ISR mit START... wieder neu starten ?

    l.G

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Können schon, aber da gibts dann die Probleme im Hauptprogramm !
    Das weiss ja nix von der Kommunikation die in der ISR geschieht, und kommt deshalb aus dem Tritt. Und der Slave denkt sich auch sonst was, wenn mittendrin ein anderer angesprochen werden soll, wenns überhaupt geht, da vorher kein Stop da war

    Das beste Programmstyling ist immer noch in der ISR eine Variable (bzw. Flag, oder Schalter) zu setzen, den man im Hauptprogramm abfrägt (und zurücksetzt), dann kommt nix durcheinander.
    So wie's oben PicNick schon gezeigt hat.
    Ist auch viel einfacher und überschaubarer.

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    @linux_80
    nur zur vervollständigung meines verständnisses:
    was du da erklärt hast ist vollkommen einleuchtend! wie sähe es denn mit ner variante aus, in der man im hauptprogramm während kritischer (wichtiger) vorgänge die interrupts sperrt und dann zwischendrin (wenns halt besser passt) wieder freigibt ?

    gruss

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Da kommen wir dann in die Richtung "atomarer" Code, da gibts im Wiki etwas dazu, die Beispiele sind zwar auf C bezogen, aber die Sprache an sich ist egal.

    Auf diesen Seiten nach "atomar" suchen (mehrere Stellen!):
    https://www.roboternetz.de/wissen/in...Programmierung
    https://www.roboternetz.de/wissen/index.php/Avr-gcc

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.11.2006
    Ort
    olargues
    Beiträge
    776
    vielen dank für den excurs!
    habe die beiden links nachgelesen und verstanden.

    da war ich ja nur zufällig in diesen thread reingeplappert, konnte auf dem weg aber was wichtiges in mein hirn speichern. das verhindert dann grosse verwunderungen wenn ich dann demnächst mal ne int-routine aufsetzte.

    gruss

  7. #17
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    29.10.2004
    Ort
    GRAZ
    Alter
    58
    Beiträge
    576
    Hallo (Linux_80)

    Interessant . Gut zu wissen

    Weil wir gerade bei Thema sind..

    Wie ist das den bei meinem Programm, wenn zusätzlich noch 3 Timer laufen, die Pin's von zwei Port's takten.
    (mit ca. 20kHz bei 10Mhz Quarz)

    Gebe es da auch Gefahren, macht das dem Takt vom I2C und LCD nicht so viel aus?
    Bis jetzt habe ich noch nix gemerkt..

    Und, sehe ich das richtig, dass ein ISR nicht von einem anderen unterbrochen werden kann ?

    l.G. Roberto

  8. #18
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Normalerweise kann immer nur eine USR laufen, d.h. die wird nie unterbrochen.
    Enab/disab Interrupts im Hauptprogramm: Auch damit kann man sich helfen. Gibt immer mehrere Möglichkeiten.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

fchao-Sinus-Wechselrichter AliExpress