Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi Pico - UART-Kommunikation mit 4 Geräten


von Wilko S. (wilko0070)


Lesenswert?

Ich bin dabei, eine Quantencomputer-Simulation mit Raspberry Pi Picos 
aufzubauen. Jeder Pico stellt dabei ein Quantengatter dar. Allerdings 
muss beim CNOT-Gatter ein Pico mit 4 anderen Picos kommunizieren (2 
Eingänge, 2 Ausgänge). Ich möchte die Kommunikation möglichst mit UART 
vornehmen. Allerdings gibt es beim Pico nur 2 UART-Kanäle. Wäre es 
möglich, diese für die beiden Eingänge zu nutzen, und für die Ausgabe 
dann ebenfalls die 2 UART-Kanäle auf anderen GPIO-Pins zu benutzen, da 
die Verarbeitung sequentiell erfolgt? Oder welche andere Möglichkeit 
wäre empfehlenswert (auch außerhalb von UART), möglichst ohne 
zusätzliche Hardware?

von Falk B. (falk)


Lesenswert?

I2C ist ein Bus, der viele Teilnehmer, sogar mehrere Master verträgt. 
Wenn die UARTs nicht parallel betrieben werden, reichen Multiplexer, um 
einen UART auf mehrere Empfänger/Sender umzuschalten. Oder man nutzt 
Soft-UARTs, dafür ist der RP2040 locker schnell genug, erst recht, wenn 
man die PIOs nutzt.

Beitrag "8 UART's mit asm_pio  PIO  DMA / Micropython auf dem PI PICO"

von Wilko S. (wilko0070)


Lesenswert?

Vielen Dank für die schnelle Antwort! An I2C hatte ich zuerst auch 
gedacht, allerdings sind die Quantengatter (= Picos) nacheinander 
angeordnet und beliebig kombinierbar, anhand der I2C-Adresse weiß ich 
nicht, wie ich die Position des Picos in der Kette herausfinde.

von Irgend W. (Firma: egal) (irgendwer)


Lesenswert?

Muss jeder Node mit jedem der drei anderen Node immer direkt 
kommunizieren können?

Wenn auch mal ein Node "Transit" machen darf, würde sich eventuell auch 
eine "Daisy chain" anbieten. Mit UART kannst du da eine beliebig lange 
Kette aufbauen, dauert dann halt einen Moment bis die Nachricht ankommt.

- https://de.wikipedia.org/wiki/Daisy_Chain

von Wastl (hartundweichware)


Lesenswert?

Wilko S. schrieb:
> Allerdings gibt es beim Pico nur 2 UART-Kanäle.

Ich halte es hier nicht für sinnvoll einen ultraschnellen
Controller zu verwenden und dann "zeitaufwendig" an den
Schnittstellen zu pfriemeln um auf eine Erhöhung der
Schnittstellenzahl zu kommen. Das macht nur Ärger und
Rechenaufwand. Da die Kommunikation zwischen den einzelnen
Nodes sowieso viel langsamer ist als die internen
Rechenoperationen wird es sinnvoll sein einen Controller
zu verwenden der von Haus aus mit der ausreichenden
Anzahl an UART-Kanälen austestattet ist und wenn nötig auf
ein paar MIPS zu verzichten. So gross wird der Performance-
Unterschied zwischen einem (z.B.) STM32Hxxx oder STM32Fxxx
zu einem Raspberry Pi Pico nicht sein. Ja ích weiss, der
Pico kommt fertig au der Box, bei STM kommt man vielleicht
nicht so einfach in die Gänge. Dafür wird das Gebastele an
den Picos wegen der UARTs dann aufwendig.

von Harald K. (kirnbichler)


Lesenswert?

Man kann mit den prorgrammierbaren PIOs des Pico einiges anstellen, 
siehe hier:

Beitrag "8 UART's mit asm_pio  PIO  DMA / Micropython auf dem PI PICO"

von Wilko S. (wilko0070)


Angehängte Dateien:

Lesenswert?

Siehe Abbildung. Die Simulation läuft von links nach rechts. Jedes der 
blauen Module wird durch einen Raspberry Pi Pico repräsentiert. Als 
Verbindung zwischen den Modulen habe ich ein Kabel mit 4 Leitungen:

VSYS

GP-PIN 1

GP-PIN 2

GROUND

Die GP-PINs der Schnittstellen (max. 4 beim CNOT-Modul) sind wie folgt 
verknüpft:

GP2 - In 1 Lesen (RX)

GP3 - IN 1 Senden (TX)


GP6 - Out 2: Senden (TX)

GP7 - Out 2: Lesen (RX)


GP10 - in 2 Lesen (RX)

Gp11 - in 2 Senden (TX)


GP14 - Out 2 Senden (TX)

GP15 - Out 2 Lesen (RX)

Ich schließe bisher eine Spannungsquelle über USB-Port an (ganz links - 
am Sample-Modul). Der Sample-Button ist hier mit dem Modul "QUBIT_1" 
über das Kabel verbunden, sodass

SAMPLE => QUBIT_1

VSYS => VSYS

GP6 - Out 2: Senden (TX) => GP2 - In 1 Lesen (RX)

GP7 - Out 2: Lesen (RX) => GP3 - IN 1 Senden (TX)

GROUND => GROUND

Wenn ich den Sample-Button ganz links drücke, soll eine 
8-Bit-Information von SAMPLE über die Schnittstelle OUT1 an IN1 von 
QUBIT_1 übertragen werden.
Dort wird sie dann von QUBIT_1 weiterarbeitet und nach dem gleichen 
Prinzip an das nächste Modul (HADAMARD_1) übergeben, usw.
Ich habe die Übertragung mit PIO-UART erst einmal für 2 Module geprüft. 
Eine Reaktion auf Empfängerseite scheint nur zu funktionieren, wenn ich 
hier eine 2. Stromquelle per USB hinzufüge, obwohl die Module über VSYS 
und GROUND verbunden sind. Am besten, ich stelle mal ein Foto vom 
bisherigen Versuchsaufbau herein. Sollte ich vielleicht von VSYS auf 
VBUS zur Stromweiterleitung umsteigen? Oder die Pico-Module (max. 15 
werden insgesamt für die komplexeste Simulation benötigt).

von Wilko S. (wilko0070)


Angehängte Dateien:

Lesenswert?

Das Foto zeigt solch eine Kette mit 4 Raspberry Pi Picos. Die 
Spannungsversorgung findet über USB beim linken Pico statt. Leider 
funktioniert die Informationsweitergabe von links nach rechts nicht, 
obwohl sie über VSYS, GROUND und 2 GP-Pins verbunden sind (s. o.). Ein 
Statuswechsel des IN-Pins beim nächsten Empfänger findet anscheinend nur 
dann statt, wenn dieser Pico mit einer eigenen Spannungsquelle verbunden 
ist, obwohl alle Picos erst einmal mit der Versorgung von der einen 
USB-Spannungsquelle funktionieren.

von Harald K. (kirnbichler)


Lesenswert?

Du solltest die Spannungsversorgung (VSYS/GND) nicht in Reihe schalten, 
sondern komplett getrennt von Deinen seriellen Verbindungen betrachten.

Die Spannungsversorgungsanschlüsse sollten sternförmig mit dem Netzteil 
verbunden werden.

von Wilko S. (wilko0070)


Lesenswert?

Vielen Dank! DAs ist wohl der Fehler bei mir: die Spannungsversorgung 
der einzelnen Picos (VSYS + GROUND) in Reihe zu schalten und einen davon 
dann per USB mit Strom zu versorgen. Hat jemand vielleicht Erfahrung mit 
der Spannungsversorgung von max. 15 Picos über eine Stromquelle? Ich 
habe ausgerechnet, dass ich dafür ein 25-W-Netzteil benötigen würde. 
Wenn ich ein USB-Netzteil benutze, würde ich dafür (theoretisch) ein Hub 
mit 15 USB-Anschlüssen benötigen, sodass die Spannungsversorgung für 
jeden Pico getrennt ist?

von Harald K. (kirnbichler)


Lesenswert?

Wilko S. schrieb:
> Ich habe ausgerechnet, dass ich dafür ein 25-W-Netzteil benötigen würde.

Wie kommst Du auf diese bizarre Idee? Welche Leistungsaufnahme soll denn 
Deiner Ansicht nach ein einzelner RP2040 haben? Oder betreibst Du noch 
irgendwelche ungenannte stromhungrige Peripherie?

von Wilko S. (wilko0070)


Lesenswert?

Überhaupt nicht. Es werden nur insgesamt 3 zusätzliche LEDs neben den 15 
Pico-Modulen. Irgendwo hatte ich gelesen, dass man beim Pico mit 300 mA 
Stromaufnahme rechnen sollte.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

Wilko S. schrieb:
> Überhaupt nicht. Es werden nur insgesamt 3 zusätzliche LEDs neben den 15
> Pico-Modulen. Irgendwo hatte ich gelesen, dass man beim Pico mit 300 mA
> Stromaufnahme rechnen sollte.

Viel zuviel, erst Recht, wenn da nix weiter dran hängt. Im RP2040 
Datenblatt gibt es eine Tabelle zur Orientierung.

von Uwe D. (monkye)


Lesenswert?

Falk B. schrieb:
> Wilko S. schrieb:
>> Überhaupt nicht. Es werden nur insgesamt 3 zusätzliche LEDs neben den 15
>> Pico-Modulen. Irgendwo hatte ich gelesen, dass man beim Pico mit 300 mA
>> Stromaufnahme rechnen sollte.
>
> Viel zuviel, erst Recht, wenn da nix weiter dran hängt. Im RP2040
> Datenblatt gibt es eine Tabelle zur Orientierung.

Also ich messe eher um die 20mA, gelegentlich mal 50mA - das ist eher 
selten.

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.