Tach zusammen,
hat hier jemand schon was in Richtung Decodierung des RDS-Signals auf
Radiosendungen versucht? Ich verwende im Moment ein fertiges Radio von
Visteon (Ford-Original-Radio), greife darin die RDS Data, Clock und
Quality-Signale ab und bin mittlerweile so weit, dass ich den Binären
Datenstrom im Atmel/auf der Seriellen Schnittstelle sehe.. die vielen
Einsen und Nullen sehen zwar ganz nett aus (erinnert stark an schlechte
science-fiction-filme ;-) aber ich will das ja auch decodieren...
Ich werde aus diesen Specs nicht schlau :-( hat jemand schon fertigen
code für die Synchronisation und Decodierung der Gruppen und Blöcke?
Vielen Dank schon mal,
Gruß, Florian
Hallo Andreas,
ich hab mir jetzt mal dein Programm angeschaut. Erst mal grosses Lob
für die übersichtliche Programmierung! Ich hatte da erst vor kurzem ein
negativ-Beispiel zum gleichen Thema ;-)
Mir ist aber noch was aufgefallen, oder vielleicht hab ichs auch nicht
gefunden: Machst du in deiner TDA7330.c auch eine Fehlerkorrektur oder
nur eine Erkennung? Und für den ersten Fall: wie gut funktioniert das
ohne? Da gehen dann doch bis zum nächsten BLOCKA alle Daten verloren,
oder?
Gruß, Florian
Dieses Programm habe ich mir auch mal angesehen.
Es gibt nur eine Fehlererkennung, keine Korrektur!
Das alle Daten bis zum nächsten BLOCKA verlorengehen macht nichts, den
man kann eigentlich nur mit einer ganzen Gruppe, also mit allen 4
Blöcken etwas anfangen.
Schade eigentlich, das Programm ist sonst wirklich ganz nett.
Mein eigenes Werk zu diesem Thema ist etwas unübersichtlicher,
aber es hat auch eine Fehlerkorrektur.
Muss ich nachher mal raussuchen und hochladen.
Bis dann...
Hi Florian,
eine mögliche Fehlerkorrektur habe ich vorerst außer Acht gelassen, da
dies meiner Meinung nach diese extrem redundante Übertragunsart des RDS
nicht erfordert. Die Daten, die übertragen werden, ändern sich ja nicht
wirklich schnell und werden ständig wiederholt. Wenn wirklich mal die
Synchronisation durch einen Übertragungsfehler verloren wird, wartet
man halt bis zum nächsten BlockA ab und ist dann wieder synchronisiert.
Bei schlechten Empfangsverhältnissen allerdings funktioniert das nicht
so toll.
Wenn Du Lust hast kannst Du den Code ja mit einer Fehlerkorrektur
erweitern. Wie Dir sicher aufgefallen ist, hab ich auch bei weitem noch
nicht alle möglichen Info´s aus dem Datenstrom gezogen. Wäre schön, wenn
jemand da ein paar Erweiterungen machen würde, da ich leider auch immer
seltener Zeit finde...
( nichts zuletzt desshalb hab ich´s auch veröffentlicht ;o) )
Gruß Andreas
Hallo Andreas,
stimmt schon, es wird ja alles ständig wiederholt... nur möchte ich
selbst die 62.5% redundanz des Datenstroms an sich nicht "verkommen"
lassen ;-) Ausserdem werde ich wohl schauen, dass die Clock direkt an
einen der beiden externen Interrupts angeschlossen ist, die bei dir
ja durch die Taster belegt sind.
Da mein Projekt aus mehreren Microcontrollern und anderen Devices
besteht, die via I2C-Bus aneinander geschaltet sind werde ich die
decodierten Daten auch nicht direkt auf ein Display geben, sondern sie
via I2C abrufbar machen...
Auf jeden Fall Danke ich dir für deine prompte Antwort und für die
Veröffentlichung der Quellcodes.
Wenn ich mal keine Lust mehr habe zu programmieren werde ich mal meine
gesammelten Werke auf meine Homepage stellen (http://db1lol.de).
Vielleicht ist was interessantes dabei.
Gruß Florian
Hallo
im Anhang meinen RDS-Dekoder, getestet am mega8. Ist
Interrupt-gesteuert. RDS-CLK auf INT1, RDS-DATA an PD2.
Die Daten werden auf einem 4x16-LCD dargestellt, dazu benutze ich die
Bibliothek von Peter Fleury.
Zu bedienen gibt es nix.
Ist nicht so schön aufgebaut, wie das Programm von Andreas, dafür
wesentlich kompakter, besser optimiert und leichter zu durchschauen
bzw. zu erweitern/anzupassen.
Gruß Uwe
Hey Uwe,
vielen Dank für das File. Sieht gut aus... am besten ich werfe meinen
code weg. ich glaube der dauert beim ausführen 10 mal so lang und tut
noch nicht mal ;-)
Gru0 Florian
Nochmal Hallo,
ich Probleme dein File zu compilieren. Ich benutze hier den AVR-GCC und
die AVR-Utils unter Gentoo Linux und er kompiliert einfach nicht das
Assembler-file und findet dann natürlich das object dazu nicht. Was
benutzt du um das zu compilieren? irgendein script/batchdatei?
Gruß Florian
Nochmal Hallo #2,
ich hab jetzt meine alte Calculate_Syndrome-Funktion anstatt deiner
Assemblerroutine eingefügt... sollte eigentlich ja das gleiche
passieren.... ;-)
Gruß Florian
Hallo Florian,
ich benutze WinAVR...
Die Calculate_Syndrom macht das gleiche wie mein Assembler-Programm,
braucht aber mehr Platz und Zeit. Naja, das ist bei den mega's kein
wirkliches Problem.
Woher hast Du diese Routine ?
Gruß Uwe
Hallo Uwe,
das WinAVR sollte eigentlich nur eine für windows umkompilierte
variante der GNU Utilities sein.. keine ahnung warum das nicht tut.
Ich hab selbst eine Calculate_Syndrom geschrieben, aber um sicher zu
gehen, dass das auch so richtig ist verwende ich jetzt die aus Andreas
Programm. Nicht dass sich da irgendwo noch ein fehler eingeschlichen
hat und ich dann die Wände hoch gehe beim Fehlerfinden ;-)
Gruß Florian
hello
who knows Uwe Nagel mail or value (MHz) of quartz in his project
descrypted below ?
graetz
Autor: Uwe Nagel (Gast)
Datum: 08.10.2004 22:21
Dateianhang: megaRDS.zip (13,1 KB, 22 Downloads)
------------------------------------------------------------------------
--------
Hallo
im Anhang meinen RDS-Dekoder, getestet am mega8. Ist
Interrupt-gesteuert. RDS-CLK auf INT1, RDS-DATA an PD2.
Die Daten werden auf einem 4x16-LCD dargestellt, dazu benutze ich die
Bibliothek von Peter Fleury.
Zu bedienen gibt es nix.
Ist nicht so schön aufgebaut, wie das Programm von Andreas, dafür
wesentlich kompakter, besser optimiert und leichter zu durchschauen
bzw. zu erweitern/anzupassen.
Gruß Uwe
Hallo asdf-fan,
ich habe die Seite vor einiger Zeit vom Netz genommen, da ich keine Zeit
mehr hatte, sie zu pflegen.
Die Projektdaten habe ich aber noch hier rumliegen. Was genau suchst Du
denn?
Viele Grüße
Andreas
Ich habe mir das RDS100 Radio-Modul von ELV zugelegt, bei dem die
RDS-Rohdaten über eine serielle Schnittstelle ausgegeben werden.
Deshalb wäre es natürlich interessant mal über deinen Quelltext zu
schauen, um ein wenig mehr über die Dekodierung der Rohdaten zu
erfahren.
Ich werde die Auswertung dann über LabView machen.
Vielen Dank schon mal
Grüße
asdf-fan
Hi,
super vielen vielen Dank, sehr lobenswert dokumentiert.
Ich werds morgen genauer unter die Lupe nehmen, vielleicht kommt noch
die eine oder andere Frage.
@Andreas: Super Seite! Was mich dabei stutzig macht ist wie dort
beschrieben der im Bitbang Modus betriebene FT245BM. Das RDS Signal
kommt doch mit 1,1875 kHz Clock. Mit 2facher Abtastung laut Shannon muss
man das RDS-Signal bzw. den FT245BM also mindestens alle 421 us
abtasten, oder? Ich habe mal einen FT232R im Bitbang Modus betrieben,
und ich bin bei bestem Willen nicht unter 17 ms gekommen. oder habe ich
hier einen Denkfehler? Oder lag es daran, dass ich unter Windows eine
Oberfläche mit VB erstellen wollte? Wie hast Du das hingekriegt?
Hallo Tio,
das Geheimnis liegt darin, dass das Ganze nicht (mehr) im Bit-Bang-Modus
läuft. So hatte ich das wohl am Anfang versucht, bin aber ebenfalls am
Timing gescheitert. Es gibt aber eine viel bessere Lösung, die im
Schaltplan und in Real schon realisiert ist, aber im Text noch nicht
beschrieben wurde.
Der FT245 hat ja neben den Datenleitungen auch ein paar
Handshakeleitungen, so auch einen WR-Eingang. Wenn an dem Pin der Pegel
von high nach low wechselt, werden die Signale an D0...D7 direkt in den
TX-FIFO geschrieben.
Laut Datenblatt müssen zwischen den WR Flanken mindestens 100ns liegen.
Man könnte also theoretisch Datenraten von bis zu 10MHz da reinpumpen
(natürlich nur bis der FIFO voll ist).
An den WR Pin habe ich dann einfach den Clock-Ausgang des RDS-Dekoders
gehängt. Damit werden die beiden Signale QUAL und RDDA immer genau zur
richtigen Zeit in Richtung PC geschoben. Der RDS-Dekoder wird also quasi
nicht abgetastet, sondern sendet die Daten von selbst mit der richtigen
Abtastrate. Genial oder? ;o)
Gruß Andreas
Das ist ja DER HAMMER!!! Das merke ich mir. DANKE!! :-))
Btw, ich habe so den ein oder anderen C Coder für RDS Dekodierung
gesucht und gefunden (nachdem meine ersten Versuche nicht ganz so
klappten). Jetzt heißt es ja, dass das Syndrom eigentlich nach
Multiplikation mit der inversen Generatormatrix Null ergeben soll, wenn
kein Fehler vorliegt.
So, die meisten Codes in C oder Basic arbeiten mit einer Matrix die
verschieden ist von der eigentlichen inversen Generatormatrix. Und in
diesen Codes erhält man nach exklusiven Oder-Verknüfungen das Syndrom,
das den Blocktypen verrät. Es ergibt also keine Null.
Ich blick da jetzt den Unterschied nicht, kannst Du mir dabei helfen?
ist bei der XOR Verknüpfung schon eine Fehlerkorrektur erhalten, oder
wie kann ich die machen?
Hier mal die Matrix hierzu:
Hallo,
wie genau bekomme ich raus wo der MUX In vom TDA7330 am Radio
angeschlossen werden muss?
Hat jemand dieses Projekt schon Erfolgreich fertiggestellt?
Gruss
@Florian
>Ich werde aus diesen Specs nicht schlau :-( hat jemand schon fertigen>code für die Synchronisation und Decodierung der Gruppen und Blöcke?
Hier findest Du eine mögliche Lösung für die Synchronisation bzw.
Prüfbitberechnung.
Beitrag "RDS CRC Prüfbit Berechnung"
Bernhard