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

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

FUEL4EP
Beiträge: 437
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 64 Mal
Danksagung erhalten: 52 Mal

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

Beitrag von FUEL4EP » 03.01.2022, 11:42

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) 358 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?
Zuletzt geändert von FUEL4EP am 08.01.2022, 09:13, insgesamt 2-mal geändert.
Grüße

Ewald

jp112sdl
Beiträge: 10088
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 650 Mal
Danksagung erhalten: 1533 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 03.01.2022, 11:47

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.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

FUEL4EP
Beiträge: 437
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 64 Mal
Danksagung erhalten: 52 Mal

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

Beitrag von FUEL4EP » 03.01.2022, 11:55

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
Grüße

Ewald

jp112sdl
Beiträge: 10088
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 650 Mal
Danksagung erhalten: 1533 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 03.01.2022, 12:40

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.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

FUEL4EP
Beiträge: 437
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 64 Mal
Danksagung erhalten: 52 Mal

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

Beitrag von FUEL4EP » 03.01.2022, 13:35

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.
Zuletzt geändert von FUEL4EP am 08.01.2022, 09:12, insgesamt 1-mal geändert.
Grüße

Ewald

jp112sdl
Beiträge: 10088
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 650 Mal
Danksagung erhalten: 1533 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 03.01.2022, 13:48

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.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

FUEL4EP
Beiträge: 437
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 64 Mal
Danksagung erhalten: 52 Mal

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

Beitrag von FUEL4EP » 03.01.2022, 14:10

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) 3-mal heruntergeladen
Dann gab es folgende Ausgaben im seriellen Monitor:
Serial_Monitor_output.txt
(1.63 KiB) 5-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.
Grüße

Ewald

HMSteve
Beiträge: 354
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 9 Mal
Danksagung erhalten: 59 Mal

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

Beitrag von HMSteve » 03.01.2022, 21:23

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

FUEL4EP
Beiträge: 437
Registriert: 01.11.2017, 17:26
Hat sich bedankt: 64 Mal
Danksagung erhalten: 52 Mal

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

Beitrag von FUEL4EP » 03.01.2022, 21:40

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.
Grüße

Ewald

jp112sdl
Beiträge: 10088
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 650 Mal
Danksagung erhalten: 1533 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 03.01.2022, 22:00

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.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“