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
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).
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
Also die Siemens-Telefone schicken Ende-Zeichen. Welche Marke benutzt Du denn?
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.