Seite 1 von 4

Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 11:42
von FUEL4EP
Für meinen neuen Rolladenaktor verwende ich einen bidirektionalen Level Shifter von Sparkfun zwischen dem Arduino Pro Mini und den CC1101 Tranceiver Modul, da die Akkuspannung des Rolladenaktors bis 6V betragen kann:

Extract_of_schematics_Level_shifter_CC1101.png
Im Sleep Mode des Sketches messe ich eine Stromaufnahme von ca. 600 .. 700 uA statt der erwarteten <100 uA (100 uA wegen WOR Mode). Den Arduino Pro Mini und den CC1101 Tranceiver hatte ich vorab in einem Testbed auf geringe Leckströme vermessen. Beide zusammen hatten <10uA Leckstrom. Daher bin ich auf die Suche gegangen, was den unerwartet hohen Sleep-Strom verursacht und bin bei den Level Shiftern fündig geworden. Hier ihr Schaltbild für ein Signal:


Level_Shifter_schematics.png
Level_Shifter_schematics.png (8.32 KiB) 766 mal betrachtet
Das Messen der Pegel der SPI Signale im Sleep-Mode zwischen Arduino Pro Mini und CC1101 ergab, dass bei AsksinPP SCK auf Low gehalten wird (ich habe das auch bei mehreren anderen AsksinPP Sensoren ohne Level Shifter so gemessen). Dadurch ziehen die beiden 10kOhm Widerstände des Levelshifters im SleepMode zusammen (Vhv + Vlv)/10kOhm Strom. Das erklärt die gemessene erhöhte Stromaufnahme im Sleep-Mode.

Frage und Bitte an @papa: Kann AsksinPP (Radio.h?) so verändert werden, dass im Sleep-Mode SCK auf high gezogen wird. Das sollte ohne Nebenwirkungen gehen, solange nur ein SPI Slave selektiert ist.

Wo und wie kann ich das lokal mal zum Testen patchen?

Re: Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 11:47
von jp112sdl
Wenn du einen >>>Power-Pin für das CC1101 definierst<<<, dann wird der >>>SCK Pin im Sleep zum INPUT<<< (also hochohmig).

Auch wenn du an dem Pin die Vcc vom CC1101 nicht (ab)schaltest, kannst du es ja mal probieren.

Re: Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 11:55
von FUEL4EP
Hi Jérôme ,

vielen Dank für Deinen sehr guten Tipp! Ich werde das ausprobieren und dann berichten.

P.S.: Es gibt immer wieder Neues in AsksinPP zu entdecken. Sehr Vieles ist bereits angelegt :D

Re: Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 12:40
von jp112sdl
FUEL4EP hat geschrieben:
03.01.2022, 11:55
Es gibt immer wieder Neues in AsksinPP zu entdecken. Sehr Vieles ist bereits angelegt
Wenn man sich nicht ab und zu aktiv damit befasst, vergisst man auch schnell wieder.
Aber das mit der Abschaltung ist noch nicht so lange drin und kam erst im Zuge der Innogy/RWE-Sketche mit rein.
z.B. bei der 8fach-Fernbedingung BRC8 wird das CC1101 im Sleep-Mode komplett abgeschaltet (Vcc), wodurch eine Ruhestromaufnahme von 0,7µA erreicht wird.
Und beim WSC2 wird sogar die gesamte Schaltung inkl. AVR komplett vom Strom getrennt.

Re: Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 13:35
von FUEL4EP
Hi Jérôme,

zuerst schien Dein Tipp den Ruhestrom auf <100uA gedrückt zu haben.

Mein Sketch-Änderung ist wie folgt:

Code: Alles auswählen

#define PWRPIN_SCK 13  //see https://homematic-forum.de/forum/viewtopic.php?f=76&t=71788
typedef AskSin<LedType,BAT_SENSOR,Radio<RadioSPI,2,PWRPIN_SCK> > BaseHal;
Der SCK Pin ist der Pin 13.

Nur kann ich nach einiger Zeit (wenige Minuten) nach erfolgreichen Fahrten des Rolladens (bisher nur durch LEDs signalisiert) eine plötzliche Stromaufnahme von ca. 5 mA beobachten, dann reagiert der Arduino ATMega328P nicht mehr auf Tastendrücke. Erst ein Reset lässt ihn wieder auf Tastendrücke reagieren.

Irgendetwas scheint den Arduino ins softwaretechnische Nirwana zu schicken :(

Das Phänomen ist reproduzierbar in mehren Versuchen. Ich kann den höheren Strom jedoch nicht triggern oder provozieren.

Das Phänomen gibt es auch nach einem Reset ohne irgendwelche Fahrten des Rolladens.
Nach dem Reset ist die Stromaufnahme zuerst sehr gering (<100uA). Nach >2 Minuten (es waren auch mal >5 Minuten) springt die Stromausnahme ohne erkennbaren äußeren Grund auf ca. 5 mA und der Prozessor hängt.

Re: Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 13:48
von jp112sdl
Den SCK Pin selbst darfst du nicht als PWR_PIN verwenden.
Dieser Pin eigentlich ist dazu da, einen Transistor (vor dem CC1101) zu schalten.
Nimm irgendeinen nicht verwendeten.

Re: Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 14:10
von FUEL4EP
Habe nun einen NC (not connected) Arduino Pin gewählt:

Code: Alles auswählen

#define PWRPIN_NC 9  //see https://homematic-forum.de/forum/viewtopic.php?f=76&t=71788
typedef AskSin<LedType,BAT_SENSOR,Radio<RadioSPI,2,PWRPIN_NC> > BaseHal;
Leider löst das das Problem nicht. Die erhöhte Stromaufnahme zeigt sich immer noch.

Werde mal Debug Statements in Radio.h einbauen ..

EDIT: Die mit 'added' gekennzeichneten DPRINTLN Debugausgaben wurden in Radio.h eingebaut.
Radio.h.txt
(38.1 KiB) 19-mal heruntergeladen
Dann gab es folgende Ausgaben im seriellen Monitor:
Serial_Monitor_output.txt
(1.63 KiB) 18-mal heruntergeladen
Die letzte Debug-Ausgabe erfolgte um 19:43 (Powerdown), die Stromerhöhung ohne weitere Debugausgabe wurde gegen 19:48, also ca. 5 Minuten später, festgestellt.

Mir ist bei der Codeanalyse von Radio.h aufgefallen, dass bei der Benutzung von PWRPIN der CC1101 bei jedem Wakeup zuerst zurückgesetzt und dann in Gänze neu initialisiert wird:

https://github.com/pa-pa/AskSinPP/blob/ ... dio.h#L512

Das wäre bei meinem Anwendungsfall nicht nötig. Bei mir schläft der CC1101 ja nicht. Ein simples

Code: Alles auswählen

   spi.init();                 // init the hardware to get access to the RF modul
würde für mich ausreichend sein, um die SPI Signale zu initialisieren.

Re: Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 21:23
von HMSteve
Hallo Ewald,

Es gibt das Fehlerbild, dass je nach Layout/Spannungsversorgung der Schaltung wegen des betraechtlichen Einschaltstromimpulses des CC1101 die Vcc des ATMega ganz kurz einbricht und das Programm “haengen bleibt”. Bei mir waren diese spikes so kurz, dass ein MCP111 nicht triggerte. Ich weiss jetzt nicht, ob Du eine echte Abschaltung des CC1101 inzwischen eingebaut hast oder diese nur simulierst. Natuerlich nur im ersten Fall waere mein Gedanke hier relevant.

Viele Gruesse,
Stephan

Re: Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 21:40
von FUEL4EP
Hi Stephan,

danke für Deinen Hinweis.

In meiner Applikation wird der CC1101 nicht abgeschaltet. Der CC1101 wird mit dem 3,3V LDO MCP1702 versorgt. Jedoch macht Radio.h, wie oben beschrieben, bei Nutzung von PWRPIN beim Wake-up immer einen Reset und eine komplette Neuinitialisierung des CC1101. Das dürfte fast das gleiche Einschaltverhalten des Stroms bedingen wie ein Einschalten der Betriebsspannung.

Platine und Schaltbild sind hier.

Ich werde morgen mal die Stromaufnahme an einem Messwiderstand mit einem Speicheroszilloskop messen.

Re: Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme

Verfasst: 03.01.2022, 22:00
von jp112sdl
FUEL4EP hat geschrieben:
03.01.2022, 21:40
Neuinitialisierung des CC1101. Das dürfte fast das gleiche Einschaltverhalten des Stroms bedingen wie ein Einschalten der Betriebsspannung.
Nein, warum sollte es? :shock:
Beim Init werden nur Register gesetzt.