SPI im Tiefschlaf deaktiviert?

Hallo,

ich schicke den ATMEL Controller (vom UNO R3) in den Tiefschlaf set_sleep_mode(SLEEP_MODE_PWR_DOWN);, damit die Stromaufnahme möglichst gering ist und lasse ihn per Watchdogtimer aufwachen. Der ADC wird ebenfalls abgeschaltet, sämtliche Peripherie Bauteile welche ich nutze werden über einen Pin mit Spannung versorgt und sind auch abgeschaltet. Die Stromaufnahme des genutzten NRF24 Funkmoduls ist leider zu hoch für einen Pin und das Modul deshalb über einen Transistor geschaltet:
3,3V -> Vcc NRF24
GND NRF24 -> Collector Transistor und somit beim Durchschalten über Emitter Transistor auf GND

Alles funktioniert wunderbar. (Funkübertragungen, Messungen, usw), auch der Transistor schaltet sauber. Sind die Datenleitungen des Funkmoduls angeschlossen liegt am Funmodul eine Spannung von 2,7V an wenn der Transistor sperrt und 3,3V wenn er durchschaltet. Klemme ich die Datenleitungen des Funkmoduls ab habe ich Spannungen von 0V und 3,3V (wie gewünscht). Der Transistor schaltet nur durch, wenn der µC wach ist und wird sonst abgeschaltet.

Meine Frage: Woher kommen die 2,7V? Schaltet SPI im Power_Down nicht komplett ab? Oder ist das ganze vom Design her schon zum Scheitern verurteilt.

Vielen Dank für eure Hilfe!

Prinzipiell gilt daß bei Integrierten Schaltungen die Eingänge keine Spannung höher als die Versorgungsspannung haben dürfen. Wenn Du die Versorgungsspannung kapst dann dürfen die Eingänge auch keine Spannung haben.
Sie Schutzdioden der Eingänge bringen die Versorgungsspannung/masse zu den Versorgungspins.
Eine Schaltung in sleep zu schicken die das nicht vorgesehen hat, ist nicht so trivial wie es den Anschein hat.

Miß mal nach, Sind die SPI Ausgänge im sleep-Modus auf Massepotential?

Grüße Uwe

Nein, leider nicht. Da ich das Funkmodul im ungenutzten Zustand nicht auf einen geringen µA Bereich drücken kann versuche ich es jetzt wie folgt: Ich schalte die Spannungsversorgung des Moduls ab und trenne nicht GND. Bevor ich den Transistor sperre führe ich folgende Zeilen aus um alle SPI relevanten Pins des Arduinos abzuschalten:

SPI.end();
digitalWrite(CSN_PIN, LOW);
digitalWrite(CE_PIN, LOW);
digitalWrite(MOSI_PIN, LOW);
digitalWrite(SCK_PIN, LOW);

SPI wird nachdem die Spannungsversorgung des Funkmoduls wieder hergestellt ist durch die Initialisierung des Funkmoduls automatisch mit initialisiert.
Funktioniert mit händischem Trennen der Versorgungspannung des Funkmoduls bisher sehr gut (kein PNP-Transistor zur Hand). Pins habe ich gemessen, 0V. Damit dürfte kein undefinierter Zustand an den Eingängen des Funkmoduls vorhanden sein. Ist das vielleicht ein zielführender Ansatz?

Statt Ausgang LOW zu schalten ist besser die Pins als Eingang zu schalten und dann das Modul von der Spannungsversorgung zu trennen. Beim Einschalten umgekehrt.
Zusätzlich hochohmige Widerstände Zwischen Pins und Masse schalten (100kOhm tuns)

Grüße Uwe

Ich hoffe meine späte Antwort verärgert niemanden: vielen Dank! Ich hab es umgesetzt und es hat funktioniert. Bis zu dem Zeitpunkt an dem das Projekt vom UNO Board auf ein Breadboard mit 8MHz Takt umgestellt habe. Stütz und Entstörkondensatoren sind natürlich berücksichtigt, auch einen externen Quartz habe ich genutzt. Das Senden mit dem Modul funktioniert einwandfrei. Das Empfangen des Ack Paket hingegen gar nicht. Ich habe einige Anspielungen auf dieses Problem im Internet gefunden, leider konnte die vorgeschlagenen Korrekturen (externer Quartz, Kondensatoren) nicht wirklich weiterhelfen. Auch ohne SPI Deaktivierung oder DEEP SLEEP des UNOs funktioniert der Empfang des Acks nicht. Gibt es hier vielleicht einen Tipp?