HB-UNI-Sen-TEMP-MAX6675

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

Moderator: Co-Administratoren

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

HB-UNI-Sen-TEMP-MAX6675

Beitrag von michaelapp » 10.03.2021, 23:50

Hallo zusammen,

ich habe am Wochenende die aktuelle CCU3 Firmware 3.57.4 und die 4.1 JP HB Devices installiert.

Ich habe heute einen HB-UNI-Sen-TEMP-MAX6675 auf der Platine HB-UNI-SENS-PCB (nur Arduino, CC1101, LED, Taster und Widerstand) zusammen gebaut. Anschließend den Frequenz Test laufen lassen, das INO geflasht und dann die Fuses geändert. Leider kann ich ihn nicht anlernen.

Im Seriellen Monitor erhalte ich die folgende Meldung:

Code: Alles auswählen

23:42:16.252 -> AskSin++ v5.0.0 (Mar 10 2021 23:15:55)
23:42:17.063 -> Address Space: 32 - 73
23:42:17.063 -> CC init1
23:42:17.063 -> CC Version: 14
23:42:17.108 ->  - ready
23:42:17.333 -> eVcc: 7035
23:42:20.047 -> <- 0B 01 86 70 F30900 000000 7F F6  - 3766
23:42:20.452 -> <- 0E 02 86 10 F30900 000000 06 01 00 02 00  - 4198
Hat mir jemand einen Tip?

Gruß
Michael

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

Re: HB-UNI-Sen-TEMP-MAX6675

Beitrag von jp112sdl » 11.03.2021, 06:20

michaelapp hat geschrieben:
10.03.2021, 23:50
(nur Arduino, CC1101, LED, Taster und Widerstand)
Es ist immer ratsam, eine/die Schaltung komplett aufzubauen da in den Sketchen (so gut wie) nie vorgesehen ist, dass Teile einfach weggelassen werden. Und das kann zu unerwünschten Nebeneffekten führen
michaelapp hat geschrieben:
10.03.2021, 23:50
Hat mir jemand einen Tip?
Entweder ist dein ConfigButton nicht richtig verdrahtet oder es liegt am Fehlen des MAX6675

VG,
Jérôme ☕️

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

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: HB-UNI-Sen-TEMP-MAX6675

Beitrag von der-pw » 11.03.2021, 15:54

In meiner ersten Platinenversion habe ich dummerweise den Footprint verkehrt herum designed.
Ergo war der MAX6675 auch "nicht da". Ich bin mir aber ziemlich sicher, dass sich das Gerät trotzdem anlernen ließ und ich nicht einmal eine NC-Meldung bekam. Nur eben 0°C Messungen, die ich hier im Log auch vermisse.
Grüße,
Patrick

https://github.com/der-pw

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: HB-UNI-Sen-TEMP-MAX6675

Beitrag von michaelapp » 11.03.2021, 17:48

Ich habe die HB-UNI-SENS-PCB Version 1.4 - 08/2018

Letztes Wochenende habe ich meine Konfiguration vom Steckboard auch auf die Platine übertragen, das hat auch nicht funktioniert. Hab gedacht ich hab mir was zerschossen. Gestern kamen die neuen CC1101 Module und da hab ich es mit der selben Platine noch mal probiert ...

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

Re: HB-UNI-Sen-TEMP-MAX6675

Beitrag von jp112sdl » 11.03.2021, 18:25

michaelapp hat geschrieben:
10.03.2021, 23:50
23:42:17.333 -> eVcc: 7035

Der Spannungsteiler scheint auch zu fehlen.
Ich kann mir auch gut vorstellen, dass im nächsten Moment statt 7 Volt mal 0 Volt gemessen werden, und schon geht der AVR in den Tiefschlaf.

Also ich bleib dabei - Schaltung komplett aufbauen und dann testen.

Oder alles, was in die Quere kommen kann, aus dem Sketch rausnehmen (Sensor-Init + Sensor-Measure sowie Batt-Messung und/oder sleepForever)

VG,
Jérôme ☕️

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

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: HB-UNI-Sen-TEMP-MAX6675

Beitrag von michaelapp » 12.03.2021, 22:06

Jetzt habe ich die komplette Schaltung noch mal aufgebaut. Das CC1101, die LED, Taster und den Widerstand habe ich laut der Anleitung https://asksinpp.de/assets/img/wiring_a ... 7dca651e53 angeschlossen.

Der Frequenz Test lief durch

Code: Alles auswählen

21:39:58.626 -> AskSin++ v5.0.0 (Mar 12 2021 21:39:38)
21:39:58.626 -> CC init1
21:39:58.626 -> CC Version: 14
21:39:58.626 ->  - ready
21:39:58.626 -> Start searching ...
21:39:58.626 -> Freq 0x21656A 868.300 MHz:   0
21:40:03.650 -> Freq 0x2165BA 868.332 MHz: 00FFFF.  1 / -72dBm
21:40:05.501 -> Search for upper bound
21:40:05.501 -> Freq 0x2165CA 868.338 MHz: 5AF421.  1 / -66dBm
21:40:05.593 -> Freq 0x2165DA 868.344 MHz: 4E637B.  1 / -72dBm
21:40:06.545 -> Freq 0x2165EA 868.351 MHz: 5AF421.  1 / -60dBm
21:40:07.580 -> Freq 0x2165FA 868.357 MHz: 5AF421.  1 / -61dBm
21:40:09.695 -> Freq 0x21660A 868.363 MHz: 00FFFF.  1 / -73dBm
21:40:10.211 -> Freq 0x21661A 868.370 MHz: 5AF421.  1 / -50dBm
21:40:10.350 -> Freq 0x21662A 868.376 MHz: 00FFFF.  1 / -70dBm
21:40:12.460 -> Freq 0x21663A 868.382 MHz: 5AF421.  1 / -50dBm
21:40:12.597 -> Freq 0x21664A 868.389 MHz: 00FFFF.  1 / -73dBm
21:40:14.387 -> Freq 0x21665A 868.395 MHz: 00FFFF.  1 / -70dBm
21:40:16.320 -> Freq 0x21666A 868.401 MHz:   0
21:40:21.325 -> Search for lower bound
21:40:21.325 -> Freq 0x2165AA 868.325 MHz: 5AF421.  1 / -49dBm
21:40:25.250 -> Freq 0x21659A 868.319 MHz: 5AF421.  1 / -50dBm
21:40:29.469 -> Freq 0x21658A 868.313 MHz: ADCD8F.  1 / -35dBm
21:40:30.466 -> Freq 0x21657A 868.306 MHz: 5AF421.  1 / -49dBm
21:40:31.292 -> Freq 0x21656A 868.300 MHz:   0
21:40:36.335 -> 
21:40:36.335 -> Done: 0x21657A - 0x21665A
21:40:36.335 -> Calculated Freq: 0x2165EA 868.351 MHz
21:40:36.335 -> Store into config area: 65EA...stored!
Nach dem Aufspielen des INO habe ich folgende Ausgabe auf dem seriellen Monitor:

Code: Alles auswählen

23:35:01.476 -> AskSin++ v5.0.0 (Mar 12 2021 21:45:53)
23:35:02.261 -> Address Space: 32 - 73
23:35:02.261 -> CC init1
23:35:02.261 -> CC Version: 14
23:35:02.307 ->  - ready
23:35:02.584 -> eVcc: 4518
23:35:05.274 -> <- 0B 01 86 70 F30900 000000 01 04  - 3764
23:35:05.691 -> <- 0E 02 86 10 F30900 000000 06 01 00 00 00  - 4196
23:35:14.715 ->  debounce
23:35:14.854 ->  pressed
23:35:14.946 ->  released
23:35:14.992 -> <- 1A 03 84 00 F30900 000000 10 F3 09 4A 50 54 48 36 36 37 35 30 30 70 01 01 00  - 4263
23:35:14.992 -> 
Ich habe drei AA Batterien über RAW und GND angeschlossen und zusätzlich noch den Spannungsteiler [Pin 5] ---100k--- [Pin A1] ---470k--- [V In(RAW)] angeschlossen.

Leider schaffe ich es nicht meinen Aufbau an der CCU3 (Firmware 3.57.4) mit JP HB Devices 4.1 anzumelden.

Wenn ich das Thermoelement abklemme wird es auch als nicht vorhanden erkannt.

Hat mir jemand einen Tip?

Gruß
Michael

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

Re: HB-UNI-Sen-TEMP-MAX6675

Beitrag von jp112sdl » 13.03.2021, 06:51

So sieht das auf jeden Fall vom seriellen Monitor her schon mal viel besser aus.

Um ein Problem mit dem Funkmodul gänzlich auszuschließen:
Flashe mal ein einfaches natives HM Gerät. z.B. HM RC P1
https://github.com/pa-pa/AskSinPP/blob/ ... -RC-P1.ino

Lässt sich das anlernen?

VG,
Jérôme ☕️

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

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: HB-UNI-Sen-TEMP-MAX6675

Beitrag von michaelapp » 13.03.2021, 08:39

nein das lässt sich auch nicht anlernen:

Code: Alles auswählen

08:35:44.112 -> AskSin++ v5.0.0 (Mar 13 2021 08:34:05)
08:35:44.112 -> Address Space: 32 - 99
08:35:44.112 -> CC init1
08:35:44.112 -> CC Version: 14
08:35:44.158 ->  - ready
08:35:44.158 -> iVcc: 3352
08:35:52.121 ->  debounce
08:35:52.215 ->  pressed
08:35:52.307 ->  released
08:35:52.355 -> <- 1A 01 84 00 001A00 000000 11 00 1A 48 4D 52 43 30 30 31 41 30 30 40 01 00 00  - 155
08:35:52.401 -> 
Mein Frequenz Test sieht so aus:

Code: Alles auswählen

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2016-10-31 papa Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
// 2019-11-16 stan23 Creative Commons - http://creativecommons.org/licenses/by-nc-sa/3.0/de/
// ci-test=yes board=328p aes=no
//- -----------------------------------------------------------------------------------------------------------------------

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

#if defined ARDUINO_ARCH_STM32F1
  #define STORAGEDRIVER at24cX<0x50,128,32>
  #define TICKS_PER_SECOND 500UL
  #define USE_HW_SERIAL
 
  #include <SPI.h>    // when we include SPI.h - we can use LibSPI class
  #include <Wire.h>   // for I2C access to EEPROM
  #include <EEPROM.h> // the EEPROM library contains Flash Access Methods
#endif

#include <AskSinPP.h>
#include <Device.h>
#include <Register.h>


#if defined ARDUINO_ARCH_STM32F1
  // we use a BluePill
  #define CC1101_GDO0_PIN     PB0
  #define CC1101_CS_PIN       PA4
  // CC1101 communication uses HW-SPI
  #define LED_PIN             LED_BUILTIN
#else
  // we use a Pro Mini
  #define CC1101_GDO0_PIN     2     // PD2
  #define CC1101_CS_PIN       10    // PB2
  #define CC1101_MOSI_PIN     11    // PB3
  #define CC1101_MISO_PIN     12    // PB4
  #define CC1101_SCK_PIN      13    // PB5
  // Pro Mini LED
  #define LED_PIN             4     // PD4
#endif

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

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

/**
 * Configure the used hardware
 */
#if defined ARDUINO_ARCH_STM32F1
typedef LibSPI<CC1101_CS_PIN> RadioSPI;
#else
typedef AvrSPI<CC1101_CS_PIN, CC1101_MOSI_PIN, CC1101_MISO_PIN, CC1101_SCK_PIN> RadioSPI;
#endif
typedef Radio<RadioSPI, CC1101_GDO0_PIN> RadioType;
typedef StatusLed<LED_PIN> LedType;
typedef AskSin<LedType,NoBattery,RadioType> HalType;



#define STARTFREQ 0x656A             // frequency we start scanning
#define MINFREQ (STARTFREQ - 0x300)  // frequency we abort scanning
#define SEARCHSTEP 0x50              // step with during search
#define BOUNDSTEP 0x10               // step width during upper/lower bound analysis


// see https://github.com/AskSinPP/asksinpp.de/blob/master/Grundlagen/FAQ/Fehlerhafte_CC1101.md
#define ACTIVE_PING
HMID PING_FROM(0x5A,0xF4,0x21);      // from address for status message e.g. switch
HMID PING_TO(0xff,0xff,0xff);        // to address for status message / central / CCU
#ifdef ACTIVE_PING
  #define SCANTIME seconds2ticks(5)  // maximal time to wait for a valid message
#else
  #define SCANTIME seconds2ticks(60) // maximal time to wait for a valid message
#endif



class TestDevice : public Device<HalType,DefList0>, Alarm {
  DefList0 l0;
  uint16_t freq, start, end;
  uint8_t received, rssi;
public:
  enum SearchMode { Search, Up, Down, Done };
  SearchMode mode;
  HMID id;

  typedef Device<HalType,DefList0> BaseDevice;
  TestDevice (const DeviceInfo& i,uint16_t addr) : BaseDevice(i,addr,l0,0), Alarm(0), l0(addr),
      freq(STARTFREQ), start(STARTFREQ), end(STARTFREQ),
      received(0), rssi(0), mode(Search)  {}
  virtual ~TestDevice () {}

  virtual void trigger (__attribute__ ((unused)) AlarmClock& clock) {
    DPRINT("  ");DDEC(received);
    if (!received) {
      DPRINTLN("");
    } else {
      DPRINT(" / -");DDEC(rssi);DPRINTLN("dBm");
    }

    if( mode == Search ) {
      if( received > 0 ) {
        start = end = freq;
        mode = Up; // start find upper bound
        DPRINTLN("Search for upper bound");
        setFreq(freq + BOUNDSTEP);
      }
      else {
        if( freq < MINFREQ ) mode = Done;
        if( freq <= STARTFREQ ) setFreq(STARTFREQ + (STARTFREQ-freq) + SEARCHSTEP);
        else setFreq(STARTFREQ - (freq-STARTFREQ));
      }
    }
    else if(mode == Up) {
      if( received > 0 ) {
        end = freq;
        setFreq(end + BOUNDSTEP);
      }
      else {
        mode = Down; // start find lower bound
        DPRINTLN("Search for lower bound");
        setFreq(start - BOUNDSTEP);
      }
    }
    else if(mode == Down) {
      if( received > 0 ) {
        start = freq;
        setFreq(start - BOUNDSTEP);
      }
      else {
        mode = Done;
      }
    }
    if( mode == Done ) {
      DPRINT("\nDone: 0x21");DHEX(start);DPRINT(" - 0x21");DHEXLN(end);
      if( start == end && start == STARTFREQ ) {
        DPRINT("Could not receive any message");
      }
      else {
        freq = start+((end - start)/2);
        DPRINT("Calculated Freq: 0x21");DHEX((uint8_t)(freq>>8));DHEX((uint8_t)(freq&0xff));
        printFreq(0x210000 + freq);DPRINTLN("");

        // store frequency
        DPRINT("Store into config area: ");DHEX((uint8_t)(freq>>8));DHEX((uint8_t)(freq&0xff));
        StorageConfig sc = getConfigArea();
#if defined ARDUINO_ARCH_STM32F1
        Wire.begin();
        DPRINT(".");
#endif
        sc.clear();
        DPRINT(".");
        sc.setByte(CONFIG_FREQ1, freq>>8);
        DPRINT(".");
        sc.setByte(CONFIG_FREQ2, freq&0xff);
        DPRINT(".");
        sc.validate();

        DPRINTLN("stored!");
#if defined ARDUINO_ARCH_STM32F1
        // measurement is done, loop here forever
        while(1);
#else
        activity().savePower<Sleep<> >(this->getHal());
#endif
      }
    }
  }

  virtual bool process(Message& msg) {
    msg.from().dump(); DPRINT(".");
    rssi = max(rssi,radio().rssi());
    received++;
    if( received > 0 ) {
      trigger(sysclock);
    }
    return true;
  }

  bool init (HalType& hal) {
    this->setHal(hal);
    this->getDeviceID(id);
    hal.init(id);

    DPRINTLN("Start searching ...");
    setFreq(STARTFREQ);
    return false;
  }

  void setFreq (uint16_t current) {
    sysclock.cancel(*this);
    freq = current;
    rssi=0;
    received=0;
    DPRINT("Freq 0x21");DHEX(freq);
    printFreq(0x210000 + freq);
    DPRINT(": ");
    this->radio().initReg(CC1101_FREQ2, 0x21);
    this->radio().initReg(CC1101_FREQ1, freq >> 8);
    this->radio().initReg(CC1101_FREQ0, freq & 0xff);
    set(SCANTIME);
    sysclock.add(*this);
  }

  void printFreq(uint32_t freq) {
    char buffer[16];
    float val = (float)freq * 26.0 / 65536.0;
    dtostrf(val, 8, 3, buffer);
    DPRINT(buffer);DPRINT(" MHz");
  }
};

HalType hal;
TestDevice sdev(devinfo,0x20);

class InfoSender : public Alarm {
  class channel {
  public:
    uint8_t number() const {return 1; }
    uint8_t status() const {return 0; }
    uint8_t flags()  const {return 0; }
    void patchStatus(__attribute__ ((unused)) Message& msg) {}
    void changed(__attribute__ ((unused)) bool b) {}
  };
  uint8_t cnt;
  channel ch;
public:
  InfoSender () : Alarm(0), cnt(0) {}
  virtual ~InfoSender () {}

  virtual void trigger (AlarmClock& clock) {
#ifdef ACTIVE_PING
    InfoActuatorStatusMsg msg;
    msg.init(cnt++, ch, hal.radio.rssi());
    msg.to(PING_TO);
    msg.from(PING_FROM);
    msg.ackRequired();
    msg.setRpten();
    sdev.radio().write(msg,msg.burstRequired());
#endif
    sdev.led().ledOn(millis2ticks(100), 0);
    if( sdev.mode != TestDevice::SearchMode::Done ) {
      set(seconds2ticks(1));
      clock.add(*this);
    }
  }
} info;

void setup () {
#if defined ARDUINO_ARCH_STM32F1
  delay(5000);
#endif
  DINIT(57600,ASKSIN_PLUS_PLUS_IDENTIFIER);
  sdev.init(hal);
  // start sender
  info.trigger(sysclock);
}

void loop() {
  sdev.pollRadio();
  hal.runready();
}
So sieht mein Homematic Skript aus:

Code: Alles auswählen

! Folgend muss die Seriennummer angepasst werden.
! Es sollte ein nicht batteriebetriebenen Gerätes gewählt werden.
string serial = "OEQ0771846";

string ccu;
string device;
string stderr;
system.Exec("grep BidCoS-Address /etc/config/ids | awk -F '= ?' -v format='%x\n' '{printf(format,$2)}'", &ccu, &stderr);
WriteLine(stderr);
system.Exec("grep '^<device serial' /etc/config/rfd/" + serial + ".dev | sed 's/.*address=.0x\([0-9A-F]*\). .*/\1/'", &device, &stderr);
WriteLine(stderr);
WriteLine("PING_FROM(0x" + device.Substr(0,2) + ",0x" + device.Substr(2,2) + ",0x" + device.Substr(4,2) + ");" );
WriteLine("PING_TO(0x" + ccu.Substr(0,2) + ",0x" + ccu.Substr(2,2) + ",0x" + ccu.Substr(4,2) + ");" );
und das ist das Ergebnis:

Code: Alles auswählen

PING_FROM(0x5A,0xF4,0x21);
PING_TO(0xff,0xff,0x
);
komisch ...

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

Re: HB-UNI-Sen-TEMP-MAX6675

Beitrag von jp112sdl » 13.03.2021, 08:57

Wirklich komisch, weil der FreqTest ja sauber durchlief.

Jetzt müsste man auf der CCU mal schauen, ob das Telegramm dort ankommt.
Stell Homematic Funk mal auf "Alles loggen", dann mach einen Anlernversuch und lade hinterher das Log runter.

Ist da was von 001A00 zu sehen?

VG,
Jérôme ☕️

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

michaelapp
Beiträge: 280
Registriert: 16.05.2018, 22:54
Hat sich bedankt: 6 Mal
Danksagung erhalten: 5 Mal

Re: HB-UNI-Sen-TEMP-MAX6675

Beitrag von michaelapp » 13.03.2021, 09:21

Also 001A00 kann ich im Log nicht finden

Antworten

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