Forum: Mikrocontroller und Digitale Elektronik RS232 verlorene Zeichen


von Peter W. (Gast)


Lesenswert?

Ich habe ein kleines Problem mit der seriellen Kommunikation. Mit einem 
kleinen C Programm versuche ich einen Satz an meinen ATmega16 zu senden. 
Dort wird dann das empfangene auf einem LCD Display angezeigt

ISR(USART_RXC_vect)
{
  lcd_putchar(UDR);
}

Wenn ich mit HyperTerminal über "Textdatei senden..." gehe, dann kommt 
der ganze Satz an.
Send ich es über mein C Programm werden teilweise Zeichen "verschluckt". 
Lässt sich das irgendwie verhindern?

Hier meine C Funktion:
unsigned long bytes_written;
char test[] = "Eine Kuh macht MUH, ja eine Kuh die macht ganz gerne MUH 
!!";
WriteFile(serial_port, (void*)&test, strlen(test), &bytes_written, 
NULL);

von Bernhard S. (bernhard)


Lesenswert?

Würde es etwas bringen, wenn nach jedem gesendeten Zeichen eine kleine

Pause von wenigen ms eingelegt wird?

von Daniel M. (usul27)


Lesenswert?

Läuft der ATMega mit einem Quarz oder dem internen Oszillator? Letzteres 
könnte durchaus eine Ursache für ein solches Problem sein.

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Dein lcd_putchar wird zulangsam für die Verwendung innerhalb einer ISR 
sein.
Sammle die eingehenden Zeichen in einem Puffer und setze ein Flag, dass 
ein Zeichen empfangen wurde.
In deinem Hauptprogramm wird dann abgefragt, ob das Flag gesetzt ist 
oder nicht.
Ist es gesetzt, wird solange lcd_putchar mit dem aktuellen Zeichen 
aufgerufen, bis keins mehr im Puffer ist.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Na, da wird die Ausgabe eines Zeichens auf das LCD wohl teilweise mehr 
Zeit benötigen, als die Übertragung durch den UART.

Die ISR sollte einfach nur einen kleinen Ringbuffer (16 oder 32 Zeichen) 
füllen, und im Hauptprogramm eine Routine diese Zeichen wieder auslesen 
und ausgeben.
In der ISR kann man dann evtl. den Sender bremsen per Handshake.

von Peter W. (Gast)


Lesenswert?

Pause bringt was, ja. Aber lässt sich das nicht ohne Pause so regeln, 
dass nichts verloren geht?
Ich habe einen 7.3728 MHz Quarz der auch läuft. Im Moment ist die 
Übertragungsgeschwindigkeit 9600 bps, mit 115.2k fehlen einfach mehr 
Zeichen.

von Peter W. (Gast)


Lesenswert?

Da war ich schon zu langsam mit Antworten :D

Ich werde das mit dem Puffer mal testen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.