Forum: Mikrocontroller und Digitale Elektronik AT Befehle zum Handy senden


von Markus M. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Forenmitglieder,

ich habe einen ATMega16 mit meinem Siemens S25 verbunden und möchte nun 
AT Befehle an das Handy senden. Leider reagiert das Handy nicht. Meinen 
Code findet Ihr im Anhang.

Noch ein paar Infos zu meiner Schaltung: Der ATMega läuft mit einem 
externen 8 Mhz Quartz. (FuseBits sind korrekt gesetzt.) Allerdings bin 
ich mir nicht sicher, ob er auch auf 8 Mhz läuft. Denn wenn ich den 
Quartz abziehe, läuft der Chip weiter. Das Handy ist auf Datenempfang 
gestellt und zeigt beim Selbstest auch an, dass es mit einem "PC" 
verbunden ist.

Ich benutze keine RS232 Schnittstelle und RXD/TXD vom Handy und dem 
ATMega sind vertauscht. Lediglich TX vom ATMega ist über eine Diode 
gegen Masse geschaltet.

Das 2x16 Display wird mit Peter Fleurys LCD Library angesteuert. Die 
wichtigen USART Routinen habe ich mir aus der USART Library kopiert und 
angepasst.

Naja und nun habe ich keine Ahnung mehr, warum das Handy, nach dem AT 
Befehl "ATD08003301000,\r" nicht anfängt die Nummer zu wählen. Bin mir 
auch nicht sicher, ob das Format stimmt mit "\r" am Ende. Wisst Ihr was 
ich falsch mache?

Gruß,

Markus

von ich (Gast)


Lesenswert?

Wenn der Atmel ohne Quarz weiter funktioniert dann ist
der interne Oszillator aktiv.

Und der hat ab Werk 8MHz/8 = 1MHz

Also Fuse Bits ändern.

von Markus M. (Gast)


Lesenswert?

Hi,

ok, das Problem habe ich beseitigt. Der ATMega funktioniert nun NICHT 
mehr ohne Quarz.

Allerdings bleibt das Problem mit dem Senden trotzdem...

Markus

von Jan (Gast)


Lesenswert?

Es könnte am fehlenden Pullup-Widerstand (4,7k von Pin6 auf Pin4) 
liegen. Sämtliche Bauanleitungen für S25-Datenkabel enthalten diese Info 
vor - bis auf diese:
http://www.heise.de/mobil/artikel/50892 (ganz unten)

War bei mir auch ein Kampf mit ähnlicher Konfiguration, ATMega8 + S25.

Die Spannung ist auch wichtig. Wenn der Mega8 direkt mit dem S25 
gekoppelt ist, sollte er mit 3,3V laufen. Bei 5V steht das Teil sonst 
permanent auf 'Netzsuche'. Ganz nette Falle, erstmal drauf kommen... es 
hätte beinah'nen Abgang aus dem Fenster gemacht... ;-)

von Jan (Gast)


Lesenswert?

Achso, noch eins: das S25 läuft fest mit 19.200 nicht 9.600 wie in 
deinem Quelltext.

von Markus M. (Gast)


Lesenswert?

Hi Jan,

danke für Deine Antwort. Ich habe die PullUp Widerstände nicht mit 
eingebaut. Allerdings habe ich die Spannung am Handy von RXD und TXD 
gemessen und die sind beide um die 2,7 V. Und das sollte es doch auch 
sein, oder?

Die Baudrate stelle ich sofort um. ;)

Danke!

Markus

von Markus M. (Gast)


Lesenswert?

Noch mal zwei Fragen zwischendurch:

1) Ist USART_Transmit("ATD08003301000,\r\n"); korrekt oder muss ich 
danach noch die 13, 10 senden?

2) Muss das Handy erst auf Datenempfang geschaltet werden? Ich hab das 
zwar die ganze Zeit so, aber interessieren tuts mich doch.

Markus

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> 1) Ist USART_Transmit("ATD08003301000,\r\n"); korrekt oder muss ich
> danach noch die 13, 10 senden?

Sieh mal in einem C-Buch nach, was "\r\n" bedeuten mögen.

Was soll das Komma nach dem Wahlstring?

von Jan (Gast)


Lesenswert?

1: ist OK, \r\n entspricht ja den Werten 13, 10. Das Komma brauchts 
nicht... schadet aber auch nicht.

2: Am Handy muß garnix eingestellt werden. Schadet aber auch nicht... 
;-)

Ich will ja nicht auf dem Pullup rumreiten, aber ich habs mir am Oszi 
angeschaut und es kam auf eingegebene Kommandos erst eine Antwort 
nachdem ich das verflixte Teil eingelötet hatte. An Pin 4 liegen glaub 
ich 4V an und das S25 scheint da irgendwie pingelig zu sein...

von Jan (Gast)


Lesenswert?

@rufus
wäre es den vor dem Wahlstring besser aufgehoben?  ;-)

Soweit ich weiß, war das mal eine Verzögerung für Amtsholung...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das Komma ist -als Bestandteil des Wählstrings- eine Verzögerung. Beim 
Modembetrieb an TK-Anlagen wird es in der Tat zum Warten nach der 
Amtstholung verwendet, da gehört es also zwischen die zur Amtsholung 
verwendeten und die danach zu wählenden Nummernbestandteile:

  atdt0,0123456789

Was aber für einen Sinn es haben kann, nach dem Wählen der kompletten 
Rufnummer 'ne Weile zu warten, entzieht sich meinem Verständnis. Das 
anrufende Modem macht in dieser Phase des Verbindungsaufbaus sowieso 
nichts anderes ...

von Axel R. (Gast)


Lesenswert?

Bei einem Semikolon wäre das allerdings etwas anderes...
Hier wird zwischen Daten - und Voiceruf unterschieden.

von Markus M. (Gast)


Lesenswert?

Habe den PullUp nun drin. Leider funktioniert es immernoch nicht. Was 
mache ich bloß falsch!?!

Markus

von Markus M. (Gast)


Angehängte Dateien:

Lesenswert?

@Jan: Hab gerade im Forum ein Schaltplan gefunden für RX/TX Verschaltung 
am Mikroporzessor. Hast Du das auch so gemacht?

Bei mir sind RX(ATMega) direkt mit Pin 5=TX(Handy) und TX(ATMega) mit 
Pin 4 und 6 (incl. Pull Up) verbunden. TX(ATMega) geht erst auf einen 
20KOhm Widerstand und dann zum Handy. Von dem Pin habe ich dann noch 
eine Diode gegen Masse geschaltet. So wie auf dem Bild.

Wie hast Du das gelöst?

Markus

PS: Danke für die vielen Antworten!

von Jan (Gast)


Angehängte Dateien:

Lesenswert?

Habs so ähnlich gemacht wie Du:

TX direkt mit 6 und RX direkt mit 5 verbunden - siehe Zeichnung. Dazu 
müssen die Pegel aber passen. Handy und ATMega laufen bei mir mit 3,3V.

Und dann eben der Pullup von Pin 6 nach Pin 4.

Hast Du das STK500? Dann versuch doch erstmal mit dem internen 
Spare-Port Daten an den PC (Hyperterminal) auszugeben. Dann lässt sich 
auch eher abschätzen, obs vielleicht ein Problem mit der Baudrate ist.

von Jan (Gast)


Lesenswert?

Hab noch einen Fehler in Deiner Initialisierung gesehen:

Ins UBRR wird nicht die gewünschte Baudrate reingeschrieben sondern ein 
Teiler mit dem die Frequenz auf die gewünschte Baudrate runtergebrochen 
werden kann nach folgnder Formel:

UBRR = Fosc  16  BAUD - 1

In Deinem Fall bei einem 8 MHz Quarz also

8.000.000  16  19200 - 1 = 25

Würde die Initialisierung also so aussehen:

...
UBRRH = 0;
UBRRL = 25;
...

Schau Dir mal das Datenblatt zu dem Thema genauer an. Ist sehr 
aufschlußreich... ;-)

von Jan (Gast)


Lesenswert?

Und nimm das USBS-Bit raus - das S25 sendet nur mit einem Stopbit

So sollte es dann passen:
UBRRH = 0;
UBRRL = 25;
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL)|(3<<UCSZ0);

Bin gespannt... ;-)

von Markus M. (Gast)


Lesenswert?

DANKE! Es funktioniert! Super! Klasse! Danke für Deine Mühe! Oh mann....

Freu mich riesig!

Markus

von Fritz (Gast)


Lesenswert?

hallo
ich verusche auch gerade ein handy über einen atmega zu steuern.
Habe folgendes Problem:

Handy an PC angeschlossen =>  Datenübertragung funktioniert, handy wählt
µC an PC => es kommt exakt der string an (mit HTerm) der vom µµ gesendet 
wurde
Handy an µC => nichts passiert???

verwende für die Uart verbindung die Lib vom Peter Fleury.
zwischen handy und µC ist ein max232.

woran kann es liegen?
1
  uart_puts("ATD");
2
  for(i=0; i<=(numbers-1); i++)
3
  {
4
          itoa(num_array[i], buffer, 10);          
5
    uart_puts(buffer);        
6
  }  
7
  uart_putc('\r');

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> zwischen handy und µC ist ein max232.

Wozu? Verwendet das Telephon etwa RS232-Pegel?

von Rahul D. (rahul)


Lesenswert?

Hast du auch die richtigen Leitungen miteinander verbunden?
PC->Handy: Handy DÜE
PC->µC:    µC DÜE
µC->Handy: ?

von Fritz (Gast)


Lesenswert?

jupp...
handy RX an µc TX
handy TX an µc RX

weiß auch nicht...

meint ihr es liegt am max232? das handy ist ein k700i

von Fritz (Gast)


Lesenswert?

Es lag am MAX!
DANKE

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.