Forum: Mikrocontroller und Digitale Elektronik Chip Select für UART Slaves - Wie realisieren?


von Thorsten M. (cortex_user)


Lesenswert?

Hallo,
ich habe 3 Smart Displays von Aliexpress, die über eine Opensmart UART 
Schnittstelle angesteuert werden. Da UART nur ein Device ansprechen 
kann, weil es eben kein Bus ist wie I2C stellt sich folgendes Problem:

Wie steuere ich mit einem uC Ausgang 3 Displays nacheinander an zur 
Darstellung von Messkurven, die TXD und RxD benötigen, ohne dass sie 
sich logisch und elektrisch in die Quere kommen?

Abgesehen davon ein Gattergrab mit (De-)Multiplexern zu erzeugen fällt 
mir für die Heimlösung nur ein 3 kleine Reed Relais mit Doppel-Kontakt 
zu verwenden.

Oder gib es da vielleicht was elektronisches?

LG,
Thorsten

: Bearbeitet durch User
von Opi (Gast)


Lesenswert?

UART kann beliebig viele Devices ansprechen, Du musst Dir nur ein 
simples Protokoll überlegen.

von Opi (Gast)


Lesenswert?

Alle weiteren Infos solltest Du höflicherweise schon selbst ungefragt 
bereitstellen, oder hat man Dir das nicht beigebracht?

von c-hater (Gast)


Lesenswert?

Thorsten M. schrieb:

> Oder gib es da vielleicht was elektronisches?

Klar: programmierbare Logik. CPLD/FPGA. Oder im Notfall auch: 
entsprechend programmierter (paralleler) NV-Speicher, also z.B. olle 
BIOS-Flash- oder EPROM-Bausteine.

Für einen 1:3-UART-Mux/Demux brauchst du (im Minimum) 5 Eingänge und 4 
Ausgänge.

Wenn die Bitraten nicht zu hoch sind, sondern sich im üblichen 
UART-Bereich <=115200kbps bewegen, käme sogar ein kleiner dummer µC in 
Frage, bei dem die Mux-Logik rein in Software implementiert ist.

von STK500-Besitzer (Gast)


Lesenswert?

Man könnte natürlich auch "einfach" einen I²C-UART-Baustein mit mehreren 
UARTs verwenden, falls es sowas noch gibt.

Oder gleich einen Controller mit einer passenden Anzahl an UARTs 
verwenden.

von Thorsten M. (cortex_user)


Lesenswert?

c-hater schrieb:
> Klar: programmierbare Logik. CPLD/FPGA.

Sowas habe ich nicht, kann ich auch nicht mit umgehen. Kanonen auf 
Spatzen. Und einen uC dazwischen setzen ... da kann man gleich 3 
SoftUarts mit einem ProMini Arduino erzeugen und auf eine Hardware Uart 
abbilden. Ich suchte eher was einfaches. Bisher sind 3 Reed Relais und 3 
Transistoren für mich einfach.

Da ich recht neu hier bin: Ist dieses Forum moderiert? Ich wundere mich 
nämlich über recht viele Unverschämtheiten und Frechheiten die 
stillschweigend toleriert werden. Krankhafte Narzissten sind unter 
(selbsternannten) Experten nicht selten aber in manchem Thread wundert 
mich nichts mehr.

: Bearbeitet durch User
von hubuk (Gast)


Lesenswert?

Thorsten M. schrieb:
> Abgesehen davon ein Gattergrab mit (De-)Multiplexern zu erzeugen fällt
> mir für die Heimlösung nur ein 3 kleine Reed Relais mit Doppel-Kontakt
> zu verwenden.
Was ist an einem einzigen SO16/TTSSO16 Baustein ein Gattergrab?
https://assets.nexperia.com/documents/data-sheet/74HC_HCT139.pdf

Oder bedingt ein Opensmart UART da irgerndwelche seltsamen Logikpegel?

von Thorsten M. (cortex_user)


Lesenswert?

STK500-Besitzer schrieb:
> Man könnte natürlich auch "einfach" einen I²C-UART-Baustein mit mehreren
> UARTs verwenden, falls es sowas noch gibt.

Sowas hier? Leider nur als TQFP verfügbar.
https://www.maxlinear.com/product/interface/uarts/i2c-spi-uarts/xr20m1280

von Thorsten M. (cortex_user)


Lesenswert?

hubuk schrieb:
> Was ist an einem einzigen SO16/TTSSO16 Baustein ein Gattergrab?

Dann guck mal die Ausgänge an, die sind alle invertiert.

von hubuk (Gast)


Lesenswert?

Thorsten M. schrieb:
> hubuk schrieb:
>> Was ist an einem einzigen SO16/TTSSO16 Baustein ein Gattergrab?
>
> Dann guck mal die Ausgänge an, die sind alle invertiert.
Nur die gerade nicht selektierten Ausgängen sind H. Der aktive Audgang 
folgt ohne Änderung dem Enable-Eingang.

von Peter D. (peda)


Lesenswert?

Thorsten M. schrieb:
> ich habe 3 Smart Displays von Aliexpress

Ohne Bezeichnung oder Link kennt die natürlich keiner.

Manche Slaves kann man adressieren, d.h. es werden 9 Bits übertragen, ob 
Daten oder Adresse. Alle Slaves lauschen mit und nur der adressierte 
enabled seinen TXD.

von Hermann Kokoschka (Gast)


Lesenswert?

1)
Die TX der Displays können schonmal alle (über Dioden+Pullup 
)zusammengelegt werden und auf RX von Controller gehen. (Es wird ja nur 
EIN Display jeweils antworten, nämlich jenes mit dem gerade gesprochen 
wird)

2)
TX vom Controller geht dann über EINEN simplen Analog-MPX (4051/52/53) 
auf die einzelnen RX der Displays.

von STK500-Besitzer (Gast)


Lesenswert?

Peter D. schrieb:
> Manche Slaves kann man adressieren, d.h. es werden 9 Bits übertragen, ob
> Daten oder Adresse. Alle Slaves lauschen mit und nur der adressierte
> enabled seinen TXD.

So smart werden die Dinger nicht sein.

von Thorsten M. (cortex_user)


Lesenswert?

hubuk schrieb:
> Nur die gerade nicht selektierten Ausgängen sind H. Der aktive Audgang
> folgt ohne Änderung dem Enable-Eingang.

Ja, würde passen. Für TxD 1auf3. RxD muss auch zurückgeführt werden 
3auf1. Je länger ich überlege ... glaube mit dem Arduino pro Mini lässt 
sich da ganz fix was machen: 3 SoftUarts mit der Paul Stoffregen Lib und 
die Master TXD/RXD. Diese Display stürzen übrigens komplett ab, wenn man 
da Müll reinschickt oder eine UART Sendung durch einen zu langen 
Interrupt unterbricht. Dann geht nur noch ein/aus.

von HildeK (Gast)


Lesenswert?

hubuk schrieb:
> Nur die gerade nicht selektierten Ausgängen sind H. Der aktive Audgang
> folgt ohne Änderung dem Enable-Eingang.

Richtig.
Für die RX-Leitung braucht man aber auch noch was.

Dann kann man sich gleich 74xx125 oder Analogschalter anschauen.
Mit zwei Bausteinen '125, drei Steuerleitungen und drei PUs ist man 
dabei.

von Thorsten M. (cortex_user)


Lesenswert?

Hermann Kokoschka schrieb:
> Die TX der Displays können schonmal alle (über Dioden+Pullup
> )zusammengelegt werden und auf RX von Controller gehen. (Es wird ja nur
> EIN Display jeweils antworten, nämlich jenes mit dem gerade gesprochen
> wird

Nein, Link kann ich nicht zeigen, Aliexpress ist hier gesperrt. Diese 
Displays
werden unter OPENSMART verkauft, haben keine Adresse. Da gehen 2 
Leitungen rein, RXD, TXD. Steuercodes für grafische Sachen rein, also 
CIR x,y,r,EOD heisst Kreis, Parameter, End of Data. Zurück kommt ein 
Steuercode für Befehl ausgeführt. Denn sendet man während einer noch 
läuft schmieren die Dinger ab.
Made in China....

von Hermann Kokoschka (Gast)


Lesenswert?

Thorsten M. schrieb:
> Zurück kommt ein
> Steuercode für Befehl ausgeführt. Denn sendet man während einer noch
> läuft schmieren die Dinger ab.

Stell mein Konzept aber nicht in Frage...

Dann wartest Du eben bis die Rückmeldung kommt und schaltest den MPX 
ERST DANN auf ein anderes Display, wo ist das Problem?

von STK500-Besitzer (Gast)


Lesenswert?

Von welcher Sorte Controller sollen die Displays eigentich angesteuert 
werden?
Wenn es sich z.B. um ein Raspberry Pi handelt, gäbe es noch 
USB-UART-Konverter mit mehreren UARTs.

von c-hater (Gast)


Lesenswert?

Thorsten M. schrieb:

> Sowas habe ich nicht, kann ich auch nicht mit umgehen. Kanonen auf
> Spatzen. Und einen uC dazwischen setzen ... da kann man gleich 3
> SoftUarts mit einem ProMini Arduino erzeugen

Versuch' es ;o)

Tipp: Soft-UARTs sind langsam. Schreiben geht noch ganz gut, lesen 
nicht. Vor allem dann nicht, wenn auch noch mehrere Kanäle um 
Aufmerksamkeit ringen, in deiner Anwendung sind das immer mindestens 
zwei.

ProMini-Arduino-Hardware geht natürlich, ist eigentlich sogar schon viel 
zu groß, hardwaremäßig wäre ein ATtiny24 angemessen, der kann alles 
nötige, um die gewünschte Funktion sicher für Bitraten bis 115200kbps 
bereitzustellen.

Was aber nicht geht: Arduino-Soft-Serial. Jedenfalls nicht, wenn mit 
Bitraten >>9600 zu rechnen ist.

> Ich suchte eher was einfaches.

Boolsche Logik ist einfach. Und es spielt eigentlich keine Rolle, ob man 
die mit Transistoren und Relais implementiert oder als Programm. 
Jedenfalls dann nicht, wenn man die Logik verstanden hat...

von Thorsten M. (cortex_user)


Lesenswert?

Mit einem Bluepill Board. Das natierlich auch 3 SoftUart erzeugen 
könnte....

von Peter D. (peda)


Lesenswert?

Thorsten M. schrieb:
> Diese
> Displays
> werden unter OPENSMART verkauft

Hilft auch nicht bei der Suche, gibt ja haufenweise LCDs bei Ali.

Thorsten M. schrieb:
> Diese Display stürzen übrigens komplett ab, wenn man
> da Müll reinschickt oder eine UART Sendung durch einen zu langen
> Interrupt unterbricht.

D.h. die Leute haben keinerlei Ahnung vom Programmieren.
Warum kauft man dann solchen Scheiß.

von c-hater (Gast)


Lesenswert?

Thorsten M. schrieb:

> Ich suchte eher was einfaches. Bisher sind 3 Reed Relais und 3
> Transistoren für mich einfach.

Noch 'ne Idee: Standard-CMOS 4053. Sollte auch alles nötige können.

von Thorsten M. (cortex_user)


Angehängte Dateien:

Lesenswert?

c-hater schrieb:
> Standard-CMOS 4053

DANKE !!! 3.3V brauchen zwar Level Shifter aber der Stein sollte genau 
das machen. Bestelle ich gleich mal und teste den auf nem Breadboard.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Thorsten M. schrieb:

> DANKE !!! 3.3V brauchen zwar Level Shifter

Nein. Standard-CMOS funktioniert i.A. bis runter auf 3V. Nur halt etwas 
langsamer als bei höheren Versorgungsspannungen oder auch mit sonstigen 
kleinen Einschränkungen bezüglich einiger Kennwerte. Ausnahmen 
bestatigen wie immer die Regel. Der CD4053 ist aber diesbezüglich keine.

von Thorsten M. (cortex_user)


Lesenswert?

c-hater schrieb:
> Ausnahmen
> bestatigen wie immer die Regel. Der CD4053 ist aber diesbezüglich keine.

Erstmal auf Breadboard mit einem FG und Oszi testen. Dann Platine 
machen, nicht umgekehrt. Brauche auch die CD4052B und der ist in der 
Bucht nicht zu kriegen, nur noch bei Reichelt Apotheke.

: Bearbeitet durch User
Beitrag #7295045 wurde von einem Moderator gelöscht.
Beitrag #7295077 wurde von einem Moderator gelöscht.
von Peter D. (peda)


Lesenswert?

Thorsten M. schrieb:
> Brauche auch die CD4052B und der ist in der
> Bucht nicht zu kriegen, nur noch bei Reichelt Apotheke.

Warum nicht den 74HC4052?
Der ist niederohmiger, günstiger und läuft an 2..10V.

Die Hochvolt CMOS sind bei 5V schon 1k hochohmig, für 3V habe ich keine 
Angabe gefunden.

von HildeK (Gast)


Lesenswert?

c-hater schrieb:
> Noch 'ne Idee: Standard-CMOS 4053. Sollte auch alles nötige können.

Wie der TO in dem Screenshot bereits eingekreist hat: der CD4052 ist 
noch besser geeignet.
Am TX-Pfad-Ausgang empfehle ich einen Pullup. Offen sollte der RX-Input 
am Empfänger ja nicht sein, sondern in Ruhe auf HIGH.

Du hast vollkommen recht, den 4052/53 hatte noch niemand zuvor genannt, 
jedoch hatte ich allgemein schon mal einen Analogschalter erwähnt.

Beitrag #7295101 wurde vom Autor gelöscht.
von Rudolph R. (rudolph)


Lesenswert?

Sowas hier?
https://www.dx.com/p/open-smart-2-4-uart-serial-tft-lcd-module-touch-screen-expansion-shield-with-touch-pen-for-arduino-uno-r3-mega2560-nano-2033627.html

So wie aussieht ist da schon ein Controller drauf und der hat auch mehr 
Pins rausgeführt.
https://github.com/prenticedavid/MCUFRIEND_kbv/files/7027755/Serial.TFT.2.4INCH.with.touch.sreen.Schematic.pdf

Vielleicht liegt für das Ding ja irgendwo eine Firmware herum die man 
entsprechend erweitern könnte auch noch auf einen Pin zu lauschen.

von Roland E. (roland0815)


Lesenswert?

Thorsten M. schrieb:
> Hallo,
> ich habe 3 Smart Displays von Aliexpress, die über eine Opensmart UART
> Schnittstelle angesteuert werden. ...
> Oder gib es da vielleicht was elektronisches?
>

Dein Nick suggeriert eine Controllerfamilie, deren Peripherie 
üblicherwise CS für SPI (UART) unterstützt. Die Displays typischerweise 
auch. Heißt dort Evtl anders.

Wo ist jetzt noch mal das Problem?

: Bearbeitet durch User
von Cortex User (Gast)


Lesenswert?

Rudolph R. schrieb:
> Sowas hier?
> 
https://www.dx.com/p/open-smart-2-4-uart-serial-tft-lcd-module-touch-screen-expansion-shield-with-touch-pen-for-arduino-uno-r3-mega2560-nano-2033627.html

Ja, genau die. Vergiss das mit der Firmware. Den kann man zwar neu 
flaschen aber nix gefunden. Und wenn man die Baud Rate verstellt ist das 
Ding Schrott, weil da was nicht stimmt. Man kann sie nie mehr zurück 
stellen. 2 Displays deswegen schon gebricked.

von Thorsten M. (cortex_user)


Lesenswert?

Peter D. schrieb:
> Warum nicht den 74HC4052?

Ich nehme diese Lösung und damit soll es auch gut sein. Die Displays 
sind nahezu statisch in ihren Anzeigen, da sollte das reichen.

von Rudolph R. (rudolph)


Lesenswert?

Cortex User schrieb:
> Ja, genau die. Vergiss das mit der Firmware.

Ich gebe ja zu, dass das sehr hässlich ist danach zu suchen.
Aber im Grunde genommen ist das Ding ein Arduino mit M328PB und einem 
ILI9325 Display, zum ansteuern des Displays wird wohl die Adafruit GFX 
Library verwendet.
https://www.hackster.io/frankiemaker/simple-easy-to-use-serial-tft-lcd-5196cf

Und da man auch den Schaltplan bekommt, halte ich es für sehr 
unwahrscheinlich, dass da noch niemand seit 2018 eine eigene Software 
für gemacht und ins Netz gestellt hat.

Dieser Frankie Chu ist auch immer noch aktiv, die letzten Videos hat er 
vor 6 Tagen auf seinem Youtube Kanal veröffentlicht.

: Bearbeitet durch User
von Hermann Kokoschka (Gast)


Lesenswert?

HildeK schrieb: um 14:40
> Du hast vollkommen recht, den 4052/53 hatte noch niemand zuvor genannt,

Hermann Kokoschka schrieb:um 10:50
> TX vom Controller geht dann über EINEN simplen Analog-MPX (4051/52/53)

von W.S. (Gast)


Lesenswert?

Thorsten M. schrieb:
> Wie steuere ich mit einem uC Ausgang 3 Displays nacheinander an zur
> Darstellung von Messkurven, die TXD und RxD benötigen, ohne dass sie
> sich logisch und elektrisch in die Quere kommen?

Gar nicht. Man könnte mit einem Analog-Multiplexer zwar die Leitungen 
RxD und TxD von deinem µC auf verschiedene Kabel zu verschiedenen 
Displays aufschalten und dorthin senden (und nachher woanders 
draufschalten), aber was ist mit den Empfangsdaten? Die kommen 
asynchron herein und wandern unbemerkt ins Nirwana, wenn der 
Multiplexer auf einem anderen Kabel steht. Verodern geht auch nicht, 
denn dann kommen sich die Kanäle gegenseitig ins Gehege.

Das Ganze ist also nicht wirklich durchdacht.

W.S.

von Hermann Kokoschka (Gast)


Lesenswert?

W.S. schrieb:
> Verodern geht auch nicht, denn dann kommen sich die Kanäle gegenseitig ins 
Gehege....  aber was ist mit den Empfangsdaten?

Es antwortet ja NUR das angesprochene Display, keines sendet "initiativ"

Hermann Kokoschka schrieb:
> Dann wartest Du eben bis die Rückmeldung kommt und schaltest den MPX
> ERST DANN auf ein anderes Display, wo ist das Problem?

W.S. schrieb:
> Das Ganze ist also nicht wirklich durchdacht.

HIER ist es völlig durchdacht, trivial+üblich,
gelöst innert Stunden ab Frage.
Wildester Kokolores der üblichen Theoretiker.

Dies "grundsätzliche-nicht-vorab-lesen" bleibt ägerlich.

von Peter D. (peda)


Lesenswert?

Hermann Kokoschka schrieb:
> Es antwortet ja NUR das angesprochene Display, keines sendet "initiativ"

So isses.
Ich hab am CAN-Bus Slaves, die automatisch Statusmeldungen verschicken 
können. Aber das muß der Master nach dem Reset erstmal initiieren und 
ist bei CAN ja überhaupt kein Problem.
Bei UART basierten Bussen ist sowas aber äußerst unüblich.

von STK500-Besitzer (Gast)


Lesenswert?

Peter D. schrieb:
> Bei UART basierten Bussen ist sowas aber äußerst unüblich.

Wären es Touchscreens, könnte es passieren; sind es aber NICHT.

von Eisbär (Gast)


Lesenswert?

Cortex User schrieb:
> Ja, genau die. Vergiss das mit der Firmware. Den kann man zwar neu
> flaschen aber nix gefunden.

Hast du denn gefunden, welche Auflösung die haben ? ;-)

> 2 Displays deswegen schon gebricked.

Dann hast du ja nur noch eins. Vielleicht ist das ja auch ein 
himmlisches Zeichen, denn zur Darstellung von Messkurven braucht man 
viel Geduld oder schnellere Displays mit SPI-Ansteuerung.
Wenn 3 x Relais für Dich eine gangbare Lösung sind, dann nimm sie.

Thorsten M. schrieb:
> Da ich recht neu hier bin: Ist dieses Forum moderiert? Ich wundere mich
> nämlich über recht viele Unverschämtheiten und Frechheiten die
> stillschweigend toleriert werden.

Die Zeit bleibt stehen und hier ist immer 1. April.

von c-hater (Gast)


Lesenswert?

W.S. schrieb:

> Gar nicht. Man könnte mit einem Analog-Multiplexer zwar die Leitungen
> RxD und TxD von deinem µC auf verschiedene Kabel zu verschiedenen
> Displays aufschalten und dorthin senden (und nachher woanders
> draufschalten), aber was ist mit den Empfangsdaten? Die kommen
> asynchron herein und wandern unbemerkt ins Nirwana, wenn der
> Multiplexer auf einem anderen Kabel steht.

Natürlich sollte das verwendete Protokoll zu solchen Konstrukten passen. 
Wenn bidirektional, dann sollte es idealerweise ein 
Challenge-Response-Protokoll sein, d.h.: der "Slave" äußert sich 
ausschließlich als Reaktion auf eine Anfrage des "Master".

Und wie der Zufall will, ist sowas alles andere als unüblich, sondern im 
Gegenteil sogar extrem verbreitet.

Aber es gibt sogar durchaus auch Anwendungen, bei denen nicht einmal ein 
Challenge-Response-Protokoll zwingend notwendig ist, um eine im Sinne 
der Anwendung funktionierende Lösung zu erhalten. Nehmen wir mal das 
Beispiel einer Waage in einer "Anlage". Das Protokoll der Waage sieht 
vor, ständig "von sich aus" den aktuellen Wägewert rauszupusten und 
nicht änderbar. Ist das dann zwingend tödlich? Nein, natürlich nicht.

Der Controller weiss aus anderen Quellen, ob überhaupt was auf der Waage 
ist und kann natürlich getrost die Datensätze verpassen, in denen diese 
stumpfblöd irgendwas um die 0,0g meldet. Wenn der Controller weiß, jetzt 
müsste was tatsächlich interessantes kommen, dann schaltet er auf den 
Waagen-Kanal und synchronisiert sich auf den Datenframe der Waage und 
fertig.

Ja, man muss schon ein wenig programmieren können, um das Protokoll 
fehlertrolerant zu empfangen, aber für richtige Programmierer ist so 
etwas natürlich keine Herausforderung. Für dich hingegen wohl schon...

von Wolfgang (Gast)


Lesenswert?

Thorsten M. schrieb:
> Nein, Link kann ich nicht zeigen, Aliexpress ist hier gesperrt.

Warum ignoriest du das nicht einfach?
https://de.aliexpress.com/item/1005002115457168.html

von Georg (Gast)


Lesenswert?

Thorsten M. schrieb:
> Abgesehen davon ein Gattergrab mit (De-)Multiplexern zu erzeugen

Du brauchst nur Treiber mit Enable-Eingang, die bekommen alle die 
TxDaten, aber nur einer ist eingeschaltet.

Georg

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.