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: 586
Registriert: 01.11.2017, 17:26
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 76 Mal
Danksagung erhalten: 79 Mal
Kontaktdaten:

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

Beitrag von FUEL4EP » 04.01.2022, 22:32

Gegen den Schalttransistor spricht, dass das PCB fertig und voll bestückt ist. Sonst wäre das ein Klacks ..

Ich hatte ja einen Steckbrett Prototypen gebaut, nur ohne Level Shifter. Das war mein Fehler 🤦‍♂️.
Deswegen habe ich den erhöhten Ruhestrom erst im fertigen PCB bemerkt.
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

TomMajor
Beiträge: 1793
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 » 05.01.2022, 00:14

FUEL4EP hat geschrieben:
04.01.2022, 22:32
Gegen den Schalttransistor spricht, dass das PCB fertig und voll bestückt ist. Sonst wäre das ein Klacks ..

Ich hatte ja einen Steckbrett Prototypen gebaut, nur ohne Level Shifter. Das war mein Fehler 🤦‍♂️.
Deswegen habe ich den erhöhten Ruhestrom erst im fertigen PCB bemerkt.
Kenne nicht alle Details, aber geht es nur um den einen Levelshifter an SCK?
Dann könntest du das "broken Design" fixen indem du den aktiven Levelshifter rausnimmst und dort einen einfachen Spannungsteiler z.B. 1K:1,5K o.ä. als Levelshifter unidirektionl 5V/3V in SCK rein nimmst. Wegen SCK Low im Sleep sollte das ja genau dein Vorhaben bzgl. Ruhestrom begünstigen.
Viele Grüße,
Tom

Benutzeravatar
stan23
Beiträge: 2041
Registriert: 13.12.2016, 21:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Altmühltal
Hat sich bedankt: 586 Mal
Danksagung erhalten: 337 Mal
Kontaktdaten:

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

Beitrag von stan23 » 05.01.2022, 07:13

jp112sdl hat geschrieben:
04.01.2022, 22:27
Spricht was dagegen, den Vcc vom CC1101 auszuschalten, also ein echtes Powerdown zu machen
Dagegen spricht dass der Rolloaktor dann nicht mehr ansprechbar ist. 8)
Viele Grüße
Marco

RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)

jp112sdl
Beiträge: 12116
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 05.01.2022, 07:21

stan23 hat geschrieben:
05.01.2022, 07:13
Dagegen spricht dass der Rolloaktor dann nicht mehr ansprechbar ist. 8)
Ach ja :mrgreen:

Aber erklärt das dann nicht auch die Flanke an GDO0, wenn das Dingens per Burst geweckt wurde ?

VG,
Jérôme ☕️

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

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

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

Beitrag von FUEL4EP » 05.01.2022, 09:11

Vielen Dank für Eure Anregungen und Hilfe.

Bevor ich mich an das herum pfriemeln meiner Platine mache, werde ich versuchen, Radio.h mit einem neuen Mode lokal bei mir zu patchen.
Ich habe da so eine Idee, wie es gehen könnte.
Ich melde mich wieder, wenn ich das ausprobiert haben werde.
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

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

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

Beitrag von FUEL4EP » 05.01.2022, 11:59

Das Patchen von AsksinPP.h und Radio.h war erfolgreich :D Das ging sogar schneller als eine komplizierte Lötübung und vor allem: Allgemeingültig.
Der ATMega328P schläft jetzt ruhig und fest, SPI SCK is high im Sleepmode und die Stromaufnahme der gesamten Schaltung geht im Sleepmode auf <100 uA zurück und bleibt dort. Der Prozessor hängt sich nicht mehr nach einiger Zeit auf.

Was habe ich geändert:

1. Im Rolladensketch ein neues #define eingeführt, kein PWRPIN mehr notwendig (wird ja auch nicht benutzt)

Code: Alles auswählen

#define USE_LEVELSHIFTER_FOR_CC1101
2. In AsksinPP.h ein paar kleine Modifikationen von setIdle() und unsetIdle(), maskiert mit #ifdef USE_LEVELSHIFTER_FOR_CC1101:

Code: Alles auswählen

  void setIdle () {
    radio.setIdle();
    battery.setIdle();
#ifdef USE_LEVELSHIFTER_FOR_CC1101
    radio.SPI_SCK_floating();
#endif
  }

  void unsetIdle () {
    battery.unsetIdle();
#ifdef USE_LEVELSHIFTER_FOR_CC1101
    radio.SPI_SCK_restore(); 
#endif
  }

3. In Radio.h in der Klasse CC1101 hinzugefügt:

Code: Alles auswählen

#ifdef USE_LEVELSHIFTER_FOR_CC1101
  void SPI_SCK_floating () {
    spi.set_SCK_high_ohmic_during_sleep();
  }
  
  void SPI_SCK_restore () {
    spi.restore_SCK_after_sleep();
  }
#endif
4. und schließlich in der Klasse AVRSPI hinzugefügt:

Code: Alles auswählen

#ifdef USE_LEVELSHIFTER_FOR_CC1101
  void set_SCK_high_ohmic_during_sleep () {
    PINTYPE::setInput(SCLK);
  }
  
  void restore_SCK_after_sleep () {
    PINTYPE::setOutput(SCLK);
  }
#endif
Radio.h und Asksinpp.h sind hier nochmals in Gänze angefügt:
AskSinPP.h.txt
(9.99 KiB) 12-mal heruntergeladen
Radio.h.txt
(38.24 KiB) 13-mal heruntergeladen
Ich bin mir allerdings nicht sicher, ob ich auch für andere Konfigurationen alle notwendigen Änderungen schon eingebaut habe.

Was meint Ihr zu dieser Lösung?
Zuletzt geändert von FUEL4EP am 08.01.2022, 09:14, 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

papa
Beiträge: 705
Registriert: 22.05.2018, 10:23
Hat sich bedankt: 24 Mal
Danksagung erhalten: 120 Mal

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

Beitrag von papa » 05.01.2022, 15:30

Könnte man das nicht auch einfach direkt in die AVRSPI einbauen ?

Code: Alles auswählen

  void select () {
    PINTYPE::setOutput(SCLK);
    PINTYPE::setLow(CS);
  }

  void deselect () {
    PINTYPE::setHigh(CS);
    PINTYPE::setInput(SCLK);
  }
SOllte doch auch ohne Levelshifter keine Probleme machen.
Ich mag diese Mini-Defines nicht, bei denen dann keiner mehr weiss, was da überall irgendwo umgeschalten wird.
Anfragen zur AskSin++ werden nur im Forum beantwortet

jp112sdl
Beiträge: 12116
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2150 Mal
Kontaktdaten:

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

Beitrag von jp112sdl » 05.01.2022, 15:51

Beeinflusst das keine weiteren am SPI Bus betriebenen Geräte?

VG,
Jérôme ☕️

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

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

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

Beitrag von FUEL4EP » 05.01.2022, 16:25

Das SPI SCK Signal darf in einem Multislave SPI System nur dann auf Input geschaltet werden, wenn alle Slaves deselektiert sind. Sonst wird die durch einen eventuell vorhandenen Pull-up-Widerstand, im Fall des Sparkfun Levelshifters ist das der Fall, erzeugte 0->1 Flanke als Aktivierung verstanden.
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

TomMajor
Beiträge: 1793
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 » 05.01.2022, 18:43

papa hat geschrieben:
05.01.2022, 15:30
Könnte man das nicht auch einfach direkt in die AVRSPI einbauen ?

SOllte doch auch ohne Levelshifter keine Probleme machen.
Ich mag diese Mini-Defines nicht, bei denen dann keiner mehr weiss, was da überall irgendwo umgeschalten wird.
dass diese Mini-Defines ungut sind stimme ich voll zu, ich meine für die Allgemeinheit, auch wegen der Doku dazu in AskSinPP.
Als lokale Lösung für einen Entwickler sicher kein Problem.

Wenn wir bisher in AskSinPP und mit dem CC1101 mit SPI Mode CPOL= 0 arbeiten sollte Clock im Idle mode auch auf Low bleiben, das ist so definiert und könnte bei Änderung in Zukunft zu Problemen mit bestimmten SPI chips führen, meine Meinung.
Ein Protokoll für die Datenübertragung wurde von Motorola zwar nicht festgelegt, doch haben sich in der Praxis vier verschiedene „Modi“ durchgesetzt. Diese werden durch die Parameter "Clock Polarity" (CPOL) und "Clock Phase" (CPHA) festgelegt. Bei CPOL=0 ist der Clock Idle Low, bei CPOL=1 ist der Clock Idle High...
Viele Grüße,
Tom

Antworten

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