Forum: Mikrocontroller und Digitale Elektronik Probleme mit USART Ausgabe über SN75176


von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

Ich bin gerade dabei zu versuchen mir einen ArtNet Node selber zu bauen. 
Als Microcontroller werkelt ein STM32F103C8T6 auf dem Board. Die 
Ethernetanbindung geschieht mittels ENC28J60. Auf einem BluePill Board 
hatte ich zuerst die Ausgabe von drei DMX Universen mittels USART1 bis 
USART3 über DMA realisiert, das funktionierte auch soweit. Später auf 
der richten Platine wird die USART dan über einen SN75176 ausgegeben. 
Als zweiten Schritt habe ich die Ethernetschnittstelle in Betrieb 
genommen, auch das hat ohne große Probleme funktioniert.

Beim Ausprobieren der Zielfunktion an einem DMX Gerät (auf dem 
Ziellayout) musste ich dann feststellen, dass das DMX Gerät nicht 
reagiert. Also Oszi dran und siehe da, keine Daten auf dem RS485 Bus. 
Nächsten Schritt Oszi an den PIN 4 des SN75176. Auch da nur sporadische 
Spikes und nichts von dem was beim ausprobieren auf dem BluePill Board 
zu sehen war.

Als nächstes habe ich mein Salea Logic Analyzer an PIN 4 des SN75176 
geklemmt und den zweiten Kanal an PIN 7 des SN75176 (Output B). Und 
siehe da die USART gibt korrekte Daten aus. Sobald ich aber die 
Verbindung von PIN 4 zum Salea trenne, werden auch über die USART keine 
Daten mehr ausgegeben. Nach erneutem anklemmen funktionier alles wieder 
sofort.

Wäre super, wenn jemand einen Fingerzeig hätte, wo ich Bockmist gebaut 
habe das dieses Verhalten erklären könnte.

Habe ich an dem SN75176 PullUp Widerstände vergessen? Nach meinen 
bisherigen Recherchen sind diese eigentlich nicht nötig.

Gruß,
Markus

von Purzel H. (hacky)


Lesenswert?

Der75176 ist ein RS485 Treiber, eigentlich der Schlechtestmoegliche. Er 
zieht am Meisten Strom.
Nein, der braucht keine Pullups. Wie ist er denn verschaltet ?

von Markus S. (acepilot)


Lesenswert?

Wie meinst du das mit verschaltet?
Plan habe ich ja oben angehängt. Er bekommt wie im Datenblatt gefordert 
5V Versorgung. Direkt in der nähe hat er einen 100nf Kerko. Ansonsten 
ist normal TX und RX angeschlossen und DE und RE können programmatisch 
auf High Level gezogen werden.

von Purzel H. (hacky)


Lesenswert?

Sorry, ich hab den Schaltplan uebersehen. Es ist bekannt, dass der 75176 
heftig Strom zieht ? ich hab etwas wie 40mA ohne Last im Kopf. Hast du 
so viel ?
Nimm einen AD483 oder so anstelle. der zieht weniger als 1mA.
Die Status Led zieht auch etwas viel..

: Bearbeitet durch User
von Markus S. (acepilot)


Lesenswert?

Das er etwas mehr braucht als aktuellere Versionen, ja. Der Buffer Cap 
hat 100nF wie auch im Datenblatt gefordert. Die Spannung an den 75176 
hatte ich auch schon oszillografiert, aber dort keine Einbrüche 
feststellen können.

Mir fehlt auch gerade das Bindeglied zu den fehlenden Daten an dem TX 
Pin des Microcontrollers.In dem Bild von der Salea Software sieht man, 
dass das PIN Toggeln für die DMX Startbedingung jedes mal funktioniert 
hat. Direkt danach wird der IO Pin wieder als Usart TX definiert und per 
DMA sollten 512 Byte rausgeschoben werden.

Warum passiert das nur, wenn ich wie oben beschrieben den Logic Analyzer 
dranklemme. Ist diese ab sieht man an dem PIN 4 (Usart TX) nur das Pin 
Toggeln der DMX Startbedingung.

von TomA (Gast)


Lesenswert?

Hallo Markus,

natürlich braucht RS485 Abschlusswiderstände. Der Wert hängt vom 
Wellenwiderstand der verwendeten Leitung ab. Bei zwei verdrillten 
Einzeladern sollten 150Ohm bis 180Ohm richtig sein. Dieser Widerstand 
muss am physikalischen Anfang und am physikalischen Ende der Leitung 
sein. In jeder RS485 Verbindung sind also zwei dieser Widerstände zu 
finden - am Anfang und am Ende der Leitung, unabhängig von der 
Leitungslänge und Anzahl der Teilnehmer. Stichleitungen haben keinen 
Abschlusswiderstand.

Gruß Tom

von Dietrich L. (dietrichl)


Lesenswert?

Markus S. schrieb:
> Warum passiert das nur, wenn ich wie oben beschrieben den Logic Analyzer
> dranklemme.

Sind dir GNDs aller Beteiligten richtig miteinander verbunden?
Und wie sind die Erdungsverhältnisse? Ist alles potenzialfrei oder kann 
es Kurzschlüsse geben?

von spess53 (Gast)


Lesenswert?

Hi

>natürlich braucht RS485 Abschlusswiderstände.

Auch wenn es nur darum geht, an einem Ausgang eine Spannung zu 
auszugeben?

MfG Spess

von Purzel H. (hacky)


Lesenswert?

Bei hinreichen kurzen Leitungen, <3m, geht es auch ohne 
Abschlusswiderstaende.
Ein Geraet anklemmen kann kapazitiv wirken, oder GND verbinden.

von TomA (Gast)


Lesenswert?

Da gebe ich dir Recht, vor allem vor dem Hintergrund das Widerstände 
schwer zu beschaffen, und extrem teuer sind. :)

von Markus S. (acepilot)


Lesenswert?

Dietrich L. schrieb:
> Sind dir GNDs aller Beteiligten richtig miteinander verbunden?
> Und wie sind die Erdungsverhältnisse? Ist alles potenzialfrei oder kann
> es Kurzschlüsse geben?

Ich habe gestern auch daran gedacht und nachgemessen ob die GND's vom 
SN751176, Controller, Linearregler, etc. mit einander verbunden sind. 
Bedingt durch Messungen auf Lötstellen habe ich maximal einen 
Wiederstand von 0,7 Ohm Messen können. Das würde ich als verbunden 
ansehen.

Meine Platine wird potentialfrei betrieben. Um dies zu testen, habe ich 
sie gestern auch mal über eine Powerbank versorgen lassen. Leider auch 
ohne Erfolg. In wie weit die angeschlossenen Geräte eine sauber 
Potentialtrennung besitzen habe ich nicht gemessen. Sollte es aber da zu 
einem Kurschluss kommen hätte ich es sicher bemerkt.

Aber das Phänomen das die Daten nicht am TX Pin des Controllers 
ausgegeben werden, habe ich ja auch, wenn kein DMX steuerbares Gerät 
angeschlossen ist.
Somit verbleibt nur die eine Spannungsversorgung der Platine. Sicher 
könnte man nun sagen das ich ja über den angeschlossenen Logic Analyzer 
noch ein mögliches anderes Potential bzw. andere Masse mit ins System 
bringe. Aber es reicht sogar aus diesen an den Testpins anzuklemmen ohne 
ihn per USB an den Rechner anzuschließen. Alles sehr komisch.

von Markus S. (acepilot)


Lesenswert?

TomA schrieb:
> Da gebe ich dir Recht, vor allem vor dem Hintergrund das
> Widerstände
> schwer zu beschaffen, und extrem teuer sind. :)

Da magst du recht haben, aber bei 20cm Kabellänge zum Gerät sollte es 
zum testen auch ohne gehen. Aber ich habe es auch mit 120 Ohm 
Abschlusswiderstand an dem RS485 probiert. Leider auch ohne Erfolg, 
funktion nur mit Logic Analyzer an Pin 4 :-(

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Markus S. schrieb:
> Plan habe ich ja oben angehängt. Er bekommt wie im Datenblatt gefordert
> 5V Versorgung. Direkt in der nähe hat er einen 100nf Kerko. Ansonsten
> ist normal TX und RX angeschlossen und DE und RE können programmatisch
> auf High Level gezogen werden.

 BluePill arbeitet mit 3V3, d.h. Tx geht auf max. 2.9V.
 Also sollte man mit BluePill nicht auf High Level ziehen, sondern
 auf GND, ergo Pull Up Widerstände (nach 5V oder 3V3, egal) dran und
 sehen was dann passiert.

: Bearbeitet durch User
von TomA (Gast)


Lesenswert?

Hallo Markus,

ich habe kurze Verbindungen zum testen auch schon ohne Widerstände 
betrieben, Stichleitungen werden bis zu einer Länge von ca. 1,5m ja auch 
problemlos ohne Widerstand benutzt.

Sind deine Signalpegel denn in Ordnung? Der 0-Pegel wird durch eine 
Differenzspannung zwischen D+ und D- von < 0,2V und der 1-Pegel durch > 
0,2V dargestellt. Zum testen kann man mit "Ziehwiderständen" am Master 
(~10k, D+ gegen GND, D- gegen VCC) ein wenig nachhelfen, um den Fehler 
einzugrenzen.

Viel Erfolg und Gruß. Tom

von Markus S. (acepilot)


Lesenswert?

Marc V. schrieb:
> BluePill arbeitet mit 3V3, d.h. Tx geht auf max. 2.9V.
>  Also sollte man mit BluePill nicht auf High Level ziehen, sondern
>  auf GND, ergo Pull Up Widerstände (nach 5V oder 3V3, egal) dran und
>  sehen was dann passiert.

Ja daran habe ich auch schon gedacht, der Controller auf dem Ziellayout 
läuft natürlich auch mit 3V3. Ich würde es ja verstehen, wenn die Pegel 
nicht hoch genug wären damit der RS485 Treiber sie erkennt, aber selbst 
mit Oszilloskop sehe ich ich an dem Pin keinerlei Daten. Flascher Pegel 
wäre da einfach gewesen. Aber ich werde trotzdem mal einen Pullup 
Widerstand ausprobieren. Oder ist für dich erklärlich warum dann 
garnichts zu sehen ist.

von Markus S. (acepilot)


Lesenswert?

TomA schrieb:
> Hallo Markus,
>
> ich habe kurze Verbindungen zum testen auch schon ohne Widerstände
> betrieben, Stichleitungen werden bis zu einer Länge von ca. 1,5m ja auch
> problemlos ohne Widerstand benutzt.
>
> Sind deine Signalpegel denn in Ordnung? Der 0-Pegel wird durch eine
> Differenzspannung zwischen D+ und D- von < 0,2V und der 1-Pegel durch >
> 0,2V dargestellt. Zum testen kann man mit "Ziehwiderständen" am Master
> (~10k, D+ gegen GND, D- gegen VCC) ein wenig nachhelfen, um den Fehler
> einzugrenzen.
>
> Viel Erfolg und Gruß. Tom

Das meine ich eigentlich auch.

Die Pegel der D+ und D- Leitungen habe ich noch nicht kontrolliert, da 
für mich der Fehler ja schon eine Station früher auftritt, nähmlich am 
Dateneingang des RS485 Treibers wo ohne Logic Analyzer keinerlei TX 
Signal zu sehen ist. Aber ich werde natürlich auch mal kontrollieren wie 
die Pegel der RS485 Leitungen sind, nur um dort ein Problem 
auszuschließen.

Weitere Ideen sind natürlich immer willkommen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Markus schrieb:
> Nächsten Schritt Oszi an den PIN 4 des SN75176. Auch da nur sporadische
> Spikes und nichts von dem was beim ausprobieren auf dem BluePill Board
> zu sehen war.

Markus S. schrieb:
> wäre da einfach gewesen. Aber ich werde trotzdem mal einen Pullup
> Widerstand ausprobieren. Oder ist für dich erklärlich warum dann
> garnichts zu sehen ist.


 Ja, was denn nun - garnichts oder sporadische Spikes ?

 Garnichts kann ich mir gar nicht erklären, ausser mit Kurzschluss am
 Pin 4, was aber unmöglich ist, da mit LA alles in Ordnung.
 Sporadische Spikes aber schon.

 Mit Oszi - sporadische Spikes - Widerstand im MOhm Bereich, Pegel nicht
 beeinflusst, also fast kein Einfluss.

 Mit LA - funktioniert alles wie es soll - Widerstand in KOhm Bereich,
 definierter Pegel durch Pull Up im LA.

von TomA (Gast)


Lesenswert?

Hallo Markus,

wenn es schon auf der µC-Seite des Treibers Probleme gibt, dann kann es 
auch an der Richtungsumschaltung liegen, fehlerhaft oder falsches 
Timing. Wenn dort kein Signal zu messen ist, ist der Treiber 
möglicherweise auf Empfang geschaltet und bügelt das Signal nieder.

Wird die Richtungsumschaltung denn korrekt angesteuert? Wie ich das im 
Datenblatt sehe muss zum senden Pin3 (DE) High-Pegel aufweisen. Wenn man 
diesen Pin3 mit Pin2 (/RE) verbindet, wird gleichzeitig der Empfang 
deaktiviert. Da es mit angeschlossenem Messgerät funktioniert,lässt 
vermuten dass ein Timing- oder Kontaktproblem vorliegt.

Gruß. Tom

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

TomA schrieb:
> wenn es schon auf der µC-Seite des Treibers Probleme gibt, dann kann es
> auch an der Richtungsumschaltung liegen, fehlerhaft oder falsches
> Timing. Wenn dort kein Signal zu messen ist, ist der Treiber
> möglicherweise auf Empfang geschaltet und bügelt das Signal nieder.

 Weisst du überhaupt wie so ein Treiber funktioniert ?

 Was hat Richtungsumschaltung mit Signal am Pin 4 zu tun ?

 Was hat fehlerhaftes Timing mit Signal am Pin 4 zu tun ?


TomA schrieb:
> deaktiviert. Da es mit angeschlossenem Messgerät funktioniert,lässt
> vermuten dass ein Timing- oder Kontaktproblem vorliegt.

 Manoman.

 Bitte, nicht über Sachen reden, von denen du keine Ahnung hast.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Markus S. schrieb:
> Widerstand ausprobieren. Oder ist für dich erklärlich warum dann
> garnichts zu sehen ist.


 Hast du alle 3 USARTs nachgemessen ?

 Verhalten sich alle 3 genauso ?

von TomA (Gast)


Lesenswert?

Hallo Marc,

kannst du mir verraten wie du eine Halbduplex-Schnittstelle, wie RS485, 
ohne Umschaltung in zwei Richtungen betreiben willst? Wozu denkst du hat 
der Baustein ein aktivieren/deaktivieren von Sender und Empfänger?

Heiland, Mailand, Thailand und andere Weibsbilder, hier sind wieder die 
Richtigen versammelt.

Dann wünsche ich euch noch viel Spass. :)

Gruss. Tom

von Markus S. (acepilot)


Lesenswert?

Marc V. schrieb:
> Was hat Richtungsumschaltung mit Signal am Pin 4 zu tun ?
Wie schon von Tom geschrieben gibt es doch dafür den Pin 2 & 3 um den 
Receiver oder Transmitter zu aktivieren bzw. zu deaktivieren. Oder sehe 
ich da etwas vollkommen falsch, wenn ja dann wäre ich dankbar für 
erhellende Worte, man lernt ja bekanntlich nie aus.

>  Was hat fehlerhaftes Timing mit Signal am Pin 4 zu tun ?
Wie kommst du auf fehlerhaftes Timing im Bezug auf das zu erwartenden TX 
Signal am Pin 4 des SN75176? Ist es nicht so, dass wenn man per DMA 512 
Bytes auf die USART rauschiebt diese dort auch zu sehen sein sollten? 
Diese liegen dort eben nicht an, es sei denn ich klemme an genau diesen 
Pin 4 eben auch den Logic Analyzer

Marc V. schrieb:
> Hast du alle 3 USARTs nachgemessen ?
> Verhalten sich alle 3 genauso ?
Ich habe aktuell nur zwei von denen bestückt und diese Verhalten sich 
100% identisch. Also muss da irgendein System hinter stecken.

von Markus S. (acepilot)


Lesenswert?

TomA schrieb:
> Wird die Richtungsumschaltung denn korrekt angesteuert? Wie ich das im
> Datenblatt sehe muss zum senden Pin3 (DE) High-Pegel aufweisen. Wenn man
> diesen Pin3 mit Pin2 (/RE) verbindet, wird gleichzeitig der Empfang
> deaktiviert. Da es mit angeschlossenem Messgerät funktioniert,lässt
> vermuten dass ein Timing- oder Kontaktproblem vorliegt.

Habe ich mehrmals kontrolliert und würde sagen ja ist korrekt. Genau 
deine Ausführung habe ich auch so aus dem Datenblatt interpretiert. Gehe 
dem aber auch nochmal nach und kontrolliere alles von vorne.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Markus S. schrieb:
>> Was hat Richtungsumschaltung mit Signal am Pin 4 zu tun ?
> Wie schon von Tom geschrieben gibt es doch dafür den Pin 2 & 3 um den
> Receiver oder Transmitter zu aktivieren bzw. zu deaktivieren. Oder sehe
> ich da etwas vollkommen falsch, wenn ja dann wäre ich dankbar für
> erhellende Worte, man lernt ja bekanntlich nie aus.

 Pin 4 ist direkt verbunden mit Tx am BluePill (Ich hoffe es ist so ?).
 Was hat Richtungsumschaltung mit Hardware-Tx am BluePill  zu tun ?

Markus S. schrieb:
>>  Was hat fehlerhaftes Timing mit Signal am Pin 4 zu tun ?
> Wie kommst du auf fehlerhaftes Timing im Bezug auf das zu erwartenden TX
> Signal am Pin 4 des SN75176? Ist es nicht so, dass wenn man per DMA 512

 Ich bin nicht auf fehlerhaftes Timing gekommen, das war der grosse
 Experte TomA.


 P.S.
 Falls STM32_ArtNode.png stimmt und ARM_Tx direkt mit Pin4 am 75176
 verbunden ist, kann es nur folgendes sein:
  a) fehlerhafte Init Routine (unwahrscheinlich)
  b) Undefinierte Tx Pegel (sehr wahrscheinlich)

 P.P.S.
 Warum ist es so schwer, ein 10K Widerstand zwischen Pin 4 und Vcc
 anzuschliessen und damit diese Fehlerursache entweder zu bestätigen
 oder auszuschliessen ?

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

TomA schrieb:
> kannst du mir verraten wie du eine Halbduplex-Schnittstelle, wie RS485,
> ohne Umschaltung in zwei Richtungen betreiben willst? Wozu denkst du hat
> der Baustein ein aktivieren/deaktivieren von Sender und Empfänger?

 Was hat Umschaltung mit Signal am Pin 4 zu tun ?

TomA schrieb:
> Heiland, Mailand, Thailand und andere Weibsbilder, hier sind wieder die
> Richtigen versammelt.

 Kann ich nur bestätigen.

von Markus (Gast)


Lesenswert?

Marc V. schrieb:
> P.P.S.
>  Warum ist es so schwer, ein 10K Widerstand zwischen Pin 4 und Vcc
>  anzuschliessen und damit diese Fehlerursache entweder zu bestätigen
>  oder auszuschliessen ?

Nein es ist nicht schwer, aber ich hatte aus dem Büro geschrieben und 
die Leiterplatte lag zu Hause, damit war ein direktes ausprobieren nicht 
möglich.
Die Init Routinen stimmen, da hast du richtig vermutet.

Nach Anschluss eines PullUp funktioniert das ganze sofort. Somit hat, 
wie du richtig vermutet hast, der Logic Analyzer den Pin auf High Level 
gezogen.

Jetzt wäre es noch nett, wenn jemand kurz erklären könnte, gerne auch 
mit konkretem Hinweis auf das Datenblatt, wieso ein PullUp überhaupt 
erforderlich ist. Ich möchte es ja gerne komplett verstehen um dazu zu 
lernen. Rein von der Initialisierung des Pins (GPIO_Mode_AF_PP) wäre ich 
nicht davon ausgegangen einen Pullup zu benötigen.

Danke für die bisherig geleistete Hilfe zur Lösungsfindung.

Gruß,
Markus

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Warum nimmst du denn keinen modernen, für direkte 3,3V Anbindung 
geeigneten Tranceiver? Maxim bietet dafür z.B. die MAX3485 oder, wenns 
klein sein muss, z.B. den MAX3362.
https://www.maximintegrated.com/en/products/interface/transceivers/MAX3485.html

Damit eliminierst du die Probleme mit I/O Spannungen und musst dir auch 
nicht so viel Gedanken über die 5V Toleranz der UART RXD Pins machen.
Die Zeiten des alten 75176 sind m.E. bei 3,3V Designs vorbei.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Markus schrieb:
> lernen. Rein von der Initialisierung des Pins (GPIO_Mode_AF_PP) wäre ich
> nicht davon ausgegangen einen Pullup zu benötigen.

 Wie GPIO_Mode_AF_PP ?
 Das kann höchstens Alternate Function sein, aber solange der USARTx
 aktiv ist, hat das keine Bedeutung.

Markus S. schrieb:
> Direkt danach wird der IO Pin wieder als Usart TX definiert und per

 Was bedeutet wieder als Usart TX definiert ?
 Warum fummelst du an dem Tx-Pin überhaupt rum ?

Matthias S. schrieb:
> Warum nimmst du denn keinen modernen, für direkte 3,3V Anbindung
> geeigneten Tranceiver? Maxim bietet dafür z.B. die MAX3485 oder, wenns

 Genau.

: Bearbeitet durch User
von Markus (Gast)


Lesenswert?

Matthias S. schrieb:
> Warum nimmst du denn keinen modernen, für direkte 3,3V Anbindung
> geeigneten Tranceiver? Maxim bietet dafür z.B. die MAX3485 oder, wenns
> klein sein muss, z.B. den MAX3362.

Die SN75176 waren noch im Bestand, deswegen fiel die Wahl auf die etwas 
angestaubten Käfer. Habe mir aber mittlerweile auf euer Anraten MAX3485 
geordert.

Laut Datenblatt "Absolute Maximum Ratings" ist ein maximaler Vcc von 7V 
möglich und durch die Pin Kompatibilität könnte ich diese nach Erhalt 
direkt in der selben Applikation testen.

Würde Eurer Meinung der MAX3485 einen PullUp Widerstand auf den TX 
Leitungen überflüssig machen?

von Markus (Gast)


Angehängte Dateien:

Lesenswert?

Marc V. schrieb:
> Was bedeutet wieder als Usart TX definiert ?
>  Warum fummelst du an dem Tx-Pin überhaupt rum ?

Um die Startbedingung für ein DMX Frame zu erzeugen. Low Break von ca. 
100us mit nachfolgendem High für 12us. Danach dann über Usart die 512 
Byte mit 250kBaut und 2 Stoppbits.

von A. B. (Gast)


Lesenswert?

Hm, abgesehen von dem "Alters-" bzw. 5V/3V-Problem:

Der TX-Ausgang ist dann wohl als Open-Drain konfiguriert. Da braucht's 
halt einen externen Pull-up (der interne, falls aktiviert, wird 
automatisch abgeschaltet, wenn ein Pin als Ausgang verwendet wird).

Die m. E. sinnvollere Variante wäre aber D und R (über Widerstand) vom 
Transceiver beide an TX vom STM anschließen, und in USART_CR3 dann 
HDSEL=1 zu setzen. Den TX-Pin als Open-Drain UND Alternate und extern 
noch einen Pull-up. Die RX-Pins sind dann anderweitig verwendbar.

von Thomas E. (picalic)


Lesenswert?

Servus,

blöde Frage: wenn Dein Board Potentialfrei ist - hast Du auch die Masse 
vom Logik-Analysator verbunden?

Wie ist Dein USART konfiguriert? Evtl. Halbduplex oder als Ausgang Open 
Drain?
Evtl. Sendet der UART dann nichts, wenn er die Tx-Leitung als "busy" 
erkennt.
In der Standard-Konfiguration (Vollduplex, Pin als Push/Pull) müsste der 
USART ja den Tx-Pin immer aktiv treiben, da brauchts keinen Pull-Up.

von Markus S. (acepilot)


Lesenswert?

Ja die Masse des Logic Analyzer wurde auch verbunden. Laut meinem 
Verständnis und nachschauen im DB sollte der TX Pin ohne PullUp 
funktionieren. Soweit die Theorie in der Praxis funktioniert es gerade 
nur mit PullUp.

Anbei die Initialisierung der IO's für den ersten USART.
1
  GPIO_InitStructure.GPIO_Pin = usartDMX1_TX;
2
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
3
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
4
  GPIO_Init(usartDMX1_Port, &GPIO_InitStructure);
5
6
  GPIO_InitStructure.GPIO_Pin = usartDMX1_RX;
7
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
8
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
9
  GPIO_Init(usartDMX1_Port, &GPIO_InitStructure);
10
11
  USART_InitStructure.USART_BaudRate            = 250000;
12
  USART_InitStructure.USART_WordLength          = USART_WordLength_8b;
13
  USART_InitStructure.USART_StopBits            = USART_StopBits_2;
14
  USART_InitStructure.USART_Parity              = USART_Parity_No ;
15
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
16
  USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;
17
  USART_Init(USART1, &USART_InitStructure);
18
  USART_Cmd(USART1, ENABLE);
19
  USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Markus schrieb:
> Marc V. schrieb:
>> Was bedeutet wieder als Usart TX definiert ?
>>  Warum fummelst du an dem Tx-Pin überhaupt rum ?
>
> Um die Startbedingung für ein DMX Frame zu erzeugen. Low Break von ca.
> 100us mit nachfolgendem High für 12us. Danach dann über Usart die 512
> Byte mit 250kBaut und 2 Stoppbits.

 Brauchst du aber nicht.

 Start = 88us bis 1000000us
 MAB   = Typ. 8us d.h. keine min. und max. Zeiten

 USARTx auf 57600B und 1 Stoppbit ergibt etwa 156us für Start und
 17,4us für MAB wenn 0x00 gesendet wird.

 Byte mit 57,6KB raus, sofort danach auf 250KB/2 Stoppbit und los gehts.

 P.S.
 Selbstverständlich kannst du Start und MAB auch auf anderen
 Baudraten senden, z.B. mit 100KB und 1 Stoppbit.

: Bearbeitet durch User
von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Markus schrieb:
> Laut Datenblatt "Absolute Maximum Ratings" ist ein maximaler Vcc von 7V
> möglich

Mir schwant böses.

von Dietrich L. (dietrichl)


Lesenswert?

Rufus Τ. F. schrieb:
> Markus schrieb:
>> Laut Datenblatt "Absolute Maximum Ratings" ist ein maximaler Vcc von 7V
>> möglich
>
> Mir schwant böses.

Du hoffst, das Markus das richtig interpretiert?

Ich habe Mitleid mit Markus rate ihm, die Bedeutung von "Absolute 
Maximum Ratings" zu lernen. Die Grenze, wo das Teil noch funktioniert, 
ist es jedenfalls nicht...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Es ist doch Unsinn, erst einen 3,3V Baustein wie den MAX3485 zu 
bestellen, um ihn dann wieder mit den Interface Problemen auf 5V laufen 
zu lassen.

Markus S. schrieb:
> GPIO_InitStructure.GPIO_Pin = usartDMX1_RX;
>   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
>   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

1. Warum denn floating? Schalte den Pullup an.
2. Warum die Begrenzung auf 10MHz? Ist zwar vermutlich nicht so wichtig, 
kann aber doch Ärger machen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Matthias S. schrieb:
> 1. Warum denn floating? Schalte den Pullup an.
> 2. Warum die Begrenzung auf 10MHz? Ist zwar vermutlich nicht so wichtig,
> kann aber doch Ärger machen.

 Normalerweise wird der Rx-Pin auf Pull-down geschaltet.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Marc V. schrieb:
> Normalerweise wird der Rx-Pin auf Pull-down geschaltet.

Der Programmteil bezieht sich auf den STM32, und da ist RX high = 
inaktiv, da UART 'TTL', wenn auch mit 3,3V Pegel.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Matthias S. schrieb:
> Der Programmteil bezieht sich auf den STM32, und da ist RX high =
> inaktiv, da UART 'TTL', wenn auch mit 3,3V Pegel.

 Ja.
 Aber es ging um GPIO und anstatt floating:
1
  GPIO_InitStructure.GPIO_Pin = usartDMX1_RX;
2
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

sollte es Pull-down sein:
1
  GPIO_InitStructure.GPIO_Pin = usartDMX1_RX;
2
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_PULLDOWN;

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Marc V. schrieb:
> sollte es Pull-down sein:

Erklär bitte, warum. Pulldown bedeutet auf ein RXD Pin ein Startbit und 
nicht inaktiv. Es ist also Unsinn, den Pin auf low zu ziehen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Matthias S. schrieb:
> Erklär bitte, warum. Pulldown bedeutet auf ein RXD Pin ein Startbit und
> nicht inaktiv. Es ist also Unsinn, den Pin auf low zu ziehen.

 Ja.
 Aber RxD Pin ist RxD Pin.
 GPIO Pin ist etwas anderes (Alternate Function).

 P.S.
 Es ging sowieso um TxD, nicht um RxD.

: Bearbeitet durch User
von Markus S. (acepilot)


Lesenswert?

Hallo zusammen,

Noch einmal vielen Dank für die viele Hilfe und Unterstützung und ein 
grosses sorry für die späte Rückmeldung. Der Urlaub mit der Familie ist 
mir voll dazwischen gekommen und hat alles verzögert. Gestern konnte ich 
nochmal einiges ausprobieren und nachdem ich da auch nicht viel schlauer 
geworden bin habe ich den mikrocontroller von der Platine gelötet und 
einen Nagelneuen aufgelötet.

Nach diesem Schritt funktioniert alles auch ohne Pullup's. Ein einfaches 
Nachlöten des ursprünglichen Controllers hat nichts gebracht :-(.

Wollte auf jeden Fall ein Feedback geben wie es ausschaut, denke das 
gehört sich so!

Lieben Gruß und allen einen guten Start in die Woche,
Markus

Beitrag #5520765 wurde von einem Moderator gelöscht.
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.