mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik interrupt und i2c


Autor: Lothar Sammel (magic33)
Datum:

Bewertung
0 lesenswert
nicht 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 !

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Sammel (magic33)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke
dachte ich mit schon das das so nicht geht

Autor: gastleser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.