Forum: Mikrocontroller und Digitale Elektronik RDS mit RDA5807M


von Oliver R. (superberti)


Lesenswert?

Hi,

ich habe noch immer vor, obigen Chip zur Uhrzeitsynchronisation in der 
WordClock einzusetzen. Nach langer Wartezeit sind die Module auch 
endlich bei mir angekommen und ich habe das Radio auch erfolgreich 
ansprechen können.
Z.B. kann ich mit einem kurzen Drahtstück als Antenne ganz gut NDR2 
empfangen, der RDS-Empfang scheint auch zu klappen.
Das Datenblatt ist mir eigentlich klar, nur frage ich mich, WANN ich die 
RDS-Daten vom Modul lesen und dekodieren soll. Die Daten kommen mit 
einer Bitrate von ca. 1,2 kHz an, aber woran kann ich erkennen, dass 
jetzt ein Block vollständig eingelesen wurde? Es gibt keinen 
Interrupt-Pin dafür und das Datenblatt schweigt sich darüber komplett 
aus.
Damit ich keinen Block verpasse (der mit der Uhrzeit wird ja nur jede 
Minute gesendet), müsste ich ja irgendwie sicherstellen, dass ich nie zu 
spät oder zu früh die Daten lese.
Hat dazu jemand eine Idee?

Gruß,
Oliver

von Dieter M. (Gast)


Lesenswert?

ständig lesen und auswerten!
Da ca. 1187 Bit/s  / (26Bit*4) = ca. 11,5 RDS-Gruppen pro Sekunde 
übertragen werden, sollte das also häufiger als 11,5x pro Sekunde 
erfolgen.
Und wenn Dir irgendwann in Block B der group type 4A über den Weg läuft,
weisst Du, dass jetzt in Block C und D Datum und Zeit übertragen werden.

von Oliver R. (superberti)


Lesenswert?

OK,
dann müsste man aber darauf hoffen, dass die RDS-Gruppe sich niemals 
innerhalb eines I2C-Transfers ändert, sonst hätte man ja evtl. 
inkonsistente Daten. Sowas steht natürlich nicht im Datenblatt.

Gruß,
Oliver

von Markus (Gast)


Lesenswert?

@Oliver

> Z.B. kann ich mit einem kurzen Drahtstück als Antenne ganz gut NDR2
> empfangen, der RDS-Empfang scheint auch zu klappen.

Welches Modul hast du im Einsatz?

von Oliver R. (superberti)


Lesenswert?

RDA5807M, siehe Titel.

Gruß,
Oliver

von Markus (Gast)


Lesenswert?

Oliver R. schrieb:
> RDA5807M, siehe Titel.
>
> Gruß,
> Oliver

D. h., das Modul hat nur den RDA5807M montiert (siehe unten) und die 
Drahtantennen einfach an den FM anschließen.

http://www.ebay.de/itm/5pcs-FM-Stereo-Module-Radio-Module-RDA5807M-RRD-102V2-0-RRD-102-V2-0-DE-/251545950501?hash=item3a914e9925:g:GNAAAOxy3NBSn-3q

von Harald A. (embedded)


Lesenswert?

Habe mal nen Codeschnipsel unter Arduino erstellt, der die RDS-Data 
einfach als Printf ausspuckt. Du musst nur auf den richtigen Block 
warten und die Zeit dann übernehmen.
Leider ist das nicht ganz so einfach wie gedacht, da gibt es eine 
merkwürdige Sommer/Winterzeit-Geschichte (kann mich an die Details nicht 
erinnern) UND du musst die Zeit evtl. mehrfach vergleichen, da 
Empfangsfehler nicht immer transparent sind. Zeigt man die Uhrzeit 
ungefiltert an so kommen manchmal eigentümliche Zeiten heraus.

Ich würde es trotzdem verfolgen, das dürfte eine schöne und dazu sehr 
günstige Methode für eine Quasi-DCF Zeit sein.

Der Codeschnipsel in diesem Beitrag:
Beitrag "FM Radio Modul RDA5807M"

Viel Erfolg!

von Oliver R. (superberti)


Lesenswert?

Hi Markus,

> Oliver R. schrieb:
>> RDA5807M, siehe Titel.
>>
>> Gruß,
>> Oliver
>
> D. h., das Modul hat nur den RDA5807M montiert (siehe unten) und die
> Drahtantennen einfach an den FM anschließen.
>

Ja genau diese Module sind es. Ich habe mir zwar noch einen Adapter auf 
Lochraster mit Stiftleisten gelötet ('ne ganz tolle Arbeit) aber der 
kleine Draht (10 cm) reicht für ein RSSI von 64 bei NDR2. Eine 
passendere Antenne würde da sicherlich noch einiges verbessern.

Gruß,
Oliver

von Oliver R. (superberti)


Lesenswert?

Hi,

> Leider ist das nicht ganz so einfach wie gedacht, da gibt es eine
> merkwürdige Sommer/Winterzeit-Geschichte (kann mich an die Details nicht
> erinnern) UND du musst die Zeit evtl. mehrfach vergleichen, da
> Empfangsfehler nicht immer transparent sind. Zeigt man die Uhrzeit
> ungefiltert an so kommen manchmal eigentümliche Zeiten heraus.
>

ich bin jetzt schon ein gutes Stück weitergekommen und empfange die 
RDS-Daten, indem ich 50 mal pro Sekunde (halb so oft würde 
wahrscheinlich auch reichen) mir die RDS-Daten hole (aber nur, falls 
RDS-Ready-Bit gesetzt ist) und dann die Daten auf Veränderungen prüfe.
Die Dekodierung der Zeit ist mit durch einen Codeschnipsel aus einem 
anderen Dekoder auch gelungen, so dass ich bei gutem Empfang (RSSI>70) 
problemlos die Uhrzeit empfangen kann.
Es ist allerdings tatsächlich so, dass auch hier dann und wann mal die 
falsche Uhrzeit empfangen wird, allerdings sind bei solch falschen 
Zeiten auch immer die Fehlerbits in den Registern BLERA/BLERB gesetzt, 
so dass man diese Zeiten problemlos verwerfen kann.
Bei schlechterem Empfang (RSSI 40-50) ergibt sich leider nicht mehr 
solch ein eindeutiges Bild: Ich empfange dann auch vollkommen kaputte 
Zeitgruppen, in denen BLERA und BLERB auf 0 stehen. Außerdem empfange 
ich solche Zeitgruppen (Grouptype 4A) wesentlich öfter, als dies möglich 
wäre (also öfter als 1 mal pro Minute).
Weiterhin verstehe ich nicht, weshalb es keine Blockfehlerregister für 
Block C und D gibt. RDS sendet schließlich für alle Blöcke 
Fehlerkorrekturdaten und nicht nur für A und B. Evtl. ist hier aber auch 
das Datenblatt unvollständig und es gibt noch etliche "geheime" 
Register, denen man diese Werte entlocken könnte.
Ich habe aber bisher keinen Code gefunden, der andere als die 
offiziellen Register benutzen würde.
Es könnte natürlich auch sein, dass die RDS-Daten gerade dann per I2C 
geholt werden (ich hole immer alle Leseregister am Stück), wenn sich die 
Register intern gerade ändern (Zugriffskonflikt).
Warum es solch einen Konflikt dann aber bei schlechtem Empfang viel 
häufiger geben müsste, kann ich nicht erklären.
Offenbar scheint die RDS-Fehlerkorrektur in diesem Chip nicht gut zu 
funktionieren, denn zumindest müsste man fehlerhafte Blöcke doch 
zuverlässig erkennen können.
Für Hinweise auf Verbesserungen bin ich natürlich jederzeit dankbar.

Gruß,
Oliver

von Harald A. (embedded)


Lesenswert?

Vielleicht ein doofer Vorschlag, aber mittlerweile ist der SI4703 ja 
auch für kleines Geld (ca. 1,30€ bei Aliexpress) zu haben. Der Chip 
dürfte in dieser Hinsicht besser konstruiert sein, denn dieser hat die 
BLER-Bits für Block C und D. Code gibt es zuhauf dafür im Netz.

Sonst frage die chinesische Firma RDA doch mal per email, die sind oft 
kommunikativer als man vermutet.

von Oliver R. (superberti)


Lesenswert?

Ja, an den Si4704 habe ich auch schon gedacht. Es gibt dafür auch recht 
günstige Module und das Datenblatt gibt wirklich alles her, was man 
wissen muss. Man hat einen Interrupt-Pin für den Empfang einer 
RDS-Gruppe und zusätzlich kann auch auf alle Blockfehler zugreifen.
mit dem RDA-Chip hat man womöglich an der falschen Stelle gespart. Ich 
habe aber das Gefühl, dass auch der RDA-Chip diese Möglichkeiten bietet, 
da man auch zwei GPIO-Pins zur Verfügung hat und zumindest gibt es einen 
Interrupt nach dem Tunen. Nur über RDS steht halt nicht viel...
Mal sehen, ob ich einen Ansprechpartner bei RDA auftreiben kann.

Gruß,
Oliver

von Harald A. (embedded)


Lesenswert?

Habe mal die Register verglichen, scheint ja gerade so, als ob die Leute 
bei RDA den Silabs Chip Si4703 "nachgebaut" haben, bei den Details (wie 
z.B. RDS) keine Lust bzw. Zeit mehr hatten...

Edit: Du meinst den Si4705, oder? Der Si4704 hat kein RDS. Unterschied 
Si4703 und  Si4705, letzterer hat Digital Audio Out, sonst identisch.

: Bearbeitet durch User
von Klaus2 (Gast)


Lesenswert?

...ich weiß, die Frage ist sicherlich doof, aber: Wieso denn kein DCF 
nutzen?

Klaus.

von Bernd (Gast)


Lesenswert?

Klaus2 schrieb:
> ...ich weiß, die Frage ist sicherlich doof, aber: Wieso denn kein DCF
> nutzen?
>
> Klaus.

Mensch Klaus, die Frage ist vielleicht doof.

von Paul B. (paul_baumann)


Lesenswert?

Klaus2 schrieb:
> Wieso denn kein DCF
> nutzen?

Vielleicht, weil RDS und DCF zwei verschiedene Sachen sind?
MfG Paul

von Oliver R. (superberti)


Lesenswert?

Hi,

> ...ich weiß, die Frage ist sicherlich doof, aber: Wieso denn kein DCF
> nutzen?
>
Nein, die Frage ist nicht doof, aber die käuflichen 
DCF-Empfängerplatinen haben so alle ihre Macken und laufen längst nicht 
bei allen Usern störungsfrei. Außerdem gibt es Regionen und Länder, wo 
man den DCF77 nicht empfangen kann.
UKW mit RDS gibt es dagegen überall und das Modul kostet nur 'nen 
schlanken Euro...

Gruß,
Oliver

von Oliver R. (superberti)


Lesenswert?

So, ich denke, dass ich mich jetzt mit dem RDA lange genug beschäftigt 
habe. Mein Fazit: Wunderware bekommt man für ca. 1€ nicht! Ich habe den 
Hersteller kontaktiert, natürlich ohne Erfolg. Aber wer schon das 
Datenblatt für solch einen popeligen Chip für "Confidential" hält, der 
hat wohl etwas zu verbergen.
Ohne das vollständige Datenblatt kann man aber nur Radio hören und ein 
wenig RDS machen.
Folgende Probleme ergaben sich beim Testen:

- das Tunig nach dem Einschalten hat nicht immer zuverlässig 
funktioniert. In ca. 25% der Fälle hat er zwar 92.1 MHz in den Registern 
stehen, NDR2 konnte aber nicht empfangen werden, RSSI lag dann bei 40, 
RDS ging natürlich erst recht nicht. Ein erneutes Tunen hat dann aber 
gleich geklappt. Ob das nur beim Start so ist (ich halte mich bei der 
Startsequenz an das Datenblatt), oder ob das bei jedem Tuning so ist, 
kann ich leider nicht sagen.

- RDS funktioniert nur bei starken Sendern halbwegs gut. Es gibt immer 
noch etliche Blockfehler. Der Chip scheint diese NICHT zu korrigieren, 
denn ich bekomme auch bei gutem Empfang GT-4A-Blöcke öfter als ein mal 
pro Minute. Das kann allerdings nicht sein, da diese nur zur vollen 
Minute ausgesendet werden. Also muss der Group-Type falsch sein. 
Dummerweise behauptet der Chip aber, dass keine Blockfehler vorliegen. 
In solchen Fällen kommt dann erwartungsgemäß nur Schrott als Zeit an, 
der Block war halt für etwas anderes gedacht.

- Falls der Chip auch RDS-Verbose-Funktionen wie der Si4703 hat, dann 
müsste er sich nach dem Reset im RDS-Verbose-Modus befinden (der Begriff 
taucht ein mal im Datenblatt auf). Wäre er das nicht, dann dürften die 
Blockfehlerregister immer nur 0 anzeigen, und das RDS-Ready-Flag dürfte 
auch nicht bei fehlerhaften Blöcken gesetzt werden. Nur doof, dass die 
Blockfehlerregister für C und D nicht aufgeführt werden, und dass man 
auch nicht an die RDS-Rohdaten herankommt, um die Fehlerkorrektur selbst 
zu machen.

Tatsache ist, dass es hinter dem Register 0Fh noch weitere gibt, die 
ihre Werte auch ständig ändern. Ohne Datenblatt kann man da lange 
probieren.

Ich werde mich jetzt dem Silabs-Chip zuwenden, der kostet aus China auch 
nicht die Welt und hier habe ich ein hervorragendes Datenblatt.
Der RDA-chip ist wohl nur für den absoluten Billigmarkt gedacht, 
Hauptsache man hört etwas aus dem Radio und man erkennt den Sendernamen. 
Für viel mehr taugt das Ding nicht.

Viele Grüße,
Oliver

von Harald A. (embedded)


Lesenswert?

Danke für die ausführliche Analyse, das bestätigt meine bisherigen 
Beobachtungen. Bisher hatte ich jedoch keine Zeit, in die Probleme 
tiefer einzusteigen. Würde ich mir jetzt auch nicht mehr antun.

Hast du auch den Si4706 gesehen? Das ist ein auf RDS spezialisierter 
Empfänger z.B. für TMC Empfang. Die Register sond etwas anders 
aufgebaut, die Daten werden jedoch offensichtlich besser aufbereitet und 
auch die Fehlerkorrektur scheint "hochwertiger" zu sein.

Kostet auch nicht die Welt.

von Christoph F. (saij)


Lesenswert?

Ich möchte mich hier für die Informationen ebenso bedanken.
Ich bin erst vom Si4703 auf den RDA5807M umgestiegen weil er irgendwie 
besser zu performen schien in Tests. Allerdings ist das Handling vom 
Si4703 (gerade in Bezug auf RDS) um längen besser ^.^

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.