Forum: Mikrocontroller und Digitale Elektronik Frage bezüglich Mikrocontroller auf selbst erstelltem PCB


von J. (dignity)


Lesenswert?

Hallo allerseits,

Ich kenne mich leider nicht so super mit Elektronik aus und hätte daher 
eine Frage bezüglich eines Mikrocontrollers.
Der Plan ist einen Arduino selbst zu erstellen auf Grundlage des 
ATmega328P-AU. Ich habe vor dabei einen CP2102N zu verwenden um die 
Kommunikation über einen COM Port zu gewährleisten. Grund hierfür ist, 
dass auf dem Mikrocontroller ein Github Projekt laufen soll welches 
leider nur über COM Port mit dem PC kommunizieren kann. So weit ich das 
im Datenblatt des CP2102N richtig gelesen habe baut der ja einen COM 
Port auf oder?

Und eine weitere Frage bezüglich Grundlagen der Elektronik (wie gesagt 
kenne ich mich leider nicht so gut aus):
Am Ende soll neben dem ATmega328 noch ein weiterer Mikrocontroller auf 
dem PCB laufen welcher ein anderes Programm erhält. Da beide mit dem PC 
kommunizieren wird das Board auch zwei USB Anschlüsse haben. Kann ich 
dann einfach beide USB 5V und GND Leitungen verbinden? So würde ich mir 
eine zweite Sicherung und ein zweitges Ferrite Bead sowie einige 
Kondensatoren sparen weil ich das dann ja zwei mal bräuchte. Ich weiß 
wohl nicht, ob ich das einfach so verbinden darf. Insbesondere falls 
beide USB Kabel an verschiedene PCs angeschlossen werden oder sowas.

Vielen Dank für eure Zeit und Antworten.
- Jannis

von N. M. (mani)


Lesenswert?

Und warum genau laufen nicht einfach beide Programme auf einem uC?

von J. (dignity)


Lesenswert?

N. M. schrieb:
> Und warum genau laufen nicht einfach beide Programme auf einem uC?

Ich brauche tatsächlich zwei da das eine Projekt auf einem ATmega32U4 
läuft. Dieser unterstützt leider nicht den Code den ich von dem Github 
Projekt habe (wusste ich zwar vorher aber ich habe extra mal versucht 
den Code auf einen Arduino Leonardo zu laden. Erfolglos). Und es wäre 
auch eine ziemliche Qual beide Projekte zusammen zu führen. Daher ist es 
für mich viel einfacher direkt zusätzlich einen ATmega328P zu nehmen da 
das Github Projekt für diesen erstellt wurde.

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

J. schrieb:
> ein weiterer Mikrocontroller auf dem PCB laufen welcher ein anderes
> Programm erhält. Da beide mit dem PC kommunizieren wird das Board auch
> zwei USB Anschlüsse haben. Kann ich dann einfach beide USB 5V und GND
> Leitungen verbinden? So würde ich mir eine zweite Sicherung und ein
> zweitges Ferrite Bead sowie einige Kondensatoren sparen weil ich das
> dann ja zwei mal bräuchte. Ich weiß wohl nicht, ob ich das einfach so
> verbinden darf. Insbesondere falls beide USB Kabel an verschiedene PCs
> angeschlossen werden oder sowas.

Wenn beide uC elektrisch verbinden sind, kann es bei der Verbindung zu 
zwei PC ein Problem geben. Zwar selten, denn Laptops sind meist SELV und 
PC meist PELV aber schon 2 PC bilden dann über GND und Schutzleiter eine 
Brummschleife, die zunächstmal Audio stören kann, massiver dann die USB 
Kommunikation.

Aber wenn du Pech hast gibt es sogar einen satten Kurzschluss, z.B.bwenn 
Laptops schon mit anderen Geräten elektrisch verbinden sind und von dort 
Potentialdifferenzen übernehmen.

Ich würde mir also eine andere Lösung überlegen. Für mich klingt dein 
Vorhaben arg zusammengeflickt.

von J. (dignity)


Lesenswert?

Vielen Dank für die Antwort Michael B.
Jep ich kenne mich nicht wirklich aus daher ist mein Plan tatsächlich 
etwas zusammengeflickt. In dem Fall werde ich einfach beide seperat über 
den jeweiligen USB Anschluss versorgen so dass beide 5V und GND 
Verbindungen getrennt bleiben.

Aber nochmal kurz zu meiner anderen Frage: Ich verstehe das Datenblatt 
des CP2102N richtig und der baut einen COM Port auf oder?

: Bearbeitet durch User
von Markus M. (adrock)


Lesenswert?

Es gibt auch USB -> Dual UART Umsetzer, d.h. Du hättest einen 
USB-Anschluss zum PC hin aber zwei UARTs (also serielle Schnittstellen) 
für die beiden Controller. Dann musst Du da nicht rumfrickeln mit zwei 
USB Ports.

Der FT2232D wäre soetwas. Ist aber schon etwas anspruchsvoller zu löten 
mit 48 Pins.

: Bearbeitet durch User
von Rainer W. (rawi)


Lesenswert?

J. schrieb:
> Aber nochmal kurz zu meiner anderen Frage: Ich verstehe das Datenblatt
> des CP2102N richtig und der baut einen COM Port auf oder?

Der COM-Port wird durch den Treiber auf dem PC bereitgestellt. Der 
CP2102N stellt eine USB-to-UART Bridge dar, d.h. der setzt vom UART auf 
USB um.

von Peter D. (peda)


Lesenswert?

J. schrieb:
> Daher ist es
> für mich viel einfacher direkt zusätzlich einen ATmega328P zu nehmen da
> das Github Projekt für diesen erstellt wurde.

Zukunftsweisender wäre es allerdings, das Projekt soweit verstehen zu 
lernen, daß es auch auf dem ATmega32U4 läuft. Dann entfällt der ganze 
Hassle. Vorteilhaft ist dabei der USB-Bootloader.

Ein Projekt als geheime Black-Box zu betrachten, gibt irgendwann Ärger. 
Der eigentliche Spaß am Programmieren entsteht ja erst dann, wenn man 
ein Projekt anpassen und erweitern möchte.

Prinzipiell könnte sogar der ATmega32U4 als USB-UART Bridge dienen, aber 
dazu braucht man auch Programmierkenntnisse.

von Peter D. (peda)


Lesenswert?

J. schrieb:
> In dem Fall werde ich einfach beide seperat über
> den jeweiligen USB Anschluss versorgen so dass beide 5V und GND
> Verbindungen getrennt bleiben.

Ich würde Mouse Bites oder V-Scoring vorsehen, dann kann man beide 
Schaltungen später trennen, wenn man besser programmieren kann.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

J. schrieb:
> Ich brauche tatsächlich zwei da das eine Projekt auf einem ATmega32U4
> läuft. Dieser unterstützt leider nicht den Code den ich von dem Github
> Projekt habe
Doch, das tut er mit allerhöchster Wahrscheinlichkeit. Du musst einfach 
nur noch ein wenig Arbeit in die SW stecken. Ich bin da aus langjähriger 
Erfahrung zu 100% bei peda: es ist immer ungeschickt, Softwareprobleme 
in Hardware zu lösen.

> aber ich habe extra mal versucht den Code auf einen Arduino Leonardo zu
> laden. Erfolglos
"Programmieren" ist dann doch etwas mehr als nur "irgendwo herkopieren 
und compilieren".

Peter D. schrieb:
> aber dazu braucht man auch Programmierkenntnisse.
Ja, so ist es.

J. schrieb:
> So weit ich das im Datenblatt des CP2102N richtig gelesen habe baut der
> ja einen COM Port auf oder?
Ja, so wie es eine USB-RS232 Bridge machen soll.

> So würde ich mir eine zweite Sicherung und ein zweitges Ferrite Bead
> sowie einige Kondensatoren sparen
Wenn es dann noch ums "Sparen" geht: du könntest dir vermutlich den 
kompletten zweiten uC mit allem Klimbim drumrum sparen.

> Insbesondere falls beide USB Kabel an verschiedene PCs angeschlossen
> werden oder sowas.
Dann must du dir sowieso Gedanken um Potentialverhältnisse und 
Ausgleichströme machen.

von Monk (roehrmond)


Lesenswert?

Alternativ zu zwei CP2102N, kannst du einen STM32F103C8T6 mit der 
Firmware von Niklas verwenden, dann hast du 3 COM ports in einem Chip. 
Das wäre etwas billiger und funktioniert ohne Treiber-Installation.

https://www.mikrocontroller.net/articles/USB-Tutorial_mit_STM32
http://stefanfrings.de/stm32/3-Fach-USB-UART.zip

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Monk schrieb:
> Alternativ zu zwei CP2102N, kannst du einen STM32F103C8T6 ... nehmen
Oha, ein Multiprozessorsystem.

Mich beeindrucken solche Ansätze mit technischem Overkill: als tumber 
Schnittstellenbaustein tut dann der potenteste Rechner im Trio seine 
langweilige Arbeit.

von Harald K. (kirnbichler)


Lesenswert?

J. schrieb:
> wird das Board auch zwei USB Anschlüsse haben.

Keine gute Idee. Ist einerseits von der Handhabung her blöd (wer will 
schon zwei USB-Kabel in ein Gerät stöpseln müssen) und kann andererseits 
elektrische Probleme machen.

Lässt sich aber einfach lösen: Nimm einen USB-Hub und pack' den 
ebenfalls auf Deine Platine drauf. Dann gibt es PC-seitig nur einen 
USB-Anschluss.

J. schrieb:
> Ich brauche tatsächlich zwei da das eine Projekt auf einem ATmega32U4
> läuft. Dieser unterstützt leider nicht den Code den ich von dem Github
> Projekt habe (wusste ich zwar vorher aber ich habe extra mal versucht
> den Code auf einen Arduino Leonardo zu laden. Erfolglos).

Was für ominöse "Github-Projekte" sind das denn, die Du da 
zusammenklicken willst?

Ich denke, der Ansatz, zu verstehen, was da geschehen soll, und die 
Firmware zusammenzuführen, daß sie in einem (geeigneten) µC läuft, ist 
definitiv der wertvollere.

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


Lesenswert?

Lothar M. schrieb:
> "Programmieren" ist dann doch etwas mehr als nur "irgendwo herkopieren
> und compilieren".

J. schrieb:
> den Code auf einen Arduino Leonardo zu laden. Erfolglos

compilieren. Ich befürchte fast, hier wurden garnicht die notwendigen 
Anpassungen für einen anderen µC und das andere Board vorgenommen und 
alles neu kompiliert. Sondern eher versucht ein fertiges Binary für ganz 
andere Hardware zu verwenden?

Wenn man schon unbedingt fehlendes Softwarewissen durch Hardware zu 
erschlagen will, dann würde ich wenigstens eine/zwei USB-Isolator(en) 
zur galvanischen Trennung verwenden.

z.B.:
- 
https://www.ti.com/lit/ds/symlink/isousb111.pdf?ts=1719560852634&ref_url=https%253A%252F%252Fwww.google.com%252F

von Helmut -. (dc3yc)


Lesenswert?

J. schrieb:
> Ich kenne mich leider nicht so super mit Elektronik aus und hätte daher
> eine Frage bezüglich eines Mikrocontrollers.

Wenn ich mich nicht super auskennen würde, würde ich bei meinem ersten 
Projekt auf fertige Hardware zurückgreifen und in möglichst kleine 
Unterprojekte aufsplitten. Und nicht erst lernen wollen, wie man ein 
Multiprozessorboard baut. Keep It Simple, Stupid!

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Mich beeindrucken solche Ansätze mit technischem Overkill: als tumber
> Schnittstellenbaustein tut dann der potenteste Rechner im Trio seine
> langweilige Arbeit.

Tja, ist doch total oft so. USB-Serial-Bridges haben vermutlich oft mehr 
Leistung als angeschlossene Controller. Sowas wie Mobilfunk-Modems, 
WiFi-Module, Ethernet-Controller, USB-Host-Controller, welche per 
AT-Commands angesteuert werden, enthalten oft potente ARM-Controller 
(teilweise sogar Cortex-A oder -R), die man dann z.B. mit einem AVR 
steuert...

Man könnte auf dem STM32F1 einfach 2 AVRs emulieren und diese mit den 2 
Datenströmen der 2 VCPs füttern 🤣

von F. (radarange)


Lesenswert?

Du wirst dir hier leider von allerlei Leuten, die meinen, die Weisheit 
mit Löffeln gefressen zu haben, anhören müssen, dass du zu unfähig bist, 
um irgendwas auf die Reihe zu kriegen. Das ist hier leider üblich und 
die Leute haben die Entwicklungen der letzten Jahrzehnte verschlafen und 
sind nun sauer, dass jemand ohne jahrelange Erfahrung auch ein Projekt 
umsetzen kann. Also einfach ignorieren.

Eine Frage habe ich dennoch: Warum muss es eine eigene Platine für dich 
sein? Du willst zwei getrennte Projekte haben, die ggf. an zwei separate 
Computer angeschlossen werden.
Kommunizieren diese Projekte miteinander? Wenn ja, wie?
Warum eine eigene Platine? Das lohnt sich bei deinem Kenntnisstand kaum, 
da du ja nur wenig bis keine eigenen Anpassungen vornehmen willst, da 
bist du mit fertigen Platinen besser beraten. Natürlich ist es nicht 
unmöglich, eigene Platinen herzustellen, aber die Fehlerquellen sind 
vielfältig, das würde ich ohne gutes Verständnis der eingesetzten Chips 
nicht machen wollen. Dein Beitrag macht mir aber eher den Eindruck, dass 
du ein paar fertige Funktionalitäten zusammenpacken willst, also mach 
das doch auch bei der Hardware so: Greife auf möglichst fertige 
Bausteine zurück, damit erreichst du dein Projektziel schnell und musst 
dich nicht um Details kümmern.
Klar, für die industrielle Massenfertigung ist das nichts. Natürlich 
gibt es auch bei Einzelstückzahlen gute Gründe, da gleich was Eigenes zu 
konstruieren, ich kann bisher aber keine erkennen.

von Tilo R. (joey5337) Benutzerseite


Lesenswert?

J. schrieb:
> Ich habe vor dabei einen CP2102N zu verwenden um die
> Kommunikation über einen COM Port zu gewährleisten.

Bist du dir sicher mit dem CP2102N?
Ich habe kurz gesucht, aber den nur im QFN-Package gefunden. Das ist, 
was das Löten angeht, schon einigermaßen fortgeschritten. Definitiv 
nichts für Anfänger.
Such' besser nach einer (Dual-)UART-Bridge im SOIC-Gehäuse. Oder 
zumindest QFP.

von Harald K. (kirnbichler)


Lesenswert?

Tilo R. schrieb:
> Such' besser nach einer (Dual-)UART-Bridge

Ist eigentlich schon jemandem aufgefallen, daß die zweite Schaltung 
einen Atmega32U4 verwenden soll, der selbst ein USB-Device ist?

Solange der Threadstarter nicht seine geheimen "Github-Projekte" nennt, 
kann man im Kreise herumraten.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Harald K. schrieb:
> Ist eigentlich schon jemandem aufgefallen, daß die zweite Schaltung
> einen Atmega32U4 verwenden soll, der selbst ein USB-Device ist?

Aber sicher doch!

Natürlich kann man den CP2102 (für den m328p) nutzen!
Aber sonst, kann ich wenig zu dem Problem sagen, denn zu viele 
Unbekannte.

Außer:
Warum nicht einen Nano und einen Micro nebeneinander auf einer selbst 
gebastelten Platine?

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> Mich beeindrucken solche Ansätze mit technischem Overkill: als tumber
> Schnittstellenbaustein tut dann der potenteste Rechner im Trio seine
> langweilige Arbeit.

In etlichen meiner Produkte arbeiten 32-Bit-Hochleistungsprozessoren, 
mit denen man in den 1980er Jahren High-End-Workstations gebaut hätte. 
Und was machen sie? Ein paar Spannungswerte abfragen, in Abhängigkeit 
davon irgendwelche sehr langsame Schaltfunktionen ausführen und 
gelegentlich noch ein paar Statusmeldungen per UART absondern. Selbst 
ein i4004 würde sich da langweilen.

von Rolf (rolf22)


Lesenswert?

J. schrieb:
> Kann ich dann einfach beide USB 5V und GND Leitungen verbinden?

Mal abgesehen von den möglichen elektrischen Problemen, die andere schon 
erwähnt haben, kann es auch Probleme mit der USB-Logik geben. Bei dir 
können ja Betriebszustände auftreten, die nicht vorgesehen sind: 5 V 
liegen an, aber an dem einen CP2102N ist kein PC angeschlossen (die 5 V 
kommen dann von dem zweiten USB-Anschluss). Was dieser CP2102N und der 
Host-Controller dann machen, weiß man nicht so genau.

von J. (dignity)


Lesenswert?

Wow hier sind ja einige Antworten zusammen gekommen.
Ich bin zumindest froh darüber, dass meine beiden Fragen vollständig 
beantwortet wurden.

Zum verlöten: Ich selbst werde nur die THT Komponenten löten. Alle SMD 
Komponenten werde ich bei JLCPCB per Maschine löten lassen. Ich bin 
einfach nicht gut genug im Löten um SMD zu verwenden.

Da viele gefragt haben um was für Projekte es sich handelt:

Auf dem ATmega32U4 läuft das Raphnet gc_n64_usb_v3 Projekt. Dabei 
handelt es sich um einen Adapter für Nintendo 64 / Gamecube Controller 
zu USB.
https://github.com/raphnet/gc_n64_usb-v3

Auf dem ATmega328P soll das NintendoSpy (bzw. die Fork RetroSpy) laufen. 
Dabei handelt es sich um ein Input Display. Also ein Programm, dass am 
PC anzeigt welche Knöpfe am N64/GC Controller gedrückt werden.
https://github.com/jaburns/NintendoSpy

Beide Controller (N64/GC) nutzen jeweils nur eine Datenleitung welche 
auf 3V3 gezogen wird (über 1k Widerstand). Die beiden uC sind also quasi 
komplett voneinander getrennt bis auf die Tatsache, dass beide an der 
N64/GC Datenleitung "mithören".

Zum PCB selbst: Ich habe bereits einen funktionierenden Prototypen für 
das Raphnet Projekt erstellt. Das klappt wunderbar. Das NintendSpy 
Projekt auf Hardware umzusetzen sollte ebenfalls kein Problem sein, da 
hier nur die nötigsten Komponenten für den ATmega328P vorhanden sein 
müssen und an zwei Pins werden dann die Datenleitungen angelegt. Also an 
sich braucht der nur Strom. Sollte also recht leicht umzusetzen sein. 
Ich teste natürlich alles vorher mal mit einem Arduino Nano. Habe 
tatsächlich keinen ATmega328P hier und muss daher ein paar Tage warten 
bis der ankommt. Will das einfach mal testen bevor ich dann das PCB 
erstelle.

: Bearbeitet durch User
von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

J. schrieb:
> Dabei handelt es sich um ein Input Display. Also ein Programm, dass am
> PC anzeigt welche Knöpfe am N64/GC Controller gedrückt werden.

Aber der gc_n64_usb_v3 überträgt doch schon die gedrückten Knöpfe auf 
den PC? Warum musst du die nochmal übertragen?

von J. (dignity)


Lesenswert?

Niklas G. schrieb:
> J. schrieb:
>> Dabei handelt es sich um ein Input Display. Also ein Programm, dass am
>> PC anzeigt welche Knöpfe am N64/GC Controller gedrückt werden.
>
> Aber der gc_n64_usb_v3 überträgt doch schon die gedrückten Knöpfe auf
> den PC? Warum musst du die nochmal übertragen?

Das ist richtig. Ich habe nur keine Ahnung, wie das am PC ausgelesen 
wird. Ich müsste mich quasi durch den Project64 Code arbeiten (ein 
Nintendo64 Emulator) sowie durch den Raphnet Code und den NintendoSpy 
Code um alles zusammen zu führen. Es ist für mich definitiv einfacher 
direk einen zweiten uC zu verwenden mit zweitem USB Anschluss und mir 
über diesen gewaltigen Haufen Code keine Gedanken zu machen.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

J. schrieb:
> Ich müsste mich quasi durch den Project64 Code arbeiten (ein Nintendo64
> Emulator) sowie durch den Raphnet Code und den NintendoSpy Code um alles
> zusammen zu führen.

Alles nicht nötig. Das Teil meldet sich per HID an. Du brauchst nur eine 
Anwendung die Input-Ereignisse vom Betriebssystem entgegen nimmt und 
anzeigt (eine Art Keylogger). Ist dann sogar Hardware-Unabhängig. Eine 
schnelle Google-Suche liefert:

https://github.com/djlastnight/HidRawDataWatcher
https://www.inputlog.net/

Unter Linux dürfte "xev" das auch erfüllen.

NintendoSpy unterstützt sogar XInput. Eventuell kann das sogar direkt 
ohne Modifikation die Daten vom gc_n64_usb_v3  abrufen, je nachdem wie 
gc_n64_usb_v3 die Eingaben als Controller-Events reinschickt.

Und selbst wenn nicht, der Code für XInput ist total simpel, da müsste 
man relativ leicht stattdessen einen HID-Reader einpflanzen können:

https://github.com/jaburns/NintendoSpy/blob/master/Readers/XInputReader.cs

: Bearbeitet durch User
von J. (dignity)


Lesenswert?

Wow daran habe ich gar nicht gedacht Niklas. Danke dir das sollte 
tatsächlich gehen. Da werde ich mich mal rein arbeiten. Ist definitiv 
einfacher.

Eine kurze Frage hätte ich aber noch zum Thema Brummschleife. Eine der 
ersten Antworten hier war ja dass wenn ich zwei uC auf einem Board habe 
und von zwei USB Ports 5V und GND verbinde und dann die USB Ports mit 
verschiedenen Computern verbinde dann entsteht eine Brummschleife.
Im NintendoSpy Projekt gibt es eine kurze Anleitung 
(https://github.com/jaburns/NintendoSpy/blob/master/docs/tutorial-n64.md) 
die zeigt, dass hier ein N64 Verlängerungskabel aufgeschnitten wird und 
das Signal sowie GND beide ein weiteres Kabel angelötet bekommen welches 
zum Arduino UNO führt. Dabei wird der N64 GND einfach am UNO GND Pin 
verbunden. Meine Frage ist einfach: kommt es hier denn nicht auch zu 
einer Brummschleife? Weil das Verlängerungskabel ja eigentlich vom N64 
zum Controller führt und gleichzeitig wird GND vom N664 und das Signal 
am uC angeschlossen. Ist eine einfach Interessensfrage da ich jetzt den 
Ansatz von Niklas weiter verfolgen werde und das lieber über einen HID 
Reader lösen will.

Alles Gute
- Jannis

ps.: Der N64 scheint nur SELV und kein PELV zu sein. Liegt das dann 
daran, dass es funktioniert?

pps.: Habe mich mal mit NintendoSpy befasst und der XInput Reader kann 
tatsächlich den Raphnet Adapter auslesen. Ich muss dann nur einen 
eigenen Skin erstellen. Ist aber ja nur ein wenig XML und das ist recht 
gut dokumentiert. Sollte innerhalb von kurzer Zeit gehen. Vielen Dank 
für deinen Tip Niklas.

: Bearbeitet durch User
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.