Forum: Mikrocontroller und Digitale Elektronik UART<->RS232 ARM-Cortex<->Atmel?


von Ray M. (ray_m)


Angehängte Dateien:

Lesenswert?

hi @all,

ich versuche gerade einen arm-cortex mit einem atmel reden zu lassen

- i2c und spi fallen aus
- erster versuch war rx/tx (uart) direkt zu verbinden, das tut aber 
nicht
- also versuche ich rs232

von meinem 2ten versuch hab ich mal den schaltplan angehängt,
kann mir jemand einen tip geben warum das nicht funktioniert ???
auf dem foto ist das verwendete breakout ...

von U. M. (oeletronika)


Lesenswert?

Hallo,
> Ray M. schrieb:
> - erster versuch war rx/tx (uart) direkt zu verbinden,
> das tut aber nicht
Wenn die direkte Verbindung nicht geht, dann wird jede umständlichere 
Verbindung auf Umwegen auch nicht funktionieren.

Also kläre, warum die direkte Verbindung nicht geht.
- Ist Rxd und Txd tatsächlich korrekt über Kreuz  verdrahted worden?
- Kommt auf Txd übrhaupt ewas raus (mit Oszi prüfen)?
- Sind die Parameter auf beiden Seiten gleich?
- Sind irgend welche Zusatzbedingungen, z.B. Hardware-Handshakes, nicht 
beachtet worden?

Gruß Öletronika

von Ray M. (ray_m)


Lesenswert?

U. M. schrieb:
> Hallo,
>> Ray M. schrieb:
>> - erster versuch war rx/tx (uart) direkt zu verbinden,
>> das tut aber nicht
> Wenn die direkte Verbindung nicht geht, dann wird jede umständlichere
> Verbindung auf Umwegen auch nicht funktionieren.
>
> Also kläre, warum die direkte Verbindung nicht geht.
> - Ist Rxd und Txd tatsächlich korrekt über Kreuz  verdrahted worden?

ja ... 2 kabel mal ustecken um das zu testen ging ja schnell ;)

> - Kommt auf Txd übrhaupt ewas raus (mit Oszi prüfen)?

ja

> - Sind die Parameter auf beiden Seiten gleich?

welche parameter ??? 9600/8/N/1 meinst du ?

> - Sind irgend welche Zusatzbedingungen, z.B. Hardware-Handshakes, nicht
> beachtet worden?

wenn ich wüste von was du hier sprichst, könnte ich das checken,
leider bin ich kein elektroniker sonder quereinsteiger/bastler,
deshalb stell ich hier im forum eventuell auch so halbgare fragen ...

ich hab noch einen test gemacht
- an stelle des arm-cortex einen 2ten atmel genommen
- uart<-->uart kommunikation funktionert dann
- aber über die schaltung mit den pegelwandlern reden die beiden
  atmels auch nicht mit einander, deshal die annahme das hier was
  nicht stimmt

sinn der übung ist das die dinger über 2-3meter mit einander verbunden
werden sollen und dabei die übertragungsleitung so störunanfällig
wie möglich sein soll, dabei ist noch wichtig => je weniger kabel
je besser ;)

von Ray M. (ray_m)


Lesenswert?

wenn ich 2 arm-cortex via rx/tx-uart zusammenstecke funktioniert es
wenn ich 2 atmel via rx/tx-uart zusammenstecke funktioniert es

wenn ich einen atmel und einen arm-cortex via rx/tx-uart zusammenstecke
geht nix

ich nehme mal an das dies irgedwas mit unterschiedlichen ttl-pegeln
zu tun hat, deshalb wollte ich die schaltung mit den 2x max3232 
verwenden,
aber das tut auch nicht ...

wie bekomme ich eine communication von arm und atmel über
serial oder ttl-uart ans laufen, hat eventuell noch jemand einen tip ???

von Peter Z. (hangloose)


Lesenswert?

Mit welcher VCC Läuft den der AVR und der ARM?

von google (Gast)


Lesenswert?

Weißt Du wirklich, was Du da tust?

Anhand Deiner Zeichnung oben: Warum laufen die beiden (Arduino- bzw. 
ARM-)Platinen jeweils mit 5V und beide Max3232 mit 3,3V? Das kann so 
nicht gehen.

Der Max muss immer mit der Spannung (3,3V bzw. 5V) laufen, die die 
zugehörige Prozessorplatine als Pegel für RS232 hat. Der Cortex hat 
sicher keine 5V, (ev. mit Konverter?) sondern 3,3V, die muss sein 
MAX3232 auch bekommen.

von Ray M. (ray_m)


Lesenswert?

Peter Z. schrieb:
> Mit welcher VCC Läuft den der AVR und der ARM?

3.3V

von Ray M. (ray_m)


Lesenswert?

google schrieb:
> Weißt Du wirklich, was Du da tust?

nein, sonst würde ich ja nicht fragen ? ;)

> Anhand Deiner Zeichnung oben: Warum laufen die beiden (Arduino- bzw.
> ARM-)Platinen jeweils mit 5V und beide Max3232 mit 3,3V? Das kann so
> nicht gehen.

ok ...

> Der Max muss immer mit der Spannung (3,3V bzw. 5V) laufen, die die
> zugehörige Prozessorplatine als Pegel für RS232 hat. Der Cortex hat
> sicher keine 5V, (ev. mit Konverter?) sondern 3,3V, die muss sein
> MAX3232 auch bekommen.

ok, alles klar ... dann teste ich das mal mit allen beteiligten an
der gleichen spannungsversorgung ...

danke für den hinweis ...

von Ray M. (ray_m)


Lesenswert?

Ray M. schrieb:
> google schrieb:
>> Weißt Du wirklich, was Du da tust?
>
> nein, sonst würde ich ja nicht fragen ? ;)
>
>> Anhand Deiner Zeichnung oben: Warum laufen die beiden (Arduino- bzw.
>> ARM-)Platinen jeweils mit 5V und beide Max3232 mit 3,3V? Das kann so
>> nicht gehen.
>
> ok ...
>
>> Der Max muss immer mit der Spannung (3,3V bzw. 5V) laufen, die die
>> zugehörige Prozessorplatine als Pegel für RS232 hat. Der Cortex hat
>> sicher keine 5V, (ev. mit Konverter?) sondern 3,3V, die muss sein
>> MAX3232 auch bekommen.
>
> ok, alles klar ... dann teste ich das mal mit allen beteiligten an
> der gleichen spannungsversorgung ...
>
> danke für den hinweis ...

funktioniert auch nicht, ich hab es jetzt wie im schaltplan und alle
an der gleichen spannungsversorgung, also vcc von den uC's und +/-
von den max3232

komischerweise wird einer der beiden max3232 auch heiß ... wieso das ???

von U. M. (oeletronika)


Lesenswert?

Hallo,
> Ray M. schrieb:
> wenn ich 2 arm-cortex via rx/tx-uart zusammenstecke funktioniert es
> wenn ich 2 atmel via rx/tx-uart zusammenstecke funktioniert es
>
> wenn ich einen atmel und einen arm-cortex via rx/tx-uart zusammenstecke
> geht nix
da habe ich die Vermutung, dass die Schnittstellenparameter nicht 
übereinstimmen.
Bei 2 gleichartigen uC mit gleicher Programmierung würde es ja nicht 
auffallen, wenn z.B. die Baudrate daneben liegt.
Kannst das aber auch mit dem Oszi prüfen.
Bei 9600/8N/1 müßten die 10 Bits (8 Datenbits + Start- und Stoppbit) 
abzählbar sein und die Bitlänge von ca. 0,104ms sollte auch geprüft 
werden.
Prüfe auch, das die Pegel korrekt sind. Nicht dass die auf einer Seite 
negiert werden
-> Ruhepegel auf TTL-Seite = High ( ca. 3V...3,3V)
-> hinter RS232-Treiber = Low (-3V...-15V))

Bei unterschiedlichen uC wäre es aber reiner Zufall, dass beide zufällig 
die gleiche Abweichung haben.

Wenn du einen RS232-Treiber dran hast, könntest du auch eine Verbindung 
zu einem PC herstellen und die Übertragung mit einem Terminalprog. 
überprüfen.
Da würde sich eine falsche Baudrate auch sofort bemerkbar machen.

Den Hinweis mit der falschen Betriebsspannung an den RS232-Treibern hast 
du zur Kenntnis genommen? Wenn so ein chip heiß wird, gibt es normal 3 
Möglichkeiten
a) Der ist kaputt
b) Der wird am Ausgang überlastet.
c) Der ist falsch beschaltet.
Gruß Uwi

von Ray M. (ray_m)


Lesenswert?

U. M. schrieb:
> Hallo,
>> Ray M. schrieb:
>> wenn ich 2 arm-cortex via rx/tx-uart zusammenstecke funktioniert es
>> wenn ich 2 atmel via rx/tx-uart zusammenstecke funktioniert es
>>
>> wenn ich einen atmel und einen arm-cortex via rx/tx-uart zusammenstecke
>> geht nix
> da habe ich die Vermutung, dass die Schnittstellenparameter nicht
> übereinstimmen.
> Bei 2 gleichartigen uC mit gleicher Programmierung würde es ja nicht
> auffallen, wenn z.B. die Baudrate daneben liegt.
> Kannst das aber auch mit dem Oszi prüfen.

ok, ich bin kein elektroniker, ich kann nur gut software ;)
muss ich zu einem bekannten, der hat ein oszi ...

> Bei 9600/8N/1 müßten die 10 Bits (8 Datenbits + Start- und Stoppbit)
> abzählbar sein und die Bitlänge von ca. 0,104ms sollte auch geprüft
> werden.
> Prüfe auch, das die Pegel korrekt sind. Nicht dass die auf einer Seite
> negiert werden
> -> Ruhepegel auf TTL-Seite = High ( ca. 3V...3,3V)
> -> hinter RS232-Treiber = Low (-3V...-15V))
>
> Bei unterschiedlichen uC wäre es aber reiner Zufall, dass beide zufällig
> die gleiche Abweichung haben.
>
> Wenn du einen RS232-Treiber dran hast, könntest du auch eine Verbindung
> zu einem PC herstellen und die Übertragung mit einem Terminalprog.
> überprüfen.
> Da würde sich eine falsche Baudrate auch sofort bemerkbar machen.
>
> Den Hinweis mit der falschen Betriebsspannung an den RS232-Treibern hast
> du zur Kenntnis genommen?

ja ... hab ich auch schon behoben, hilft nur nix ;(

> Wenn so ein chip heiß wird, gibt es normal 3
> Möglichkeiten
> a) Der ist kaputt

dann wären 2 von 3 meiner neu erworbenen breakouts def. ;(

> b) Der wird am Ausgang überlastet.

was sagt mir das, "am ausgang überlastet", da hängt ja nix dran
außer wieder ein max3232

> c) Der ist falsch beschaltet.

das sollten die breakout-boards eigentlich verhindern,
ich als elektronik-anfänger nehme immer breakouts um die falsche
beschaltung eines ic's usw. in einem testaufbau zu vermeiden,
das finale schltplan-layout lass ich dann immer leute machen
die wissen was sie tun ;)

von Ray M. (ray_m)


Angehängte Dateien:

Lesenswert?

so hab ich jetzt mal alle hinweise eingearbeitet,
die aktuelle schaltung häng an

warum das nicht funktioniert versteh ich allerdings nicht,
dass ist doch keine hexerei ... ;(

von Peter Z. (hangloose)


Lesenswert?

Mach mal ein Foto von deinem Aufbau.

von google (Gast)


Lesenswert?

Jetzt ist der Zeitpunkt, dass Du mehr zu den benutzten Controllerboards 
sagst. Vielleicht hat der ARM ja bereits einen Pegelwandler drauf?

Außerdem sagte ich nicht, dass Du alles an 5V anschließen sollst. Du 
solltest schauen, mit welchen Pegeln Deine Prozessoren an der Uart 
arbeiten und die Wandler dementsprechend mit Spannung versorgen.

Hast Du mal Dein Breakout-Board mit dem Datenblatt des Max3232 
verglichen?

von Ray M. (ray_m)


Lesenswert?

nochmal zur eigentlichen frage zurück ;)

ziel ist es ja nur einen atmel mit einem arm-cortexM4 zu verbinden,
leitungslänge ca. 2meter

  - 2 atmels (mini pro & nano) einfach via rx/tx (ttl) zu verbinden geht
  - 2 arm-cortexM4 einfach via rx/tx (ttl) zu verbinden geht
  - 1 atmel mit 1 arm-cortexM4 einfach via rx/tx (ttl) zu verbinden geht 
nicht ;(

meine annahme war das die uart's wegen irgendwas nicht miteinander klar
kommen, unterschiedliche ttl-pegel oder was weis ich ...

also war der ansatz, machen wir einfach einen rs232/ttl-wandler an jeden
und da ein 2meter serial-kabel dazwischen und gut ist ... aber das geht
wie gesagt auch nicht ...

scheint ich hab hier irgendwas nicht ganz verstanden ??? ;(

von Ray M. (ray_m)


Lesenswert?

google schrieb:
> Jetzt ist der Zeitpunkt, dass Du mehr zu den benutzten Controllerboards
> sagst. Vielleicht hat der ARM ja bereits einen Pegelwandler drauf?

1x arduino mini pro (3,3V)
1x arduino mini pro (5V)
1x arduino nano (5V)
1x Teensy 3.1

> Außerdem sagte ich nicht, dass Du alles an 5V anschließen sollst. Du
> solltest schauen, mit welchen Pegeln Deine Prozessoren an der Uart
> arbeiten und die Wandler dementsprechend mit Spannung versorgen.

ahh, wenn der uart mit 3.3V arbeitet muss auch der pegelwandler
mit 3.3V arbeiten, bei 5V dementsprechend ... richtig ?

> Hast Du mal Dein Breakout-Board mit dem Datenblatt des Max3232
> verglichen?

nein, werde ich jetzt sofort nachholen ...

das datenblatt den max3232cse sagt nur
    Versorgungsspannung  3,3 - 5,5 VDC
    Eingangsspannung     0,4 - 4,9 VDC
    Ausgangsstrom        ±0,05µ A
    Ausgangsspannung     ±5,4 VDC

was fange ich damit an ?

von Ray M. (ray_m)


Lesenswert?

Ray M. schrieb:
> google schrieb:
>> Jetzt ist der Zeitpunkt, dass Du mehr zu den benutzten Controllerboards
>> sagst. Vielleicht hat der ARM ja bereits einen Pegelwandler drauf?
>
> 1x arduino mini pro (3,3V)
> 1x arduino mini pro (5V)
> 1x arduino nano (5V)
> 1x Teensy 3.1

1x Teensy LC

hatte ich noch vergessen ...

von Ray M. (ray_m)


Lesenswert?

liege ich richtig das alle controllerboards eigentlich immer intern
mit 3.3V arbeiten und einige nur 5V tolerant sind ...
wäre es dann nicht wie in meinem ersten plan eigentlich richtig,
controllerboards an 5V und pegelwandler an 3.3V ???

jetzt steh ich komplett im wald ;(

von Ray M. (ray_m)


Angehängte Dateien:

Lesenswert?

Ray M. schrieb:
> liege ich richtig das alle controllerboards eigentlich immer intern
> mit 3.3V arbeiten und einige nur 5V tolerant sind ...
> wäre es dann nicht wie in meinem ersten plan eigentlich richtig,
> controllerboards an 5V und pegelwandler an 3.3V ???
>
> jetzt steh ich komplett im wald ;(

zum thema pegelwandler-breakout hab ich das im netz gefunden,
was mich zu der 3.3V/5V trennung im ersten schaltplan veranlasste

von Ray M. (ray_m)


Lesenswert?

Ray M. schrieb:
> Ray M. schrieb:
>> liege ich richtig das alle controllerboards eigentlich immer intern
>> mit 3.3V arbeiten und einige nur 5V tolerant sind ...
>> wäre es dann nicht wie in meinem ersten plan eigentlich richtig,
>> controllerboards an 5V und pegelwandler an 3.3V ???
>>
>> jetzt steh ich komplett im wald ;(
>
> zum thema pegelwandler-breakout hab ich das im netz gefunden,
> was mich zu der 3.3V/5V trennung im ersten schaltplan veranlasste

das eigentliche endziel, von den verständnisversuchen dazwischen,
ist  teensy3.1 <---> arduino mini pro (5V variante)

von Ray M. (ray_m)


Lesenswert?

wie lang darf eigentlich ein kabel sein wenn ich die beiden
controllerboards einfach via rx/tx-ttl zusammenhänge ?
gehen da 2-2.5 meter ???

wenn ich das thema arm <---> atmel nicht auf die reihe bekomme
nehm ich halt auf beiden seiten einen teensy und fertig ...

nur verstehen würde ich doch irgendwie gern ...

von U. M. (oeletronika)


Lesenswert?

Hallo,
> Ray M. schrieb:
> meine annahme war das die uart's wegen irgendwas nicht miteinander klar
> kommen, unterschiedliche ttl-pegel oder was weis ich ...
TTL-Pegel liegen normal zwischen 0V und 5V.

Wenn uC aber mit 3,3V betrieben werden, dann ist der Pegel eben zwischen 
0V und 3,3V.

Die High-Pgel über 3V reichen aber normal aus, um damit auch 
TTL-Eingänge schalten zu können.
Umgekehrt muß man prüfen, ob uC mit Ucc=3,3V TTL-Pegel bis 5V 
tolerieren.
Falls nicht, kann man den Pegel auch einfach mit Spannungteiler 
anpassen.

Das alles ist solange recht unkritisch, wie man langsame Signale hat.

> also war der ansatz, machen wir einfach einen rs232/ttl-wandler an jeden
> und da ein 2meter serial-kabel dazwischen und gut ist ... aber das geht
> wie gesagt auch nicht ...
Und ich habe dir oben schon mal geschrieben, dass die komplizierte und 
umständliche Lösung erst recht nicht funktioniert, wenn die einfache und 
direkte schon nicht geht.
Du solltest also das Problem fixen und nicht zusätzlichen Schnickschnack 
dran pappen, ohne das Problem gefunden zu haben.

Und nochmal:
Zum Testen kannst du an einen uC auch den RS232-Treiber dran machen und 
dann versuchen zu einem COM-Port von PC mittel Terminalprogramm 
Verbindung aufzunehmen.
Da kannst du die Kommunikation in beide Richtungen leicht testen.
Gruß Öletronika

von Joachim B. (jar)


Angehängte Dateien:

Lesenswert?

Ray M. schrieb:
> nur verstehen würde ich doch irgendwie gern ...

dein Arduinino arbeitet wohl default mit 5V! das wäre die Spannung für 
den MAX3232

dein Arm arbeitet default mit 3,3V das wäre die Spannung für seinen 
MAX3232, jeder braucht seinen eigenen!

dann kannst du die RS232 Seiten über Kreuz verbinden.

einen 5V arduino an einen mit 3,3V befeuerten MAX Wandler zu klemmen ist 
ne komische Idee.

Wenn ein MAX 3232 schon ohne Versorgung an eine echte RS232 geklemmt 
wird kann der schon mal in den Himmel geschickt werden, ist mir auch 
schon passiert, aber die China Leute hatten mir auf eine verspätete 5 
Stück Lieferung schon mal 27 dieser Platinen kostenlos nachgesendet, ich 
denke da habe ich genug für die nächten Jahre.

Einen PI mit 3,3V an einem Atmel mit 5V habe ich dauerhaft so 
beschaltet.

von Ray M. (ray_m)


Lesenswert?

danke an alle die versucht haben in mein gehirn licht zu bringen,
für mich ist das zu viel juju ...

ich hab jetzt den arduino weggeschmissen, nur noch arm-cortex-m4
im system, da funktiert rx/tx-uart ohne probleme und da mir aufgefallen
ist das später ja noch mehr devices kommen könnten, hab ich einfach an
jeden einen SN65HVD230D dran gehängt, dann noch 2x 120ohm wiederstände
und fertig ist der canbus ...
funktioniert mit der flexcan-lib perfekt ...
jetzt können alle devices schön auf den bus schreiben und z.b.
die display-einhet greift sich ab was sie braucht und zeigt es an ...

kann man bauen ohne ein elektonikstudium zu machen ;) ;) ;)

danke nochmal für eure hilfe ...

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.