Forum: Mikrocontroller und Digitale Elektronik RS232 allgemein


von Peter Pippinger (Gast)


Lesenswert?

Hallo NG,

kann mir bitte jemand ein paar Dinge erklären und warum die so sind?

- asyncron und syncron
- Flusssteuerung
- kann ich mit einem 1:1 Kabel Daten in eine Richtung übertragen?
- Muss die Baud-Rate auf beiden Geräten gleich eingestellt sein, oder 
funktionierts auch, wenn z.B. der Empfänger eine höhere eingestellt hat?

Vielen Dank!
Peter

von Mike R. (thesealion)


Lesenswert?

Da empfehle ich doch glatt mal http://de.wikipedia.org/wiki/RS_232

Wenn du einzelne gezielte Fragen hast, kannst du wieder fragen, aber 
ganze Aufgaben wird hier wohl keiner für dich lösen.

von Johannes M. (johnny-m)


Lesenswert?


von Peter Pippinger (Gast)


Lesenswert?

In einem anderen Thread wurde mir gesagt, dass ich ein 1:1 Kabel 
brauche, um Daten vom AT91SAM7S256 auf meinen PC zu schicken.

Wenn ich mir aber hier das aus Wikipedia durchlese, denke ich doch eher 
an ein Nullmodem-Kabel, oder lieg ich da falsch?

Mir wäre es halt wichtig, dass ich wenigstens mal das richtige Kabel 
habe, das ich brauche. Sonst helfen ja die ganzen Tests nichts...

In Wikipedia (Auszugsweise):
""""""""""""""""""""""""""""""""""""
Um zwei Geräte über die serielle Schnittstelle zu verbinden, müssen die 
"hörenden" mit den "sprechenden" Leitungen verbunden werden, d. h. TxD 
muss mit RxD und CTS mit RTS verbunden werden.

- Handelt es sich um eine Verbindung von Terminal bzw. Rechner (DTE – 
data terminal equipment) mit Stecker zu einem Modem (DCE – data 
circuit-terminating equipment) mit Buchse, ist ein 1:1-Kabel nötig.

- Handelt es sich dagegen um eine Verbindung zweier gleicher Geräte (z. 
B. zweier PCs), so sind die Leitungen zu kreuzen. Ein solches Kabel 
nennt man Nullmodem-Kabel.
""""""""""""""""""""""""""""""""""""

von Karl H. (kbuchegg)


Lesenswert?

Peter Pippinger wrote:
> In einem anderen Thread wurde mir gesagt, dass ich ein 1:1 Kabel
> brauche, um Daten vom AT91SAM7S256 auf meinen PC zu schicken.
>

Das kann man so nicht sagen.
Das hängt davon ab, welche Buchse (oder Stecker) auf deinem
Board montiert ist.

Am einfachsten ist es, du schnappst dir ein Multimeter
und misst das einfach mal an den Pins aus.

> In Wikipedia (Auszugsweise):
> """"""""""""""""""""""""""""""""""""
> Um zwei Geräte über die serielle Schnittstelle zu verbinden, müssen die
> "hörenden" mit den "sprechenden" Leitungen verbunden werden, d. h. TxD
> muss mit RxD und CTS mit RTS verbunden werden.
>
> - Handelt es sich um eine Verbindung von Terminal bzw. Rechner (DTE –
> data terminal equipment) mit Stecker zu einem Modem (DCE – data
> circuit-terminating equipment) mit Buchse, ist ein 1:1-Kabel nötig.
>
> - Handelt es sich dagegen um eine Verbindung zweier gleicher Geräte (z.
> B. zweier PCs), so sind die Leitungen zu kreuzen. Ein solches Kabel
> nennt man Nullmodem-Kabel.
> """"""""""""""""""""""""""""""""""""

Das ist in der Theorie schön und gut. In der Praxis erlebt
man da aber immer wieder Überraschungen.
Daher -> Mit einem Voltmeter hast du in 20 Sekunden identifiziert
ob das Kabel gekreuzt sein muss oder nicht.

Wenn du einen 9-poligen Stecker/Buchse hast, dann liegen die
relevanten Signale an Pin 2/3. Nimm dein Voltmeter und
sieh nach auf welchem der beiden Pins eine Spannung von
ca. -8V (oder weniger) anliegt.
Ist es Pin 2, dann ist dieser Pin der Tx Ausgang und muss mit
dem Rx Eingang am PC verbunden werden. Dieser liegt am PC
ebenfalls auf Pin 2 und du brauchst daher ein nicht gekreuztes
Kabel, ein sog. 1:1 Kabel (und damit dann auch Pin 3 -> Pin 3 )
Ist es Pin 3, dann ist dieser Pin mit Pin 2 am PC zu
verbinden. Dazu brauchst du ein gekreuztes Kabel, ein sog.
Nullmodem Kabel (und damit dann auch Pin 2 -> Pin 3)

Wenn das Kabel an beiden Enden eingesteckt ist, dann muss auf
den beiden Datenleitungen im Ruhezustand jeweils ca -8V oder
weniger anliegen. Wenn du das falsche Kabel hast, dann ist nur
eine Leitung bei -8V, die andere liegt ca. auf Masse.

von Willi W. (williwacker)


Lesenswert?

> Wenn du einen 9-poligen Stecker/Buchse hast, dann liegen die
> relevanten Signale an Pin 2/3.

Am 25-poligen Stecker auch. Ansonsten klasse Beschreibung !

von Peter P. (axis)


Lesenswert?

?????

jetzt habe ich mal mein DEV-Board einfach nur so angeschlossen, ohne 
dass ein Programm von mir läuft.
Dabei fand ich nur auf PIN2:
-5,5V. Auf allen anderen 0V.

Auf dem PC siehts folgendermaßen aus: Pin 3,4 und 7:
-6.6V

Sagt dieses Ergebins jemand etwas bezüglich des Kabels, das benötigt 
wird?

von holger (Gast)


Lesenswert?


von Peter P. (axis)


Lesenswert?

Ok, sorry Holger. Komme nur gerade irgendwie nicht weiter :-(

Dann hätte ich noch ne Frage: Ich habe so einen USB auf RS232 "Stecker". 
Mein Windows erkennt diesen auch als COM-Port. Dann sollte es doch 
funktionieren - da die Schnittstelle ein Männchen ist - dass ich das 
Teil so wie es ist in das Dev-Board stecke. Das müsste doch dann einer 
1:1 Verdrahtung gleichkommen, oder? Die Sechskantschrauben vom DEV-Board 
habe ich dazu von der Buchse entfernt.

von Karl H. (kbuchegg)


Lesenswert?

Peter Pippinger wrote:
> ?????
>
> jetzt habe ich mal mein DEV-Board einfach nur so angeschlossen, ohne
> dass ein Programm von mir läuft.
> Dabei fand ich nur auf PIN2:
> -5,5V. Auf allen anderen 0V.
>
> Auf dem PC siehts folgendermaßen aus: Pin 3,4 und 7:
> -6.6V
>
> Sagt dieses Ergebins jemand etwas bezüglich des Kabels, das benötigt
> wird?

Ja.
Welchen Teil der Beschreibung, dass jeweils der Pin der negative
Spannung führt mit dem Pin auf der Gegenseite der keine
Spannung führt (wir reden ausschliesslich von den Pins
2 und 3 auf beiden Seiten) verbunden werden muss, hast
du nicht verstanden?

von HomerS (Gast)


Lesenswert?

....vllt. sollte man ihm noch sagen, daß gegen Pin5(GND) gemessen werden 
sollte. Bei 25 pol. ist das der Pin 7.


Oder aber v24-Tester einschleifen.

guude
ts

von Peter P. (axis)


Lesenswert?

Hallo,

ich bin echt am verzweifeln hier. Habe jetzt alles mögliche probiert, 
aber ich checks einfach nicht :-(

Hat vielleich jemand ein simples "Hallo Welt" als Binary oder Source 
(egal ob ASM oder C), damit ich wenigstens mal das Board testen kann...

Ich habe die Datenleitungen in allen Möglichen Verknüpfungen zueinander 
gestellt. Mal 2+3 gekreuzt. Mal mit Pin5 mal ohne. Mal mit dem Rest 1:1 
usw. Im Hyperterminal wird absolut nicht dargestellt :-(

Die Einstellungen im Hyperterm:
9600-8-N-1 Flusssteuerung keine.

Hier der Code.
So wie es aussieht ergibt das Warten auf Ready in write_char obendrein 
noch ne Endlosschleife :-(

Vielleicht nochmal zum Kabel: Welche Pins werden überhaupt gebrauch?
Reichen PIN2 + PN3 + GND (PIN5)?

Vielen Dank für jeden Tip!
Peter

Hier die beiden Routinen (die Kommentare sind noch nicht überarbeitet):
-----------------------------------------------------------------------

write_char:
  // --------------------------------------------------------------  // 
warten auf ready
    // -------------------------------------------------------------- 
// Basisadresse setzen
  LDR r0, =USART_BASE
ready:
  LDR r1, [r0, #USART_US_CSR]
  AND r1, r1, #BIT1
  CMP r1, #BIT1
  BNE ready

  // Wert an Basisadresse + Offset schreiben
  ldr r8, =(0x6A & 0x1FF) // sollte ein "j" ergeben, oder?
  STR r8, [r0, #USART_US_THR]

    // -------------------------------------------------------------- 
// Zurueck aus Subroutine
  MOV pc, r14

init_usart0:
  // -------------------------------------------------------------- 
// Basisadresse setzen
  LDR r0, =PIO_BASE

  // zu schreibender Wert
  LDR r1, =(BIT5 | BIT6 | BIT21 | BIT22)

  // Wert an Basisadresse + Offset schreiben
  STR r1, [r0, #PIO_PDR]

   // zu schreibender Wert
  LDR r1, =(BIT5 | BIT6 | BIT21 | BIT22)
  // Wert an Basisadresse + Offset schreiben
  STR r1, [r0, #PIO_ASR]

  // zu schreibender Wert
  LDR r1, =0
  // Wert an Basisadresse + Offset schreiben
  STR r1, [r0, #PIO_BSR]

  // -------------------------------------------------------------- 
// Basisadresse setzen
  LDR r0, =PMC_BASE

  // zu schreibender Wert
  LDR r1, =1000000
  // Wert an Basisadresse + Offset schreiben
  STR r1, [r0, #PMC_PCER]

  // -------------------------------------------------------------- 
// Basisadresse setzen
  LDR r0, =USART_BASE

  // zu schreibender Wert
  LDR r1, =117
  // Wert an Basisadresse + Offset schreiben
  STR r1, [r0, #USART_US_BRGR]

  // zu schreibender Wert
  LDR r1, =0
  // Wert an Basisadresse + Offset schreiben
  STR r1, [r0, #USART_US_TTGR]

  // zu schreibender Wert
  // LDR r1, =100111000000b
  LDR r1, =0x08c0
  // Wert an Basisadresse + Offset schreiben
  STR r1, [r0, #USART_US_MR]

  // -------------------------------------------------------------- 
// Basisadresse setzen
  LDR r0, =PDC_BASE

  // zu schreibender Wert
  LDR r1, =(256 | 1)
  // Wert an Basisadresse + Offset schreiben
  STR r1, [r0, #PDC_PTCR]

  // -------------------------------------------------------------- 
// Basisadresse setzen
  LDR r0, =USART_BASE

  // zu schreibender Wert
  LDR r1, =0x50
  // Wert an Basisadresse + Offset schreiben
  STR r1, [r0, #USART_US_CR]

  // --------------------------------------------------------------  // 
Zurueck aus Subroutine
  MOV pc, r14

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ja, Pin 2, 3 und 5 werden benötigt. Auf Pin 5 (GND) kann ganz und gar 
nicht verzichtet werden, das ist das Bezugspotential.

Pin 3 (TxD) ist die Sendedatenleitung des PC. Die muss mit der 
Empfangsdatenleitung (RxD) Deines µC verbunden werden. Natürlich nicht 
direkt, sondern über einen geeigneten V24-Empfängerbaustein wie einen 
MAX232.

Pin 2 (RxD) ist die Empfangsdatenleitung des PC und ist mit der 
Sendedatenleitung (TxD) des µC zu verbinden. Auch hier nicht direkt, 
sondern über einen geeigneten V24-Senderbaustein wie einen MAX232.

Wenn Dein µC nicht sendet, muss zwischen seiner TxD-Leitung und Masse 
eine Spannung messbar sein. Dafür reicht ein simples Aldi-Multimeter. An 
der TxD-Leitung zwischen µC und MAX232 muss eine Spannung von 5V messbar 
sein, an der zwischen MAX232 und PC hingegen eine Spannung von etwa 
-10V. Bezugspotential ist natürlich Masse (GND).

von nop(); (Gast)


Lesenswert?

>- Muss die Baud-Rate auf beiden Geräten gleich eingestellt sein, oder
>funktionierts auch, wenn z.B. der Empfänger eine höhere eingestellt hat?

Die Baudrateneinstellung ist fakultativ, das sie von den Geraeten 
sowieso ignoriert wird. Die beiden Geraete waehlen die geeignete 
Baudrate selbst, da sie klueger als der Benutzer sind und zudem ueber 
geheimes Zusatzwissen verfuegen. ;-)

von Jörn P. (jonnyp)


Lesenswert?

Die Baudrate Sender / Empfänger muss gleich sein, denn ein Bit hat ja 
eine bestimmte Impulslänge die vom Receiver erkannt werden muss nachdem 
das Startbit erkannt wurde. Wäre die Baudrate des Empfängers doppelt so 
hoch wie die des Senders hätte der Empfänger schon 8 Bits "gesehen" 
obwohl der Sender erst 4 gesendet hat. Das dabei nur Mist rauskommt ist 
klar.
Ebenso muss Tx des Transmitters mit Rx des Receivers verbunden werden 
und Rx des Transmitters mit Tx des Receivers, auch wenn sich das jetzt 
blöd anhört. Basis der Verbindung ist natürlich die gemeinsame 
GND-Leitung.
Geht man von einer Standart PC-Schnittstelle aus, dann sind natürlich 
alle
Tx usw. an der gleichen Position und man braucht ein "gekreuztes" 
Nullmodem-Kabel um die Verbindungen Tx-Rx herzustellen.
Bei manchen Ports wie z.B. beim STK500 sind die Ports schon so 
verdrahtet, das man nur ein "grades" Kabel braucht.
Der logische Lo-Pegel entspricht +12 Volt auf der RS-232 (Kabel)Seite, 
ein logischer Hi-Pegel entspricht -12 Volt bei RS-232. Dabei kommt es so 
genau auf die Spannung gar nicht an:
Ein Bereich von +-3 bis +-18 Volt ist zulässig.
So, Ende des Romans.  ;-)

von Peter P. (axis)


Lesenswert?

JUHUUUUUU!!!

Es klappt! Wenn ich euch erzähle, woran es gelegen hat, werden sich 
einige bestimmt an den Kopf langen...

Ich hatte diverse BASE-Adressen in den Headerdefinitionen falsch. Jetzt 
läufts auf Anhieb! Die LED auf dem Board blinkt und ein Zeichen (j) 
erscheint im Hyperterminal :-)

Echt genial. Das beste daran ist, dass mir immer mehr klar wird, wie der 
kleine ARM funktioniert.

NO RISC NO FUN sag ich da blos :-)

Und fürs Protokoll:
die Datenleitungen (PIN2+3) und GND (PIN5) sind jetzt 1:1 verdrahtet.

von Simon K. (simon) Benutzerseite


Lesenswert?

Sorry, aber für mich sieht das eher so aus, als wüsstest du da nicht so 
ganz bescheid, was du da überhaupt machst, oder?

von Peter P. (axis)


Lesenswert?

Hab ich ja auch nicht behauptet. Für mich ist der ARM der Einstieg in 
die Mikrocontroller-Technik (nach wie vor als Hobby und nicht als 
Beruf!). Bislang wuste ich nichts über die Dinger. Und die paar Schritte 
zu meinem persönlichem Ziel, die ich bislang gegangen bin funktionieren 
soweit. Das reicht mir vollkommen und macht bis auf manche Rückschläge 
auch total Spaß.

So long,
Peter

von Peter P. (axis)


Lesenswert?

Hallo NG,

eine Frage hätte ich noch:

ich setzte doch hier die Baudrate vom USART.

LDR r0, =USART_BASE
LDR r1, =313
STR r1, [r0, #USART_US_BRGR]

wieso muss ich 313 schreiben? Mein Board läuft doch mit 18MHz. Damit 
sollte sich folgende Rechnung ergeben:

18000000 / (9600 * 16)

Das würde aber dann den Wert 117 zur Folge haben. Dann klappts 
allerdings nicht.

Also nicht falsch verstehen: Ich kann mit der Lösung leben, aber leider 
verstehe ich diesen Teil nicht ganz...

Gruß,
Peter

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.