Forum: Mikrocontroller und Digitale Elektronik ELV USB-I²C-Interface Pufferüberlauf


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Jörg R. (Firma: Rehrmann Elektronik) (j_r)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

ich hoffe, jemand kennt das Problem und vor allem eine Lösung dazu.
Von ELV gibt es ein USB-I2C-Interface. Mit HTerm lassen sich Daten 
zwischen PC und I2C-Bus austauschen. Wenn man nun komplette Datensätze 
auf den I2C-Bus ausgeben will, kann man mit HTerm auch Dateien an das 
Interface senden. Leider überflutet HTerm den winzigen Puffer des 
I2C-Interfaces sofort, sodass dieses seinen Dienst einstellt. Ich habe 
noch keine Möglichkeit gefunden, das zu verhindern. Kennt jemand eine 
Möglichkeit, wie man die Daten mit HTerm oder einer anderen Software 
kontrolliert an das Interface übermitteln kann ?

Jörg

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Haken bei "CTS Flow control" gesetzt?

von Jörg R. (Firma: Rehrmann Elektronik) (j_r)


Bewertung
0 lesenswert
nicht lesenswert
Jim M. schrieb:
> Haken bei "CTS Flow control" gesetzt?

habe ich auch schon probiert. Das hat nur den Effekt, das überhaupt 
keine Daten mehr übertragen werden. Anscheinend wird CTS nicht an I2C 
adaptiert.

Jörg

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht lesenswert
Falls du Linux benutzt, kannst du alternativ cutecom verwenden. Da 
kannst du ganz rechts unten eine Verzögerung zwischen den Zeichen 
einstellen.

von Sascha W. (sascha-w)


Bewertung
0 lesenswert
nicht lesenswert
Jörg R. schrieb:
> Leider überflutet HTerm den winzigen Puffer des
> I2C-Interfaces sofort, sodass dieses seinen Dienst einstellt.
In der Anleitung steht das der Puffer 400Byte groß ist - da frage ich 
mich was du da sendest. Die paar Byte die du in der Ansicht der 
Systemsteuerung siehst beziehen sich nur auf RS232 Interface Hardware 
die im PC fest verbaut ist.

Sascha

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
und statt HTERM ein eigenens Programm schreiben welches kleinere Blöcke 
überträgt?

COM ist ja nicht so schwer, LCC32 gibts gratis

von Jörg R. (Firma: Rehrmann Elektronik) (j_r)


Bewertung
0 lesenswert
nicht lesenswert
Danke Euch für die Bemühungen.

@Stefan: Geht leider nicht, da alles unter Windows läuft. Wäre 
allerdings auch keine saubere Lösung, da man entweder die Verzögerung 
unnötig groß einstellen müsste oder das Risiko eingehen müsste, das die 
Daten schneller gesendet werden als sie verarbeitet werden können.

@Sascha: Für kleinere Spielereien ist der Puffer sicher gross genug. Es 
gibt aber durchaus Anwendungen, bei denen auch mal mehrere kB übertragen 
werden müssen, z.B. wenn Speicherinhalte kopiert werden sollen.

@Joachim: Das kostet Zeit und Geld. Ich wollte eigentlich vermeiden, das 
Rad nochmal zu erfinden. Ich hatte gehofft, dass ein so grundlegendes 
Problem schon umfassend gelöst wurde. Da habe ich mich wohl getäuscht. 
Selbst beim ELV-Support gibt es keine Lösungsansätze oder nähere 
Informationen dazu.

Wahrscheinlich muss man tatsächlich ein Programm schreiben, dass jedes 
Byte einzeln überträgt und jeweils die Acknowledge-Rückmeldung abwartet.

Jörg

von Joachim B. (jar)


Bewertung
0 lesenswert
nicht lesenswert
Jörg R. schrieb:
> Wahrscheinlich muss man tatsächlich ein Programm schreiben, dass jedes
> Byte einzeln überträgt und jeweils die Acknowledge-Rückmeldung abwartet.

alternativ könntest du auch einen µC auf der I2C Seite mit größerem 
Buffer zwischensetzen, es ist ja egal wo der Puffer sitzt ob in win oder 
im I2C

von Dieter G. (briefkopf)


Bewertung
0 lesenswert
nicht lesenswert
Hallo

unter Windows gibt es das Programm ZOC, das kann für jeden Char, für 
jedes LF/CR getrennt die Verzögerung einstellen (weiss jetzt nicht ob 
mit den aktuellen Win Versionen auch noch so ist ...)
Es gibt auch Demo-Versionen, kannst ja mal testen.

Dieter

von Jörg R. (Firma: Rehrmann Elektronik) (j_r)


Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal und vielen Dank an alle Helfer.

ZOC habe ich irgendwie nicht zum Laufen bekommen. Ich konnte das Problem 
wie folgt vorerst "lösen": Ich habe die Commport-Baudrate auf Minimum 
gesetzt (4800 Baud) und noch viele Leerzeichen in die Datei eingefügt. 
Offensichtlich wird da zwischen USB und I²C eine klassische RS232 
emuliert. Dadurch wurde die Übertragung der Datei in den I²C-Puffer so 
langsam, dass die Daten rechtzeitig abgearbeitet werden konnten. Keine 
schöne Lösung, aber es funktioniert erstmal.

Jörg

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]
  • [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.