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
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.
Hi, ok, das Problem habe ich beseitigt. Der ATMega funktioniert nun NICHT mehr ohne Quarz. Allerdings bleibt das Problem mit dem Senden trotzdem... Markus
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... ;-)
Achso, noch eins: das S25 läuft fest mit 19.200 nicht 9.600 wie in deinem Quelltext.
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
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
> 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?
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...
@rufus wäre es den vor dem Wahlstring besser aufgehoben? ;-) Soweit ich weiß, war das mal eine Verzögerung für Amtsholung...
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 ...
Bei einem Semikolon wäre das allerdings etwas anderes... Hier wird zwischen Daten - und Voiceruf unterschieden.
Habe den PullUp nun drin. Leider funktioniert es immernoch nicht. Was mache ich bloß falsch!?! Markus
@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!
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.
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... ;-)
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... ;-)
DANKE! Es funktioniert! Super! Klasse! Danke für Deine Mühe! Oh mann.... Freu mich riesig! Markus
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'); |
> zwischen handy und µC ist ein max232.
Wozu? Verwendet das Telephon etwa RS232-Pegel?
Hast du auch die richtigen Leitungen miteinander verbunden? PC->Handy: Handy DÜE PC->µC: µC DÜE µC->Handy: ?
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
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.