Forum: Compiler & IDEs Meldungen vom Modem herausfiltern und auswerten


von Sven Lübke (Gast)


Lesenswert?

Hallo Jungs!

Habt Ihr schonmal ein Modem (oder Siemens-Handy) mit einem AVR 
angesteuert und ein "professionelles" Programm dafür geschrieben? Ich 
habe nämlich folgendes Problem:

Ein Handy bekommt über den AVR Befehle zugesendet und ich möchte die 
Handyantworten vernünftig auswerten. Z.B. soll das Programm, wenn der 
Befehl "AT" abgesendet wurde, gucken, ob auch ein "OK" zurückgekommen 
ist. Wenn nicht, dann soll es das ganze noch x mal versuchen und dann 
z.B. "schlafen" gehen. Klappt alles einwandfrei, dann wird der nächste 
Befehl abgesendet und ausgewertet (gibt es hier einen Fehler, dann soll 
ein erneuter Versuch gestartet werden). Die UART-Sende- und 
Empfangsroutinen sollen Interrupt-gesteuert sein, wobei die Zeichen in 
einem Ringbuffer (oder circular buffer, wie auch immer) landen.
Das ganze muß totsicher funktionieren, denn das Modem kann durch Zufall 
angerufen werden (wodurch ein RING oder BEEP im Empfangsbuffer landet, 
das verschwinden muß, da es nicht verlangt war). Zusätzlich kann das 
Handy durch Zufall eine SMS bekommen (keine Ahnung,ob es dann etwas 
ausgibt) oder das Handy-Echo (ATE1) kann sich einschalten oder sonstwas. 
Außerdem kann es passieren, daß die erwartete Meldung noch gar nicht 
komplett übertragen wurde und deshalb der Vergleich fehlschlägt! Oder 
man vergleicht eine durch ein zufälliges Ereignis entstandene Meldung 
mit der erwarteten Antwort eines zuvor abgesendeten Befehls und bekommt 
dann einen Fehler. Suchen kann man im Buffer nicht nach einer "OK" 
Meldung, weil man nicht weiß, ob diese Meldung auch wirklich zu dem 
entsprechenden abgesendeten Befehl gehört. Wie lange wartet man auf die 
Antwort des Modems? Das Modem kann ja unterschiedlich lang für die 
Meldung brauchen oder eben gar nix senden (in der Atmel Application Note 
AVR306 findet man Programmcode, der den AVR für immer lahmlegt, wenn man 
ein Zeichen empfangen möchte, aber das Gegenüber gar keine Lust hat, 
weitere Zeichen zu senden). Ist es ratsam den Buffer vor jedem 
abgesendeten Befehl generell komplett zu löschen bzw. auszuwerten und 
alle nicht brauchbaren Dinge zu verwerfen?!
Selbst dann kann es zu Überschneidungen kommen (das Modem wird nach dem 
Löschen des Buffers und vor Absenden des Befehls angerufen, wodurch die 
unerwartete Meldung entsteht). Ist der Handware-Handshake eine Lösung?

RS232-Kommunikation finde ich persönlich sch**ße, weil das Gegenüber 
unaufgefordert dazwischen plappern kann, und dadurch die einfache 
Programmierung zu unsicher ist, aber Fax-Programme bekommen das ja auch 
irgendwie hin. Es muß also gehen, aber wie? Oder denke ich zu 
kompliziert? Habt Ihr schonmal etwas Ähnliches gemacht oder Ideen wie 
man so etwas sicher aufbaut? Programmcode wäre natürlich super, aber 
Ideen sind mir genauso recht. Vielen Dank für Eure Antworten...

PS: Das Programm sollte noch irgendwie in einen AT90S8515 passen, also 
zu viel Verwaltung darf es auch nicht sein!


Sven

von Sven Lübke (Gast)


Lesenswert?

Mist! Aus Versehen falsches Forum gewählt...

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.