Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

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

Moderator: Co-Administratoren

Benutzeravatar
kopy
Beiträge: 121
Registriert: 28.12.2015, 14:35
Hat sich bedankt: 2 Mal
Danksagung erhalten: 8 Mal

Re: Spannungsüberwachung HILFE

Beitrag von kopy » 24.02.2020, 12:09

Hat jemand eine Idee, ich bekomme beim kompilieren immer die gleiche Fehlermeldung.


D:\Arduino\HB-UNI-Sen-VOLT\HB-UNI-Sen-VOLT.ino: In member function 'virtual void MeasureChannel::trigger(as::AlarmClock&)':

HB-UNI-Sen-VOLT:133: error: 'as::Channel<Hal, UList1, as::EmptyList, as::List4, 6, UList0>::DeviceType' has no member named 'broadcastEvent'

if (msgcnt % 20 == 1) device().sendPeerEvent(msg, *this); else device().broadcastEvent(msg, *this);

^

exit status 1
'as::Channel<Hal, UList1, as::EmptyList, as::List4, 6, UList0>::DeviceType' has no member named 'broadcastEvent'


Danke schon mal im voraus, Gerd

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

Re: Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

Beitrag von jp112sdl » 24.02.2020, 12:14

kopy hat geschrieben:
24.02.2020, 12:09
Hat jemand eine Idee, ich bekomme beim kompilieren immer die gleiche Fehlermeldung.
AskSinPP Lib veraltet.

VG,
Jérôme ☕️

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

Benutzeravatar
kopy
Beiträge: 121
Registriert: 28.12.2015, 14:35
Hat sich bedankt: 2 Mal
Danksagung erhalten: 8 Mal

Re: Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

Beitrag von kopy » 24.02.2020, 19:40

habe ich inzwischen an einem anderen PC hinbekommen. Mit neuer LIB.
Wie kriege ich den die an dem anderen Rechner aktualisiert?????

Ach ja. funktioniert schon mal ganz toll. Bin begeistert.

Martin62
Beiträge: 681
Registriert: 09.12.2019, 21:24
Hat sich bedankt: 151 Mal
Danksagung erhalten: 61 Mal

Re: Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

Beitrag von Martin62 » 24.02.2020, 20:02

Im Explorer die Datei lib suchen, bei mir unter Dokumente/Arduino/Lib, die Asksinmaster löschen. Die neue runter laden entpacken und in den Lib Ordner kopieren. Ich hebe mir die alten immer auf.
Gruß Martin
Gruß Martin

epigene
Beiträge: 12
Registriert: 12.12.2018, 10:43
Hat sich bedankt: 5 Mal

Re: Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

Beitrag von epigene » 13.04.2020, 11:22

Der Sketch funktioniert bei mir mit voltage = random(2300) hervorragend. Danke für eure Mühen.
Habe aber leider nicht verstanden, wie ich den voltage einen Messkanal zuordne.
Bitte um Hinweis, was ich bei den Punkten hinschreiben soll.
Gruß Franz

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

Re: Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

Beitrag von TomMajor » 13.04.2020, 11:56

Eventuell hilft das hier weiter:
viewtopic.php?f=76&t=44871&start=40#p510432
Viele Grüße,
Tom

epigene
Beiträge: 12
Registriert: 12.12.2018, 10:43
Hat sich bedankt: 5 Mal

Re: Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

Beitrag von epigene » 13.04.2020, 13:09

Danke für die schnelle Antwort - war ein Hardwarefehler, Eingang war kurzgeschlossen!

eisvogel
Beiträge: 27
Registriert: 28.05.2020, 00:07
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

Beitrag von eisvogel » 28.05.2020, 00:28

Hallo,
ich möchte gerne den INA226 einbinden. Im normalen Arduinoumfeld funktioniert der Chip in Verbindung mit der LIB "ina226.h" super.
Leider schaffe ich es nicht, den Sketch von jp112sdl für den INA226 zu ergänzen. Kann mir vielleicht jemand dabei helfen und ein paar Tipps geben?
Der INA226 ist wohl der Nachfolgetyp von TI und liefert hochgenau U,I und P über den I2C-Bus.

Schönen Gruß
Helmut

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

Re: Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

Beitrag von jp112sdl » 28.05.2020, 05:58

eisvogel hat geschrieben:
28.05.2020, 00:28
Kann mir vielleicht jemand dabei helfen und ein paar Tipps geben?
Zeig doch mal, wie du es bisher versucht hast

VG,
Jérôme ☕️

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

eisvogel
Beiträge: 27
Registriert: 28.05.2020, 00:07
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 2 Mal
Danksagung erhalten: 2 Mal

Re: Spannungsüberwachung (12V bzw. 24V) mit "Klartextanzeige"

Beitrag von eisvogel » 28.05.2020, 11:47

Hallo Jérôme,

Danke für die Antwort,
ich habe Teile von meinem Arduino-Sketch in Deinen Vorschlag kopiert. Wahrscheinlich mache ich da grundsätzlich etwas falsch.

Hier mal mein kläglicher Versuch:

Code: Alles auswählen

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
// 2018-09-14 jp112sdl 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 EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>

#include <Register.h>
#include <MultiChannelDevice.h>

#include <INA226.h>
INA226 ina;

// Arduino Pro mini 8 Mhz
// Arduino pin for the config button
#define CONFIG_BUTTON_PIN  8
#define LED_PIN            4

// Number of voltage measurement channels
#define NUM_CHANNELS       2

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

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

//Korrekturfaktor der Clock-Ungenauigkeit, wenn keine RTC verwendet wird
#define SYSCLOCK_FACTOR    0.88

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
  {0xF3, 0x4A, 0x00},          // Device ID
  "JPVOLT0000",                // Device Serial
  {0xF3, 0x4A},                // Device Model
  0x10,                        // Firmware Version
  0x53,                        // Device Type
  {0x01, 0x01}                 // Info Bytes
};

/**
   Configure the used hardware
*/
typedef AskSin<StatusLed<LED_PIN>, BatterySensor, Radio<AvrSPI<10, 11, 12, 13>, 2>> BaseHal;
class Hal : public BaseHal {
  public:
    void init (const HMID& id) {
      BaseHal::init(id);
      // measure battery every 1h
      battery.init(seconds2ticks(60UL * 60), sysclock);
      battery.low(22);
      battery.critical(19);
    }

    bool runready () {
      return sysclock.runready() || BaseHal::runready();
    }
} hal;

DEFREGISTER(UReg0, MASTERID_REGS, DREG_LOWBATLIMIT, 0x20, 0x21)
class UList0 : public RegList0<UReg0> {
  public:
    UList0 (uint16_t addr) : RegList0<UReg0>(addr) {}

    bool Sendeintervall (uint16_t value) const {
      return this->writeRegister(0x20, (value >> 8) & 0xff) && this->writeRegister(0x21, value & 0xff);
    }
    uint16_t Sendeintervall () const {
      return (this->readRegister(0x20, 0) << 8) + this->readRegister(0x21, 0);
    }

    void defaults () {
      clear();
      lowBatLimit(22);
      Sendeintervall(180);
    }
};

DEFREGISTER(UReg1, 0x01, 0x02, 0x03)
class UList1 : public RegList1<UReg1> {
  public:
    UList1 (uint16_t addr) : RegList1<UReg1>(addr) {}
    void defaults () {
      clear();
    }
};

class MeasureEventMsg : public Message {
  public:
    void init(uint8_t msgcnt, uint8_t channel, uint16_t voltage) {
      Message::init(0x0e, msgcnt, 0x53, BIDI | WKMEUP, channel & 0xff, (voltage >> 8) & 0xff);
      pload[0] = voltage & 0xff;
    }
};

class MeasureChannel : public Channel<Hal, UList1, EmptyList, List4, PEERS_PER_CHANNEL, UList0>, public Alarm {
    MeasureEventMsg msg;
    uint16_t        voltage;
    uint8_t         last_flags = 0xff;

  public:
    MeasureChannel () : Channel(), Alarm(0), voltage(0) {}
    virtual ~MeasureChannel () {}

    void measure() {

      // HIER DIE MESSUNG DURCHFÜHREN
      // Spannung muss mit Faktor 10 übertragen werden
      // 12.8V -> voltage = 128;


      float shuntvoltage = 0;
      float busvoltage = 0;
      float current_mA = 0;
      float loadvoltage = 0;
      float power_mW = 0;

      //float voltage = 0;  // ?????FEHLER GEFUNDEN float voltage = 0; das war mist!

      shuntvoltage = ina226.getShuntVoltage_mV();
      busvoltage = ina226.getBusVoltage_V();
      current_mA = ina226.getCurrent_mA();
      power_mW = ina226.getPower_mW();
      loadvoltage = busvoltage + (shuntvoltage / 1000);

      Serial.print("Bus Voltage:   "); Serial.print(busvoltage); Serial.println(" V");
      Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
      Serial.print("Load Voltage:  "); Serial.print(loadvoltage); Serial.println(" V");
      Serial.print("Current:       "); Serial.print(current_mA); Serial.println(" mA");
      Serial.print("Power:         "); Serial.print(power_mW); Serial.println(" mW");
      Serial.println("");
      voltage = ina.getBusVoltage_V() * 10;
      Serial.print("voltage:  "); Serial.print(voltage); //Serial.println(" V");
      Serial.println("");

      voltage = random(2300);
    }

    virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) {
      uint8_t msgcnt = device().nextcount();
      measure();

      if (last_flags != flags()) {
        if (number() == 1) this->changed(true);
        last_flags = flags();
      }
      tick = delay();
      msg.init(msgcnt, number(), voltage);
      if (msgcnt % 20 == 1) device().sendPeerEvent(msg, *this); else device().broadcastEvent(msg, *this);
      sysclock.add(*this);
    }

    uint32_t delay () {
      uint16_t d = (max(10, device().getList0().Sendeintervall()) * SYSCLOCK_FACTOR) + random(10); //add some small random difference between channels
      return seconds2ticks(d);
    }

    void configChanged() {
    }

    void setup(Device<Hal, UList0>* dev, uint8_t number, uint16_t addr) {
      Channel::setup(dev, number, addr);
      sysclock.add(*this);
    }

    uint8_t status () const {
      return 0;
    }

    uint8_t flags () const {
      uint8_t flags = this->device().battery().low() ? 0x80 : 0x00;
      return flags;
    }
};

class UType : public MultiChannelDevice<Hal, MeasureChannel, NUM_CHANNELS, UList0> {
  public:
    typedef MultiChannelDevice<Hal, MeasureChannel, NUM_CHANNELS, UList0> TSDevice;
    UType(const DeviceInfo& info, uint16_t addr) : TSDevice(info, addr) {}
    virtual ~UType () {}

    virtual void configChanged () {
      TSDevice::configChanged();
      DPRINT(F("*LOW BAT Limit: "));
      DDECLN(this->getList0().lowBatLimit());
      this->battery().low(this->getList0().lowBatLimit());
      DPRINT(F("*Sendeintervall: ")); DDECLN(this->getList0().Sendeintervall());
    }
};

UType sdev(devinfo, 0x20);
ConfigButton<UType> cfgBtn(sdev);

void setup () {
  DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
  sdev.init(hal);
  buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
  sdev.initDone();

  /*   //  ********************  Configuration   INA226   **********************
    ina.begin(0x40); //*****  Default INA226 address is 0x40 aber auch 0x44 und 0x50
    ina.configure(INA226_AVERAGES_16, INA226_BUS_CONV_TIME_1100US,
                 INA226_SHUNT_CONV_TIME_1100US, INA226_MODE_SHUNT_BUS_CONT);
    /*****  Calibrate INA226. Rshunt = 0.001 ohm, max zu erwartender Strom = 80A
    ina.calibrate(0.001 , 80 );*/
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if ( worked == false && poll == false ) {
    hal.activity.savePower<Sleep<>>(hal);
  }
}
Danke für die Mühe.
Ist hier mein erster Beitrag/Frage

mfG
Helmut

Antworten

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