i2c und interrupts

hallo zusammen,

hab eine frage, die sich ein bischen auf die vorherigen fragen bezieht.......

ich habe ja ein attiny programmiert, um viele taster abzufragen und die schaltzustände per i2c an ein mega zu senden.......

im prinziep klappt das auch ganz gut......

ich habe jetzt die i2c abfrage im loop immer wieder zwischen den anderen code kopiert, da es sonst zu lange dauert, bis das drücken des tasters wirkung zeigt (;

wie gesagt, es funktioniert so, aber perfekt ist das ja nicht.........

da ich mich mit inteerups kaum auskenne, wollte ich mal was dazu fragen........

kann ich den i2c-bus als interrupt nehmen (idealerweise für nur eine slave-adresse, da noch eine rtc und ein sensor mit dranhängt).

oder geht das nur mit einer zusätzlichen "leitung" für den interrupt ?

und wenn ich das jetzt per interrupt mache, was passiert dann mit dem rest des programms......

also nur mal angenommen, die loop wird durch ein taster-interrupt unterbrochen, wenn der befehl dann verarbeitet ist, läuft die loop dann genau an der stelle weiter oder von vorne ? ich meine ersteres oder ?

Du musst deinen Code möglichst delay()-frei schreiben, dann läuft loop() auch in den meisten Fällen schnell genug durch.
Ausnahme die Verwendung von Libraries die intern blockierenden Code haben. Manchmal sind das auch nur ein paar ms hier und da, aber das kann sich aufaddieren. LCDs sind so ein Fall. Das ist glaube ich was du hast.

I2C in einem Interrupt zu machen ist wahrscheinlich nicht so einfach, da das selbst wiederum mit Interrupts läuft. Es ist nicht unmöglich aber in einer ISR die Interrupts wieder freizugeben kann seine eigenen Probleme verursachen.

Taster per Interrupt abzufragen ist der falsche Weg!
Das tut man nicht.

Nach einem Interrupt wird das Programm fortgesetzt.

ich verwende statt delay meistens millis oder die rtc…
momentan verwende ich die wire, onewire, eeprom, die u8g und die bmp085-lib

momentan läufts auch sehr schnell…aber nur, weil ich die tasterabfrage überall dazwischenkopiert hab…
davor hatte ich die nur einmal am anfang, da hatte ich zt ne verzögerung von 3sekunden !

@ combi
wie macht mans denn ?
bringt ja auch nichts, wenn man dafür extreme verzögerungen hat…

ihr hattet im anderen threat doch was davon geschrieben, eine dritte leitung zu verwenden, damit der slave dem master mitteilen kann, das es was zu empfangen gibt ???