HM-LC-SW1-BA-PCB max1724 RTC

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

Moderator: Co-Administratoren

Antworten
maxx3105
Beiträge: 281
Registriert: 19.10.2018, 16:07
Hat sich bedankt: 156 Mal
Danksagung erhalten: 49 Mal

HM-LC-SW1-BA-PCB max1724 RTC

Beitrag von maxx3105 » 05.12.2021, 00:04

Hallo Miteinander,

Ich habe den Sketch von der-pw erweitert um eine RTC.

Code: Alles auswählen

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
//- -----------------------------------------------------------------------------------------------------------------------

// define this to read the device id, serial and device type from bootloader section
// #define USE_OTA_BOOTLOADER

#define USE_WOR
#define EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>

#include <Switch.h>
#include <ResetOnBoot.h>

// we use a Pro Mini
// Arduino pin for the LED
// D4 == PIN 4 on Pro Mini
#define LED_PIN 4

// Arduino pin for the config button
// B0 == PIN 8 on Pro Mini
#define CONFIG_BUTTON_PIN 8

#define RELAY1_PIN 5  //change to D5 for further PWM Options

// === Define the clock ===
// Remove comment if you have an external oscillator like a 32kHz crystal
#define USE_RTC

// number of available peers per channel
#define PEERS_PER_CHANNEL 8

// all library classes are placed in the namespace 'as'
using namespace as;

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
    {0x42,0xA2,0x07},       // Device ID
    "papa42a207",           // Device Serial
    {0x00,0x6c},            // Device Model
    0x10,                   // Firmware Version
    as::DeviceType::Switch, // Device Type
    {0x01,0x00}             // Info Bytes
};

/**
 * Configure the used hardware
 */
typedef AvrSPI<10,11,12,13> RadioSPI;
//typedef AskSin<StatusLed<LED_PIN>,BattSensor<AsyncMeter<InternalVCC>>,Radio<RadioSPI,2> > Hal;
#ifdef USE_RTC
typedef AskSinRTC<StatusLed<LED_PIN>,BattSensor<AsyncMeter<ExternalVCC<17,7,LOW,3300> >>,Radio<RadioSPI,2> > Hal;
#else
typedef AskSin<StatusLed<LED_PIN>,BattSensor<AsyncMeter<ExternalVCC<17,7,LOW,3300> >>,Radio<RadioSPI,2> > Hal;
#endif

DEFREGISTER(Reg0,DREG_INTKEY,DREG_LEDMODE,MASTERID_REGS,DREG_LOWBATLIMIT)
class SwList0 : public RegList0<Reg0> {
public:
  SwList0(uint16_t addr) : RegList0<Reg0>(addr) {}
  void defaults () {
    clear();
    lowBatLimit(22);
  }
};

// setup the device with channel type and number of channels
class SwitchType : public MultiChannelDevice<Hal,SwitchChannel<Hal,PEERS_PER_CHANNEL,SwList0>,1,SwList0> {
public:
  typedef MultiChannelDevice<Hal,SwitchChannel<Hal,PEERS_PER_CHANNEL,SwList0>,1,SwList0> DevType;
  SwitchType (const DeviceInfo& i,uint16_t addr) : DevType(i,addr) {}
  virtual ~SwitchType () {}

  virtual void configChanged () {
    DevType::configChanged();
    //uint8_t lowbat = getList0().lowBatLimit();
    uint8_t lowbat = getList0().lowBatLimit() / 5; //factor 5 to get low bat message at 1V (CCU 5V)
    DDECLN(lowbat);
    if( lowbat > 0 ) {
      battery().low(lowbat);
    }
  }
};

Hal hal;
SwitchType sdev(devinfo,0x20);
ResetOnBoot<SwitchType> resetOnBoot(sdev);
ConfigToggleButton<SwitchType> cfgBtn(sdev);
#ifndef USE_WOR
BurstDetector<Hal> bd(hal);
#endif

void initPeerings (bool first) {
  // create internal peerings - CCU2 needs this
  if( first == true ) {
    HMID devid;
    sdev.getDeviceID(devid);
    for( uint8_t i=1; i<=sdev.channels(); ++i ) {
      Peer ipeer(devid,i);
      sdev.channel(i).peer(ipeer);
    }
  }
}

void setup () {
  DINIT(57600,ASKSIN_PLUS_PLUS_IDENTIFIER);
  bool first = sdev.init(hal);
  sdev.channel(1).init(RELAY1_PIN);
  buttonISR(cfgBtn,CONFIG_BUTTON_PIN);
  initPeerings(first);
#ifdef USE_RTC
  #ifndef USE_WOR
   // start burst detection
   bd.enable(rtc);
  #endif
#else
  #ifndef USE_WOR
   // start burst detection
    bd.enable(sysclock);
  #endif
#endif  

#ifdef USE_RTC
  // stay on for 15 seconds after start
  hal.activity.stayAwake(15);
  // measure battery every hour
  hal.battery.init(60UL*60, rtc);
#else
  // stay on for 15 seconds after start
  hal.activity.stayAwake(seconds2ticks(15));
  // measure battery every hour
  hal.battery.init(seconds2ticks(60UL*60),sysclock);
#endif
  
  resetOnBoot.init();
  
  sdev.initDone();
  //if (sdev.getMasterID() == HMID::broadcast) { DPRINTLN(F("START PAIRING")); sdev.startPairing(); } // start pairing of no master id is present
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if( worked == false && poll == false ) {
    hal.activity.savePower<Sleep<> >(hal);
  }
}
Nun wie kann ich erkennen ob der auch tatsächlich funktioniert?

Code: Alles auswählen

AskSin++ v5.0.0 (Dec  4 2021 23:46:02)
Address Space: 32 - 250
00000000
Init Storage: CAFEA52E
CC init1
CC Version: 14
 - ready
eVcc: 477
4
<- 0E 01 86 10 42A207 000000 06 01 00 00 00  - 1261
 debounce
 pressed
 longpressed
 longreleased
<- 1A 02 84 00 42A207 000000 10 00 6C 70 61 70 61 34 32 61 32 30 37 10 01 01 00  - 1591

-> 10 01 B0 01 67113F 42A207 00 05 00 00 00 00 00  - 2131
<- 0A 01 80 02 42A207 67113F 00  - 2250
-> 13 0A A0 01 67113F 42A207 00 08 02 01 0A 67 0B 11 0C 3F  - 2287
<- 0A 0A 80 02 42A207 67113F 00  - 2410
-> 0B 13 A0 01 67113F 42A207 00 06  - 2439
4
<- 0A 13 82 02 42A207 67113F 00  - 2560
-> 10 1C A0 01 67113F 42A207 00 04 00 00 00 00 00  - 2603
<- 18 1C 80 10 42A207 67113F 02 02 01 05 00 0A 67 0B 11 0C 3F 12 16 00 00  - 2734
-> 10 25 A0 01 67113F 42A207 01 04 00 00 00 00 01  - 2768
<- 14 25 80 10 42A207 67113F 02 08 00 30 06 56 00 57 24 00 00  - 2899
-> 0B 2E A0 01 67113F 42A207 01 03  - 2928
<- 12 2E 80 10 42A207 67113F 01 42 A2 07 01 00 00 00 00  - 3057
-> 10 37 A0 01 67113F 42A207 01 04 42 A2 07 01 03  - 3092
<- 1A 37 A0 10 42A207 67113F 02 02 00 03 00 04 32 05 64 06 00 07 FF 08 00 09 FF  - 3225
-> 0A 37 80 02 67113F 42A207 00  - 3340
waitAck: 01
<- 1A 37 A0 10 42A207 67113F 02 0A 01 0B 14 0C 63 82 00 83 00 84 32 85 64 86 00  - 3385
-> 0A 37 80 02 67113F 42A207 00  - 3502
waitAck: 01
<- 18 37 80 10 42A207 67113F 02 87 FF 88 00 89 FF 8A 01 8B 14 8C 63 00 00  - 3545
-> 0B 40 B0 01 67113F 42A207 01 0E  - 21585
<- 0E 40 82 10 42A207 67113F 06 01 00 00 1E  - 21714
-> 0E 49 B0 11 67113F 42A207 02 01 C8 00 00  - 22216
<- 0E 49 80 02 42A207 67113F 01 01 C8 00 1E  - 22343
-> 0E 52 B0 11 67113F 42A207 02 01 00 00 00  - 22847
<- 0E 52 80 02 42A207 67113F 01 01 00 00 1E  - 22974
 debounce
 pressed
 released
-> 0B 03 02 40 42A207 42A207 01 03  - 23486
<- 0E 04 A2 10 42A207 67113F 06 01 C8 00 1E  - 23615
-> 0A 04 80 02 67113F 42A207 00  - 23740
waitAck: 01

 debounce
 pressed
 released
-> 0B 05 02 40 42A207 42A207 01 05  - 24246
<- 0E 06 A2 10 42A207 67113F 06 01 00 00 21  - 24375
-> 0A 06 80 02 67113F 42A207 00  - 24500
waitAck: 01

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: HM-LC-SW1-BA-PCB max1724 RTC

Beitrag von der-pw » 05.12.2021, 01:30

Oh cool, Dankeschön!
Teste ich morgen mal aus. Ein paar RTC-Quarze habe ich sogar noch da.
maxx3105 hat geschrieben:
05.12.2021, 00:04
Nun wie kann ich erkennen ob der auch tatsächlich funktioniert?
Ich schätze mal, du könntest den Aktor über ein Programm mit Einschaltdauer starten und die Zeit messen.
Meine Aktoren ohne RTC laufen mit "ON_TIME = 120" bei normaler Raumtemperatur ca. 2h und 7m.
Grüße,
Patrick

https://github.com/der-pw

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: HM-LC-SW1-BA-PCB max1724 RTC

Beitrag von der-pw » 05.12.2021, 15:24

Also was den Ruhestrom angeht, bewegt der sich zyklisch zwischen 10-116µA mit RTC.
Ohne RTC sind es dann 16-122µA.

Der Systemtakt bleibt aber weiterhin.

Im HM-WDS40-TH-I wird ja die Klasse WeatherChannel mit RealTimeClock aufgerufen
https://github.com/pa-pa/AskSinPP/blob/ ... I.ino#L134
Wenn ich es richtig verstehe, erzeugt das, dass eben auch die RTC für den Systemtakt herangezogen wird.
Ich habe aber keinen Plan, wie ich das mit der MultiChannelDevice Klasse machen kann und ob das überhaupt geht.

Zum Strom sparen ist mir der RTC-Quarz am Batterieaktor "Perlen vor die Säue" aber um einen präzisen Grundtakt zu habe, für timergesteuertes Schaltverhalten wäre das schon cool.
Grüße,
Patrick

https://github.com/der-pw

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

Re: HM-LC-SW1-BA-PCB max1724 RTC

Beitrag von TomMajor » 05.12.2021, 17:12

der-pw hat geschrieben:
05.12.2021, 15:24
Wenn ich es richtig verstehe, erzeugt das, dass eben auch die RTC für den Systemtakt herangezogen wird.
Ich habe aber keinen Plan, wie ich das mit der MultiChannelDevice Klasse machen kann und ob das überhaupt geht.

Zum Strom sparen ist mir der RTC-Quarz am Batterieaktor "Perlen vor die Säue" aber um einen präzisen Grundtakt zu habe, für timergesteuertes Schaltverhalten wäre das schon cool.
ohne RTC Quarz wird für das Sleep Intervall Timing der WDT verwendet, welcher ziemlich ungenau ist, kann man hiermit ausmessen:
https://github.com/TomMajor/SmartHome/t ... T_Frequenz

Mit RTC Quarz wird das Sleep Intervall Timing quarzgenau.
Außerdem verringert sich der AVR Ruhestrom von ca. 4uA auf 1uA
https://github.com/TomMajor/SmartHome/t ... -down-mode

die RTC beeinflusst nicht den Systemtakt ("run clock"), die bleibt bei 8MHz RC.
(Ein 8MHz Quarz ist beim 328P parallel mit RTC Quarz nicht möglich, da Oszillatorpins nur einmal vorhanden sind und bei Verwendung eines RTC Quarz belegt sind. Beim 1284P kann man z.B. 2 Quarze verwenden.)

Hauptvorteil der RTC ist imho das genauere Sleep Intervall Timing. So kann mach auch die RTC testen, Zeit stoppen, das Sendeintervall wann sich der Sensor meldet sollte dann sehr genau sein.
Sleep Strom 1uA vs 4uA macht imho nicht so viel aus, außer vlt. bei einer CR2032 Versorgung.
Viele Grüße,
Tom

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: HM-LC-SW1-BA-PCB max1724 RTC

Beitrag von der-pw » 05.12.2021, 17:32

Danke Tom, für die Erklärung. :wink:
Für die Sleepgeschichte war mit das klar, hatte nur die Hoffnung, dass man das gleich auch für den Systemtakt hätte nehmen können, ähnlich dem HM-WDS40-TH-I.
TomMajor hat geschrieben:
05.12.2021, 17:12
Sleep Strom 1uA vs 4uA macht imho nicht so viel aus, außer vlt. bei einer CR2032 Versorgung.
Sehe ich in diesem Fall auch so, zumindest bei dem Aktor, an dem nachher gern mal 20mA Lichterketten hängen macht das keinen Sinn.
Grüße,
Patrick

https://github.com/der-pw

sickboy2711
Beiträge: 250
Registriert: 12.11.2011, 16:58
System: CCU
Wohnort: Schweiz
Hat sich bedankt: 25 Mal
Danksagung erhalten: 6 Mal

Re: HM-LC-SW1-BA-PCB max1724 RTC

Beitrag von sickboy2711 » 04.03.2023, 19:48

Hallo zusammen

Ich habe mir mehrere HM-LC-SW1-BA-PCB_mini_MAX1724 https://github.com/der-pw/HM-LC-SW1-BA ... ni_MAX1724 zusammen gebaut, mit denen ich über ein Zentralenprogramm 1/2 Stunde nach Sonnenuntergang, eine Mini-Lichterkette mit 10 LED, einschalte und um Mitternacht aus.

Leider musste ich feststellen, dass die verwendeten zwei Duracell AA Batterien nicht länger als maximal drei Tage durchhalten, spätestens dann erhalte ich auf der CCU die Meldung „Gerätekommunikaton gestört“

Das Multimeter gibt mir dann je eine Restspannung von 0.9 V und 0.3 V an.

Frage, braucht die Platine wirklich so viel Saft? Denn mit der normalen Zeitschaltung, wie sie On-Board ist (6 Stunden an, 18 aus, 6 Sunden an…) haben die Batterien gut 2 Wochen mit gemacht.

Als Sketch verwende ich jenen, welcher bei Github dem Projekt hinterlegt ist.

Danke für euer Feedback

der-pw
Beiträge: 435
Registriert: 26.01.2019, 13:39
Wohnort: Wolfenbüttel
Hat sich bedankt: 126 Mal
Danksagung erhalten: 100 Mal
Kontaktdaten:

Re: HM-LC-SW1-BA-PCB max1724 RTC

Beitrag von der-pw » 04.03.2023, 20:33

Hast du mal den Strom gemessen, was die Lichterkette so zieht?
https://github.com/der-pw/HM-LC-SW1-BA-PCB_mini_MAX1724 hat geschrieben:(Beispiel: eine Mini-Lichterkette aus den üblichen Grabbelschütten, mit 10 LEDs und 10Ohm Vorwiderstand benötigt ca 35mA).
Ich glaube, dass ich inzwischen sogar 30Ohm Vorwiderstand benutze und damit mehrere Stunden (Gesamtzeit) hinkomme.
Grüße,
Patrick

https://github.com/der-pw

sickboy2711
Beiträge: 250
Registriert: 12.11.2011, 16:58
System: CCU
Wohnort: Schweiz
Hat sich bedankt: 25 Mal
Danksagung erhalten: 6 Mal

Re: HM-LC-SW1-BA-PCB max1724 RTC

Beitrag von sickboy2711 » 05.03.2023, 16:17

der-pw hat geschrieben:
04.03.2023, 20:33
und 10Ohm Vorwiderstand benötigt ca 35mA
Ich glaube, dass ich inzwischen sogar 30Ohm Vorwiderstand benutze und damit mehrere Stunden (Gesamtzeit) hinkomme.
:roll: der Vorwiederstand... daran habe ich gar nicht mehr gedacht, ich habe nun den Strombedarf mit einem 470Ohm :roll: Wiederstand soweit runter geregelt, dass die LEDs noch angehen.
Mein XY6008 hat mir nach einer Stunde gerade mal 0.001Ah ausgegeben.
Mal neue Batterien genommen und weiter beobachten.

Danke schon mal

Gruss
Denni

Antworten

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