Wir ärgern uns immer mehr über störende, grasse Lautstärkeunterschiede beim Fernsehen

Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Wir ärgern uns immer mehr über störende, grasse Lautstärkeunterschiede beim Fernsehen

Beitrag von Admin »

Ich habe jetzt nochmal sehr umfangreich umgestellt, weil mich das letzte Programm total unzufrieden gemacht hat. Deshalb sitze ich jetzt um 01:00 Nachts immer noch an der Kiste. Und ich habe es auch gleich ein bischen getestet. Morgen mache ich noch einen längeren Test, aber das was ich jetzt auf die Kürze gesehen habe, ist es wieder ein Schritt in die richtige Richtung, was ich in den letzten Tagen nicht mehr gesehen habe. Da habe ich offenbar eine falsche Idee verfolgt. Also fürs Erste mal das aktuelle Programm, Version 5.2

Da mache ich jetzt 5000 Messungen für ein Ergebniss. Und der Programmteil, der den IR-Code dann an den Fernseher sendet, kommt nicht mehr nach einer bestimmten Zeit, sondern immer einmal direkt, am Ende der 5000 Messungen, was etwa nach 700 Millisekunden der Fall ist. Vorher waren diese beiden Vorgänge voneinander abgekoppelt. Also der Durchschnitt aus 5000 Messungen, ist das Ergebnis einer Lautstärkemessung, und das ist dann auch direkt das Ergebnis, für plus, minus IR-Code senden, oder für gleichbleibende Lautstärke.

Und ich habe heute noch den Entladewiderstand am Kondensator des Micro-Ausganges, von 1MOhm auf 390kOhm runtergesetz, um einen fehlenden Lautstärke-Pegel, schneller erkennen zu können. So sinkt der Pegel werend einem Messdurchgang auf annähnernd Null, wenn kein Ton mehr vorhanden ist. Das ist wichtig, dass der Null-Pegel schnelle erkennt wird, und die Lautstärke nicht unnötig erhöht wird, wenn gar kein Ton mehr vorhanden ist. Also der Pegel unter Minimalwert ist.

Und jetzt gehe ich pennen. :(iii):

Code: Alles auswählen

/* Programm zum Servostrom messen
   So kann man die max. Stromanforderung eines Servos rausfinden
   Der Servo sollte eine eigene, genügend starke Spannungsversorgung haben,
   dass er auch wirklich den Strom ziehen kann, den er benötigt.
   Die Neustart Taste setzt slle Werte zurück,
   und die Messung startet neu.
   Fernseh_Lautstaerke_V05.2_30.04.23
*/

#include <LiquidCrystal_I2C.h> // LCD Display
LiquidCrystal_I2C lcd(0x3F, 20, 4); // 0x3F oder 0x27
//-------------------------IR-Sender---------------------------------
#include <Arduino.h>
#include "PinDefinitionsAndMore.h" // Makros für Input- und Output-Pin definieren etc.
#include <IRremote.hpp>
uint8_t sCommand = 0x10; // für Volumen + / Oder "0x11" für Volumen -
uint8_t sRepeats = 2; // Code 2x wiederholen
//----------------------Micro Eingang-------------------------------
const byte ANALOG_PIN = A0; // Hier wird der Name vom Messeingang festgelegt
// Grundlage ist SimpleSender
// IR Sender RC5 minimalisiert für Fernsehsteuerung IR-Pin. ist Pin.3
// -------Einstellungen für Programm--------------------------------
int max1 = 0;// Ausgelesener Analogwert vom Micro Durchschnitt aus 2500 Messungen
int aktuell = 0;
int sollwert = 50; //Soll-Lautstärke
unsigned long max2 = 0;   // Der Speicher für den Max-Sammelwert vom ADC
int zaehler = 0;
int tolleranz = 10;
int mindestpegel = 20;
int messdurchgaenge = 5000; // Jede Messung ist der Durchschnitt aus 5000 Messungen in ~1050ms
byte messungEnde = 0;
//----------------Sonderzeichen-------------------
#define OHM   "\xF4"    // Zeichen für Ohm
#define AE    "\xE1"    // Zeichen für "ä"
#define OE    "\xEF"    // Zeichen für "ö"
#define SS    "\xE2"    // Zeichen für "ß"
#define OBEN    "\x5E"    // Zeichen für "hoch"
#define RECHTS   "\176" // Pfeil nach rechts
#define LINKS   "\177"  // Pfeil nach links
#define UE  "\365"      // Zeichen für "ü"
#define GRAD  "\337C"   // Zeichen für "Grad" Celsius
//------------------------------------------------
//-----------------------Taster01--------------------------------------
// const byte ist im Programm Constant und byte ist fuer Werte 0-255
const byte Taster01 = 11;           // Pin 15 wird Constant als Taster01 bezeichnet
byte Tasterstatus01 = 0;            // Zum Abfragen des Tatsenpins
unsigned long Sekundenablauf01 = 0; // Tastenabfrage von Taster02 50ms aussetzen
const unsigned long Pausezeit01 = 300;
//-----------------------Taster02--------------------------------------
const byte Taster02 = 10;           // Pin16 wird Constant als Taster02 bezeichnet
byte Tasterstatus02 = 0;
unsigned long Sekundenablauf02 = 0; // Tastenabfrage von Taster02 50ms aussetzen
const unsigned long Pausezeit02 = 300;
//------------------------IR-Sender------------------------------------
byte senden = 0; // Sendekontrolle 0=Nichts, 1=Volumen+, 2=Volumen-
unsigned long Sekundenablauf03 = 0; // IR-Sender 3 Sekunden aussetzen
const unsigned long Pausezeit03 = 3000;
//----------------------LCD Beleuchtung-------------------------------
unsigned long Sekundenablauf04 = 0; // Displayzeit 3 Min. hell
const unsigned long Pausezeit04 = 60000 * 3UL;
//=====================================================================
void setup(void)
{
  Serial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
  IrSender.begin(DISABLE_LED_FEEDBACK);
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  Sekundenablauf04 = millis(); // 3 Minuten Display hell neu starten
  lcd.setCursor (0, 2);
  lcd.print (F("Sollwert ="));
  lcd.setCursor (12, 2);
  lcd.print (sollwert);
  lcd.setCursor (0, 3);
  lcd.print (F("Messwert ="));
  lcd.setCursor (0, 1);
  lcd.print (F("===================="));
  lcd.setCursor (0, 0);
  lcd.print (F("Lautst"AE"rke Kontrolle"));
  //-----------Taster einrichten----------------------------------------
  // Taster werden intern auf plus gelegt. Mit GND ueber Taste aktivieren
  pinMode(Taster01, INPUT_PULLUP); // Pin 10 fuer Taster01
  pinMode(Taster02, INPUT_PULLUP); // Pin 11 fuer Taster02
}
//=====================================================================
void loop(void) {
  //-----------Taster01 abfragen----------------------------------------
  if (millis() - Sekundenablauf01 >= Pausezeit01) { // 300msec abgelaufen?
    Tasterstatus01 = digitalRead(Taster01);         // Pin von Taster01 abfragen
    if (Tasterstatus01 == LOW) {     // Ist Taster01 gedrueckt?
      Sekundenablauf01 = millis();                  // Die 100ms neu starten
      sollwert = sollwert - 1;
      lcd.setCursor (12, 2);
      lcd.print ("    ");
      lcd.setCursor (12, 2);
      lcd.print (sollwert);
      // 3 Minuten Display hell neu starten
      lcd.backlight();
      Sekundenablauf04 = millis();
    }
  }
  //-----------Taster02 abfragen----------------------------------------
  if (millis() - Sekundenablauf02 >= Pausezeit02) { // 300msec abgelaufen?
    Tasterstatus02 = digitalRead(Taster02);         // Pin von Taster02 abfragen

    if (Tasterstatus02 == LOW) {                    // Ist Taster02 gedrueckt?
      Sekundenablauf02 = millis();                  // Die 100ms neu starten
      sollwert = sollwert + 1;
      lcd.setCursor (12, 2);
      lcd.print ("    ");
      lcd.setCursor (12, 2);
      lcd.print (sollwert);
      // 3 Minuten Display hell neu starten
      lcd.backlight();
      Sekundenablauf04 = millis();
    }
  }
  //---------------------------Display 10 Minuten ?----------------------
  if (millis() - Sekundenablauf04 >= Pausezeit04)  // 10 Min. abgelaufen?
  {
    lcd.noBacklight();   // Displaybeleuchtung aus
  }
  //------------ 2500 Durchläufe sind eine Messung -----------------
  //---------------------------------- Messung ---------------------
  max1 = analogRead (ANALOG_PIN); // Analogen Eingang A0 auslesen
  zaehler++;
  max2 = max2 + max1;
  if (zaehler == messdurchgaenge)
  {
    aktuell = max2 / messdurchgaenge;
    lcd.setCursor (12, 3);
    lcd.print (F("    "));
    lcd.setCursor (12, 3);
    lcd.print (aktuell);
    //-------------auf Minus testen-------------------------------
    if ((sollwert + tolleranz) <= aktuell)
    {
      lcd.setCursor (18, 2);
      lcd.print (F("-"));
      sRepeats = 2; // Code 2x wiederholen
      senden = 2; // Sende IR-Code 0x11 Volumen-
    }
    if ((sollwert + tolleranz) <= aktuell - 10)
    {
      sRepeats = 3; // Code 3x wiederholen
      // 3 Minuten Display hell neu starten
      lcd.backlight();
      Sekundenablauf04 = millis();
    }
    //-------------auf Plus testen--------------------------------
    if ((sollwert - tolleranz) >= aktuell)
    {
      lcd.setCursor (18, 2);
      lcd.print (F("+"));
      sRepeats = 2; // Code 2x wiederholen
      senden = 1; // Sende einmal IR-Code 0x10 Volumen+
    }
    if ((sollwert - tolleranz) >= aktuell + 10)
    {
      sRepeats = 3; // Code 3x wiederholen
      // 3 Minuten Display hell neu starten
      lcd.backlight();
      Sekundenablauf04 = millis();
    }
    //-----------testen ob innerhalb der Tolleranz----------------
    if (sollwert <= (aktuell + tolleranz) && (sollwert >= (aktuell - tolleranz)))
    {
      lcd.setCursor (18, 2);
      lcd.print (F("#"));
      senden = 0; // Senden beenden
    }
    //----------------testen auf Tonpausen------------------------
    zaehler = 0;
    max2 = 0;
    // Pegel nicht erhöhen, wenn die Lautstärke gerade total leise ist
    if ((senden == 1) && (aktuell < mindestpegel))
    {
      senden = 0;
      lcd.setCursor (18, 2);
      lcd.print (F("#"));
    }
    messungEnde = 1;
  }
  // ------------------IR-Sender------------------------------------
  if (messungEnde == 1)
  {

    if (senden == 1)  //ist Pegel zu leise?
    {
      sCommand = 0x10; // für Volumen + / Oder "0x11" für Volumen -
      IrSender.sendRC5(0x1, sCommand, sRepeats);
      senden = 0;
      delay(25);
      Sekundenablauf03 = millis();
    }
    if (senden == 2)  //ist Pegel zu laut?
    {
      sCommand = 0x11; // für Volumen - / Oder "0x10" für Volumen +
      IrSender.sendRC5(0x1, sCommand, sRepeats);
      senden = 0;
      delay(25);
      messungEnde = 0;
    }
  }
}
Hier die geänderte Schaltung:
.
Fernseher Lautstärke Steuerung_V05.JPG
Fernseher Lautstärke Steuerung_V05.JPG (201.78 KiB) 395 mal betrachtet
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Wir ärgern uns immer mehr über störende, grasse Lautstärkeunterschiede beim Fernsehen

Beitrag von Admin »

Fürs erste werde ich das Thema jetzt mal lassen. Ich bin so ganz zufrieden. Oder so zufrieden wie man sein kann, wenn man keinen ganz anderen Aufwand betreiben will. Ich will ja nicht mit der Tonquelle verkabeln, also geht nur das Microfon. Und das bringt mache Tonhöhen stärker, manche schwächer. Somit ist die Lautstärke, die das Micro aufnimmt je nach Frequenz verschieden stark. Anders als die Ohren. Die Alternative wäre jetzt noch ein Equilizer, mit dem ich die leiseren Frequenzen verstärke, dass das Gerät dann die Lautstärke "genauso hört" wie meine Ohren sie hören. Dann würde das Gerät besser darauf reagieren. Ich schätze mal, wenn man den Aufwand nicht übertreiben will, ist kein 100% Ergebnis drinn. :roll: Also normal machen meine Geräte 100% das, was ich will, und was ich mir vorgestellt habe. Hier ist das Ergebnis hinter meinen Erwartungen zurück geblieben. Aber mal schauen, kann ja ein dass mir dazu noch was einfällt. :oo:

Jetzt mache ich mich erst mal über ein anderes Thema her. Wenn ich da dann Testbedarf habe, werde ich das mal aufbauen.

Servus
Franz :(V):

Hier ist ein Video vom letzen Testen. Das Gerät reagiert nur auf Laustärken Soll +/- 11. Also +/- 10 ist die Tolleranz. 10 über/unter der Tolleranzspanne, macht es gleich 2x Lauter oder Leiser, da das ja sehr weit ausserhalb der Tolleranz liegt. Das wichtige war, dass der Pegel schnell genug unter 20 geht, wenn kein Ton mehr da ist. Also in einer guten Sekunde. Denn wenn das zu lange dauert, dann wird ein Ton aus als leiser Ton (über 20) erkannt und es wird lauter geregelt, wenn das ein paarmal nacheinander passiert kann das zum Problem werden, wenn der Ton dann wieder kommt, und natürlich dann viel zu laut ist. Im Video sieht/hört man, dass der Fernsehton wieder eingeschalten wird, obwohl er stumm geschalten ist. Das passiert, weil dieses Gerät hier meine Sprache auch als eine TonQuelle erkennt, aber nicht weiß, dass der Ton nicht vom Fernseher kommt. Und wenn der Ton dann zu Laut, oder zu leise ist, dann sendet er an den Fernseher das IR-Signal für lauter oder leiser, wodurch die Stummschaltung am Fernseher wieder aufgehoben wird.

Wärend ich mir hier diesen Video angesehen habe, kam mir eine Idee. Ich könnte eine zweite Option zur Lautstärkemessung einbauen. Nähmlich ein Kabel am Lautsprecherausgang anschließen. Wenn der Kabeleingang eine Spannung an diesem Eingang registiert, wir Automatisch dieser Eingang zur Lautstärkemessung herangezogen und die Werte vom Micro nicht für die Lautstärkemessung herangezogen. Das wäre doch eine gute Erweiterung? Dann hat man die Möglichkeit, das Gerät nur hinzustellen, und so zu benutzen, oder hinstellen und den Kopfhörer-Ausgang zu verbinden. Das hätte den Vorteil, dass die Raumgeräsche für die Lautstärkemessung keine Rolle mehr Spielen, sondern ausschießlich nur der Kopfhörer-Ausgang. Mal schauen, ob ich mich übereden kann, das zusätzlich zu bauen. :(oo):
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Wir ärgern uns immer mehr über störende, grasse Lautstärkeunterschiede beim Fernsehen

Beitrag von Admin »

Ich habe jetzt nach einem Datenblatt vom Max9814 gesucht und bin fündig geworden. Da steht auch Versorgungsspannung 2,7 bis 5,5 Volt. Also kann man die Anschatungshinweise vom Anbieter AZ-Delivery auf 3,3 Volt wohl in der Pfeife rauchen. Ich werde, wenn ich mein Testgerät das nächste mal öffne, die Spannung für den MAx9814 auf 5 Volt umbauen.

Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Wir ärgern uns immer mehr über störende, grasse Lautstärkeunterschiede beim Fernsehen

Beitrag von Admin »

Ich war neugierig und habe doch gleich auf 5 Volt umgestellt. Ich erhoffte mir einen hören Pegel, also einen deutlich größeren Unterschied zur völligen Stille. Das kommt aber leider gar nicht hin. Ganz im Gegenteil. Bei völliger Stille habe ich bei meinem Testgerät mit 3,3 Volt auf dem MAX9814 einen Pegel von 1-2. Und wenn ich richtig was auf die Ohren gebe, also klopfen am Tisch neben dem Gerät, so um die 120. Bei der 5 Volt Versorgung hatte ich dann bei völliger Stille 65 und beim klopfen am Tisch so um die 130. Also nach oben raus keine große Erhöhung, aber bei völliger Ruhe nicht mehr 1 sondern über 60. Die 3,3 Volt sind also wirklich die bessere Wahl.

Also bleibt besser bei den 3,3 Volt für das MAX9814 Micro.
Benutzeravatar
Franz54
Beiträge: 56
Registriert: Mo 20. Apr 2020, 10:12
Wohnort: 82441 Ohlstadt / Garmisch
Kontaktdaten:

Re: Wir ärgern uns immer mehr über störende, grasse Lautstärkeunterschiede beim Fernsehen

Beitrag von Franz54 »

Das dürfte der Grund sein, warum die bei AZ-Delivery auch lieber die 3,3 Volt für das Mikro genommen haben. Weil die Schaltung bei 5 Volt übersteuert.
Antworten

Zurück zu „Hardware / Schaltungstechnik“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste