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