Level Shifter zwischen Arduino und CC1101 - oder die Suche nach zu hoher Stromaufnahme
Moderator: Co-Administratoren
- 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
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.
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
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
-
- 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
Kenne nicht alle Details, aber geht es nur um den einen Levelshifter an SCK?FUEL4EP hat geschrieben: ↑04.01.2022, 22:32Gegen 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.
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
Tom
- 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
Dagegen spricht dass der Rolloaktor dann nicht mehr ansprechbar ist.
Viele Grüße
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
Marco
RaspberryMatic als VM auf einem NUC mit Proxmox und USB-Funkmodul
~80 Geräte (HM, HmIP, HMW, HBW, AskSin)
-
- 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
Ach ja
Aber erklärt das dann nicht auch die Flanke an GDO0, wenn das Dingens per Burst geweckt wurde ?
- 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
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.
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
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
- 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
Das Patchen von AsksinPP.h und Radio.h war erfolgreich 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)
2. In AsksinPP.h ein paar kleine Modifikationen von setIdle() und unsetIdle(), maskiert mit #ifdef USE_LEVELSHIFTER_FOR_CC1101:
3. In Radio.h in der Klasse CC1101 hinzugefügt:
4. und schließlich in der Klasse AVRSPI hinzugefügt:
Radio.h und Asksinpp.h sind hier nochmals in Gänze angefügt:
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?
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
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
}
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
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
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
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
-
- 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
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.
Code: Alles auswählen
void select () {
PINTYPE::setOutput(SCLK);
PINTYPE::setLow(CS);
}
void deselect () {
PINTYPE::setHigh(CS);
PINTYPE::setInput(SCLK);
}
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
-
- 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
Beeinflusst das keine weiteren am SPI Bus betriebenen Geräte?
- 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
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
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
-
- 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
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
Tom