Forum: Mikrocontroller und Digitale Elektronik Arduino-RDA5807 Scan-Funktion zu empfindlich?


von Uwe G. (basteluwe)


Angehängte Dateien:

Lesenswert?

Hallo Forum,
ich steuere ein kleines RDA5807-Radio mit Arduino Pro Mini. Im Code sind 
die Libraries "radio.h" und "RDA5807M.h" eingebunden.
Eigentlich funktioniert alles recht gut, nur die Scan-Funktion ist zu 
empfindlich!
Der Suchlauf stoppt praktisch bei jedem Müll-Signal, nicht nur bei 
sauberen Sendern. Meistens ist das dann nur dreckiges Rauschen. So ist 
es etwas mühselig bis zum nächsten sauberen Sender weiter zu klicken.

Ich finde in den Libraries nichts, was wie eine Schwelle für die 
Empfindlichkeit aussieht, die man einstellen könnte.
Kennt jemand die Libraries oder hat irgendwelche Ideen?

Danke Uwe

von Philipp G. (geiserp01)


Lesenswert?

OT: Wäre cooler gewesen das Zahnrad mit einem Encoder zu verbinden für 
den Sendersuchlauf.

Das Gehäuse füllern und lackieren. Schleifen schadet auch nichts.

Uwe G. schrieb:
> dreckiges Rauschen

Meinst du nicht rosa Rauschen?

: Bearbeitet durch User
von Uwe G. (basteluwe)


Lesenswert?

Du sagst ja selbst, deine Antwort ist OT.

von Mee (Gast)


Lesenswert?

Uwe G. schrieb:
> ich steuere ein kleines RDA5807-Radio mit Arduino Pro Mini. Im Code sind
> die Libraries "radio.h" und "RDA5807M.h" eingebunden.

Wieso postest du nicht einfach deinen ganzen Code hier, dann kann man 
dir vielleicht auch helfen. Woher sollen wir wissen was in radio.h 
definiert ist oder was für eine RDA5807M.h Datei du genutzt hast oder 
was in ihr drin steht?

von Uwe G. (basteluwe)


Angehängte Dateien:

Lesenswert?

Mee schrieb:
> Wieso postest du nicht einfach deinen ganzen Code hier, dann kann man
> dir vielleicht auch helfen. Woher sollen wir wissen was in radio.h
> definiert ist oder was für eine RDA5807M.h Datei du genutzt hast oder
> was in ihr drin steht?

Offensichtlich war mein Ausgangspost missverständlich daher hier noch 
mal die Essenz

Uwe G. schrieb:
> Ich finde in den Libraries nichts, was wie eine Schwelle für die
> Empfindlichkeit aussieht, die man einstellen könnte.
> Kennt jemand die Libraries oder hat irgendwelche Ideen?

Wenn ich meinen eigenen Code poste (siehe angehängte Zip), weiß trotzdem 
niemand, was in den beiden dort eingebundenen Libraries steht, oder?

Bevor das wieder missverstanden wird: Ich suche KEINE Hilfe für die 
Optimierung meines eigenen Codes, sondern Jemanden der Erfahrungen mit 
"radio.h" und/oder "RDA5807M.h" hat.
Die Hauptfrage ist: Gibt es irgendwo eine einstellbare "Signal-Schwelle" 
bei der der Scan stoppt?

Gruß Uwe

von Einer K. (Gast)


Lesenswert?

Du könntest eine URL zu der jeweiligen Library posten.
Dann ist wenigstens sichergestellt, dass man über die gleichen Libs 
redet.

Tipp am Rande:
Wenn man ein Radio und einen µC un unmittelbarer Nähe betreibt, und sich 
etwas ungeschickt dabei anstellt, dann ist das Störsignal u.U. stärker 
als so mancher Sender.
Dann ist das Verhalten total verständlich.

von Cyblord -. (cyblord)


Lesenswert?

Arduino Fanboy D. schrieb:
> Du könntest eine URL zu der jeweiligen Library posten.
> Dann ist wenigstens sichergestellt, dass man über die gleichen Libs
> redet.

Dann könnte man aber auch gleich die Doku zur Lib lesen und die 
Antworten dort suchen.

von Uwe G. (basteluwe)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wenn man ein Radio und einen µC un unmittelbarer Nähe betreibt, und sich
> etwas ungeschickt dabei anstellt, dann ist das Störsignal u.U. stärker
> als so mancher Sender.

OK, interessant.
Danke!

von Philipp G. (geiserp01)


Lesenswert?

Ich sehe gleich eine Diskussion bezüglich Entprellung. Der Link zur lib 
fehlt nach wie vor.

von Uwe G. (basteluwe)


Lesenswert?


von Philipp G. (geiserp01)


Lesenswert?

Du kannst die AdaFruit lib brauchen und dann das wie folgt lösen:
1
for (uint16_t f  = 8750; f < 10800; f += 10) {
2
   radio.readTuneMeasure(f);
3
   radio.readTuneStatus();
4
   uint16_t noiseLevel = radio.currNoiseLevel;
5
   if (noiseLevel < lowestNoiseLevel)
6
   {
7
      lowestNoiseLevel = noiseLevel;
8
      lowestNoiseFrequency = f;
9
   }
10
}

Lässt das in einem loop vorher laufen und sortierst Dir nur die Sender 
raus mit dem kleinsten Noiselevel. Das Noiselevel kannst selber 
definieren.

: Bearbeitet durch User
von Uwe G. (basteluwe)


Lesenswert?

Philipp G. schrieb:
> Du kannst die AdaFruit lib brauchen ...
>
OK, Danke! Seh ich mir an.

von Volker (Gast)


Lesenswert?

Hier gibt es ein lesbares Datenblatt zum RDA5807

https://github.com/SeeedDocument/Grove-I2C_FM_Receiver_v1.1/raw/master/res/RDA5807%20Datasheet.pdf

Im Register 5, das Register welches auch die Volume Einstellung 
vornimmt, gibt es noch die Bits 11:8 die eine "Seek SNR threshold value" 
Einstellung ermöglichen.

Diese Bits werden in RDA5807M::init() auf einen fixen Wert gesetzt. 
Vielleicht probierst du hier mal verschiedene Werte aus, und schaust, ob 
du eine Verbesserung erreichen kannst.

Zeile 112:
registers[RADIO_REG_VOL] = 0x9081; // 0x81D1;  // 0x82D1 / INT_MODE, 
SEEKTH=0110,????, Volume=1

Achtung: Der Kommentar in der Zeile ist seltsam, passt nicht zum Wert.

von Uwe G. (basteluwe)


Lesenswert?

Volker schrieb:
> Diese Bits werden in RDA5807M::init() auf einen fixen Wert gesetzt.
> Vielleicht probierst du hier mal verschiedene Werte aus, und schaust, ob
> du eine Verbesserung erreichen kannst.

Oh prima, Danke! Das hört sich interessant an.

Gruß Uwe

von Uwe G. (basteluwe)


Lesenswert?

Volker schrieb:
> Zeile 112:
> registers[RADIO_REG_VOL] = 0x9081; // 0x81D1;  // 0x82D1 / INT_MODE,
> SEEKTH=0110,????, Volume=1

Ganau da lag das Problem!
Der Wert 0x9081 ist zwar in der Lib (RDA5807M.cpp) voreingestellt, setzt 
aber die Threshold-Bits (11:8) auf "0000". Das ist offensichtlich das 
Minimum. Das Datenblatt nennt "1000" als Default-Wert. Nachdem ich 
versuchsweise "0x9F81" (1111 für Bits 11:8) ins Register geschrieben 
habe, wurden nur noch die absolut stärksten Sender gefangen. Bei 
"0x9881", also dem Default von "1000" funktioniert die "Seek" Funktion 
jetzt perfekt.

Danke nochmals für den sehr guten Hinweis!
Gruß Uwe

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.