Forum: Mikrocontroller und Digitale Elektronik interrupt und i2c


von Lothar S. (magic33)


Lesenswert?

Guten Tag
ich habe Folgendes Problem,Verständnissfrage

mein programm sendet 2KByte an daten über den i2c zu einem eeprom
wärend dieses vorganges ca 6sec kann es sein das ich einen interrupt 
bekomme !
welcher wiederum den i2c benutzt um 2datenpakete an einen anderen 
baustein am i2c zusenden!

nun meine frage :
at90s8515 24lc16 und pcf8574 im einsatz
wie wird das auf dem stack verarbeitet verliere ich da was speziell die 
adressen oder daten !

kann ich das bedenkenlos so betreiben !

von Peter D. (peda)


Lesenswert?

Lothar Sammel wrote:

> wie wird das auf dem stack verarbeitet verliere ich da was speziell die
> adressen oder daten !

Wenn Du das selber nicht weißt, dann hast Du das I2C wohl nicht 
programmiert oder die Source gelesen, sondern nimmst eine I2C-Blackbox, 
ich tippe mal auf Bascom.
In diesem Fall solltest Du erstmal die Doku zu der I2C-Blackbox lesen.


> kann ich das bedenkenlos so betreiben !

Generell erstmal ein dickes NEIN !

Man kann Interfaces prinzipiell nicht durcheinander sprechen lassen.
In größeren OS gibt es deshalb spezielle Routinen, um ein Interface 
anzufordern, zu benutzen und wieder freizugeben.


In Deinem Fall wird es aber das einfachste sein, ein 2.I2C in Software 
zu machen, dann hat jeder Prozeß sein I2C exklusiv für sich.

Eine elegantere Lösung ist es, das I2C selber als Interrupt zu machen 
und 2 Puffer dafür zu verwalten.
Und der Interrupt weiß dann genau, wann er die pcf8574-Sachen zwischen 
die 24lc16-Sachen schieben kann.
Das entlastet dann erheblich die CPU, weil das Warten im Interrupt 
entfällt, bis das I2C fertig ist.


Peter

von Lothar S. (magic33)


Lesenswert?

Danke
dachte ich mit schon das das so nicht geht

von gastleser (Gast)


Lesenswert?

Hallo, warum gleich die Flinte ins Korn werfen ?
Ich plädiere für ein dicke JAIN.

Zwar hast du deine Schaltung nicht konkret beschrieben, da aber der 
PCF8574 von Natur aus ein Slave ist, kann er nicht selbst aktiv werden.
Wenn also von einem Interrupt die Rede ist, dann kann es sich doch wohl 
nur um den Interrupt auf einer separaten Leitung handeln (wenn Ports am 
PCF8574 von aussen geändert werden - z.B. durch einen Schalter - dann 
löst er an seinem Interrupt-Ausgang ein Signal aus).
Diesen Interrupt (z.B. als INT0) sollte der Master trotz laufender 
TWI-Übertragung erkennen können und ein Flag setzen.
Nachdem das Eeprom beschrieben ist, muss geprüft werden, ob ein Flag 
gesetzt ist - und wenn ja, dann wird der PCF8574 adressiert und seine 
Ports abgefragt.
Ein Problem könnte natürlich sein, dass die Reaktion auf den Interrupt 
(des PCF8574) mit einiger Verzögerung erfolgt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.