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 :-)
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.
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.
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"
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.