www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wann Datenempfang ueber UART zu ende?


Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe folgendes Problem: Ich bin dabei, mit bascom ein Programm zu
schreiben, dass mit einem Handy kommunizieren soll. Das Senden
funktioniert bereits super, es scheitert im Moment nur am Empfangen der
Antworten vom Handy. Da die Antworten eine sehr variable Länge haben,
ist es schwer festzustellen, wann es denn nun "nix mehr zu sagen
hat". Die Kommunikation läuft über 9600 baud und die bytes werden
einfach nacheinander in einen String geschoben. Hat vielleicht jemand
eine Idee, wie das Problem auf einigermassen elegante Art und Weise zu
lösen ist?

mfg martin

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn das Handy keine festes Ende-Zeichen (ETX oder 0 oder auch ein
anders) sendet, gibts evtl. noch die Möglichkeit, dass eine
Steuerleitung der Handy-Schnittstelle das Ende anzeigt.
Falls beides nicht zutrifft, bleibt dir eigentlich nur ein timeout.
Daten kommen, xxxms passiert nichts mehr -> Ende des Liedes.
Lass doch mal das bray-Terminal mit an der Tx-Leitung des Handys
mithorchen, zeigt dir jedes Byte an (im Gegensatz zu Hyperterminal, da
verpasst man oft die wichtigen Sachen).

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich benutz comporttoolkit, funktioniert auch sehr gut. Bin mir
eigentlich sehr sicher, dass nichts dergleichen gesendet wird. Die
einzige Idee die ich haette, waere, das Ende anhand der blocklength
zubestimmen, wird aber wahrscheinlich unendlich kompliziert....

"Daten kommen, xxxms passiert nichts mehr -> Ende des Liedes."
Das Versuch ich auch schon seit geraumer Zeit, ich glaub allerdings
langsam, dass ich zu däml... bin, komm da einfach mit den Gedanken nich
mehr nach :(. Hast du vielleicht sowas wie n Beispiel, oder zumindest
etwas "flussdiagrammähnliches"?

Thx & mfg, martin

Autor: Jürgen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also die Siemens-Telefone schicken Ende-Zeichen. Welche Marke benutzt Du
denn?

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nokia, über Mbus

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es waere noch eine Möglichkeit, den String nach jedem Empfangenen Byte
zu überprüfen (also nachzuprüfen, alle Bytes vor dem letzten geXORed
das letzte Byte (checksumme) ergeben. Das kann durch dummen Zufall aber
leider auch mal schiefgehen, ausserdem waer da noch das Problem, dass
immer 2 frames vom Handy gesendet werden. Zuerst ein ackn, danach dann
die eigentliche Antwort auf die "frage" vom pc.

mfg

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dafür gibts mehrere Wege, hier einer davon:
In einer Timer-ISR (sagen wir mal, der Timer löst jede ms einen Int
aus) startest du einen Softwarezähler, wenn du das 1.Byte empfängst. In
der ISR des Timers prüfst du jedesmal, ob ein bestimmter Zählerwert
erreicht wird, und jedes empfangene Byte der UART setzt diesen Zähler
wieder auf 0.
->200ms kein Empfang -> Zähler erreicht 200 -> timeout-bit wird gesetzt
-> Zähler wird gestoppt.

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, der 2051, mit dem ich das im Moment noch mach, hat leider nur EINEN
Timer, und der geht schon für den Uart drauf. Und das, was du da
geschrieben hast, ist mir trotz der Tatsache, dass ich bascom schon
seit ca 1 Jahr nutze, echt zu hoch g.

danke & mfg

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, Käse, er hat 2 Timer, hab mich mit den Dingern nur noch nie wirklich
befasst, werds dann mal versuchen. Wenn jemand noch nen emtsprechenden
scr findet, kann er ihn ja posten :).

mfg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.