Forum: Mikrocontroller und Digitale Elektronik delay zw. UART-Ausgaben fehlt?


von Timo P (Gast)


Lesenswert?

hallo!

Als Terminalprogramm nutze ich bisher erfolgreich minicom. Alternativ 
habe ich per Win-PC Hypertrm genutzt.
1
                 uart_puts("qwe");
2
     _delay_ms(200);
3
     _delay_ms(200);
4
     _delay_ms(200);
5
     _delay_ms(200);
6
     _delay_ms(200);
7
     uart_puts("rtz\n");

Dann müsste die zweite Hälfte der Ausgabe doch verzögert kommen. Kommt 
aber nicht! Mein Terminalprogramm erzeugt die Pause VOR den Ausgaben, 
die dann zeitgleich kommen! GRRR

Bitte um Hilfe!

ggf hilft der ganze code? (ATMEGA 32, AVRStudio, Winavr)

von Karl H. (kbuchegg)


Lesenswert?

Timo P schrieb:

> Dann müsste die zweite Hälfte der Ausgabe doch verzögert kommen.

Nicht unbedingt.
Kommt drauf an, welche und wieviele Pufferstufen dazwischen sind, die 
erst mal abwarten bis ein \n daherkommt, ehe sie dann die 
darunterliegenden Ausgabeschichten aktivieren.

> ggf hilft der ganze code? (ATMEGA 32, AVRStudio, Winavr)

Ist schon mal ein Anfang.
Aber such mal die Einstellungen deines Terminalprogramms ab, ob es dort 
sowas wie 'Zeilenpuffer' gibt, die abgeschaltet werden können.

von Matthias L. (Gast)


Lesenswert?

>Mein Terminalprogramm erzeugt die Pause VOR den Ausgaben,
>die dann zeitgleich kommen!

Das kenn ich. Das liegt wohl an dem PC-Treiber. Der ist nicht für 
einzelne Bytes gedacht. Guck dir das mal mit nem Oszi an, das kommt 
bestimmt korrekt aus dem µC.

von Peter (Gast)


Lesenswert?

Matthias Lipinsky schrieb:
> Das liegt wohl an dem PC-Treiber.

ganz bestimmt nicht, für den Treiber sind es alles bytes und die werden 
auch zur not alle einzeln durchgeschoben.

Vermutlich warten das Terminalprogramm auf das \n

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Oder deine _delay_ms() funktioniert nicht. Lies mal unter Warteschleifen 
im AVR-GCC-Tutorial den Hinweis zur avr-libc 1.7.0

von Peter (Gast)


Lesenswert?

test mal bitte mit
1
  uart_puts("qwe\n");
2
     _delay_ms(200);
3
     _delay_ms(200);
4
     _delay_ms(200);
5
     _delay_ms(200);
6
     _delay_ms(200);
7
     uart_puts("rtz\n");

von Schorsch (Gast)


Lesenswert?

Bei telnet würde ich jetzt sagen: Schick nach dem ersten Wort und vor 
dem Delay ein "Go Ahead" (0xFF 0xF9), aber ob minicom bzw. Hyperterminal 
auf Telnet-Sequenzen reagieren?

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.