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:
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.
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.
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?
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?
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.
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.
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
> 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....
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.
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 )
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?
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.
> 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.
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
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.....
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:>
> 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
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?
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.