Datum: 02.07.2008 11:08
Hallo - ich kommuniziere mit meinem ATMega8 via USB/Seriell Konverter. Ich kann Zeichen ueber die serielle Schnittstelle lesen und schreiben. Allerdings moechte ich, dass der Atmel nach dem Senden eines Messwertes einfach "auflegt" - das gelingt mir nicht... Idealerweise mache ich ein cat /dev/ttyUSB0 (linux) und bekomme dann EINEN Wert. Im Moment ist mein main() mit einer while-loop ausgestattet. Die immer wieder Werte abfragt. Ich habe auch schon versucht ein 0x00 bzw. ein 0x04 zu senden. Aber das klappt auch nicht. Das Terminal bleibt einfach offen. Hier ein Code-Schnipsel:
val=1; textrs232("Wert ist: %d",val); textrs232("\r\n"); textrs232(0x00); |
geht leider nicht... Wie kann ich die rs232 connection "auflegen"? Hat jemand ne Idee? Ilja
Datum: 02.07.2008 11:15
hast du denn was zum auflegen? Was willst du denn eigentlich erreichen? Mag ja sein das DU weisst was du mit "auflegen" meinst aber das können doch Andere nicht wissen. bye Frank
Datum: 02.07.2008 11:19
Also - ich moechte, dass ich den Atmel mit
cat /dev/ttyUSB0 abfrage, und dann ein einziger Wert ausgegeben wird.
Also:
# <-- Prompt
#
# cat /dev/ttyUSB0
Wert: 4
#
#
Gruesse
Ilja
Datum: 02.07.2008 11:37
Du meinst also, daß das Linux-Terminalprogramm per Remote gekillt wird? Ob überhaupt und wie das geht, mußt Du in der Linux-Doku nachsehen (ich kann kein Linux) und dann den AVR eben den entsprechenden Befehl senden lassen. Vielleicht gibts auch die Option, daß sich das Terminalprogramm nach Ablauf einer bestimmten Zeit selber killt. Peter
Datum: 02.07.2008 11:41
Du kannst versuchen vom uC ein 0x04 zu senden. Das müsste EOF (EndOfFile) sein, es kann sein, das cat sich bei diesem Zeichen beendet. Christian
Datum: 02.07.2008 11:45
Man kann nich einfach "auflegen". cat gibt die Zeichen solange aus, bis die Datei zu ende ist. /dev/ttyXX kann aber nie zu ende sein, deshalb wird cat auch nie sich selbst beenden. Was Du brauchst ist ein Terminal-Emulator, wie zb gtkterm oder minicom.
Datum: 02.07.2008 11:46
Sende nach dem Wert ein "\r" und verwende auf Linux-Seite sowas:
(read wert ; echo "Wert: $wert") </dev/ttyUSB0 |
Datum: 02.07.2008 11:49
Schluck - ich habe scheinbar deutliche Probleme mich verstaendlich
auszudruecken... Mist. Ich versuch's nochmal:
Normalerweise kann man eine Schnittstelle unter Linux einfach mit dem
Befehl 'cat' auslesen. Wenn ein Zeichen EOT (End of Transmission) bzw.
ein EOF (End of File) gesendet wird, hoert die Ausgabe von cat einfach
auf.
Dies habe ich versucht mit meinem Atmel auch zu realisieren. Das Problem
welches auftaucht, ist scheinbar, dass ich kein EOT bzw. EOF senden
kann. Meine Versuche diesbezueglich, naemlich das Uebertragen von 0x04,
den Steuerzeichen fuer EOF bzw. EOT laufen nicht. Im Prinzip setze ich
dafuer UDR (nach Check ob senden moeglich) auf 0x04. Leider beendet das
Program 'cat' jedoch nicht, sondern wartet einfach auf weitere Zeichen
von der Schnittstelle.
Wie schaffe ich es also, dass meine Verbindung, vom Atmel initiiert,
beendet wird?
Gruesse
Ilja
Datum: 02.07.2008 11:52
Danke Stefan - Deine Loesung funktioniert. Allerdings habe ich noch
immer nich genau verstanden, warum 'cat' beim Senden von EOF immer noch
offen bleibt...
Danke
Ilja
Datum: 02.07.2008 11:55
Ilja wrote: > textrs232(0x00); Hast du schon mal das ASCII Zeichen für End of transmission EOT statt der 0x00 verwendet? Bei Unix wäre das ^D (0x04). http://www.geocities.com/dtmcbride/tech/charsets/ascii.html EDIT: Hast du, sehe ich gerade. Ob das funktioniert, hängt auch davon ab, wie du /dev/ttyUSB0 konfiguriert hast. Wenn du die Schnittstelle im RAW Modus betreibst, also keine Filterung der Daten, kann es sein, dass ein EOT im Datenstrom nicht interpretiert wird. Anschauen kannst du dir das mit dem Kommando # stty -a < /dev/ttyUSB0 und dann nachsehen, was bei eof = ... eingetragen ist und die anderen Optionen checken, dass die nicht RAW bedeuten http://www.linux-ag.de/linux/LHB/node106.html
Datum: 02.07.2008 12:37
also ich habe das folgendermaßen gelöst: head -n1 < /dev/tyyS0
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel