www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C und lange Pausen zwischen den Bytes


Autor: Gregor B. (gregor54321)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich lese mittels I2C/TWI unter Zuhilfenahme von Fleury's Lib ein 
Thermometer (LM75) aus. Das funktioniert auch gut, jedoch liegen 
zwischen den einzelnen Bytes scheinbar jeweils knapp 25ms Pause, warum?

Code anbei. Dass die Ausgabelogik noch nicht perfekt ist, ist so 
gewollt. Hab heute erst damit auf'm Steckbrett angefangen.

Grüße, Gregor

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>jedoch liegen
>zwischen den einzelnen Bytes scheinbar jeweils knapp 25ms Pause, warum?

Das ist nicht dein Ernst oder?
Nimm mal die ganzen uart_puts() raus.

Autor: Gregor B. (gregor54321)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber die laufen doch über Interrupts ?!
Der mega32 läuft auf 16MHz. 25ms entspricht 400.000 Zyklen, was soll so 
lange brauchen?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Aber die laufen doch über Interrupts ?!

Wie sollte ich das deinem Code entnehmen ?

>Der mega32 läuft auf 16MHz. 25ms entspricht 400.000 Zyklen, was soll so
>lange brauchen?

Bei 4800 Baud beträgt die Übertragungszeit für ein Zeichen ca. 2ms.
Ob mit oder ohne Interrupt. Wie groß ist denn dein Sendepuffer ?

Autor: Gregor B. (gregor54321)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alles original Fleury. 32 Byte Sendepuffer. Alle Strings sind kleiner 
als der Puffer.
Während das Byte übertragen wird, wird doch das non-ISR (Hauptprogramm) 
weiter abgearbeitet bis zum Übertragung-Fertig-Interrupt. Die I2C 
Übertragung besteht ja auch nur aus dem Beschreiben des Registers und 
dem Warten auf den Acknowledge-Interrupt. Ich kommentiere morgen mal 
alle UART-Debug-Sachen aus und berichte über eventuelle Performance 
Veränderungen...
Gregor

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich kommentiere morgen mal
>alle UART-Debug-Sachen aus und berichte über eventuelle Performance
>Veränderungen...

Geh doch einfach mal auf 9600 Baud. Ich könnte schwören
das sich die Pausenzeiten halbieren ;)

Autor: Gregor B. (gregor54321)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Holger,
Du hattest eindeutig Recht! Von 160ms für 5 (I2C-Nutz-)Bytes bei 
4800Bps, runter auf 20ms bei 38400Bps.
Das schmeckt mir aber gar nicht, das die Übertragung den Prozessor 
hängen lässt...
Besten Dank für den Tipp!
Grüße, Gregor

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.