Forum: Mikrocontroller und Digitale Elektronik Serielle Kommunikation mit Modem


von Kevin D. (Firma: m5) (daverda00)


Angehängte Dateien:

Lesenswert?

Hallo! Ich hab folgendes Problem: Ich möchte mit einem Atmega8 über 
RS232 mit einem Modem kommunizieren (AT-Kommandos). Nur funktioniert es 
nicht, ich sende das Befehl zum Anrufen und es passiert einfach nichts. 
Die Schaltung und die Dateien uart.c und uart.h habe ich im Anhang (Habe 
aber von dieser Seite also müssten sie in Ordnung sein). Bei der 
Main-Funktion verwende ich diese Befehle:
1
char call[21]={'a','t','d','+','"','+','3','9','3','2','9','5','3','4','8','1','3','8','"',';',13};
2
for(i=0; i<21; i++)
3
{
4
    uart_putc(call[i]);
5
}
Wie gesagt, es passiert einfach nichts, hab auch versucht, die RS1OUT 
und R1IN zu kreuzen, doch es brachte nichts. Bitte wenn mir jemand sagen 
könnte, wo das Fehler liegt.

von Nase (Gast)


Lesenswert?

Schließ das ganze doch mal an dem Comport eines PC an und starte dort 
ein Terminalprogramm, Da kannst du genau sehen was tatsächlich gesendet 
wird, und nicht das was du erwartest.
Genauso kannst du mit dem Terminalprogram mal dein Modem testen.

von Nase (Gast)


Lesenswert?

Manche Geräte erwarten auch noch die Beschaltung der anderen Pins am 
Comanschluß. Ich glaube DTR und DTS braucht man da.
Die besten Erfolge habe ich mit Folgenden Brücken:
7-8
1-4-6

Warum hast du 1 auf GND gelegt?

von Kevin D. (Firma: m5) (daverda00)


Lesenswert?

Kannst du mir ein solches Terminal-Programm empfehlen? Und kann ich da 
einfach bytes via RS232 senden?
Und weil 1 auf GND ist, weiß Ich nicht, hab wahrscheinlich mal so 
gesehen...Macht es direkt was aus?

von Nase (Gast)


Lesenswert?

Ich habe für so was noch eine fossile Doskiste am Start mit echten 
Hardware Comports und dem Terminalprogramm vom Nortencommader :)
Aber such mal bei Google nach HEX Terminal, da findet man einige freie, 
durch die HEX Darstellung sieht man auch unsichtbare Steuerzeichen.
Meist kann man auch Strings auf die Funktionstasten legen zum Testen.
Es gibt da auch Programme die lesen auf beiden Comports gleichzeitig. 
Die schliest du dann an deine RX und TX Leitung an und kannst den 
Datenverkehr mitloggen.

von Nase (Gast)


Lesenswert?

Hier mal die Belegung vom Comport:
http://de.wikipedia.org/wiki/EIA-232

Pin 1 ist ein Signal das eingentlich nicht auf GND liegen kann.
Vielleicht bist du da mal durcheinander gekommen mit der 25 Pol Version, 
da war das die Abschirmung.

von Reinhard Kern (Gast)


Lesenswert?

Kevin Daverda schrieb:
> char call[21]={'a','t','d','+','"','+','3','9','3','2','9','5','3','4','8','1 
','3','8','"',';',13};

Nach ATD folgt einfach nur die Telefonnummer. Probiers doch erstmal ganz 
einfach mit deiner Handynummer ATD0172....

Gruss Reinhard

von Nase (Gast)


Lesenswert?

Und auf dieser Seite findet man bestimmt auch ein paar brauchbare 
Programme:
http://www.heise.de/download/rs232-data-logger.html

von Peter II (Gast)


Lesenswert?

der code ist zwar nicht falsch aber nicht sehr entwickler freundlich. 
Schreib lieber
1
char* call = "atd+\"+393295348138\";\n";
2
for( char* c = call; ++c; *c != 0 )
3
{
4
    uart_putc(*c);
5
}

sollte das gleiche machem, ist aber besser lesbar.
(wenn noch fehler drin sind, wird sie gleich jemand finden)

von Kevin D. (Firma: m5) (daverda00)


Lesenswert?

> Nach ATD folgt einfach nur die Telefonnummer. Probiers doch erstmal ganz
> einfach mit deiner Handynummer ATD0172....

Der Befehl stimmt sicher, hab ich schon mal mit einem 8051 ausprobiert.
Doch wegen der Masse an Pin 1 der RS232-Schnittstelle: Die Platine habe 
ich schon erstellt, soll ich die Verbindung zur Masse trennen oder 
sollte es trotzdem funktionieren? Ich meine, Pin 1 wird ja ansonsten 
nicht angeschlossen....

von Nase (Gast)


Lesenswert?

Wenn der gleiche Aufbau mit dem Max, den Stecker und dem Modem bei einer 
anderen CPU geklappt hat müsste das ja so klappen.
Wenn nicht, dann vielleicht mal dir von mir genanten Brücken probieren.
Hast du auch mal andere Befehle vom Modem probiert?
ATA sollte z.b. ja einfach den Hörer abnehmen.

Manche Modems fangen auch nicht an zu wählen wenn sie kein Freizeichen 
vom Amt bekommen. Da muß erst was umconfiguriert werden.

von troll (Gast)


Lesenswert?

Peter II schrieb:
> (wenn noch fehler drin sind, wird sie gleich jemand finden)
>for( char* c = call; ++c; *c != 0 )
umgekehrt:
for( char* c = call; *c != 0 ; ++c )
oder kürzer
for( char* c = call; *c ; ++c )

von Reinhard Kern (Gast)


Lesenswert?

Nase schrieb:
> Da muß erst was umconfiguriert werden.

Ja, aber dummerweise per AT-Befehl...

Gruss Reinhard

von Kevin D. (Firma: m5) (daverda00)


Lesenswert?

Noch eine Frage: Bei meiner Schaltung (die ich auf dieser Seite gefunden 
habe) wird RS1OUT mit Pin 2 der seriellen Schnittstelle verbunden, bei 
der Platine mit dem 8051 hatte ich RS2OUT mit dem Pin 2 verbunden..... 
Macht das einen Unterschied?

von Nase (Gast)


Lesenswert?

RS2OUT hört sich nach einer COU mit zwei Schnittstellen an. Sprichst du 
in deiner Software die richtige an?
Ist die richtig initialisiert?
Teste erstmal ob deine Schaltung da überhaubt was macht mit einem 
Terminalprogramm.

von Kevin D. (Firma: m5) (daverda00)


Lesenswert?

> RS2OUT hört sich nach einer COU mit zwei Schnittstellen an.

Ah, ok, auf der alten Platine, die übrigens der Schule gehörte, hatte 
ich auch eine Programmierschnittstelle via RS232, also eben eine zweite 
serielle Schnittstelle.
Und momentan habe ich kein RS232 Anschluss zum Testen mit dem Terminal. 
Morgen werde ich es versuchen.

von Jobst M. (jobstens-de)


Lesenswert?

Nase schrieb:
> ATA sollte z.b. ja einfach den Hörer abnehmen.

Bei vielen Modems jedoch nur, wenn es zuvor geklingelt hat.



Nase schrieb:
> RS2OUT hört sich nach einer COU mit zwei Schnittstellen an.

Nein, er meint RS2OUT vom MAX232.

Wenn RS2OUT benutzt werden soll, muss auch T2IN benutzt werden. Es ist 
egal, welchen der beiden Converter Du benutzt. Aber Du musst auch den 
Ausgang des Converters nehmen, dessen Eingang Du benutzt. Viele tolle 
Infos dazu findest Du im Datenblatt zu dem IC.



Dann ist noch die Frage, ob das ein Stecker oder eine Buchse ist und 
dann weil falsch evtl. spiegelverkehrt und/oder mit Nullmodemkabel ...

Am besten machst Du mal ein paar Fotos. Aber Bitte beachte die 
Bildformate! Und dann piep das Kabel mal durch, ob die Leitungsbelegung 
1:1 ist oder ob einige Leitungen 'über Kreuz' sind.


Gruß

Jobst

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jobst M. schrieb:
>> ATA sollte z.b. ja einfach den Hörer abnehmen.
>
> Bei vielen Modems jedoch nur, wenn es zuvor geklingelt hat.

Dann nimmt man ATH1.

von Kevin D. (Firma: m5) (daverda00)


Angehängte Dateien:

Lesenswert?

Also... Ich hab mal ein Foto hochgeladen, mit einer kurzen Beschreibung. 
Die Platine ist miserabel gelötet (siehe schon mal die Kondensatoren auf 
der Unterseite), doch ihr müsst bedenken, dass ich etliche Male die 
Platine umgestaltet hab, weil sie nicht funktionierte :)
Das mit dem Hex-Terminal hat nicht ganz gut geklappt, ich konnte nicht 
mal mit dem Modem kommunizieren, obwohl dieses sicher funktioniert, also 
hab ich nicht lange weiter versucht.
Ich hab auch mit einem Nullmodemkabel und mit einem normalem Modem-Kabel 
versucht, jedoch ohne Erfolg.
Etwas hab ich jedoch bemerkt: Auf der alten Platine hatte ich die Pins 
der seriellen Schnittstelle (1-4-6 und 7-8) verbunden gehabt. Morgen 
versuch ich es mal mit den verbundenen Pins.....

von Kevin D. (Firma: m5) (daverda00)


Lesenswert?

Update: trotz Verbinden der Pins an der RS232 funktionierts trotzdem 
nicht...

von Nase (Gast)


Lesenswert?

Pin 1 von GND getrennt?
Schon mal Terminalprogramm mitgeschnitten?

von Michael L. (michaelx)


Lesenswert?

Hier die Antworten auf 3 Beiträge ...

Kevin Daverda schrieb:
> Hallo! Ich hab folgendes Problem: Ich möchte mit einem Atmega8 über
> RS232 mit einem Modem kommunizieren (AT-Kommandos). Nur funktioniert es
> nicht, ich sende das Befehl zum Anrufen und es passiert einfach nichts.
> Die Schaltung und die Dateien uart.c und uart.h habe ich im Anhang (Habe
> aber von dieser Seite also müssten sie in Ordnung sein). Bei der
> Main-Funktion verwende ich diese Befehle:
>
1
char
2
> call[21]={'a','t','d','+','"','+','3','9','3','2','9','5','3','4','8','1','3','8','"',';',13};
3
> for(i=0; i<21; i++)
4
> {
5
>     uart_putc(call[i]);
6
> }
7
>
> Wie gesagt, es passiert einfach nichts, hab auch versucht, die RS1OUT
> und R1IN zu kreuzen, doch es brachte nichts. Bitte wenn mir jemand sagen
> könnte, wo das Fehler liegt.

Blindes Probieren bringt nicht weiter. Die Anschlüsse der RS232 haben 
auf Seite PC und Modem unterschiedliche Bedeutung. TX ist am PC Ausgang, 
am Modem aber Eingang!

http://de.wikipedia.org/wiki/EIA-232#Verkabelung_und_Stecker

Deswegen wird die COM-Schnittstelle zwischen PC und Modem auch Eins zu 
Eins verbunden, nichts gekreuzt. Das solltest du bedenken.

Dann probiert man zuerst das Einfachste: AT gefolgt von Return. Wenn das 
Modem darauf nicht mit OK antwortet, ist jeder weitere Versuch sinnlos!

Denn dann stimmt die Verkabelung und/oder die Baurate etc. nicht!

Kevin Daverda schrieb:
>> Nach ATD folgt einfach nur die Telefonnummer. Probiers doch erstmal ganz
>> einfach mit deiner Handynummer ATD0172....
>
> Der Befehl stimmt sicher, hab ich schon mal mit einem 8051 ausprobiert.
> Doch wegen der Masse an Pin 1 der RS232-Schnittstelle: Die Platine habe
> ich schon erstellt, soll ich die Verbindung zur Masse trennen oder
> sollte es trotzdem funktionieren? Ich meine, Pin 1 wird ja ansonsten
> nicht angeschlossen....

Hast du das auch mit dem gleichen Modem probiert? Die Zeichen *+*,  *"* 
und *;* gehören so nicht in einen üblichen Dial-Befehl, die solltest du 
weglassen! Mit *+39* wählst du übrigens nach Italien, falls dein Modem 
die Telefonnummer wie ein Handy interpretiert. ;-)

Eventuell solltest du auch mal ATDT gefolgt von der Telefonnummer 
versuchen, um explizit die Tonwahl zu aktivieren (dein Modem könnte per 
Default auf Pulswahl eingestellt sein). Wenn du auf das Freizeichen 
warten musst, ist ein W (ggf. nach der Null zur Amtsholung) 
einzufügen, und für Pausen in der Wahlsequenz setzt man ein Komma 
(waren 2 Sekunden glaube ich). Damit kann man auch Probleme bei der 
Freizeichenerkennung durch Warten (ggf. auch mehrere Kommas 
hintereinander) umgehen.

Kevin Daverda schrieb:
> Kannst du mir ein solches Terminal-Programm empfehlen? Und kann ich da
> einfach bytes via RS232 senden?
> Und weil 1 auf GND ist, weiß Ich nicht, hab wahrscheinlich mal so
> gesehen...Macht es direkt was aus?

Wenn du unter Windows arbeitest, dann ist das mitgelieferte 
Hyperterminal-Programm völlig ausreichend. Telefonnummer brauchst du 
nicht konfigurieren, da wird nach dem Anrufen einfach der COM-Port 
aufgemacht. Die Befehle kannst du kanz einfach per Hand eintippen, ggf. 
lokales Echo anschalten, wenn du beim Tippen nichts siehst; kommt 
dagegen alles doppelt, macht dein Modem das Echo und du brauchst das 
lokale Echo nicht. Das ist dann auf jeden Fall ein gutes Zeichen bzgl. 
der Verbindung zum Modem. ;-)
Weitere Bedienung Bedienung siehe Hilfe.


Bitte detailierte Abworten für weitere Hilfe.

HTH

von Kevin D. (Firma: m5) (daverda00)


Lesenswert?

Also...

> Pin 1 von GND getrennt?
Ja.

> Schon mal Terminalprogramm mitgeschnitten?
Versucht schon, doch ich konnte nicht mal vom Modem (das sicher 
funktioniert) etwas empfangen, also versuchte ich nicht länger.

> Hast du das auch mit dem gleichen Modem probiert? Die Zeichen *+*,  *"*
> und *;* gehören so nicht in einen üblichen Dial-Befehl, die solltest du
> weglassen! Mit *+39* wählst du übrigens nach Italien, falls dein Modem
> die Telefonnummer wie ein Handy interpretiert. ;-)
Genau dieser Befehl mit genau 20ms Pause zwischen den Chars hab ich mit 
dem gleichem Modem getestet (nur mit einem 8051 statt einem Atmega8) und 
es funktionierte. *+39* hab ich weil ich auch aus Italien bin :)

Was ich heute aber entdeckt hab: Ich habe bei den Fuses and Lock Bits 
einen 16 MHz - Quarz eingestellt, hab auf der Platine aber nur einen 12 
MHz - Quarz. Beim Versuch, diese Einstellungen zu ändern hab ich meinen 
Microcontroller kaputtgemacht, deswegen wird es wieder eine Weile dauern 
bis ich einen neuen bekomme und weiter versuchen werde......Aber das 
könnte die Ursache gewesen sein, oder?

von Karl H. (kbuchegg)


Lesenswert?

Kevin Daverda schrieb:
> Also...
>
>> Pin 1 von GND getrennt?
> Ja.
>
>> Schon mal Terminalprogramm mitgeschnitten?
> Versucht schon, doch ich konnte nicht mal vom Modem (das sicher
> funktioniert) etwas empfangen, also versuchte ich nicht länger.

Häng doch mal deinen µC an den PC und sieh zu, dass du das was am µC 
weggesendet wird auch auf dem PC (bei richtiger Baudrateneinstellung) 
empfangen wird.

Du stocherst unsystematisch im Nebel. So wird das nichts.

Dein einziger Fixpunkt ist, dass der PC mit SIcherheit korrekt 
funktioniert. Alles andere ist unsicher.
Also musst du deine einzelnen Komponenten erst mal mit PC Hilfe in 
Betrieb nehmen.
µC an PC
Modem an PC

Und erst dann, wenn da alles gesichert funktioniert ... erst dann kannst 
du daran denken µC und Modem zusammenzubringen und dann stehen auch die 
Chancen gut, dass dieses klappen wird, weil dann mit PC Hilfe all die 
'Kinderkrankheiten' ausgemerzt wurden.

Einfach unsystematisch drauflos probieren führt hingegen selten zum 
Erfolg.

> bis ich einen neuen bekomme und weiter versuchen werde......Aber das
> könnte die Ursache gewesen sein, oder?

Ja könnte es.
Es gibt aber noch ein paar andere Dinge, die dir das Leben schwer machen 
können.

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.