Hey Leute, ich versuche mit nem uC ein GSM Modem anzusprechen. Leider
reicht es dafür nicht wenn ich nur RX,TX und GND verbinde denn das Modem
benötigt anscheinend die Steuerleitungen (RTS,CTS und möglicherweise
auch DSR,DTR)
Der uC sitzt auf nem STK500. Habt Ihr ne Ahnung ob die Steurleitungen
automatisch aktiv sind,oder was ich machen muss um diese zu aktivieren?
Das ist mein Vorläufiger Code,der meiner Meinung nach OHNE
Steuerleitungen ist?! Vielen Dank für die Hilfe, Rüdiger
1
/* UART-Init beim AT90S2313 */
2
#include<avr/io.h>
3
4
#ifndef F_CPU
5
/* In neueren Version der WinAVR/Mfile Makefile-Vorlage kann
6
F_CPU im Makefile definiert werden, eine nochmalige Definition
7
hier wuerde zu einer Compilerwarnung fuehren. Daher "Schutz" durch
8
#ifndef/#endif
9
10
Dieser "Schutz" kann zu Debugsessions führen, wenn AVRStudio
11
verwendet wird und dort eine andere, nicht zur Hardware passende
12
Taktrate eingestellt ist: Dann wird die folgende Definition
13
nicht verwendet, sondern stattdessen der Defaultwert (8 MHz?)
14
von AVRStudio - daher Ausgabe einer Warnung falls F_CPU
15
noch nicht definiert: */
16
#warning "F_CPU war noch nicht definiert, wird nun nachgeholt mit 8000000"
17
#define F_CPU 8000000UL // Systemtakt in Hz - Definition als unsigned long beachten
18
// Ohne ergeben sich unten Fehler in der Berechnung
Ruediger schrieb:> abt Ihr ne Ahnung ob die Steurleitungen> automatisch aktiv sind,oder was ich machen muss um diese zu aktivieren?
Weder noch. Die gibt es gar nicht.
Also nimmst du dir einfach zwei bis vier normale IO-Pins, nennst die im
Geiste und auf dem Schaltplan RTS,CTS ,DSR, DTR, und programmierst die
so, dass das Modem am anderen Ende zufrieden ist. Natürlich müssen die
Signale dann auch über einen Max232 geführt werden.
Oder aber du machst das, was Generationen von RS232-Kabelbastler vor dir
auch schon in solch einem Fall gemacht haben, und lötest die passenden
Brücken in den Stecker am Modem.
guggst du hier:
http://www.mikrocontroller.net/articles/RS-232#Flu.C3.9Fsteuerung
Oliver
Die Handshakeleitungen müssen in Software implementiert werden, wenn man
sie braucht. Zunächst aber einmal solltest Du eine hundsnormale
Senderoutine ohne Warteschleifen auf die Beine bringen können (was da
oben steht, macht doch einen sehr unbeholfenen Eindruck), bevor Du Dich
ans Handshake machst.
Ruediger schrieb:> while (!(UCSRA & (1<<UDRE))) /* warten bis Senden moeglich */> {> }>> void long_delay(uint16_t ms) {> for(; ms>0; ms--) _delay_ms(1);}>>> UDR = 'A';> long_delay(10);> UDR = 'T';> long_delay(10);> UDR = 'D';> long_delay(10);
Du hast da irgendwas entscheidendes nicht verstanden.
Einerseits gibt es in C keine "lokalen Funktionen" (und long_delay ist
eine innerhalb von main deklarierte), und andererseits solltest Du den
Code zum Versenden eines Zeichens ohne Delay aufbauen können.
Probiers mal so:
(das hier außerhalb von main!)
1
voidsendezeichen(charzeichen)
2
{
3
while(!(UCSRA&(1<<UDRE)))/* warten bis Senden moeglich */
Erstmal vielen Dank für die schnelle Antwort! Unbeholfen trifft es
leider ziemlich gut... Noch dazu steh ich im Moment tierisch auf der
Leitung! Wenn ich das GSM-Modem über den Rechner mim Hyperterminal
ansteuer,funktioniert das tadelos wenn ich Flusssteuerung auf KEINE
stelle. Werden denn dann in dem Fall die Steuerleitungen gar nicht
genutzt?
Ich verstehe nämlich nicht warum die Kommunikation vom Pc aus klappt
aber vom uC nicht!! Und da lag meine Vermutung halt bei den
Steuerleitungen,aber wenn der PC die ja auch nicht nutzt,darf ich wohl
nochmal von vorne anfangen zu suchen,warum es nicht klappt...
Rüdiger
Hi
>Ich verstehe nämlich nicht warum die Kommunikation vom Pc aus klappt>aber vom uC nicht!! Und da lag meine Vermutung halt bei den>Steuerleitungen,aber wenn der PC die ja auch nicht nutzt,darf ich wohl>nochmal von vorne anfangen zu suchen,warum es nicht klappt...
Klappt den eine Kommunikation zwischen AVR und PC?
MfG Spess
Ja die funktioniert Tadelos!! Das ist ja was ich nicht verstehe!
PC -> Modem klappt
uC -> PC klappt
uC -> Moden klappt nicht!
zum verrückt werden!!
Rüdiger
Ps: habs auch schon mim nullmodemkabel probiert...
Das hab ich schon öfters gehört,aber im Prinzip müsste mein uC doch auch
DTE sein?! Naja,ich hab auf jeden Fall beide Varianten getesten, RX-TX
getauscht und RX-TX nicht getauscht. Beides hat nicht geklappt...
Die Brücke zwischen DTR - DSR und CTS - RTS hat leider auch nichts
gebracht.
Wenn der PC bei der Einstellung Flusssteuerung=KEINE wirklich nur TX,RX
und GND verwendet ist der einzige unterschied zwischen dem PC und dem uC
dass der PC 12V Pegel hat und der uC 5V Pegel.
Aber ist das Modem denn da so penibel? Ich mein der PC empfängt ja auch
was der uC sendet?! Rüdiger
Verbindung PC-Modem = Normales Serielles Kabel (dient nur der
Verlängerung,kann das Modemkabel auch direkt an den Com-port hängen)
Verbindung PC-uC = ebenfalls normales Serielles Kabel!
Hab vorhin testweise mal bei dem seriellen Kabel alle kabel
durchgeschnitten mit ausnahme von Tx,RX und GND. Danach klappte dann
auch die Verbindung zwischen PC und Modem nicht mehr! Das heißt selbst
ohne Flusssteuerung verwendet der PC anscheinend mehrere Pins als nur
die 3...
(confused) Rüdiger
Der PC erzeugt auch bei abgeschaltetem Hardare-Handshake diese Signale
so, dass die Gegenseite nicht blockiert wird (falls diese diese Signale
beachtet).
Auf den PCs reichen überdies 3 Leitungen, weil Pullups dafür sorgen,
dass unbeschaltete Handshake-Leitungen so liegen, dass sie nichts
blockieren.
Offensichtlich mag Deine Gegenseite definierte Pegel sehen. Man kann
ihr deshalb auf ihren Handshake-Empfangsleitungen die passenden Pegel
geben. Praktischerweise lassen sie sich von ihren eigenen
Handshake-Sendeleitungen ableiten. Üblich ist, RTS mit CTS zu verbinden
und DTR mit DSR und DCD.
Ein paar Brücken, und es sollte gehen.
Ruediger schrieb:> Verbindung PC-Modem = Normales Serielles Kabel (dient nur der> Verlängerung,kann das Modemkabel auch direkt an den Com-port hängen)>> Verbindung PC-uC = ebenfalls normales Serielles Kabel!
Das geht nicht! Entweder dein Mikrocontroller ist ein DTE (und steuert
das Modem an) oder er ist ein DCE (und wird vom Computer angesteuert).
In deinem Falle versuchst du ein DCE (Mikrocontroller) an ein anderes
DCE (Modem) anzuschließen. Dabei liegen die Tx-Ausgänge und die
Rx-Eingänge beider DCEs auf den gleichen Pins und erzeugen einen
Kurzschluss.
Entweder du änderst die Belegung des Steckers am Mikrocontroller, oder
du musst irgendeine Art gekreuztes Kabel (mglw. wo alle Handshakes
mitgekreuzt sind) verwenden.
Was Hc Zimmerer sagt, kann darüber hinaus auch noch zutreffen. Ich
arbeite auch gerade mit einem Tetra Modem, das ebenfalls die Handshake
Signale benötigt. Ist ja auch ziemlich normal bei Modems.