Forum: Mikrocontroller und Digitale Elektronik Radio Lautsprecher Knacken bei delay-Fkt


von Stefan T. (stefan98t)


Lesenswert?

Hallo Zusammen,

ich habe mit einem Tea5767 Modul und Esp8266 ein Radio gebaut, jedoch 
knacken die Lautsprecher immer am Ende der void loop() Schleife, also 
genauer gesagt alle 500ms (siehe Code). Da kein Knacken auftritt solange 
der Code auf den Esp hochlädt, geh ich davon aus, dass es ein Software 
Problem ist... Wenn ich den Delay ändere, ändert sich auch entsprechend 
der zeitliche Abstand des Knackens. Irgendeine Idee wie man das Knacken 
beheben kann?
Danke für die Hilfe!
Gruß Stefan

Hier mein schematischer Aufbau: 
http://educ8s.tv/arduino-fm-radio-project/

Hier der Code:
#include <Wire.h>
#include <TEA5767Radio.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27, 16, 2);
TEA5767Radio radio = TEA5767Radio();

double freq = 107.9;
double wert;
int frequencyInt;

void setup()
{
  Wire.begin();
  Serial.begin(115200);
  pinMode(A0, INPUT);
  pinMode(14, INPUT);

  lcd.begin(16,2);
  lcd.init();
  lcd.backlight();
  radio.setFrequency(107.9);
  lcd.setCursor(5, 0);
  lcd.print("Rockland");
}

void loop()
{

  if(digitalRead(14)){  //suche
    wert = analogRead(A0);
    frequencyInt = map(wert, 11, 1024, 760, 1080);
    freq = frequencyInt/10.0d;
    radio.setFrequency(freq);
    lcd.clear();
    lcd.setCursor(5, 0);
    lcd.print("Suche");
    lcd.setCursor(0, 1);
    lcd.print("Frequenz: ");
    lcd.setCursor(10, 1);
    lcd.print(freq);
  }
  else{
    radio.setFrequency(107.9);
    lcd.setCursor(4, 0);
    lcd.clear();
    lcd.print("Rockland");
  }

  delay(500);
}

von Mario M. (thelonging)


Lesenswert?

Wenn Du bei jedem Schleifendurchlauf die Frequenz neu setzt, bleibt dem 
Empfänger wohl nichts anderes übrig, als mit einem Knacken zu reagieren.

von C. U. (chriull)


Lesenswert?

Stefan T. schrieb:
> jedoch
> knacken die Lautsprecher immer am Ende der void loop() Schleife,

Ich nehme eher an, dass das Knacken durch das neusetzen der Frequenz 
beim Radio auftritt:
Stefan T. schrieb:
> radio.setFrequency(freq);

und das machst du in beiden Zweigen des if Befehls - also immer nach dem 
delay wenn loop neu ausgeführt wird.

von Stefan T. (stefan98t)


Lesenswert?

Danke, daran lag es.... Aber das wundert mich jetzt, dass dieses Problem 
vorher niemand beschrieben hat...

: Bearbeitet durch User
von Jens G. (jensig)


Lesenswert?

Stefan T. (stefan98t)

>Danke, daran lag es.... Aber das wundert mich jetzt, dass dieses Problem
>vorher niemand beschrieben hat...

Warum? Kein Mensch setzt permenent irgendwelche Register, wenn er nicht 
muß.
Auserdem läßt der Baustein sich muten, was man sehr gut zum 
Stummschalten während des Neusetzen verwenden kann.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.