Hlavní stránka Nabídka Schémata Software Diskuze Kontakt English
Archiv diskuzí od roku 2005

RDS dekodér s TDA7330

Zpět na seznam diskuzí


Opteron, 13. září 2013, 08:25, 193.179.240.xxx
RDS dekodér - Reagovat

Zdravím kolegové,
stavím RDS dekodér s TDA7330B a chtěl bych se zeptat, jak je u tohoto systému řešena synchronizace. RDCL má připojen na vstup mikrokontroléru ATMega32 s povoleným přerušením INT0 a RDDA na libovolný vstup. Po příchodu hodinového signálu se vyvolá přerušení a zapíše se bit do paměti, která při každém vyvolání přerušení posouvá bity doleva. Potřebuju ale zjistit, jak nalézt začátek skupiny a následně detekovat typ skupiny (A0, Bo, A1, B1...). Dočetl jsem se, že v té skupině jsou 4 bloky po 26 bitech (16 bitů informace a 10 bitů CRC). V normě se píše, že kontrolní slovo je jakýsi CRC součet a offset A,B,C,C' a D. Tady si přesně nejsem jist co to je za písmena. Hodnoty HEX jednotlivých písmen to asi nebudou, protože C' v ASCII tabulce není. Ten kontrolní součet se provádím bitovým XORem polynomu informace a polynomu klíče nebo je potřeba to proXORovat ještě s tím offsetem???
Dík za info.
Honza, 13. září 2013, 09:26, [admin]
Re: RDS dekodér - Reagovat

No tak to máš o zábavu postaráno na celou zimu :)

Ale vážně. Nejprve si stáhni RDS Spy (http://rdsspy.com) a připoj ty signály Clock a Data na zvukovku, najdeš to v manuálu. Tím zjistíš, jestli ten TDA7330 funguje a dává smysluplná data.

No a v mcu bych pro začátek začal dekódováním PI a synchronizací na PI, nikoli na offsety. Je to o něco jednodušší a citlivost je skoro stejná, i když za určitých okolností je tam náchylnost k falešné synchronizaci.

Takže budeš potřebovat buffer posledních přijatých 26 bitů a funkci na výpočet CRC z prvních 16 těchto bitů. Tato funkce bude volána po každém přijatém bitu. K vypočtenému CRC se vždy pomocí XOR přičte offset A a výsledek se porovná s posledními 10 bity v bufferu. Když to sedí, pravděpodobně (!) jsme našli začátek skupiny a v bufferu je PI. Abychom měli jistotu, je třeba stejné PI najít ještě jednou, po přijetí n*104 bitů, kde n je 1 až max. cca 10. Tím máme zasynchronizováno, máme PI a pak je možné dekódovat další věci.

CRC se počítá sčítáním hodnot z generující matice G metodou XOR pro každý výskyt logické 1 v informačním slovu na příslušné pozici. Je to v normě popsané. Hodnotu offsetu A tam taky najdeš. RDS norma v anglickém znění je k dispozici, když zadáš do googlu "rbds1998.pdf".

V normě jsou i věci jako "syndromy" nebo posuvný registr se schopností oprav chyb. Nemá smysl to vůbec řešit. Chybné bloky je lepší ignorovat než opravovat, protože výsledkem opravy je sice správný blok po stránce kontroly CRC, ale obsah je často nesmyslný.
Opteron, 13. září 2013, 11:17, 193.179.240.xxx
Re: Re: RDS dekodér - Reagovat

No ten TDA7330B mi funguje a data posílá, mám k tomu totiž připojený mikrokontroler s LCD, do kterého mám zdroják v assembleru a zkompilovaný na HEX. Na LCD se vypisují názvy stanic atd, ale já mám druhým mikrokontrolerem řízený ten tuner přes I2C a ten mám komplet napsaný v C včetně obsluhy grafického LCD a ten RDS dekodér bych chtěl přenést taky do toho hlavního MCU. Problém ale je, že už si s assemblerem moc nerozumím, protože v něm už dlouho nedělám a tak jsem si řekl že by bylo jednodušší, zjistit jak to RDS dekodovat a napsat pro to funkce v C. Celý projek je z této stránky, kde je zdrojový kód v assembleru pro RDS i LCD.
http://www.mictronics.de/projects/rds-decoder/
Opteron, 13. září 2013, 19:33, 81.19.5.xxx
Re: Re: RDS dekodér - Reagovat

Jak se počítá to CRC? Z dokumentace není jasné, jestli je ta matice G, která má 16 řádků a 26 sloupců konstantní nebo se nějak tvoří v závislosti na přijatých datech.
Honza, 14. září 2013, 11:38, [admin]
Re: Re: Re: RDS dekodér - Reagovat

Pomocí XOR se sčítá posledních 10 bitů matice. Sčítají se ty řádky, kde je na příslušném místě v informačním slově 1.

Takže pro informační slovo 1000000000000000 je CRC 0001110111,
pro inf. slovo 1100000000000000 je CRC 1010010000, atd.
Opteron, 14. září 2013, 11:50, 81.19.5.xxx
Re: Re: Re: Re: RDS dekodér - Reagovat

Špatně jsem se vyjádřil, ta matice G je pro zakódování, pro rozkódování a synchronizaci je ta matice H jestli jsem to dobře pochopil. Asi se pokusim přepsat ten assembler do C, myslím, že to bude jednodušší cesta. Oni v té normě uvádějí i nějaký dekodovací hardware, ale zatím jesm nějak nepochytil, proč tam mají bitové sčítačka v tom syndromovém registru mezi některými bity. tomu klíčovému slovu to neodpovídá a checkwordu taky ne.
Honza, 14. září 2013, 12:14, [admin]
Re: Re: Re: Re: Re: RDS dekodér - Reagovat

Vždyť ten postup píšu výše. Není potřeba řešit ani matici H, ani syndromy ani nic jiného. Nechme to teoretikům, když je to baví.

Po každém přijatém bitu zkoušíš, jestli v posledních 26 bitech je platné CRC s offsetem A. Je to velice snadné. Výstup informačního slova může jít hned na LCD a máš jednoduchý dekodér PI. A protože máš i synchronizaci, tedy víš, že jsi na začátku skupiny, lze poměrně snadno dodělat i dekódování všeho ostatního.
Opteron, 14. září 2013, 12:34, 81.19.5.xxx
Re: Re: Re: Re: Re: Re: RDS dekodér - Reagovat

Aha, takže pro všechny kombinace 2^16 se pomocí XORu posčítají příslušné řádky a k výsledku se přičte kontrolní slovo A (pro další skupiny B, C, C' a D) a výsledek by měl korespondovat s přijatými posledními 10 bity. Chápu to správně???
Honza, 14. září 2013, 12:59, [admin]
Re: Re: Re: Re: Re: Re: Re: RDS dekodér - Reagovat

Je to tak. Posčítají se ty řádky, kde je na příslušné pozici v informačním slově 1. Nic jiného z té teorie, která je v normě, už není potřeba, a to ani kdyby ten dekodér měl být super sofistikovaný.
Ono to vznikalo už někdy před 30 lety, kdy se samozřejmě nepočítalo s tím, že to bude implementováno čistě softwarově, takže to museli nějak optimalizovat. Dneska si po každém bitu spočítáš CRC, a dosáhneš toho samého. A že ten hardware musí provádět víc operací, je na dnešních mcu naprosto šumák.
Opteron, 14. září 2013, 13:04, 81.19.5.xxx
Re: Re: Re: Re: Re: Re: Re: Re: RDS dekodér - Reagovat

Díky, odpoledne pro to zkusím napsat program a dám vědět jestli to funguje ;-)
Opteron, 15. září 2013, 12:21, 81.19.5.xxx
Re: Re: Re: Re: Re: Re: Re: Re: Re: RDS dekodér - Reagovat

Tak podařilo se, bloky A už detekuji, detekuji i bloky ostatního typu, ale vyskytl se problém s chybovostí ostatních bloků. Vypisuji na LCD počet detekovaných bloků A,B,C,C'a D a počty A, B, D vůbec nesedí. V algoritmu pro výpočet CRC a identifikaci bloku překopíruju celý obsah bloku, který se plní přerušením, takže to by nemělo mít vliv na obsah právě testovaných 26 bitů. Mám obavy, že tím algoritmem nedám dohromady celou jednu skupinu...ten RDS dekodér popsaný v assembleru naběhne komplet za cca 1 vteřinu, toto by nabíhalo dlouho než by byla zachycena kompletní skupina bez chyb.
Honza, 15. září 2013, 18:56, [admin]
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RDS dekodér - Reagovat

Vysílá se 11,4 skupiny za sekundu, takže stejným tempem ti musí přibývat i počty jednotlivých bloků A, B, C, D. To platí při bezchybném příjmu. V praxi to při prosté detekci bit po bitu bude přibývat o něco rychleji, protože s určitou pravděpodobností se vyskytne správné CRC s nějakým offsetem i v jiných polohách (falešná synchronizace).

Pokud počty bloků nabíhají pomaleji a signál je bezchybný, je chyba nikoli v algoritmu, ale v realizaci :)

Čas potřebný k plné synchronizaci lze snadno spočítat. Není delší než doba trvání dvou skupin, tedy cca 0,2 s. Za dalších 0,4 s už můžeš mít kompletní PS.

Data z TDA7330 lze číst na sestupné nebo vzestupné hraně signálu Clock, ale vždy nejdéle do 400 us po změně stavu signálu Clock.


Honza, 15. září 2013, 19:20, [admin]
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RDS dekodér - Reagovat

Pokud si nejsi jist, zda je příjem stanice perfektní a nerušený (např. vyzařováním z předmětného dekodéru), lze na TDA7330 připojit paralelně druhý dekodér nebo RDS Spy.
Opteron, 15. září 2013, 22:15, 81.19.5.xxx
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RDS dekodér - Reagovat

Já k tomu TDA mám právě připojená ten ATtiny2313, pro který je napsán kód v assembleru a tam to DRS na LCD naběhne do jedné max dvou vteřin, ale na tom velkém ATmega32 mi ty skupiny přibývají pomaleji. Začal jsem s přepisováním toho assembleru do C, tak snad to bude fungovat.
Opteron, 13. října 2013, 12:22, 81.19.5.xxx
Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: Re: RDS dekodér - Reagovat

Oznamuji že RDS již funguje :-)

<<  < Starší příspěvky :: Novější příspěvky >  >>

Upozornění: Tato diskuze byla uzavřena. Do diskuze již nelze vkládat nové příspěvky.

  

  

  

(C) 1999-2014 Pira.cz