HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

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

Moderator: Co-Administratoren

Antworten
Benutzeravatar
kalwados
Beiträge: 11
Registriert: 07.07.2019, 13:29
Hat sich bedankt: 2 Mal

HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von kalwados » 16.11.2019, 23:12

Hallo in die Runde,

ich lese hier schon seit einigen Wochen mit. Der Nachbau von HomeMatic-Geräten mittels Arduino, CC1101 und AskSin++ ist eine geniale Idee; vielen Dank an die Entwickler! Ich hab' das hier auf einem BreadBoard schon mal ausprobiert; funktioniert sowohl bei direkter Kopplung zwischen HM-RC-8 (Handsender) als auch über die RaspberryMatic-Zentrale (Pi3 mit HM-MOD-RPI-PCB).

Nun ist der Wunsch aufkommen, mit einem modifizierten Dimmer eine Lautstärke-Einstellung zu realisieren. Dazu möchte ich Digital-Potentiometer (z.B. AD5171) per I²C ansteuern. Der Dimmer-Sketch HM-LC-Dim1PWM scheint mir als Basis geeignet, wenn man anstelle der PWM-Modulation den Rampenwert per I²C-Bus an das Poti sendet (bzw. 2 davon wegen Stereo). Leider steige ich durch den Programcode nicht so richtig durch; und die für I²C erforderliche Include-Datei wire.h kann ich auch nicht finden. Wer hat so etwas schon mal umgesetzt und kann mir Tipps und Anregungen geben?

Hintergrund:
Ich möchte die alten FS-20 basierten Geräte loswerden und durch was bidirektionales ersetzen; also HM oder HM-IP. Das einzige Gerät für das ich noch keinen HM-Ersatz gefunden habe, ist ein alter FS20-DAP3 (Digital Audio Prozessor; ELV-Journal 06/2007): Drei Stereo-Eingänge umschaltbar; Lautstärke, Balance, Höhen/Mitten/Tiefen könne per FS20-Handsender eingestellt werden. Davon wird eigentlich nur die Lautstärke-Funktion verwendet, um ein NF-Audiosignal auf den Verstärker + Boxen auf der Terrasse zu steuern. Um nicht mehrere Handsender verwenden zu müssen (-> WAF) möchte ich den Lautstärke-Steller als HM-Selbstbau-Gerät umsetzen.

Danke für's Lesen.

Gruß aus dem Tecklenburger Land,
Kalwados.

TomMajor
Beiträge: 953
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 52 Mal
Danksagung erhalten: 161 Mal
Kontaktdaten:

Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von TomMajor » 16.11.2019, 23:33

wire.h ist Bestandteil des Arduino Pakets.
Viele Grüße,
Tom

Benutzeravatar
kalwados
Beiträge: 11
Registriert: 07.07.2019, 13:29
Hat sich bedankt: 2 Mal

Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von kalwados » 17.11.2019, 16:02

Hallo TomMajor,
TomMajor hat geschrieben:
16.11.2019, 23:33
wire.h ist Bestandteil des Arduino Pakets.
Danke.
Die Include-Datei wird jetzt auch gefunden, allerdings muss es ein großes W sein: #include <Wire.h>

TomMajor
Beiträge: 953
Registriert: 30.08.2017, 23:25
Hat sich bedankt: 52 Mal
Danksagung erhalten: 161 Mal
Kontaktdaten:

Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von TomMajor » 17.11.2019, 17:21

Eventuell bist du mit deinem Vorhaben besser dran, einen Sketch zu nehmen der die Daten im user code /Sketch selbst verarbeitet ähnlich dem 4,2 ePaper Projekt.
Bei dem PWM Beispiel wird ja relativ viel mit PWM im 'Hintergrund' in der AskSinPP Lib gemacht, k.A. wie einfach du da an die PWM Daten für eigene Zwecke rankommen würdest.
Viele Grüße,
Tom

Benutzeravatar
kalwados
Beiträge: 11
Registriert: 07.07.2019, 13:29
Hat sich bedankt: 2 Mal

Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von kalwados » 17.11.2019, 19:40

TomMajor hat geschrieben:
17.11.2019, 17:21
Eventuell bist du mit deinem Vorhaben besser dran, einen Sketch zu nehmen der die Daten im user code /Sketch selbst verarbeitet ähnlich dem 4,2 ePaper Projekt.
Bei dem PWM Beispiel wird ja relativ viel mit PWM im 'Hintergrund' in der AskSinPP Lib gemacht, k.A. wie einfach du da an die PWM Daten für eigene Zwecke rankommen würdest.
Ich habe eine Kopie von Dimmer.h erstellt als Poti.h; dort updatePhysical() erweitert so dass "value" per Wire.write() ausgegeben wird. Falls das funktioniert (noch nicht getestet), plane ich den Code immer weiter abzuspecken bis es nicht mehr geht; und dann die letzte Änderung rückgängig machen ;-)

Aber ich gebe Dir Recht; Dimmer.h zu verwenden ist wie mit Kanonen auf Spatzen zu schießen.
Meintest Du "HB-Dis-EP-42BW"? Auf die Schnelle sehe ich dort keine Funktion welche einen Wert rauf/runterzählt. Die Idee mit "Dimmer" war ja auch, Kurz- und Langdrücken unterscheiden zu können. Aber ich bin für alle Tipps offen...

papa
Beiträge: 447
Registriert: 22.05.2018, 10:23
Danksagung erhalten: 36 Mal

Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von papa » 17.11.2019, 21:48

Der Dimmer ist schon richtig. Der DimmerChannel kriegt als letztes Templateargument die PWM-Implementierung. Diese ist für AVR PWM8 und für den STM32 PWM16. Beide Klassen sind in actors/PWM.h implementiert.
Also einfach eine eigene PWM-Klasse implementierung und dann den DimmerChannel entsprechend anpassen.
Anfragen zur AskSin++ werden nur im Forum beantwortet

Benutzeravatar
kalwados
Beiträge: 11
Registriert: 07.07.2019, 13:29
Hat sich bedankt: 2 Mal

Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von kalwados » 18.11.2019, 18:58

papa hat geschrieben:
17.11.2019, 21:48
Der Dimmer ist schon richtig.[...] Also einfach eine eigene PWM-Klasse implementierung und dann den DimmerChannel entsprechend anpassen.
Danke für den Hinweis; ich werde mir das in den nächsten Tagen mal ansehen.

Achim

mwpost
Beiträge: 1
Registriert: 19.05.2020, 14:14
System: Alternative CCU (RaspberryMatic etc.)

Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von mwpost » 19.05.2020, 14:18

Hallo Kalwados,
ist hieraus etwas geworden? Ist das DigiPot mit Asksin++ im Einsatz?
Ich würde mich für das Projekt interessieren und habe einen vergleichbaren Einsatzzweck. Vielleicht könntest du hier unterstützen...
Gruß,
mwpost

Benutzeravatar
kalwados
Beiträge: 11
Registriert: 07.07.2019, 13:29
Hat sich bedankt: 2 Mal

Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von kalwados » 20.05.2020, 14:44

Hallo mwpost,

Ja, ich habe das Projekt umgesetzt und der Lautstärke-Regler ist auch im Einsatz. Allerdings habe ich dann doch nicht den AD5171 oder DS1803(-010) als Poti verwendet. Mit dem DS1803 habe ich auf dem Breadboard experimentiert und konnte damit auch die Poti-Werte verändern und eine angelegte 5V-Gleichspannung steuern (mit dem Multimeter gemessen). Es fehlen dann noch ein paar Kondensatoren im Eingang und Ausgang, um NF-Signale verarbeiten zu können.

Statt dessen habe ich den Original FS20-DAP3 zerlegt; der verwendet einen TDA7438 Audio-Prozessor mit I²C-Bus, auf einer separaten Audio-Interface-Platine. Dieses Modul habe ich an den Arduino angebunden. Von den drei Audio-Eingängen nutze ich aber nur einen; und von den zahlreichen Funktionen des TDA7438 auch nur die Lautstärke-Anpassung.

Dazu habe ich -- wie damals von @papa schon vorgeschlagen -- die PWM-Implementierung durch eigenen Code ersetzt, welcher den Rampenwert an den TDA7438 übergibt. Das funktioniert so einigermaßen, nur beim Ändern der Lautstärke ist immer ein Knacken zu hören (was es beim ursprünglichen FS20-DAP3 nicht gab). Ich vermute eine ungeschickte Implementierung in meinem Code, bin dem aber noch nicht nachgegangen. Vermutlich die Umrechnung der 200-Dimmer-Steps in die 48 Stufen des Audio-Prozessors.

Langer Rede kurzer Sinn: Ich habe meinen Code mal in eine ZIP-Datei verpackt und hänge das hier an.
Die Datei "VolCtrl.h" enthält den von mir geschriebenen Code zur Ansteuerung des TDA7438. Wenn ich den Code in der ursprünglichen pwm.h korrekt verstanden habe, ist die Methode "set()" die Stelle, wo der Dimmer-Rampenwert übergeben wird. "calcVolume()" rechnet das Intervall 0..200 um in den Bereich 0..47. "setVolume()" übergibt den Wert per I²C an den Audio-Prozessor.
"Init()" setzt ein paar Vorgaben für den TDA7438, z.B. den verwendeten Eingang. Leider kenne ich mit AskSinPP fast überhaupt nicht aus, um z.B. Balance, Höhen, Mitten oder Bässe ebenfalls von außen steuerbar zu machen. Falls @papa dies liest und Zeit und Lust hat, würde ich mich über Verbesserungen sehr freuen :-)

"HM-Volume.ino" ist eine modifiziert Variante des Dimmer-Sketches "HM-LC-DIM1PWM-CV". Die wesentliche Änderung ist in der Zeile

Code: Alles auswählen

DimmerControl<HalType,DimmerType,TDA_VOL<> > control(sdev);
zu finden. Dort habe ich "PWM8" durch meine neue Klasse "TDA_VOL" ersetzt; die restlichen Änderungen sind für Name und Seriennummer, sowie um Debug-Ausgaben einzustreuen.

Gruß vom Teutoburger Wald,

Kalwados
Dateianhänge
AudioVolume.zip
(2.03 MiB) 7-mal heruntergeladen

papa
Beiträge: 447
Registriert: 22.05.2018, 10:23
Danksagung erhalten: 36 Mal

Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren

Beitrag von papa » 22.05.2020, 22:52

Um verschieden Sachen zu steuern - Bass, Höhen, usw. müsstest Du dem TDA_VOL unterschiedliche Modies beibringen - also Lautstärke ändern, Bass ändern, Höhen ändern ...
Dann legst Du Dir nen DimmerDevice mit der benötigten Anzahl Kanälen an. Im Control wird dann für jeden Kanale der entsprechene Modus angeschalten. Das könnte etwa so aussehen:

Code: Alles auswählen

typedef DimmerChannel<HalType,PEERS_PER_CHANNEL> ChannelType;
// 6 channel - no virtual channels
typedef DimmerDevice<HalType,ChannelType,6,1> DimmerType;

HalType hal;
DimmerType sdev(devinfo,0x20);
DimmerControl<HalType,DimmerType,TDA_VOL<> > control(sdev);

...

void setup () {
  ....
  control.pwn(0).setModel(TDA_MODE_VOLUME);
  control.pwn(1).setModel(TDA_MODE_FADER);
  control.pwn(2).setModel(TDA_MODE_BASS);
  
Anfragen zur AskSin++ werden nur im Forum beantwortet

Antworten

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