Forum: Mikrocontroller und Digitale Elektronik Nullmodemkabel ... RS232


von Marcel (Gast)


Lesenswert?

Hi!

Habe ein Gerät mit einem Atmega16 gebaut. Dieses sendet mir ständig
Daten. Aufgebaut hatte ich die Schnittstelle wie in dem AVR-Tutorial
unter dem Link 6. Das UART. Hierfür habe ich kein sogenanntes
Nullmodemkabel verwendet. Der Empfang mit Labview funktioniert
einwandfrei. Ich kann aber von Labview aus nichts senden. Auch wenn ich
zwei Rechner direkt miteinander verbinde und über den hyper terminal
irgend etwas versenden möchte, funktioniert das nicht. Wenn ich über
Labview was sende, sagt mir der Baustein zum Versenden, dass er die zu
sendende Anzahl von bytes auch gesendet hat.

Fragen:
1. Was ist überhaupt die Eigenschaft eines Nullmodemkabels, bzw. keines
Nullmodemkabels?
2. Wo liegt vieleicht mien Problem?

Viele Grüsse, hoffe auf baldige Antwort,
Marcel

von Tobias (Gast)


Lesenswert?

Bei einem Nullmodemkabel ist die Kreuzung mehrerer Leitungen wichtig:

http://www.hardwarebook.net/adapter/serial/nullmodem.html

Also
     Stecker 1  Stecker 2
     Pin 2      Pin 3
     Pin 3      Pin 2
     Pin 4      Pin 5
     Pin 5      Pin 4
     Pin 6      Pin 20
     Pin 20     Pin 6

(Masse nicht vergessen !!)

Wenn du auf Handshaking verzichten willst, so reicht die Kreuzung von
Pin 2 und 3 und natürlich noch die Masse.

Ein normales Kabel (also kein Nullmodem) verbindet die Pins zwischen
den beiden Steckern einfach 1:1

von Theoid (Gast)


Lesenswert?

Ein Nullmodemkabel kreuzt RxD und TxD, was ein "ungekreuztes" 1-zu-1
Kabel nicht tut, daher dessen Name ;-)

Wenn also empfangen, aber nicht gesendet werden kann, dann kann das
Kabel nicht Schuld sein - es sei denn es ist defekt.

> Wenn ich über Labview was sende, sagt mir der Baustein zum
> Versenden, dass er die zu sendende Anzahl von bytes auch gesendet
> hat.

Wenn du kein Hardware- oder Softwarehandshake implementierst, hat es
auch keine Chance herauszufinden, ob die Daten wirklich dort angekommen
sind, wo sie hin sollen. Die Meldung ist daher nicht wirklich wertvoll.

von Marcel (Gast)


Lesenswert?

Das Kabel müsste ich aber dadurch testen können, dass ich es rumdrehe.
Wenn ich vom Mikrocontroller aus das Kabel einmal sorum und dann wieder
andersherum verwendet und der Computer nur vom controller empfängt, dann
funktioniert das.

von Marcel (Gast)


Lesenswert?

Ich frage noch mal anders. Wenn ich KEIN Nullmodemkabel verwende, dann
sind die Adern des Kabels nicht verkreuzt und somit muss der TX vom µc
mit rx vom PC verbunden werden. TX vom PC muss mir rx vom µc verbunden
werden. Richtig?

Bei mir ist das gerade ein bischen verbaut alles. Komme aber an den
MAX232 ran. Muss somit nur wissen, was die PINbelegung an der
Steckerbuchse der RS232 Scgnittstelle an meinem Rechner ist.

kann mir jemand sagen, wie diese exakt am Rechner ist?

Bei der Verbindung zwischen µc und MAX232 ist definitiv alles in
Ordnung.

Bei der Verbindung zweier PCs mit diesem Kabel hat es deswegen nicht
geklappt, weil es kein Nullmodemkabel ist, richtig?

Also, was meint ihr?

von Marcel (Gast)


Lesenswert?

Habe im Netz die Belegung vom PC gefunden. Zwischen MAX 232 und PC ist
auch alles in Ordnung, wenn die meine Annahme von oben stimmt.

Woran kann es jetzt liegen? Softwareproblem: RX am µc auf Eingang
gestellt, UART auf senden und empfangen eingestellt. Was brauche ich
noch?

Ist das jetzt richtig, dass ich nur zwei Rechner mit einem
Nullmodemkabel verbinden kann? Meiner Meinung nach ist das so? Somit
wäre mein Kabel und die Verbindung in Ordnung und es müsste an der
Programmierung des µc (Atmega16) liegen?

Hie der code der Initialisierung der UART (wie gesagt, senden
funktioniert, aber empfangen nicht):

UCSRB |= ( 1 << TXEN ); // UART TX einschalten; Hiermit Sendebetrieb
möglich
  UCSRB |= ( 1 << RXEN ); // UART RX einschalten; Hiermit
Empfangsbetrieb möglich
  UCSRC |= ( 1 << URSEL )|( 3<<UCSZ0 ); // Asynchron 8N

  UBRRH = 0;
  UBRRL = 103; /* Asynchronous Normal Mode, U2X=0,
UBRRL=((16MHz/16/baudrate)-1)=103,1666dez=1100111bin
              Error=0,2% */


void IOINIT_init(void)
{
  DDRD=50; // PD1,PD4,PD5 auf Ausgang gesetzt. Der Rest auf Eingang
  PORTD=PORTD | 48; // Setzen von PD4, PD5 auf 1, damit die LEDs nicht
leuchten
}


Hat vieleicht jemand noch eine Idee?

von Hubert.G (Gast)


Lesenswert?

Wenn du testen willst ob die Verbindung zum µC wirklich OK ist dann
solltest du die Vebindung zwischen MAX232 und Mega16 unterbrechen
können. RX mit TX verbinden und mit einen Terminal-Programm was senden,
dann solltest du ein Echo bekommen. Wenn das so ist dann ist
Hardwaremässig alles OK.

von Profi (Gast)


Lesenswert?

evtl. klappt die Verbindung nur, wenn die 3 PC-Handshake-Leitungen
(Eingänge) auf positivem Niveau (+4..+12V) liegen.
Oder sicherstellen, dass in den Seriellen Einstellungen Handshake auf
OFF oder NONE steht.

Das Problem bei den NullModemKabeln ist, dass es unterschiedliche
Varianten gibt: da die Std-PC-Serielle 3 Ausgänge und 5 Eingänge hat,
gibt es mannigfaltige Kombinationsmöglichkeiten.

Hätte man das von Haus aus auf 4+4 oder 5+5 festgelegt.... wäre so
manchem viel Ärger erspart geblieben.

Beim Thema Serieller wird auch viel gepfuscht, ich habe schon
kommerzielle Adapterkabel gesehen, bei denen zwei Ausgänge
zusammengeschaltet waren.

Der Tip von Hubert ist immer hilfreich. Wenn das mal klappt, hast Du
schon fast gewonnen.

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.