HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
Moderator: Co-Administratoren
- kalwados
- Beiträge: 71
- Registriert: 07.07.2019, 13:29
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 7 Mal
HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
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.
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.
-
- Beiträge: 1793
- Registriert: 30.08.2017, 23:25
- Hat sich bedankt: 175 Mal
- Danksagung erhalten: 399 Mal
- Kontaktdaten:
Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
wire.h ist Bestandteil des Arduino Pakets.
Viele Grüße,
Tom
Tom
- kalwados
- Beiträge: 71
- Registriert: 07.07.2019, 13:29
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 7 Mal
Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
Hallo TomMajor,
Die Include-Datei wird jetzt auch gefunden, allerdings muss es ein großes W sein: #include <Wire.h>
Danke.
Die Include-Datei wird jetzt auch gefunden, allerdings muss es ein großes W sein: #include <Wire.h>
-
- Beiträge: 1793
- Registriert: 30.08.2017, 23:25
- Hat sich bedankt: 175 Mal
- Danksagung erhalten: 399 Mal
- Kontaktdaten:
Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
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.
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
Tom
- kalwados
- Beiträge: 71
- Registriert: 07.07.2019, 13:29
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 7 Mal
Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
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 machenTomMajor hat geschrieben: ↑17.11.2019, 17:21Eventuell 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.
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...
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
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.
Also einfach eine eigene PWM-Klasse implementierung und dann den DimmerChannel entsprechend anpassen.
Anfragen zur AskSin++ werden nur im Forum beantwortet
- kalwados
- Beiträge: 71
- Registriert: 07.07.2019, 13:29
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 7 Mal
Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
Danke für den Hinweis; ich werde mir das in den nächsten Tagen mal ansehen.
Achim
-
- Beiträge: 2
- Registriert: 19.05.2020, 14:14
- System: Alternative CCU (auf Basis OCCU)
- Danksagung erhalten: 3 Mal
Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
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
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
- kalwados
- Beiträge: 71
- Registriert: 07.07.2019, 13:29
- Hat sich bedankt: 29 Mal
- Danksagung erhalten: 7 Mal
Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
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 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
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);
Gruß vom Teutoburger Wald,
Kalwados
- Dateianhänge
-
- AudioVolume.zip
- (2.03 MiB) 48-mal heruntergeladen
-
- Beiträge: 705
- Registriert: 22.05.2018, 10:23
- Hat sich bedankt: 24 Mal
- Danksagung erhalten: 120 Mal
Re: HM-LC-DIM1PWM für Lautstärke-Regler modifizieren
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:
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