ETH_M32_EX: Telnet bricht Übertragung ab.

Gast #1879182
Lesenswert?

Hallo, Formum

Wir haben ein ETH_M32_EX mit ATMEGA644 und wollen über Telnet (IP) Daten 
übertragen. Das funktioniert auch schon, allerdings tritt dabei das 
Problem auf, daß die Anzeige plötzlich abbricht. Wir haben uns zum 
Testen eine Routine geschrieben, die 200 mal das ABC zeilenweise 
überträgt, aber zwischen der dreißigsten und siebzigsten Zeile wird 
mitten in der Zeile nichts mehr angezeigt, obwohl der Controller noch 
arbeitet. Manchmal wird am Ende noch die letzte Zeile angezeigt, danach 
kann man wieder Kommandos eingeben.

Wir sind nicht sicher, ob die Datenübertragung abbricht oder die Anzeige 
nicht hinterherkommt (Telnet unter Windows)

Für den Fall, daß die Übertragung einfach zu schnell geht, haben wir am 
Ende der Schleife ein delay eingebaut, aber das hat leider nur eine 
Verlangsamung, keine Verbesserung gebracht.

Weiß vielleicht jemand, woran das liegen könnte und ob man das Problem 
beheben kann? Hier im Forum scheint damit noch nie jemand Probleme 
gehabt zu haben.

Vielen Dank im Voraus, wenn jemand Zeit hat, es auszuprobieren.

Kant


Hier ist unserer Code: (aus cmd.c)
--------------------------------
1
void command_testausgabe(void)  // hier haben wir ein neues Kommando definiert.
2
{
3
    for (int i = 0; i < 200; i++)
4
        {
5
            for (int j = 65; j < 65+26; j++)   //gib die Buchstaben "A" bis "Z" aus
6
                {
7
                     usart_write("%c", j);
8
                }   
9
            usart_write(" %i\r\n", i);
10
           //_delay_ms(200);   //nachdem eine Zeile fertig ist, warten
11
        }
12
}
--------------------------------
Gast #1882514
Lesenswert?

Jein, eine Telnet-Kommunikation ist auch über IP möglich, weil der 
Microcontroller eine Kommunikation mit der RS232-Schnittstelle über 
Telnet zur verfügung stellt. Das funktioniert auch schon, es treten nur 
die o.g. Störungen auf, die noch eliminiert werden müssen.

Kant
Gast #1882543
Lesenswert?

Kant schrieb:
> Jein, eine Telnet-Kommunikation ist auch über IP möglich

Ja aber in Deinm Codebeispiel steht
>usart_write("%c", j);

Also hat Sascha darauf geschlossen daß Du serielle Kommunikation nutzt, 
zumal das für Telnet ja auch nahe liegt.
Falls das der Fall ist, schreibe Dir doch mal ein einfaches 
Leseprogramm, das die serielle Schnittstelle ausliest, dann weisst Du 
daß dein Problem nicht an Telnet liegen kann.

Ggf sollte es auch im Internet Programme geben mit denen Du eine 
serialle Kommuniaktion mithören kannst. Die kann man auch dazu verwenden 
auf einer Schnittstelle nur zu lesen.
#1882584
Lesenswert?

@Kant,

also wenn dein usart_write("%c", j) über telnet raus geht sehe ich das 
Problem das dort ja neue TCP-Pakete erzeugt und gesendet werden. Solange 
sich das Programm in der Ausgabeschleife befindet werden aber keine 
eingehenden ACK-Pakete mehr bearbeitet, also merkst du nicht wann die 
Gegenseite (PC) keine Daten mehr aufnehmen kann. Oder der ENC28J60 hat 
ein Problem mit dem Puffer wenn die eingehenden Pakete nicht ausgelesen 
werden.
Also: beim senden dafür sorgen, das auch der IP-Stack gelegentlich noch 
bedient wird.
Kannst ja auch mal mit wireshark schauen ob noch Pakete rausgehen und 
vom PC ACK-Pakete ankommen.

Sascha
Gast #1906179
Lesenswert?

Hallo, und Danke für die Antworten. Ich denke. Sascha Webers Ansatz wird 
wohl der richtige sein. Wir haben jetzt einen anderen Weg gefunden, der 
das Problem löst, und zwar haben wir einen primitiven TCP-Dämon 
geschrieben, über den wir auch größere Mengen an dynamisch generierten 
Daten senden können. Ich habe bisher noch keine Anleitung dazu gefunden, 
wenn also Interesse besteht, dann schreibe ich dazu mal was in einem 
neuen Thread.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren