Rolladensteuerung für Hutschiene im Selbstbau

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

Moderator: Co-Administratoren

Pappabastelt
Beiträge: 22
Registriert: 02.08.2021, 08:06
System: Alternative CCU (auf Basis OCCU)

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von Pappabastelt » 03.08.2021, 13:59

Dann ein 1284P eventuell sogar als DIP Variante für die etwas betagteren Bastler (also ich z.B.). Kostet bei Reichelt 6,40 €.
Leiterplatte könnte ich erstellen...

jp112sdl
Beiträge: 9823
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 619 Mal
Danksagung erhalten: 1471 Mal
Kontaktdaten:

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von jp112sdl » 03.08.2021, 14:03

Pappabastelt hat geschrieben:
03.08.2021, 13:59
Kostet bei Reichelt 6,40 €.
Ist aber teuer geworden! Vor 1 Jahr hab ich dort 4.10 EUR für den 1284P DIP bezahlt.

Ein 644 würde bei 4 Kanälen auch reichen. Ausschlaggebend ist die höhere Anzahl I/O Pins ggü. dem 328P.
Speichermäßig würde der 328P sonst auch für 4 Kanäle reichen.

VG,
Jérôme ☕️

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

Pappabastelt
Beiträge: 22
Registriert: 02.08.2021, 08:06
System: Alternative CCU (auf Basis OCCU)

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von Pappabastelt » 03.08.2021, 14:16

Also ich bin da völlig offen :D
Ich stell mir grad ein kleines Hutschienengehäuse vor mit einer JLCPCB Platine und oben schaut ein Antennendraht raus. Darunter eine Armada an Koppelrelais und da dran meine Tasterleitungen und meine Motorleitungen. Den Grundaufbau für 12 oder 24V können wir ja mal starten. Ob dann jemand eine 230V Platine daraus macht sei ihm selbst überlassen :wink:

Pappabastelt
Beiträge: 22
Registriert: 02.08.2021, 08:06
System: Alternative CCU (auf Basis OCCU)

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von Pappabastelt » 04.08.2021, 08:26

Hi Jérôme,

würdest du das abändern der Software auf 4-Kanal übernehmen oder sieht das zeitlich eher schlecht aus ?
Wenn du mir dann noch den zu verwendenden Prozessor nennen könntest und die gewünschte Pins für Ein und Ausgabe würde ich mich mit der Platine ans Werk machen.
Alles natürlich auf Grundlage der Freiwilligkeit. Ich möchte hier niemanden mit meinen Problemen belasten...
Plan B wär ja dann immer noch die Variante mit 6 x 2fach Steuerung in einem Gehäuse...

Danke und Gruß
Papabastelt

jp112sdl
Beiträge: 9823
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 619 Mal
Danksagung erhalten: 1471 Mal
Kontaktdaten:

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von jp112sdl » 04.08.2021, 08:43

Pappabastelt hat geschrieben:
04.08.2021, 08:26
abändern der Software auf 4-Kanal
Das ist ja keine große Sache, das bekommst du auch selbst hin.

Du definierst dir oben noch analog zu den bestehenden ON_RELAY_PIN / DIR_RELAY_PIN sowie ON_RELAY2_PIN,DIR_RELAY2_PIN noch 2 weitere Paare mit 3 und 4.

Das gleiche machst du auch mit den UP_BUTTON_PIN/DOWN_BUTTON_PIN.

Dann änderst du bei
typedef MultiChannelDevice<Hal, BlChannel, 2, BlindList0> BlindType;
die 2 in 4.

Die Zeilen mit den InternalButton<BlindType>... führst du auch chronologisch so fort bis
...
InternalButton<BlindType> btndown4(sdev, 8 );

Und das auch für das initPeerings():

Code: Alles auswählen

...
    Peer p5(devid, 5);
    Peer p6(devid, 6);
    Peer p7(devid, 7);
    Peer p8(devid, 8);
...
    sdev.channel(3).peer(p5, p6);
    sdev.channel(4).peer(p7, p8);
    
Und unten im setup(), du ahnst es sicher schon...
auch einfach fortführen.

Code: Alles auswählen

  sdev.channel(3).init(ON_RELAY3_PIN, DIR_RELAY3_PIN);
  sdev.channel(4).init(ON_RELAY4_PIN, DIR_RELAY4_PIN);
  
  ...
    buttonISR(btnup3, UP_BUTTON3_PIN);
  buttonISR(btndown3, DOWN_BUTTON3_PIN);
  usw.
  ...

VG,
Jérôme ☕️

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

Pappabastelt
Beiträge: 22
Registriert: 02.08.2021, 08:06
System: Alternative CCU (auf Basis OCCU)

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von Pappabastelt » 04.08.2021, 09:09

Dankeschön für die Info. Bin kein Softwerker aber ich probiere es mal wie beschrieben 8)


Welchen Prozessor für 4 Kanal und lokale Bedienung (8 Tastereingänge) würdest du vorschlagen ?
Damit würde ich dann erstmal ins Rennen gehen.


Falls hier noch jemand Interesse an so einer Steuerung hat dann bitte hier melden und seine (Hardware-) Wünsche kundtun.
Ich versuche daraus dann mal was zu machen...
Hilfe in jeglicher Hinsicht ist auch immer gern gesehen.

Danke und Gruß
Papabastelt

jp112sdl
Beiträge: 9823
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 619 Mal
Danksagung erhalten: 1471 Mal
Kontaktdaten:

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von jp112sdl » 04.08.2021, 09:38

Pappabastelt hat geschrieben:
04.08.2021, 09:09
Welchen Prozessor für 4 Kanal und lokale Bedienung (8 Tastereingänge) würdest du vorschlagen ?
Das war ja schon geklärt:
Pappabastelt hat geschrieben:
03.08.2021, 13:59
Dann ein 1284P eventuell sogar als DIP Variante für die etwas betagteren Bastler (also ich z.B.). Kostet bei Reichelt 6,40 €.

VG,
Jérôme ☕️

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

Pappabastelt
Beiträge: 22
Registriert: 02.08.2021, 08:06
System: Alternative CCU (auf Basis OCCU)

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von Pappabastelt » 04.08.2021, 10:21

Alles klar.
So wirds gemacht :D

Rieeg
Beiträge: 31
Registriert: 20.11.2020, 16:23
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von Rieeg » 16.10.2021, 21:06

Hallo,

ich habe mich aus reiner Neugier mal daran gemacht einen 10 Kanal mit nem Mega 2560 in fliegender Verdrahtung zu basteln. Natürlich mit Levelshifter. Zum Schluss könnte man diese Konfig mit nem 2560 Core in nen Hutschienengehäuse stecken. Sofern die Verdrahtung bis in die Verteilung geht.

Irgendwie mag das ganze nicht so toll. Anlernen hat ohne Probleme funktioniert aber in der CCU3 Weboberfläche ist nur der erste Kanal unter "Einstellen" konfigurierbar und es gibt nur die 1. interne Taste. Und Auf Tastendrücke reagiert überhaupt nix.

Auch beim Start im "Serieller Monitor" scheint mir was merkwürdig.
Unbenannt.jpg
Sollte da nicht
Switch from 00 to 01
Switch from 01 to 02
usw stehen???

Hier mein abgeänderter Code.

Code: Alles auswählen

//- -----------------------------------------------------------------------------------------------------------------------
// AskSin++
// 2017-12-14 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 EI_NOTEXTERNAL
#include <EnableInterrupt.h>
#include <AskSinPP.h>
#include <LowPower.h>

#include <Blind.h>

#define LED_PIN 5

#define CONFIG_BUTTON_PIN 3

////////////////////////////////////////////////////////////////////////////////////////////////Relay und Button Pins definiern
#define ON_RELAY_PIN 22
#define DIR_RELAY_PIN 23

#define ON_RELAY2_PIN 24
#define DIR_RELAY2_PIN 25

#define ON_RELAY3_PIN 26
#define DIR_RELAY3_PIN 27

#define ON_RELAY4_PIN 28
#define DIR_RELAY4_PIN 29

#define ON_RELAY5_PIN 30
#define DIR_RELAY5_PIN 31

#define ON_RELAY6_PIN 32
#define DIR_RELAY6_PIN 33

#define ON_RELAY7_PIN 34
#define DIR_RELAY7_PIN 35

#define ON_RELAY8_PIN 36
#define DIR_RELAY8_PIN 37

#define ON_RELAY9_PIN 38
#define DIR_RELAY9_PIN 39

#define ON_RELAY10_PIN 40
#define DIR_RELAY10_PIN 41

#define UP_BUTTON_PIN 42
#define DOWN_BUTTON_PIN 43

#define UP_BUTTON2_PIN 44
#define DOWN_BUTTON2_PIN 45

#define UP_BUTTON3_PIN 46
#define DOWN_BUTTON3_PIN 47

#define UP_BUTTON4_PIN 48
#define DOWN_BUTTON4_PIN 49

#define UP_BUTTON5_PIN 54
#define DOWN_BUTTON5_PIN 55

#define UP_BUTTON6_PIN 56
#define DOWN_BUTTON6_PIN 57

#define UP_BUTTON7_PIN 58
#define DOWN_BUTTON7_PIN 59

#define UP_BUTTON8_PIN 60
#define DOWN_BUTTON8_PIN 61

#define UP_BUTTON9_PIN 62
#define DOWN_BUTTON9_PIN 63

#define UP_BUTTON10_PIN 64
#define DOWN_BUTTON10_PIN 65


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

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

// define all device properties
const struct DeviceInfo PROGMEM devinfo = {
  {0x00, 0x05, 0xaf},            // Device ID
  "JPBL200001",                  // Device Serial
  {0x00, 0x05},                  // Device Model
  0x24,                          // Firmware Version
  as::DeviceType::BlindActuator, // Device Type
  {0x01, 0x00}                   // Info Bytes
};

/**
   Configure the used hardware
*/
typedef AvrSPI<53, 51, 50, 52> RadioSPI;
typedef AskSin<StatusLed<LED_PIN>, NoBattery, Radio<RadioSPI, 2> > Hal;

DEFREGISTER(BlindReg0, MASTERID_REGS, DREG_INTKEY, DREG_CONFBUTTONTIME, DREG_LOCALRESETDISABLE)

class BlindList0 : public RegList0<BlindReg0> {
  public:
    BlindList0 (uint16_t addr) : RegList0<BlindReg0>(addr) {}
    void defaults () {
      clear();
      // intKeyVisible(false);
      confButtonTime(0xff);
      // localResetDisable(false);
    }
};


class BlChannel : public ActorChannel<Hal, BlindList1, BlindList3, PEERS_PER_CHANNEL, BlindList0, BlindStateMachine> {
  private:
    uint8_t on_relay_pin;
    uint8_t dir_relay_pin;
  public:
    typedef ActorChannel<Hal, BlindList1, BlindList3, PEERS_PER_CHANNEL, BlindList0, BlindStateMachine> BaseChannel;

    BlChannel () : on_relay_pin(0), dir_relay_pin(0) {}
    virtual ~BlChannel () {}

    virtual void switchState(uint8_t oldstate, uint8_t newstate, uint32_t stateDelay) {
      BaseChannel::switchState(oldstate, newstate, stateDelay);
      if ( newstate == AS_CM_JT_RAMPON && stateDelay > 0 ) {
        motorUp();
      }
      else if ( newstate == AS_CM_JT_RAMPOFF && stateDelay > 0 ) {
        motorDown();
      }
      else {
        motorStop();
      }
    }

    void motorUp () {
      digitalWrite(dir_relay_pin, HIGH);
      digitalWrite(on_relay_pin, HIGH);
    }

    void motorDown () {
      digitalWrite(dir_relay_pin, LOW);
      digitalWrite(on_relay_pin, HIGH);
    }

    void motorStop () {
      digitalWrite(dir_relay_pin, LOW);
      digitalWrite(on_relay_pin, LOW);
    }

    void init (uint8_t op, uint8_t dp) {
      on_relay_pin = op;
      dir_relay_pin = dp;
      pinMode(on_relay_pin, OUTPUT);
      pinMode(dir_relay_pin, OUTPUT);
      motorStop();
      BaseChannel::init();
    }
};


// setup the device with channel type and number of channels
typedef MultiChannelDevice<Hal, BlChannel, 10, BlindList0> BlindType; ///////////////////////////////////////////////Anzahl Kanäle festlegen

Hal hal;
BlindType sdev(devinfo, 0x20);
ConfigButton<BlindType> cfgBtn(sdev);
InternalButton<BlindType> btnup(sdev, 1);
InternalButton<BlindType> btndown(sdev, 2);
InternalButton<BlindType> btnup2(sdev, 3);
InternalButton<BlindType> btndown2(sdev, 4);
InternalButton<BlindType> btnup3(sdev, 5);
InternalButton<BlindType> btndown3(sdev, 6);
InternalButton<BlindType> btnup4(sdev, 7);
InternalButton<BlindType> btndown4(sdev, 8);
InternalButton<BlindType> btnup5(sdev, 9);
InternalButton<BlindType> btndown5(sdev, 10);
InternalButton<BlindType> btnup6(sdev, 11);
InternalButton<BlindType> btndown6(sdev, 12);
InternalButton<BlindType> btnup7(sdev, 13);
InternalButton<BlindType> btndown7(sdev, 14);
InternalButton<BlindType> btnup8(sdev, 15);
InternalButton<BlindType> btndown8(sdev, 16);
InternalButton<BlindType> btnup9(sdev, 17);
InternalButton<BlindType> btndown9(sdev, 18);
InternalButton<BlindType> btnup10(sdev, 19);
InternalButton<BlindType> btndown10(sdev, 20);
//*/

void initPeerings (bool first) {
  // create internal peerings - CCU2 needs this
  if ( first == true ) {
    HMID devid;
    sdev.getDeviceID(devid);
    Peer p1(devid, 1);
    Peer p2(devid, 2);
    Peer p3(devid, 3);
    Peer p4(devid, 4);
    Peer p5(devid, 5);
    Peer p6(devid, 6);
    Peer p7(devid, 7);
    Peer p8(devid, 8);
    Peer p9(devid, 9);
    Peer p10(devid, 10);
    Peer p11(devid, 11);
    Peer p12(devid, 12);
    Peer p13(devid, 13);
    Peer p14(devid, 14);
    Peer p15(devid, 15);
    Peer p16(devid, 16);
    Peer p17(devid, 17);
    Peer p18(devid, 18);
    Peer p19(devid, 19);
    Peer p20(devid, 20);
    sdev.channel(1).peer(p1, p2);
    sdev.channel(2).peer(p3, p4);
    sdev.channel(3).peer(p5, p6);
    sdev.channel(4).peer(p7, p8);
    sdev.channel(5).peer(p9, p10);
    sdev.channel(6).peer(p11, p12);
    sdev.channel(7).peer(p13, p14);
    sdev.channel(8).peer(p15, p16);
    sdev.channel(9).peer(p17, p18);
    sdev.channel(10).peer(p19, p20);
   
  }
}

void setup () {
  DINIT(57600, ASKSIN_PLUS_PLUS_IDENTIFIER);
  //storage().setByte(0,0);
  bool first = sdev.init(hal);
  sdev.channel(1).init(ON_RELAY_PIN, DIR_RELAY_PIN);
  sdev.channel(2).init(ON_RELAY2_PIN, DIR_RELAY2_PIN);
  sdev.channel(3).init(ON_RELAY3_PIN, DIR_RELAY3_PIN);
  sdev.channel(4).init(ON_RELAY4_PIN, DIR_RELAY4_PIN);
  sdev.channel(5).init(ON_RELAY5_PIN, DIR_RELAY5_PIN);
  sdev.channel(6).init(ON_RELAY6_PIN, DIR_RELAY6_PIN);
  sdev.channel(7).init(ON_RELAY7_PIN, DIR_RELAY7_PIN);
  sdev.channel(8).init(ON_RELAY8_PIN, DIR_RELAY8_PIN);
  sdev.channel(9).init(ON_RELAY9_PIN, DIR_RELAY9_PIN);
  sdev.channel(10).init(ON_RELAY10_PIN, DIR_RELAY10_PIN);

  buttonISR(cfgBtn, CONFIG_BUTTON_PIN);
  buttonISR(btnup, UP_BUTTON_PIN);
  buttonISR(btndown, DOWN_BUTTON_PIN);
  buttonISR(btnup2, UP_BUTTON2_PIN);
  buttonISR(btndown2, DOWN_BUTTON2_PIN);
  buttonISR(btnup3, UP_BUTTON3_PIN);
  buttonISR(btndown3, DOWN_BUTTON3_PIN);
  buttonISR(btnup4, UP_BUTTON4_PIN);
  buttonISR(btndown4, DOWN_BUTTON4_PIN);
  buttonISR(btnup5, UP_BUTTON5_PIN);
  buttonISR(btndown5, DOWN_BUTTON5_PIN);
  buttonISR(btnup6, UP_BUTTON6_PIN);
  buttonISR(btndown6, DOWN_BUTTON6_PIN);
  buttonISR(btnup7, UP_BUTTON7_PIN);
  buttonISR(btndown7, DOWN_BUTTON7_PIN);
  buttonISR(btnup8, UP_BUTTON8_PIN);
  buttonISR(btndown8, DOWN_BUTTON8_PIN);
  buttonISR(btnup9, UP_BUTTON9_PIN);
  buttonISR(btndown9, DOWN_BUTTON9_PIN);
  buttonISR(btnup10, UP_BUTTON10_PIN);
  buttonISR(btndown10, DOWN_BUTTON10_PIN);

  initPeerings(first);
  sdev.initDone();
}

void loop() {
  bool worked = hal.runready();
  bool poll = sdev.pollRadio();
  if ( worked == false && poll == false ) {
    hal.activity.savePower<Idle<> >(hal);
  }
}
Mfg Rico

jp112sdl
Beiträge: 9823
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 619 Mal
Danksagung erhalten: 1471 Mal
Kontaktdaten:

Re: Rolladensteuerung für Hutschiene im Selbstbau

Beitrag von jp112sdl » 16.10.2021, 21:39

Mach mal einen kompletten RESET (Configtaster > 6 Sekunden oder Ablernen mit Werksreset) und lern neu an.

VG,
Jérôme ☕️

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

Antworten

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