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

Benutzeravatar
FUEL4EP
Beiträge: 584
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 77 Mal
Kontaktdaten:

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

Beitrag von FUEL4EP » 03.01.2022, 22:09

.. durch den Softwarereset fährt der Chip genauso hoch, wie beim Einschalten der Spannung. Das ist meine Erfahrung von Halbleiterschaltungen. Ausnahmen können auftreten, wenn die Schaltung schlecht entwickelt ist und hohe Querströme durch nicht initialisierte Knoten entstehen. Ich kenne die Innereien des CC1101 nicht im Detail.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 03.01.2022, 22:37

FUEL4EP hat geschrieben:
03.01.2022, 22:09
durch den Softwarereset fährt der Chip genauso hoch, wie beim Einschalten der Spannung.
Konnte ich beim CC1101 zwar so mit Multimeter noch nicht beobachten, aber mit Abstürzen nach mehreren Inits ohne komplette Vcc-Abschaltung hatte ich damals auch Probleme. Auch mit Netzbetrieb.

Ich glaub es hing dann beim flushrx().
Ein paar Erinnerungsbrocken kommen mir da grad wieder :mrgreen: :mrgreen: :mrgreen:

VG,
Jérôme ☕️

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

TomMajor
Beiträge: 1790
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 175 Mal
Danksagung erhalten: 399 Mal
Kontaktdaten:

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

Beitrag von TomMajor » 03.01.2022, 23:25

Das Problem beim Einschalten was Stephan meint hatte ich vor einem Jahr für papa untersucht und ist hier dokumentiert (und auf meinem github)
viewtopic.php?f=76&t=66483&p=662353
Das liegt nur am Layout und an den Kapazitäten. Hat nichts mit einem Init der Register zu tun.

Der komplette Neu-Init des CC1101 in der Lib bei aktiv verwendeten Powerpin ist ja richtig und notwendig.
Viele Grüße,
Tom

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

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

Beitrag von HMSteve » 04.01.2022, 05:52

TomMajor hat geschrieben:
03.01.2022, 23:25
Das liegt nur am Layout und an den Kapazitäten. Hat nichts mit einem Init der Register zu tun.
Ich hab das seinerzeit nicht systematisch untersucht, bin deshalb aber auch nicht sicher, ob es wirklich nur das Layout ist, oder eine Kombination dessen mit der Geschwindigkeit und dem Ueberschwingverhalten des vorgeschalteten LDO? Hatte, denke ich, auch den MCP1702 im Einsatz, und der ist fuer 250mA spezifiziert, das Datenblatt traut sich aber nur, die Response bei Sprung auf 100mA darzustellen…

Ewald, ich wuerde mal direkt die Spannung an VCC des ATMega mit dem Oszi anschauen, das ist m.E. aussagekraeftiger, als die ganze Schaltung ueber einen Messwiderstand zu beobachten.

Viele Gruesse,
Stephan

Benutzeravatar
FUEL4EP
Beiträge: 584
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 77 Mal
Kontaktdaten:

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

Beitrag von FUEL4EP » 04.01.2022, 15:46

Danke für Eure Hilfe spät in der Nacht und früh am Morgen!

Ich konnte gerade das Übeltätersignal mit meinem Oszilloskop im Single Shot Modus fangen: Die erhöhte Stromaufnahme wird durch einen Puls am Arduino D2 / CC1101 GD0 Signal getriggert:

D2_GD0_pulse.png
D2_GD0_pulse.png (24.01 KiB) 416 mal betrachtet

Es ist ein Puls von mindestens 700us Dauer:

D2_GD0_pulse_100us.png
Hier das Signal nochmals mit 5ms Zeitauflösung/Kästchen gemessen mit einem 10x Tastkopf:
D2_GD0_pulse_5ms.png
D2_GD0_pulse_5ms.png (23.82 KiB) 403 mal betrachtet
Pulsdauer ist 13..14ms.

Die Amplitude beträgt 3,27Vpp. Damit wird dieses Signal eindeutig vom CC1101 getrieben, sonst würde Shottky Diode D2 die Amplitude auf 3,3V + VFShottky begrenzen.


Zeitgleich mit dem Auslösen des Triggers des Oszilloskops steigt der Strom gemessen an 0,1 Ohm von < 10uA (ATMega328P schläft) auf ca 8 mA (@VCC 5,7V) an.
Heute habe ich die Messungen mit 4 frisch aufgeladenen NiMH Akkuzellen als Betriebsspannung gemacht.

Was löst dieses Signal in AsksinPP aus?
Was signalisiert der CC1101 mit dieser Signalflanke? Welcher Interrupt lauscht an D2?

P.S: Die Versorgungsspannung VCC des Arduino und des CC1101 zeigen keine triggerbaren Einbrüche bei dem Stromsprung. Bei Versorgungsspannungen sind mit Kondensatoren sauber gepuffert.
Ebenfalls haben die Arduino Signale SS und SCK keine triggerbaren Pulse bei dem Stromsprung.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

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

Beitrag von HMSteve » 04.01.2022, 20:16

Hallo Ewald,

die GDO0-Funktion wird durch das entsprechende Config-Register bestimmt, siehe https://github.com/pa-pa/AskSinPP/blob ... dio.h#L519

Da zumindest m.W. die Funkfunktionalitaet der Asksin seit langem klaglos funktioniert, wuerde ich vermuten, dass Dein Problem nicht primaer mit diesem Signal zusammenhaengt. Nur, um sicher zu gehen, wuerde ich nochmal die Spannung an Vcc des ATMega messen, Triggern kannst Du doch ganz bequem auf den als CC-Pwr-Pin definierten Pin und zur Sicherheit ein bisschen pre-Trigger mit aufzeichnen. Dass Du beim Einschalten/Senden gar keinen blip siehst, klingt mir eher zu gut, um wahr zu sein.

Viele Gruesse,
Stephan

Benutzeravatar
FUEL4EP
Beiträge: 584
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 77 Mal
Kontaktdaten:

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

Beitrag von FUEL4EP » 04.01.2022, 21:25

Hi Stephan,

danke für Deinen Tipp mit PWRPIN zu triggern. Das verkürzt die Wartezeit :D

Hier zwei Oszibilder mit unterschiedlicher Zeitauflösung, die PWRPIN (blau, Pin 9) und VCC (gelb) des ATMega328P zeigen:
DS2_20220105040259.png
DS2_20220105035703.png
Triggersignal ist PWRPIN. VCC wird AC mäßig dargestellt und war mit einem 10x Tastkopf aufgenommen.

Die VCC Spannungeinbrüche sind ca. 200 mV bei Vcc~5,6V DC. Das kann nach meiner Erfahrung mit Prozessoren keinen Reset oder Fehlfunktion des ATMega328P auslösen.

Ich nutze AsksinPP in meiner Applikation in einer neuen Art und Weise: PWRPIN um SPI SLK während des Sleeps hochohmig zu schalten, aber ohne Transistor um den CC1101 stromlos zu schalten. Meines Wissens wurde bisher nur die Kombination PWRPIN + Transistor für CC1101 Abschaltung eingesetzt.

Ich brauche ja eigentlich nur die Funktion den SPI SLK während des Sleeps hochohmig zu schalten. Jerome schlug oben vor, dafür die PWRPIN Funktion zu testen.

Signalisiert der CC1101 mit dem GDO0 Signal vielleicht den Empfang eines WOR Signals?
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

HMSteve
Beiträge: 537
Registriert: 20.08.2019, 06:23
Hat sich bedankt: 13 Mal
Danksagung erhalten: 95 Mal

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

Beitrag von HMSteve » 04.01.2022, 22:05

Hallo Ewald,

Denke auch, dass die 270mV Einbruch kein Problem sein sollten.
GDO0 wird m.W. nicht (nur) fuer WOR genutzt, sondern generell beim Senden/Empfangen, habe mir das aber nie im Detail angesehen.

Sobald Du einen tatsaechlich nicht genutzten Pin des ATMega als CC-Pwr-Pin definierst und in der Software nutzt, wird nach meinem Verstaendnis SCLK hochohmig, siehe https://github.com/pa-pa/AskSinPP/blob ... dio.h#L205. Beim Aufwachen wird bei definiertem Pwr-Pin ein komplettes Init des Funkmoduls gemacht, also so, wie es sein soll.
Das duerfte doch genau Dein Ziel sein? Ich lese aus Deinem Post heraus, dass Du den Pwr-Pin als SCLK verwendest, das ist so aber nicht gemeint.

Viele Gruesse,
Stephan

Benutzeravatar
FUEL4EP
Beiträge: 584
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 77 Mal
Kontaktdaten:

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

Beitrag von FUEL4EP » 04.01.2022, 22:23

Hallo Stephan,

ja, das ist das Ziel, das auch erreicht wurde. Bitte lese diesen Thread von vorne, dann wird das klar.

Zuerst hatte ich fälschlicherweise SCK als PWRPIN benutzt. Nach dem Hinweis von Jerome, nutze ich seitdem den NC Pin 9.

Ohne PWRPIN funktioniert meine Applikation wie erwartet, nur der Ruhestrom ist wegen der Pull-up-Widerstände in den Levelshiftern um ca. 600 uA erhöht.

Mit PWRPIN ist der erhöhte Ruhestrom zuerst mal weg, aber nach kurzer Zeit springt die Stromaufnahme von <10uA auf 5..8mA je nach Betriebsspannung und der Prozessor reagiert nicht mehr. Zeitgleich mit dem Stromsprung ist der Puls am GDO0 Ausgang des CC01 zu beobachten. In Radio.h kann der Pin GDO0 als Interrupteingang definiert werden. Da bin gerade dabei, das zu verstehen …

Ich glaube, dass der getriggerte Interrupt den Prozessor, der bis zum Interrupt schläft, ins Nirwana schickt ..
Zuletzt geändert von FUEL4EP am 04.01.2022, 22:29, insgesamt 1-mal geändert.
Grüße

Ewald

Meine SmartHome Entwicklungen gibt es hier: FUEL4Ps Homeautomation Github Repository oder als ZIP
Das passende RaspberryMatic Addon ist hb-ep-devices-addon
Passende Platinen gib es hier: PCBs

jp112sdl
Beiträge: 12085
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 847 Mal
Danksagung erhalten: 2139 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 04.01.2022, 22:27

FUEL4EP hat geschrieben:
04.01.2022, 22:23
In Radio.h kann der Pin GDO0 als Interrupteingang definiert werden. Da bin gerade dabei, das zu verstehen …

Ich glaube, dass der getriggerte Interrupt den Prozessor ins Nirwana schickt ..
An GDO0 wird normalerweise signalisiert, dass Daten im Puffer sind.
Hier sind nun aber keine Daten vorhanden.
=>
jp112sdl hat geschrieben:
03.01.2022, 22:37
Ich glaub es hing dann beim flushrx().
Spricht was dagegen, den Vcc vom CC1101 auszuschalten, also ein echtes Powerdown zu machen, oder ist dein Schaltungslayout bereits in Sack und Tüten?

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“