Forum: Mikrocontroller und Digitale Elektronik GSM modul Sony Xperia Tipo ST21i reagiert selten und unvollständig auf AT-Commands


von Mario S. (dachstuhlklaus)



Lesenswert?

Hallo zusammen.

Ich versuche für mein Masterprojekt unter anderem ein GSM Modul für den 
SMS Versand zu nutzen. Ich habe schon im verschiedenen Foren diverse 
Beiträge zu diesem Thema gelesen und nun versucht die Anfänge mit meinem 
Sony Xperia Tipo zu machen.

Den Anfang habe ich mit Tera Term (ähnlich Hyper Terminal) gemacht und 
dort die Befehle zur Ansteuerung des Modems eingegeben. Dies 
funktionierte Tadellos. Ich konnte SMS versenden, Anrufe tätigen und 
auch andere unterstütze Befehle funktionierten. Heißt also die 
Comporteinstellungen waren in Ordnung.

Nun versuchte ich eine kleine Schaltung in Proteus aufzubauen um den 
Code den ich hier und da gefunden habe zu testen. Es gibt ja viele 
Projekte dieser Art im Internet. Doch leider funktioniert das nicht ganz 
so richtig.

Hier die Funktion die einen Anruf tätigen soll:
1
void DO_SOMETHING(){
2
    delay_ms(200);
3
    fprintf(GSM,"ATD0351");      //Call 0531
4
    //fprintf(GSM,"\r\n");       
5
    fputc(CR,GSM);
6
    //fputc(0x1A, GSM);          
7
    }

(Kompletter Code am Ende)

Manchmal funktioniert es teilweise, meistens aber eher nicht. Mit 
teilweise meine ich das, dass Telefon einen Anruf tätigt aber nicht die 
komplette Nummer wählt. Meist nur 0 und seltenst 05.

Ich überwache die Kommunikation mit dem Programm Free-Serial_Analyser. 
Mir ist aufgefallen das beim Senden von Proteus aus, das Echo (vom 
Telefon soweit ich informiert bin) garnicht oder unvollständig 
zurückkommt. Also eben nur mit 0 oder 05 und dann ein OK darunter. Ich 
gehe also davon aus, dass der Code richtig ist aber eine Einstellung des 
Com Ports falsch ist. Bei meinen Recherchen habe ich herausgefunden, 
dass man das Echo mit "ATE0" ausschalten sollte. Leider wird dieser 
Befehl nicht vom Modem unterstützt. Ich habe auch schon in einem 
Dokument von Sony mit den AT-Commands nachgeschaut. Es gibt leider 
keinen anderen Befehl soweit ich herausgefunden habe.

Die Kommunikation wird über Bluetooth hergestellt. Die Einstellungen 
findet Ihr im Anhang.

Natürlich besteht auch die Möglichkeit das, dass Telefon dafür 
ungeeignet ist, da vergleichbare Projekte ein Nokia nutzen. Da ich für 
mein Projekt am Ende ja ein GSM Modul nutzen möchte und kein 
Mobiltelefon, wäre ich auch über eine Empfehlung eines günstigen 
Einsteiger-GSM-Modems mit Sim-Karte dankbar.

Kurzzusammenfassung
Sony Xperia Tipo ST21i --- Bluetooth --- COM3 im Laptop --- Proteus

Kommunikation mit Tera Term erfolgreich getestet.

Ansprechen über Proteus funktioniert nur teilweise (Nummer wird 
unvollständig gewählt). Meistens keine Reaktion des Telefons.

Befehl ATE0 zum Ausschalten des Echos wird nicht unterstützt.

Software und Controller
- Windows 7
- ISIS Proteus
- MPlab X
- CCS Compiler
- PIC16F877
- Tera Term
- Free Serial Analyser

So. Ich hoffe ich habe jetzt alles wichtige drin. Falls etwas fehlt 
bitte einfach fragen. Vielen Dank an alle Helfer im Voraus.

Mit freundlichen Grüßen
Mario





1
#include <16F877.h>
2
#device ADC=16
3
4
#FUSES NOWDT                   //No Watch Dog Timer
5
#FUSES NOBROWNOUT              //No brownout reset
6
#FUSES NOLVP                   //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
7
8
9
#use delay(clock=8MHz,crystal=8MHz)
10
//#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,ERRORS,bits=8)//,stream=GSM)
11
//#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7, stream=GSM, ERRORS)
12
//#use rs232(baud=19200,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=GSM)
13
#use rs232(baud=9600,xmit=PIN_C6, rcv=PIN_C7, stream=GSM, ERRORS)
14
15
#define LED PIN_B1
16
#define DELAY 1000
17
18
#define BUTTON  PIN_B0    //Potentiometer
19
20
#include <stdio.h>  
21
22
const int CR=0x0d;
23
int1 BLKB=0;
24
25
26
// FUNCTIONS ///////////////////////////////////////////////////////////////////
27
28
void DO_SOMETHING(){
29
    delay_ms(200);
30
    fprintf(GSM,"ATD0351");    
31
    //fprintf(GSM,"\r\n");         
32
    fputc(CR,GSM);
33
    //fputc(0x1A, GSM);             
34
    }
35
36
37
// INTERRUPTS //////////////////////////////////////////////////////////////////
38
39
#INT_TBE
40
void  TBE_isr(void) 
41
{
42
43
}
44
45
#INT_RDA
46
void  RDA_isr(void) 
47
{
48
49
}
50
51
/*
52
  enable_interrupts(INT_TBE);
53
  enable_interrupts(INT_RDA);
54
  enable_interrupts(GLOBAL);
55
*/
56
57
58
// MAIN PROGRAM ////////////////////////////////////////////////////////////////
59
60
void main()
61
{
62
    set_tris_b(0b00000001);   //Setup I/Os of port b
63
    set_tris_c(0b11000000);   //Setup I/Os of port b
64
65
    while(true)
66
  {
67
        if (input(BUTTON) == 1){BLKB = 0;}          //Block bit for button
68
69
        if ((input(BUTTON) == 0) && (BLKB == 0)){   //Send to COM
70
            DO_SOMETHING();
71
            }
72
        }
73
}

: Bearbeitet durch User
von Sascha W. (sascha-w)


Lesenswert?

Hallo,

Wenn es mit einem Terminalprogramm geht, dann muss es mit den selben 
Schnittstelleneinstellungen auch von einem anderen Device (Proteus) 
gehen.
Das Echo vom GSM stört erst mal nicht, es sei denn du willst/must das 
was das GSM-Modul zurückgibt auswerten,dann ist die Auswertung ohne Echo 
natürlich einfacher. Andererseits kann man das Echo natürlich auch 
verwenden um zu zu überprüfen ob am GSM-M. alles angekommen ist.
Überwache doch mit dem Serialportmonitor erst mal die Daten IN Richtung 
GSM-M.
Wie sieht die Verbindung vom Proteus, Laptop und Bluetooth genau aus?
Bluethooth wird Seriell/per USB am Laptop angechlossen - oder Bluetooth 
intern? Proteus wie am Laptop angeschlossen Seriell/USB?

Sascha

von Sebastian S. (sebs)


Lesenswert?

1
fprintf(GSM,"ATD0351");      //Call 0531

Zahlendreher?

von Karl H. (kbuchegg)


Lesenswert?

Mario Sachse schrieb:

> Den Anfang habe ich mit Tera Term (ähnlich Hyper Terminal) gemacht und
> dort die Befehle zur Ansteuerung des Modems eingegeben. Dies
> funktionierte Tadellos. Ich konnte SMS versenden, Anrufe tätigen und
> auch andere unterstütze Befehle funktionierten. Heißt also die
> Comporteinstellungen waren in Ordnung.
>
> Nun versuchte ich eine kleine Schaltung in Proteus aufzubauen um den
> Code den ich hier und da gefunden habe zu testen. Es gibt ja viele
> Projekte dieser Art im Internet. Doch leider funktioniert das nicht ganz
> so richtig.


Ein weiterer wesentlicher Unterschied zwischen dir am Terminalprogramm 
und dem von dir geschriebenem Programm besteht darin, dass du nur 
begrenzt schnell tippen kannst. Das hat so erst mal nichts mit der 
Baudrate zu tun, sondern besagt erst mal nur, dass wenn du "ATD0351" ins 
Terminal eintippst, du nach jedem Buchstaben automatisch und ohne es 
verhindern zu können, eine kleine Pause einlegst, während dein Programm 
zwischen den Zeichen 0 Pause macht.

Hast du schon mal die Handshake Leitungen beobachtet, ob dir (bzw. 
deinem Programm) das Modem signalisiert, mal kurz mit weiteren Zeichen 
zu warten weil es erst mal das gerade übertragene Zeichen verarbeiten 
muss?

: Bearbeitet durch User
von Mario S. (dachstuhlklaus)


Lesenswert?

Als erstes Danke für die Beteiligung an meinem Problem.

@ Sascha

Ja da handelt es sich um einen Zahlendreher, aber das ist glaube nicht 
so wichtig ;-)

Die gesendeten Daten von Proteus habe ich schon beobachtet. Die sehen 
genau so aus wie die von Tera Term. Ich kann ja mal ein paar Bilder 
hochladen.

Das Bluetooth-Modul ist im Laptop integriert. Beim herstellen der 
Verbindung zwischen Handy und Laptop wurde COM3 und COM4 aktiviert oder 
eben von Windows zur Kommunikation festgelegt. Die benötigten Treiber 
installierte Win7 selbstständig. Den Proteus Schaltplan hatte ich nicht 
hochgeladen. Ich nutze aber den "COMPIM" Baustein. Der greift auf die 
COM-Ports des Computers zu.


@ Karl Heinz

Das Terminalprogramm nutzt ein separates Fenster zum eingeben der 
Befehle. Wenn man damit fertig ist, muss man OK drücken, dann werden die 
Befehle alle auf einmal geschrieben. Auf die COM-Leitung nehmen ich an.

Mit den Handshake-Leitungen muss ich mal schauen ob ich das selbe denke 
wie du meinst. Werde gleich mal Bilder hochladen. Vielleicht sind ja die 
Leitungen dabei die du meintest.

von Mario S. (dachstuhlklaus)



Lesenswert?

So. Habe mal ein paar Screenshots gemacht von beiden Wegen der 
Kommunikation. Also per Terminal Programm und per Proteus.

Die Befehle die auf den COM geschrieben werden sehen für mich identisch 
aus.

Habe es noch mehrmals per Proteus "Klick auf Button" im Schaltplan 
probiert. Meist wird nur "ATD" übermittelt. Einmal hat es allerdings 
auch geklappt das 0351 gewählt wurde.

Weiss ja nicht ob man im Proteus noch Stopbits einstellen muss, bei dem 
COMPIN Baustein (Virtueller COM-Port Proteus)

Hoffe das hilft euch weiter beim Tipps geben. Ich weiss gerade nicht wo 
ich noch nachschrauben muss ;-)


Und das mit dem Zahlendreher war für Sebastian. Hatte mich verlesen beim 
Namen. Tschuldigung ;-)

: Bearbeitet durch User
von mohamd fariss (Gast)


Lesenswert?

octoplus suite

von Mario S. (dachstuhlklaus)


Lesenswert?

Hi Mohamd,
dieses Programm sieht aus wie ein Analyseprogramm oder unlocktool, 
soweit ich gerade im Netz schnell finden konnte. Was genau soll ich 
deiner Meinung nach mit dem Programm machen? Das Modem im Handy 
funktioniert ja prinzipiell, nur mit Proteus eben nicht so wie es soll.

Vielleicht kannst du ja noch ein oder zwei Zeilen schreiben.

Danke.

Mfg Mario

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.