mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC, I2C - Reaktionszeit auf SSP-Interrupt


Autor: Brainy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forengemeinde,

ich benutze zwei PIC18F8520, zwischen denen ich Daten über I2C 
austausche.
Lesen und Schreiben funktioniert gut, bloß ist beim Schreiben die 
Reaktionszeit des Slave auf ein Address-Match oder ein Datenbyte mit 150 
us m.E. viel zu lang.
Das ist die Zeit, die ich gemessen habe zwischen dem ACK-Signal des 
Slave (das kommt ohne Verzögerung nach dem Address- bzw. Datenbyte des 
Masters) und dem Aufruf der Interrupt-Routine.
Beim Read-Request des Masters kommt die Interrupt-Routine bereits nach 
wenigen Mikrosekunden.
Das Verhalten ist natürlich bei allen Baudraten gleich.
Der Master ist mit 25 MHz und der Slave mit 1,8432 MHz getaktet.

Kennt jemand so ein Verhalten?
Ist das eine normale Reaktionszeit, liegt es an der niedrigen Taktrate 
des Slave?

Gruß
Brainy

Autor: Bernhard_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne einen Quellcode lässt sich darüber nicht allzuviel sagen. Aber: 
Funktionsaufrufe innerhalb einer ISR (auch wenn nicht verwendet) zwingen 
zumindest den C18 Compiler zu einem ÄUSSERST ineffizienten Stackhandling 
mit langer Latenzzeit. Einfach simulieren...

Autor: Zwirbeljupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1,8432 MHz ist jetzt aber auch nicht gerade wahnsinnig schnell.
Da dauert ein Befehl schon mal allein 2,2 µs.
Wie wird denn dei Verzögerung bei Dir gemessen? Setzt Du in der ISR 
einen Pin auf High/Low?

Autor: Brainy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau, in der ISR als erstes einfach einen Port auf high setzen.
1,8432 MHz sind natürlich nicht schnell, aber in der Zeit kann er ja ca. 
60 Instruktionen durchführen. Und das halte ich für ziemlich viel.

Autor: Brainy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Bernhard_:
Ich verwende den HiTech PICC-18 STD Compiler und rufe innerhalb der ISR 
tatsächlich eine SSP-Handler-Funktion auf.
Ich werde in Kürze mal testweise das SSP-Handling ohne Interrupt 
durchführen.

Autor: Zwirbeljupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 1,8432 MHz sind natürlich nicht schnell, aber in der Zeit kann er ja ca.
> 60 Instruktionen durchführen
Dann schau mal ins Assemblerlisting. Es würde mich nicht wundern, wenn 
der PIC diese 60 Instruktionen als Overhead in der ISR verbrät (Register 
sichern usw...)

Autor: Brainy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir im Assembler-Listing den Overhead beim Interrupt angesehen 
und es stimmt, es werden für's Hin und Zurück jeweils 42 Instruktionen 
verbraten, incl. 50% NOPs(!).
D.h. ich werde für meine Anwendung Interrupts vermeiden, denn Polling 
kann ich mir in dem Fall leisten.
Und einen schnelleren Clock werde ich mir auch leisten. ;-)

Bernhard_ und Zwirbeljupp, vielen Dank für Eure Unterstützung, Ihr habt 
mir schnell geholfen!

Brainy

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.