Tach Zusammen, für ein Oberstufenprojekt bin ich an einer GSM gesteuerten Microcontrolleranwendung dran, um gewisse Dinge später mit einer Relaiskarte per gsm anzusteuern. Wenn ich per Terminal AT-Commmands an ein SiemensHandy sende, dann sehe ich nach jedem Ausführen des Befehls ein "OK" vom Modem. Ich möchte nun diese Modemrückmeldung per Microcontroller empfangen und mittels Terminalprogramm ausgeben (später auswerten). Das Handy läßt sich problemlos steuern, folglich muss die Tx Leitung des Controllers bzw die Rx Leitung des Handys in Ordnung sein.(Ich benutze die Schaltung aus diesem Forum mit den 2,7V Z-Dioden gegen Masse und ein Serienwiderstand 1K) Die Tx Leitung des Handys liefert jedoch nur ca 2.7V, also habe ich eine Pegelwandlung mit 2 Transistoren dazugeschaltet um den CMOS-Pegel auf TTL 5V zu wandeln. Im Anhang befindet sich die Pegelwandlerschaltung. Ich habe jedoch statt die eingezeichneten Transistoren die BC547C genommen und ein 40K statt die eingezeichneten 47K. Ferner liegen bei mir am Eingang die 2.7V an statt die 3.6V. Ich hatte Tx des Handys auch schon direkt am Rx des AVRs. Allerdings bekomme ich das Modemecho in beiden Fällen (mit Pegelwandlung und Ohne Pegelwandlung) nicht zu sehen. Ich bin seit einiger Zeit mit der Suchfunktion und Google beschäftigt aber leider komme ich einfach nicht auf was gescheites. Kurz gesagt: AVR schickt die Befehle raus, Handy bekommt sie und führt sie auch aus, aber ich bekomme einfach keine Rückmeldung vom Handy (obwohl das Handy wenns direkt mit dem PC verbunden wird, das "OK" anzeigt.) Was mache ich (seit Tagen) falsch??? Ich wäre euch sehr verbunden, wenn mir jemand aus meiner verzweifelten Situation wieder auf die Beine helfen könnte. gruß Elektrolyt
Am einfachsten wäre es ja das ankommende "RING" anzuzeigen, aber wie realisiere ich das, damit ich das vom Handy gesendete "RING" (bei ankommendem Anruf) wieder am Terminal ausgebe??? Ich programmiere in C und ich muss dazu erwähnen, dass ich den Controller mit dem Handy verbunden habe und am Board noch der MySmartUSB dransteckt, womit ich die Kommunikation, zwischen Handy und Controller am Hyperterminal mitracen kann. schönen Samstag abend noch... Elko
@ Elektrolyt (Gast) >Ich hatte Tx des Handys auch schon direkt am Rx des AVRs. Allerdings >bekomme ich das Modemecho in beiden Fällen (mit Pegelwandlung und Ohne >Pegelwandlung) nicht zu sehen. Ich bin seit einiger Zeit mit der Ein Oszi wäre hier hilfreich. >AVR schickt die Befehle raus, Handy bekommt sie und führt sie auch aus, >aber ich bekomme einfach keine Rückmeldung vom Handy (obwohl das Handy >wenns direkt mit dem PC verbunden wird, das "OK" anzeigt.) Was heisst direkt mit dem PC verbunden? Da muss ja noch ein Pegelwandler dazwischen sein, denn der PC arbeitet mit 12V RS232 Pegeln und nicht 2,7V LVCMOS. >Was mache ich (seit Tagen) falsch??? Wahrscheinlich muss dein Pegelwandler vom Handy zum AVR invertieren, so wie es der MAX232 auch tut. Kann man leicht prüfen. Wenn im Ruhezustand die Leitung vom Handy auf HIGH liegt braucht du einen NICHTinvertierenden Pegelwandler, anderenfalls einen INVERTIERENDEN. MFG Falk
Hallo Falk, danke für die schnelle Antwort, bin wirklich erstaunt... Also direkt angeschlossen heisst, dass ich das Handy natürlich mit einem Datenkabel an den Rechner angeschlossen habe und da funktionieren die AT-Commands und es werden auch die Echos bzw Parametereinstellungen angezeigt. Die Leitung vom Handy ist im Ruhezustand auf high und geht bei Aktivitäten auf Low. Also müsste ich, nach dem, was ich grad von dir erfahren habe mit dem Nichtinvertierenden Pegelwandler richtig liegen. Mich wundert es nur ein wenig, dass ich am Ausgang von der Transistorschaltung NIX (0.03V) messe, obwohl am Eingang High (2.7V) ist. also müsste doch der Ausgang voll durchschalten (5V) ??? Ich hab mir natürlich auch irgendwie vorgestellt, dass das korrekt sein muss, da die kompletten 5V am 1K Widerstand abfallen und am Ausgang gegen Masse natürlich NIX anliegt. Liege ich mit der Überlegung in etwa richtig??? Muss ich das Empfangen des ModemEchos mit Interrupts abholen, oder geht das auch im polling??? Vielen danke im Voraus... gruss Elektrolyt
@ Elektrolyt (Gast) >Die Leitung vom Handy ist im Ruhezustand auf high und geht bei >Aktivitäten auf Low. Also müsste ich, nach dem, was ich grad von dir >erfahren habe mit dem Nichtinvertierenden Pegelwandler richtig liegen. Genau. >Mich wundert es nur ein wenig, dass ich am Ausgang von der >Transistorschaltung NIX (0.03V) messe, obwohl am Eingang High (2.7V) >ist. also müsste doch der Ausgang voll durchschalten (5V) ??? Ich hab Eben. Da ist was faul. >mir natürlich auch irgendwie vorgestellt, dass das korrekt sein muss, da >die kompletten 5V am 1K Widerstand abfallen und am Ausgang gegen Masse >natürlich NIX anliegt. Liege ich mit der Überlegung in etwa richtig??? Nein. Der Ausgang des Pegelwandlers wird praktisch nicht belastet, weder durch dein Messgerät (normales Multimeter hat 10 MOHm) noch durch deinen AVR (einge hundert MOhm). Also fliesst kein nennenswerter Strom durch R5 und du musst 5V messen. >Muss ich das Empfangen des ModemEchos mit Interrupts abholen, oder geht >das auch im polling??? Kann man pollen. HALT!!!! Das kommt darauf an! Wenn du per Polling deine Kommandos sendest, und das Handy teilweise schon während des Empfangs antwortet dann brauchst du Interrupts! MFG Falk
Danke für deine Hilfe, Falk... Ich habe den zweiten Transistor ausgetauscht, weil ich dachte, der sei defekt, doch ohne Erfolg. Kann es daran liegen, dass ich statt der BC8xx die BC547C verwende??? Sind eigentlich beides Standardtypen, oder? Ich spiele mittlerweile mit dem Gedanken, mein AVR-Board mit 3.3V zu betreiben. Dann dürfe der direkte Anschluss (Rx-Tx vertauscht) des Handys an den Controller ja keine Probleme machen und die Handyseitigen 2.7V müssten am Controller als High erkannt werden, allerdings habe ich den MyAVRusb-Board. Da sitzt ein L7806CV (5V Spannungsregler) drauf. Was muss ich tun, damit ich mein Board mit 3.3V betreiben kann??? Oder ist das gar nicht möglich mit den Fertigboards, dass ich den Spannungsregler austauschen kann, ohne weitere Maßnahmen. Ich bin echt am Verzweifeln, mit Interrups habe ich dummerweise noch nichts zu tun gehabt und wüsste auch nicht auf anhieb wie ich das realisiere. Das würde auch sehr viel Zeit in Anspruch nehmen, Zeit die ich für das Projekt nicht habe. Hast du ein Vorschlag, wie ich die Modemechos ohne Interrups abholen kann? Oder vielleicht eine Funktion in C? Ich übergebe die AT-Befehle mit der Funktion: ******************************************************************** void uart_puts (const char *s) { do { uart_putc (*s); } while (*s++); } ******************************************************************** Das klappt ja auch ohne Probleme, aber wie hole ich die Daten (bzw. erstmal mein Modemecho "OK") ab??? Etwa mit der Funktion: ******************************************************************** static inline uint8_t uart_getc_wait() { // Warten, bis etwas empfangen wird while (!(UCSRA & (1 << RXC))) ; // Das empfangene Zeichen zurückliefern return UDR; } ******************************************************************** oder mit der Funktion: ******************************************************************** static inline int uart_getc_nowait() { return (UCSRA & (1 << RXC)) ? (int) UDR : 44; Liefert das Empfangene Zeichen zurück, ansonsten Zeichen 44; } Wäre für eine Antowrt oder ein Codebeispiel sehr dankbar, damit ich ausschliessen kann, dass ich Software-technisch Fehler vermeide. Ich übergebe die Befehle per polling, aber ich kann nicht sagen, ob mein handy bereits beim Datenempfang Antwortet, da der gesendete String mit dem Befehl ja erst mit dem "Carrier Return" abgeschlossen wird, und exakt nach dem Return, lautet mein nächster Befehl im Hauptprogramm "auf eine Antwort warten". Vermutlich müsste dann doch was vom Handy kommen, z.b das "OK" oder "RING" beim Anruf?! Kann mir das jemand bestätigen, damit ich Quellcodemässig schon mal abgesichert bin??? Dann bleibt noch die Sache mit der Pegelwandlung. Ich weiss nicht warum aber die Transistorschaltung funktioniert bei mir nicht. Am Ausgang liegen immer nur 0.01-0.03V an statt der 5V :-( weil die ganze Spannung an R5 abfällt :-( was mache ich falsch??? Müssen es die BC847er sein??? Ich brauch eure Hilfe, kann im Netz ansonsten keine Referenzen zu dem Thema und meinem Problem finden und wenn dann nur Ansatzweise hier in dem Forum. gruss Elektrolyt
@ Elektrolyt (Gast) >Kann es daran liegen, dass ich statt der BC8xx die BC547C verwende??? >Sind eigentlich beides Standardtypen, oder? Das passt. >Ich spiele mittlerweile mit dem Gedanken, mein AVR-Board mit 3.3V zu >betreiben. Dann dürfe der direkte Anschluss (Rx-Tx vertauscht) des >Handys an den Controller ja keine Probleme machen und die Handyseitigen >2.7V müssten am Controller als High erkannt werden, allerdings habe ich Ja. >den MyAVRusb-Board. Da sitzt ein L7806CV (5V Spannungsregler) drauf. Was >muss ich tun, damit ich mein Board mit 3.3V betreiben kann??? Oder ist Spannungsregler tauschen. >du ein Vorschlag, wie ich die Modemechos ohne Interrups abholen kann? Das könnte kniffliger werden als mit Interrupts. Schau dir den Link mal an. uart_getc() ist schon OK. >Wäre für eine Antowrt oder ein Codebeispiel sehr dankbar, damit ich Erstmal muss dein Pegelwandler laufen! Denn du musst wenigsten EIN Zeichen als Antwort sehen, auch ohne Interrupts. >exakt nach dem Return, lautet mein nächster Befehl im Hauptprogramm "auf >eine Antwort warten". Vermutlich müsste dann doch was vom Handy kommen, Das passt dann erstmal. >z.b das "OK" oder "RING" beim Anruf?! Kann mir das jemand bestätigen, Eben. Genau das, was du auch am PC im Terminal siehst. Nimm mal HTerm, dort wird für jedes Byte die genaue Sende - und Empfangszeit protokolliert. Damit kannst du leicht feststellen wann das Handy antwortet, ganz ohne Oszi. http://www.der-hammer.info/terminal/index.htm >Dann bleibt noch die Sache mit der Pegelwandlung. Ich weiss nicht warum Nein, das ist der ERSTE Punkt. >aber die Transistorschaltung funktioniert bei mir nicht. Am Ausgang >liegen immer nur 0.01-0.03V an statt der 5V :-( weil die ganze Spannung >an R5 abfällt :-( was mache ich falsch??? Müssen es die BC847er sein??? Komplette Schaltung? MFG Falk
Nach ellenlanger Fehlersuche kann ich jetzt sagen, dass der Pegelwandler läuft.. ich habe spasseshalber den ersten Transistor auch ausgetauscht, weil ich absolut nicht mehr weiter wusste... es lag wohl daran, kanns mir zwar nicht erklären, warum der defekt sein kann, oder nicht so funktioniert hat, da neu, aber okey... Also, die wichtigste Hürde ist getan, am Ausgang liegen jetzt 4.8V an und das is definitiv High... Bleibt noch die Sache mit dem Modemecho. Ich habe gerade nochmal das Programm umgeschrieben und warte in MAIN auf Zeichen in einer Endlosschleife. Hyperterminal lieferte wieder nix, aber ich habe mal das gebrannte Programm in AVR Workpad Plus simuliert und getestet mit 19200bauds/8/n/1/n und ich habe während des Tests auf das Handy angerufen, (nix anderes tue ich seit 2 tagen mit dem Hyperterminal) siehe da, das Programm liefert mir ein String mit (0x0D 0x0A 0x52 0x49 0x4E 0x47 0x0D 0x0A) zurück, dies würde ja einem (Return, LineFeed,"RING",LineFeed) entsprechen, worauf ich ein wenig stolz bin :-) Natürlich nur mit deiner Hilfe Falk, bin dir sehr dankbar, aber warum macht Hyperterminal das nicht mit??? Werde mir gleich mal das von dir genannte Programm anschauen und es damit testen und natürlich auch posten. Wie kanns sein, dass die Simulation in Workpad funktioniert und im Hyperterminal mit den selben Einstellungen nicht??? Einstellungsfehler??? Ich benutze keine Flusssteuerung und auch die 8/n/1/19200bauds sind eingestellt??? Was macht die Simulation in Workpad anders??? hoffe, ich geh dir nicht aufn Sänkel gruß Elko
<\r><\n>RING<\r><\n><\r><\n> liefert hterm... warum sehe ich das "ring" nicht im hyperterminal, was für ein Terminalprogramm könnt ihr mir noch empfehlen, das zb. auch auf Linuxdistros vertreten ist oder gern benutzt wird, womit ich das ganze nochmal Testen könnte??? Viele vielen Dank im Voraus, Klasse Forum hier... gruß Elko
Hallo, nimm RealTerm... is besser als HT, es zeig dir auch <CR> und <LF> an...
Um die Antwort des Handys auszuwerten schreibst du dir am besten eine Methode, die dir aus "<CR><LF> Antwort <CR><LF>" die Antwort extrahiert. - mit einer State machine oder - mit while-schleifen void funct_name(unsigned char* antwort) 1. <LF> erkennen 2. folgende Zeichen in anwort ablegen, solange das empfangene Zeichen != <CR> Diese methode rufst du auf nachdem du das entspr. AT-Kommando an das Handy gesendet hast.
Danke für die Antwort, ist eine gute Idee, werds gleich mal probieren. Das ist dann dafür gedacht, dass die stözeichen nicht angezeigt werden??? Oder hat das auch was mit Speicheroptimierung zu tun, wenn die "unnötigen" Zeichen nicht gesendet werden??? Also zu dem Projekt, ich hatte es mir erstmal so vorgestellt, dass sobald ein ring ankommt, das handy abnimmt (da Flatrate) und dann würde ich ganz gern DTMF Töne senden und diese dann mit dem Handy und dem Controller auswerten und entsprechend schalten. Ist das heute irgendwie eleganter zu lösen, als die Vorschläge hier im Forum vor 2-3Jahren??? Gibt es ne "relativ einfache" Möglichkeit DTMF Töne vom Handy zum Controller zu übertragen über die Tx oder Rx Leitung??? Also ne art UART für DTMF töne??? Oder was genau geschieht wenn DTMFs an ein Handy ankommen??? Vielen dank im Voraus gruß Elko
Hmmm, bekomme nur bei Hterm und dem Simulationstool von AVR Workpad Plus ein "RING" angezeigt, aber leider nicht mit Realterm oder Hyperterminal... Woran kann das liegen??? Sind irgendwelche besonderen Einstellungen vorzunehmen (ausser die 19.2kBauds 8/n/1/n)???? Schönen gruß Elko
Hallo Zusammen, kann mir keiner auf die Sprünge helfen, bezüglich der Zeichen, die bei der Simualtion und in Hterm über eine serielle Verbindung angezeigt werden aber im Hyperterminal nicht, trotz der selben Einstellungen? Ich bekomms einfach nicht hin...
@ Elektrolyt (Gast) >werden aber im Hyperterminal nicht, trotz der selben Einstellungen? Ich >bekomms einfach nicht hin... Hyperterminal ist nicht sonderlich gut. Für einfache Sachen OK, wenns bissel mehr sein muss reicht es nicht mehr. MFG Falk
Hallo, RealTerm zeigt alle gesendeten Zeichen an... siehe Anhang
Klar macht realterm das, keine Frage... Aber nicht bei mir :-( Ich nehme auch an, dass du das "Ring" durch eine direkte Verbindung zwischen handy und pc empfangen hast??? Oder hängt dein Controller auch dazwischen und du hörst die Leitung mit? ich nehme mal ganz stark an, dass es bei mir daran liegt, dass ich die Verbindung zwischen uC und Handy mit dem MySmartUsb mithöre. HTerm machts auf jeden fall aber die anderen leider nicht. Handy mit dem Datenkabel am PC liefern alle Terminals ein "RING" "OK" "ERROR" etc. Liegt wahrscheinlich am MySmartUsb, denke nicht, dass es an den Terminalprogrammen oder am Code selber liegt, weil die Simualtion läuft. Mir gehts eigentlich auch nur darum, nachvollziehen zu können, was die Leitungen sagen/antworten um programmierfehler auszuschliessen, daher ein Terminalprogramm. Später wird die ganze Sache eh nur noch über GSM bzw DTMF-Tönen gesteuert, da brauche ich kein Terminal. MT8870 ist bestellt und sobald es weiter geht, halte ich euch auf dem laufenden oder stell weitere "unnötigen" Fragen :-( MFG Elko
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.