PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Raspberry Pi soll mit Arduino kommunizieren. 3,3 <-> 5V



pupo
03.02.2018, 18:13
Hallo zusammen,

ich möchte, dass mein Raspberry Zero W mit einem Arduino Pro Mini kommunizier (Rx, Tx). Dummerweise habe ich nur Arduinos in 5-Volt-Ausführung gekauft. Nun liest man ja überall, dass ich einen Spannungsteiler oder so dazwischensetzen muss, weil die Raspberry-Kontakte nur 3,3 Volt vertragen und der Arduino sonst den Raspberry grillt.
Ich betreibe meinen Arduino aber eh nur mit einem 3,7 Volt LiPo. Er beschwert sich auch nicht großartig drüber, sondern macht, was er soll. Kann ich auf den Spannungsteiler verzichten? Wenn ich auf der einen Seite 3,7 Volt reinstecke, kommen auf der anderen doch keine 5 Volt raus, oder?

Gruß Pupo

HaWe
03.02.2018, 18:54
Hallo zusammen,

ich möchte, dass mein Raspberry Zero W mit einem Arduino Pro Mini kommunizier (Rx, Tx). Dummerweise habe ich nur Arduinos in 5-Volt-Ausführung gekauft. Nun liest man ja überall, dass ich einen Spannungsteiler oder so dazwischensetzen muss, weil die Raspberry-Kontakte nur 3,3 Volt vertragen und der Arduino sonst den Raspberry grillt.
Ich betreibe meinen Arduino aber eh nur mit einem 3,7 Volt LiPo. Er beschwert sich auch nicht großartig drüber, sondern macht, was er soll. Kann ich auf den Spannungsteiler verzichten? Wenn ich auf der einen Seite 3,7 Volt reinstecke, kommen auf der anderen doch keine 5 Volt raus, oder?

Gruß Pupo

5V UART auf keinen Fall ohne Spannungsteiler an Raspis!
Lipos können auch Überspannungen haben.

Spannungsteiler s.:
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689&start=30#p70513
oder
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8491&start=30#p67459
Levelshifter gehen manchmal auch, u.U. sogar noch besser und flexibler, aber nur mit wirklich geeigneten, nicht mit allen erhältlichen.

PS:
I2C allerdings geht ohne, wegen eingebauter Raspi-Pullups.

pupo
03.02.2018, 23:03
OK, ich dachte der AMS1117 wäre geeignet, aber dann mache ich so wie du gesagt hast mit einem Spannungsteiler. Danke

- - - Aktualisiert - - -

Ich habe den Spannungsteiler auf einem Steckbrett ausprobiert, aber nicht bemerkt, dass mir die Verbindung zwischen dem 47 K - Widerstand und GND herausgerutscht ist. Der RasPi geht noch. Aber wenn ich mit Minicom eine Verbindung zum Arduino aufbauen will, kommt nichts. Wie finde ich heraus, ob ich den die UART-Funktion des RasPis zerstört habe, oder ob ich noch einen andern Fehler mache?

HaWe
04.02.2018, 10:23
du kannst die UART GPIOs genau wie alle anderen GPIOs ansteuern und auslesen. Ich verwende dazu wiringPi, die Libs bieten digitalRead() und digitalWrite() ähnlich wie bei Arduino, ebenfalls kannst due input_pullup (oder auch input_pulldown) setzen, wenn ich mich recht erinnere. Damit kannst du die Pins grob testen. Ob die UART Funktionen allerdings ok sind - dazu wirst du einen UART Sensor, andere UART Geräte oder ein Oszi brauchen.

- - - Aktualisiert - - -

PS,
welche UART Adresse (dev tree) verwendest du auf dem Pi?
"/dev/serial0" oder die älteren "/dev/ttyAMA0" oder "/dev/ttyAMA1" ?
Ansonsten kenne ich minicom nicht, aber die baudrates müssen ntl übereinstimmen - welche verwendest du bei beiden UARTs?

du weißt aber schon, dass du auch den Arduino direkt über USB mit dem raspi verbinden kannst? (dann stimmen nämlich automatisch die Spannungen!)
der Arduino verwendet dann Serial an USB statt UART, und der Raspi z.B. "/dev/ttyUSB0" statt "/dev/serial0"
(Raspi-USB-Name austesten mit dmesg | tail )

pupo
04.02.2018, 19:39
Mein Arduino hat keinen USB-Anschluss. Und beim Raspberry zero w ist der einzige USB schon belegt. Als Adresse nehme ich /dev/tty/AMA0 , das war aber eher geraten, weil die beiden anderen Adressen nicht zur Verfügung standen. Wenn ich die Rx und Tx - Kabel anstecke oder löse, werden unter /dev/ genau die selben Adressen angezeigt wie vorher. Minicom starte ich mit 9600 Baud. Auf dem Sketch des Arduino ist ebenfalls 9600 Baud angegeben, mit denen er sich verbinden soll. Statt Minicom hatte ich auch so ein Pythonskript versucht, Python gibt mir dann den Fehler, der Port sei schon offen und er könne ihn daher nicht öffnen (das passiert auch direkt nach einem Neustart).
Inzwischen habe ich gelesen, dass der Raspberry merkwürdige Startoptionen hat und per Default die UART-Schnittstelle nicht aktiviert hat und sie zweitens als Terminal nutzt. Ich habe beides in den Startoptionen abgestellt. Bringt aber nichts.

HaWe
04.02.2018, 20:31
Das mit UART deaktivieren fürs Startterminal stimmt - etwas anderes musste ich beim Pi2 nicht deaktivieren, bei mir musste UART aktiviert werden, aber die serielle Konsole für UART deaktiviert.
Der Zero kann da aber anders sein, den kenne ich nicht.

Wenn aber alles richtig war, dann bleibt letztendlich nur Austesten mit nachweislich funktionierenden UART Geräten oder Tests mit Oszi etc. - oder mit einem 2. neuen Pi zum Vergleich, fürchte ich... :-/

wenn du ein UART gerät hast (z.B. ein GY-NEO GPS):
gib doch mal
dmesg | tail
ein, dann schließe es an, und dann nochmal
dmesg | tail
und schau, ob er was erkannt hat

- - - Aktualisiert - - -

PS,
du schriebst
/dev/tty/AMA0
es müsste aber mE heißen
/dev/ttyAMA0 (kein slash zwischen tty und AMA0!)
oder alternativ (neu)
/dev/serial0

serial0 ist kompatibel zu allen neuen Raspis (2,3,zero)

guck auch mal hier:
http://www.mindstormsforum.de/viewtopic.php?f=78&t=8689&start=15#p67781
1. Add the line
enable_uart=1
to the '/boot/config.txt' file, this line will set up the Serial Port UART and the necessary clocks on all Pi models.
2. Remove the phrase "console=serial0,115200" from the '/boot/cmdline.txt' file.
This action prevents Linux from starting a Console on the Serial Port.

pupo
06.02.2018, 18:12
Ich muss das ausprobieren, komme aber wahrscheinlich erst am Wochenende dazu. bei /dev/tty... mache ich es normalerweise so, dass ich mit der Tab-Taste den Pfad automatisch vervollständigen lasse, also dürfte es da wahrscheinlich keinen Fehler geben.
Die beiden Tipps aus dem Mindstormsforum hast du mir ja, glaube ich, neulich schon mal gegeben, und ich habe sie auch befolgt.

Übrigens habe ich mir noch einen Arduino in 3,3 Volt-Version bestellt und sogar noch einen neuen Raspberry Zero W, damit ich nicht ewig versuche, mit zwei kaputten Geräten rumzumachen und mich die ganze Zeit wundere, warum es nicht geht.

- - - Aktualisiert - - -

übrigens noch zu serial0: Bist du ganz sicher? Ich schreibe gerade von einem recht neuen Raspberry 3 B aus und habe hier nur /dev/serial1 , kein /dev/serial0. Oder erscheint der Port erst, wenn Rx und Tx wirklich mit einem anderen Gerät verbunden sind?

HaWe
06.02.2018, 18:36
Ich muss das ausprobieren, komme aber wahrscheinlich erst am Wochenende dazu. bei /dev/tty... mache ich es normalerweise so, dass ich mit der Tab-Taste den Pfad automatisch vervollständigen lasse, also dürfte es da wahrscheinlich keinen Fehler geben.
Die beiden Tipps aus dem Mindstormsforum hast du mir ja, glaube ich, neulich schon mal gegeben, und ich habe sie auch befolgt.

Übrigens habe ich mir noch einen Arduino in 3,3 Volt-Version bestellt und sogar noch einen neuen Raspberry Zero W, damit ich nicht ewig versuche, mit zwei kaputten Geräten rumzumachen und mich die ganze Zeit wundere, warum es nicht geht.

- - - Aktualisiert - - -

übrigens noch zu serial0: Bist du ganz sicher? Ich schreibe gerade von einem recht neuen Raspberry 3 B aus und habe hier nur /dev/serial1 , kein /dev/serial0. Oder erscheint der Port erst, wenn Rx und Tx wirklich mit einem anderen Gerät verbunden sind?

ja, serial1 ist beim Pi3 das, wo das eingebaute BT oder WiFi oder so dranhängt.
Ich meine schon, dass serial0 erst erscheint, wenn was dran läuft (ohne Gewehr ;) )