Forum: Mikrocontroller und Digitale Elektronik AVR <-> PC Kommunikation (unter Linux)


von Joghurt3000 (Gast)


Lesenswert?

Moin,
ich habe hier einen kleinen Mega8 der per UART mit 'nem alten PC 
kommunizieren soll. Ich habe also auf dem AVR ein Programm am laufen 
welches bytes/chars sammelt und solange puffert bis entweder 80 zeichen 
empfangen sind (und dann den puffer resettet) oder bei empfang con '\r' 
den empfangenen string mit einigen befehlen vergleicht und dann eine 
antwort sendet. Wie gesagt arbeite ich unter Linux (altes Debian Sarge) 
und mit "minicom" funktioniert auch alles ganz gut (lediglich der cursor 
befindet sich nicht am ende der avr-antwort ... who cares). Ein Problem 
habe ich mit meinem eigenen serial-program und zwar sieht es 
folgendermaßen aus: ich sende einen befehl an den avr und bekomme keine 
anwort (oder eine 0-length antwort) sende eine weiteren befehl und 
erhalte dann die antwort für den ersten befehl. Also irgendwie scheint 
der PC wohl was zu puffern oder so ... mir erschließt sich das nicht 
genau. Ich habe schon versucht einfach zwei reads nach dem ersten write 
eizusetzen, aber das bringt auch den gewünschten effekt. pc-code basert 
auf diesen "linux-serial-programming-hwtos" mit 
"non-canonical-synchronous" setup. Ich werde versuchen den code mal hier 
als anhang zu posten, muss ihn irgendwie von dem anderen rechner 
bekommen. vllt hat ja schon jmd ne idee?

beste grüße & vielen dank :-)

von ozo (Gast)


Lesenswert?

Hast du mal ohne das PC-seitige Programm getestet? Einfach mit echo & 
cat direkt auf der Schnittstelle. Sehr wahrscheinlich liegt es eher am 
Microcontroller bzw. dessen programmierung.

von Joghurt3000 (Gast)


Lesenswert?

Ich habe mal das "echo" durch "minicom" ersetzt (mir ist nicht 
eingefallen wie ich mit echo ein '\r' sende und war zu faul den avr code 
zu ändern) und bekomme dann mit cat die entsprechende, prompte und 
unverzögerte antwort (und keine in minicom - cat fängt hie wohl ab). Ich 
habe mal meinen code hochgeladen:

pc-prog: http://pastebin.com/m32d150bb
avr-prog: http://pastebin.com/m35aa48cb

thx ozo, weitere vorschläge? habe noch ein erweitertes howto gefunden 
und werde mir dieses nun mal angucken. in der zwischeneit bin ich für 
weitere kommentare natürlich dankbar.

von Stefan E. (sternst)


Lesenswert?

Joghurt3000 wrote:
> mir ist nicht eingefallen wie ich mit echo ein '\r' sende

echo -e "text\r"

oder ohne das \n hinterher:

echo -en "text\r"

von Joghurt3000 (Gast)


Lesenswert?

Okay, danke. Ich habs jetzt, c_cc[VTIME] in der termios struct sollte 
auf größer Null gesetzt sein ... rs232 Kommunikation ist wohl doch 
langsamer als das Fetchen (wenn nicht schon teils geprefetched) und 
Executen von ein paar Opcodes auf meinem alten 586er.

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.