Forum: Mikrocontroller und Digitale Elektronik Adruino schaltet Rasperry an und aus


von cont f. (ctrlfr)


Lesenswert?

Hallo

ich will mit dem Arduino Uno den Raspberry (alle Modelle) an- und 
aus-schalten.

Habe im Netz eine Anleitung 
(http://www.kriwanek.de/arduino/aktoren/304-lasten-mit-power-mosfet-schalten.html) 
gefunden, welche einen MOSFET als schalter einsetzt.

Da ich den IRLIZ44N von der Anleitung nicht bekommen habe,
verwende ich den IRF1010N 
(http://www.irf.com/product-info/datasheets/data/irf1010n.pdf).

Das Schalten funktioniert.

Jedoch: einfach so ausschalten ist nicht beim Raspberry.
Der Adruino darf den Raspberry erst abschalten wenn dieser 
heruntergefahren ist (Dateisystem ausgehängt). Folgender Hinweis im Netz 
(http://www.raspberrypi.org/forums/viewtopic.php?p=191797) TX-Pin geht 
LOW wenn Raspberry aus.

Also überwacht (digitalRead()) mein Adruino den TX-Pin vom Raspberry.

Folgendes erkennt der Adruino:
Raspberry am Netzteil, Rasperry läuft: TX-Pin = HIGH
Raspberry am Netzteil, Raspberry aus: TX-Pin = LOW
(soweit wie gewünscht)
Raspberry vom Netzteil getrennt: TX-Pin floated HIGH/LOW
(kann ich auch verstehen, da zustand nicht definiert)
Raspberry am Netzteil jedoch nur GND Negativ verbunden: TX-Pin LOW
(so wäre es gewünscht, TX-Pin LOW => Raspberry aus, tiptop)
Raspberry am Netzteil jedoch nur + Positiv verbunden: TX-Pin HIGH
Hier ist das PRoblem. Der TX-Pin ist HIGH obwohl der Raspberry aus ist.
Dieses verhalten habe ich wenn ich A, den Raspberry vom GND Trenne
und B, den Raspberry mittels MOSFET ausschalte.


Ihr sollt mir helfen zu verstehen:
1. wieso der TX-Pin HIGH geht wenn ich GND trenne (mittels MOSFET oder 
auch manuell).
2. ob es Probleme gibt, wenn ich diesen MOSFET so einsetze? und warum?
(der Adruino könnte das HIGH auf TX-Pin ignorieren solange der MOSFET 
nicht den Raspberry
 nicht mit power versorgt).
3. meine intuition sagt, GND sollte zwischen Raspberry und Arduino immer 
verbunden sein.
Stimmt das? warum in diesem fall?


Was ist die Lösung um den Raspberry korrekt ein und auszuschalten? Es 
muss zwingend die Stromversorgung unterbrochen werden, da der Raspberry 
auch viel Strom verbraucht wenn er zwar ausgeschaltet ist aber die 
Versorgung noch läuft. Daher der MOSFET. Erst ausschalten wenn Signal 
vom Raspberry kommt (Dateisystem ausgehängt). Daher der TX-Pin. Jedes 
einfach gesparte mA ist wichtig (Solar/Batteriebetrieb). Relais sollen 
vermieden werden.


Grüsse
fr

von Joachim B. (jar)


Lesenswert?

cont fra schrieb:
> Was ist die Lösung um den Raspberry korrekt ein und auszuschalten?

ich würde mich an die LEDs halten, runtergefahren sind doch alle LEDs 
aus ausser power wenn ich mich recht erinnere (Pi B Version2)

die könnte man abfragen, wenn auf den LEDs eine gewisse Zeit keine 
Aktivität mehr ist Power trennen.

cont fra schrieb:
> 1. wieso der TX-Pin HIGH geht wenn ich GND trenne (mittels MOSFET oder
> auch manuell).

der Tx geht bestimmt nicht auf high, das macht der Inputport vom Atmel 
weil die Leitung offen ist und der GND Bezug fehlt, Abhilfe: GND 
verbunden lassen oder externen pulldown am Port anlegen

: Bearbeitet durch User
von Markus H. (haniham) Benutzerseite


Lesenswert?

Joachim B. schrieb:
> cont fra schrieb:
>> 1. wieso der TX-Pin HIGH geht wenn ich GND trenne (mittels MOSFET oder
>> auch manuell).
>
> der Tx geht bestimmt nicht auf high, das macht der Inputport vom Atmel
> weil die Leitung offen ist und der GND Bezug fehlt, Abhilfe: GND
> verbunden lassen oder externen pulldown am Port anlegen

Demnach bspw. einen P-Ch MOSFET zum Trennen der +5V Seite verwenden oder 
einen Optokoppler nutzen, welcher beide Seiten verbindet.

Joachim B. schrieb:
> cont fra schrieb:
>> Was ist die Lösung um den Raspberry korrekt ein und auszuschalten?
>
> ich würde mich an die LEDs halten, runtergefahren sind doch alle LEDs
> aus ausser power wenn ich mich recht erinnere (Pi B Version2)
>
> die könnte man abfragen, wenn auf den LEDs eine gewisse Zeit keine
> Aktivität mehr ist Power trennen.

Besser wäre es aber wahrscheinlich wirklich, wenn du dich nicht von 
einem Pin abhängig machst, der eigentlich für etwas anderes gedacht war, 
also nicht TX sondern etwa wie vorgeschlagen die Zustands-LEDs

von Jim M. (turboj)


Lesenswert?

cont fra schrieb:
> Ihr sollt mir helfen zu verstehen:
> 1. wieso der TX-Pin HIGH geht wenn ich GND trenne (mittels MOSFET oder
> auch manuell).

Wo soll er denn sonst hingehen? Der komplette RPi liegt dann doch auf 
VCC Potential, also auch der TX Pin. Das sieht man sofort im Schaltplan, 
wenn man einen gezeichnet hätte.

> 2. ob es Probleme gibt, wenn ich diesen MOSFET so einsetze? und warum?

Ich würde immer VCC mit einem P-Kanal MOSFET schalten. Maximal 4 Volt 
VGSth ist für 5 Volt Schaltspannung IMO auch zuviel - der o.g. MOSFET 
macht erst bei 10 Volt "voll" auf. Man will normalerweise einen, der bei 
5 Volt schon voll auf ist (logic level MOSFET).

> 3. meine intuition sagt, GND sollte zwischen Raspberry und Arduino immer
> verbunden sein.
> Stimmt das? warum in diesem fall?

Siehe oben. Die Pins am RPi haben AFAIK alle ESD Dioden drin, und liegen 
bei getrenntem GND auf VCC. Liegt ein Pin hart auf GND, würde über ihn 
der RPi versorgt werden, dabei dürfte der Pin überlastet durchbrennen.

von cont f. (ctrlfr)


Lesenswert?

Markus H. schrieb:
> Joachim B. schrieb:
>> ...
>> ich würde mich an die LEDs halten, runtergefahren sind doch alle LEDs
>> aus ausser power wenn ich mich recht erinnere (Pi B Version2)
>> ...
> ...
> Besser wäre es aber wahrscheinlich wirklich, wenn du dich nicht von
> einem Pin abhängig machst, der eigentlich für etwas anderes gedacht war,
> also nicht TX sondern etwa wie vorgeschlagen die Zustands-LEDs

Mit den LED's gibts ein gebastel. Fototransistor draufkleben oder Kabel 
anlöten ist zu anstrengend. Tests mit HIGH setzen von einem GPIO ohne 
zusatzfunktion zeigen dass dieser LOW geht wenn der Raspberry 
ausgeschalten wird. Dann bleibt der TX-Pin frei.


Jim Meba schrieb:
> Wo soll er denn sonst hingehen? Der komplette RPi liegt dann doch auf
> VCC Potential, also auch der TX Pin.

Verrückt, dachte nicht dass sowas geht. Aber tatsächlich, alle GPIO-Pins 
und die Anoden und Kathoden der LEDS und das Gehäuse der USB-Ports und 
des Netzwerk-Ports sind auf HIGH.
Gibt das nicht probleme wenn der Netzwerkanschluss eingesteckt ist und 
durch das Shielding des Netzwerkkabels auf GND gezogen wird? Da müsste 
dann doch Strom fliessen?

Jim Meba schrieb:
> Ich würde immer VCC mit einem P-Kanal MOSFET schalten.
Werde LogicLevel P-MOSFET suchen. Dann GND zwischen Arduino und 
Raspberry immer verbunden lassen
und nur + Schalten.

Jim Meba schrieb:
> Liegt ein Pin hart auf GND, würde über ihn
> der RPi versorgt werden, dabei dürfte der Pin überlastet durchbrennen.

Wenn wir das jetzt umkehren mit dem P-MOSFET:
Es wird I2C mit einem Levelshifter zwischen Raspberry und Adruino 
gehängt. Der Levelshifter wird immer mit + und GND versorg.

Wenn der ganze Raspberry dann auf GND liegt und nur die I2C Pins 
gePull-Up'd werden, brennen diese Pins dann auch durch?

: Bearbeitet durch User
von Joachim B. (jar)


Lesenswert?

cont fra schrieb:
> Wenn der ganze Raspberry dann auf GND liegt und nur die I2C Pins
> gePull-Up'd werden, brennen diese Pins dann auch druch?

mal langsam, schalte ich VCC am Pi ab und der Pi GND ist mit dem Atmel 
GND verbunden bekommt der PI keine Spannung über seine Ports 
vorausgesetzt die Atmel Ports liefern keine Spannung und das tun sie 
normalerweise nicht wenn keine Pullups aktiv sind sie nicht auf out und 
high stehen und sogar noch ein pulldown auf GND liegt.

die I2C vom PI sind soweit ich mich erinnere hart verdrahtet nach PI Vcc 
aber diese wird ja abgeschaltet oder von welchen I2C pullups ist die 
Rede?
pi-seitig oder atmel-seitig?

ausserdem mag der PI an seinen Ports keine höhere Spannung als 3,3V also 
entweder den Atmel sicherheitshalberr mit 3,3V betreiben oder 
Pegelwandler (die ich nicht mag, ich nehme lieber Serien R + Ableitdiode 
nach 3,3V doof nur das wir die abschalten, ergo auf der Pi Seite doch 
die LEDs befragen)

cont fra schrieb:
> Tests mit HIGH setzen von einem GPIO ohne
> zusatzfunktion zeigen dass dieser LOW geht wenn der Raspberry
> ausgeschalten wird.

da bietet sich ein Transistor an der mit pulldown am GPIO dann sperrt 
und am Collector einen Atmel Port auf high setzt (mit Pullup)

Doof halt nur wenn irgendein Programm den Port dann umschaltet und der 
Atmel dem PI den Saft klaut.

von cont f. (ctrlfr)


Lesenswert?

Joachim B. schrieb:
> die I2C vom PI sind soweit ich mich erinnere hart verdrahtet nach PI Vcc
> aber diese wird ja abgeschaltet oder von welchen I2C pullups ist die
> Rede?
> pi-seitig oder atmel-seitig?

Hab da zuwenig ausgeholt:

Der Levelshifter von Adafruit hat eigene 10k pullups 
(https://www.adafruit.com/products/757). Den schalte ich später zwischen 
Raspberry und Adruino.
Bei der RealTimeClock von ChronoDot 
(http://docs.macetech.com/doku.php/chronodot_v2.0) musste ich pullups 
(10k) einlöten, da sonst (jedenfalls im Ausgebauten zustand) der 
Batterieverbrauch zu hoch ist.

Wenn SDA und SCL HIGH sind durch diese pullups den Raspberry 
rück-speisen, wäre das Problem behoben wenn ich Levelshifter, RTClock 
und Raspberry + an den gleichen P-MOSFET hänge. Dann wird alles 
gleichzeitig abgeschalten.

Dann bleibt höchstens die Frage ob der LEvelshifter ein Problem hat
wenn ich bei dem + auf der 3.3V seite (Raspberry) abhänge. GND (3.3V 
seite) und + & GND auf der 5V seite (Arduino) anlasse.

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.