Forum: Mikrocontroller und Digitale Elektronik RS232 Komunikation mit PIC


von PIC an serieller Hardware (Gast)


Lesenswert?

Hallo zusammen

Mein Problem:

Ich möchte mit einem PIC16F876 über rs232 mit einem Modem (Wavecom WM02) 
komunizieren. Wenn ich das Modem an den PC anschliesse funktionieren 
alle Comands richtig, das Modem geht also. Aber da wird ja auch das 
ganze Handshaking bereitgestellt.

Meine Frage also:

Gibt es ne Möglichkeit die Komunikation nur mit RX und TX hinzubekommen? 
Oder muss ich die ganzen Handshaking-Signale auch bereitstellen?


mfg Markus

von Dieter W. (dds5)


Lesenswert?

> Oder muss ich die ganzen Handshaking-Signale auch bereitstellen?

Nur wenn das Modem keinen Befehl kennt, mit dem es sich auf reines 
Softwarehandshake einstellen lässt.

von PIC an serieller Hardware (Gast)


Lesenswert?

Ich hab überleg die Signale RTS und CTS des Modems einfach zusammen 
zuhängen, damit sich das Modul immer wieder selbst die Sendefreigabe 
gibt.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Hardware-Handshake ist sicher schon länger obsolet.
Du programmierst einen RS232-Empfang über IRQ und Buffer und alles paßt!

von Karl H. (kbuchegg)


Lesenswert?

Bernd Rüter schrieb:
> Hardware-Handshake ist sicher schon länger obsolet.
> Du programmierst einen RS232-Empfang über IRQ und Buffer und alles paßt!

Und das hilft ihm dann wie, wenn ihn das Modem dazu auffordert 
kurzzeitig nicht zu senden?

von Markus M. (skamper)


Lesenswert?

Ok ich bin nun schon einiges weiter. Die Komunikation mit Hyperterminal 
(also Modem am PC) geht prima.

Baud 19200, 8Bit, No Parity, 1 Stopbit, Flowcontroll: None

Dann muss ich das eingeben:

  AT+CMGS=+41XXXXXXXXX<Enter>
  Text der Nachricht<Ctrl-Z>

Da die Flusscontrolle auf "None" steht bin ich davon ausgegangen das es 
auch auf dem PIC funktioniert. Also wenn ich alles gleich ausgebe.

Also in etwa so:

  strcpy(number,"+41XXXXXXXXX");
  printf("AT+CMGS=%s",number);
  putc('0x0D');
  printf("Text der Nachricht");
  putc('0x1A');

nur leider geht das nicht. Weiss jemand ob auf dem PIC ein String 
irgenwie anders terminiert wird oder sieht sonst ein fehler?

(Sorry - hab den letzten Beitrag leider als Gast verfasst)

von Anja (Gast)


Lesenswert?

Ich schätze mal das Modem braucht ein DTR-Signal.

Gruß Anja

von Andreas F. (aferber)


Lesenswert?

Markus Marugg schrieb:
>   printf("AT+CMGS=%s",number);
>   putc('0x0D');

printf("AT+CMGS=%s\r\n", number);

>   printf("Text der Nachricht");
>   putc('0x1A');

printf("Text der Nachricht\x1A");

> nur leider geht das nicht. Weiss jemand ob auf dem PIC ein String
> irgenwie anders terminiert wird oder sieht sonst ein fehler?

Deine beiden Character-Konstanten (mit Single Quotes) ergeben nicht 
ganz das, was du erwartest. Ohne die Quotes würde es gehen, aber 
versuch's mal wie oben, mit den Steuerzeichen direkt im 
printf()-Formatstring.

Ausserdem AT-Kommandos immer mit "\r\n" abschliessen, habe ich aber auch 
schon eingebaut.

Andreas

von Markus M. (skamper)


Lesenswert?

ok. hab das mal ausprobiert. Leider ohne Erfolg. Muss da wirklich jeder 
Befehl auch mit "Line Feed" abgeschlossen werden? Ich konnte das 
irgenwie im Datenblatt nirgends finden.

von Markus M. (skamper)


Lesenswert?

Ok, also langsam dreh ich am Zeiger. "FlowControll - None" heisst schon 
das überhaupt nichts gesteuert wird? Am PC kann ich es einfach anhängen, 
Verbindung einrichten und drauf los schreiben. Keine Initialisierung 
nötig, es geht halt einfach. Mein Schnittstellen-Treiber funktioniert 
und auch sämmtliche Pinbelegungen hab ich schon tausendmal gecheckt. Hat 
noch jemand ne Idee?? Bin über jede Hilfe froh.

von Reinhard Kern (Gast)


Lesenswert?

Markus Marugg schrieb:
> ok. hab das mal ausprobiert. Leider ohne Erfolg. Muss da wirklich jeder
> Befehl auch mit "Line Feed" abgeschlossen werden? Ich konnte das
> irgenwie im Datenblatt nirgends finden.

Nein, CR reicht. Wenn man will, kann man auch ein anderes Zeichen als 
Ausführungskommando festlegen, aber das ist absolut unüblich.

Gruss Reinhard

von Harald N. (harald_)


Lesenswert?

Hi Markus, ich weiß nicht was der Arzt oder Apotheker empfiehlt, aber 
ich empfehle nachfolgendes:

1. Flow Control
Flow Control ist im AT Command Mode nicht (nie) aktiv. Auf ein AT sollte 
ein OK kommen. Erst wenn man eine CSD oder GPRS Verbindung aufbaut 
werden die Handshakeleitungen benutzt. Die Handshakeleitungen kann man 
mit AT Befehlen ausschalten.

1.1 >Hardware-Handshake ist sicher schon länger obsolet.
Das sehe ich anders. Ohne Handshake geht in der GPRS Verbindung mit 
kleinen Datenpackten recht gut. Meine obige Aussage bezieht sich auf die 
GPRS Modem welche hier gelistet sind.
http://www.gsm-modem.de/gps/gsm-modem-module.html
Der Buffer im Modul ist recht groß. Das Paket wird im RAM des Modems 
gespeichert und dann mittels des integrierten TCP/IP Stack zum Server 
geschaufelt. Die Paketgröße und das Timeout lässt sich einstellen.
Wie das mit Wavecom ist, weiß ich leider nicht. Ich benutze seit Jahren 
keine Wavecom mehr.

2. Wat is ne´ Dampfmaschine? Da stelle mer´ uns ma´ jaanz dumm
2.1 AT + CR und dann OK
Fangen wir mal ganz klein an. Einfach mal nur AT und dann sollte ein OK 
kommen. Schickt man irgendetwas Unbekanntes, dann kommt zumindest ein 
"Error" zurück. OK oder Error kommen aber nur, wenn man den Befehl auch 
mit CR abschließt. Wenn man meint, man sendet ein CR und sendet etwas 
anderes, dann kommt auch nie eine Antwort. Sende das AT und CR zum PC. 
Nimm, wenn möglich, nicht Hyperterm sondern eine Terminalsoftware, die 
die Zeichen auch im Hexcode anzeigen kann. Dann siehst du auch, ob du 
wirklich ein CR sendest.
Man kann die Terminalsoftware auch parallel zum GSM Modul betreiben. Das 
TX vom GSM Modul einfach parallel zum RX der RS232 am PC verdrahten. 
Dann kann man auch bei späteren AT Commands schön sehen, was man 
wirklich gesendet hat.
2.2 AT + CR zum GSM Modul
Wenn alles unter Punkt 2.1 funktioniert und die Terminalsoftware den 
richtigen Hexcode anzeigt, dann kann man auch Punkt 2.2 übergehen.

Das obige habe in den letzten 15 Jahren schon unzählige Male 
beschrieben. Sollte mein Tipp oben zum Erfolg führen, werde ich es im 
meinem Blog veröffentlichen http://www.gsm-modem.de/M2M/tag/m2m-tip/ . 
AT Commands mittels uC Schritt für Schritt.
1. AT mittels uC an Terminalsoftware senden
2. AT mittels uC an GSM Modul oder GSM Modem senden
3. AT+CPIN=1234 senden. 1234 gegen die OIN der Karte tauschen
4.ATD 123456789; senden 123456789 gegen die Telefonnummer des eigenen 
Handies tauschen. Dann klingelt das Telefon und man kann abheben. Man 
hört nichts, da man ja kein Mikrofon angeschlossen hat, aber man hat 
schon mal die Funkverbindung inklusive der GSM Antenne überprüft
5. und weiteres steht dann im Blog.

Viel Erfolg beim nächsten Schritt.
Gruß
Harald

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.