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


von martin (Gast)


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

von crazy horse (Gast)


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).

von martin (Gast)


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

von Jürgen (Gast)


Lesenswert?

Also die Siemens-Telefone schicken Ende-Zeichen. Welche Marke benutzt Du
denn?

von martin (Gast)


Lesenswert?

Nokia, über Mbus

von martin (Gast)


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

von crazy horse (Gast)


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.

von martin (Gast)


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

von martin (Gast)


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

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.