České vysoké učení technické v Praze Fakulta elektrotechnická Studijní program: Elektrotechnika a informatika Obor: Výpočetní technika
Bakalářský projekt
Bezdrátový mikrofon Libor Hrbek Vedoucí projektu Ing. Miroslav Skrbek Ph.D.
Červen 2006
1
2
Poděkování Tímto bych chtěl poděkovat mému vedoucímu bakalářské práce Ing. Miroslavu Skrvkovi Ph.D. za jeho ochotu a pomoc při vypracovávání mého projektu. Dále bych chtěl poděkovat společnosti IBM za poskytnuté finanční prostředky k nákupu jednotlivých součástek. 3
4
Čestné prohlášení Prohlašuji, že jsem tuto bakalářskou práci vyhotovil samostatně a použil jsem pouze materiály ze seznamu použité literatury.
…………………………………. Ve Studené dne 18. června 2006
Libor Hrbek
5
6
Abstrakt Tento projekt se zabývá přenosem zvuku pomocí BlueTooth kanálu. Data jsou digitalizována z analogových signálů. Digitální data jsou následně přenášena do PC.
Abstract The goal of this project is transmit sound by using BlueTooth canal. Data are digitalized from analog signals. Digital data are consenquently transit to the PC.
7
8
Obsah 1.Úvod...................................................................................................................... 13 2. Rozvržení postupu řešení v „rešeršní“ části: .................................................. 14 2. 1. Výběr BlueTooth zařízení.............................................................................. 14 2. 2. Zkoumané moduly......................................................................................... 15 2. 2. 1. Connectblue 33iBT ................................................................................ 15 2. 2. 2. ToothPIC ............................................................................................... 17 2. 2. 3. Class 2 BT Module F2M03AC2 ............................................................. 19 2. 3. Výběr napájení.............................................................................................. 21 2. 3. 1. Li-Ion (Li-Pol) baterie ............................................................................. 21 2. 3. 2. Olověný akumulátor............................................................................... 23 2. 3. 3.Porovnání obou baterií ........................................................................... 24 2. 3. 4. Solární článek........................................................................................ 24 2. 3. 5. Stabilizátor napětí.................................................................................. 24 2. 6. Mikrofon ........................................................................................................ 25 2. 7. Vybrané součástky + jejich specifikace......................................................... 25 2. 7. 1. Solární článek........................................................................................ 25 2. 7. 2. Baterie ................................................................................................... 26 2. 7. 3. Měnič D/D.............................................................................................. 26 2. 7. 4. BT modul ............................................................................................... 26 2. 7. 5. Mikrofon................................................................................................. 26 2. 7. 6. Popis funkce blokového schématu ........................................................ 27 3. Realizace Projektu.............................................................................................. 28 3. 1. BT modul....................................................................................................... 28 3. 1. 1. Účel modulu........................................................................................... 29 3. 1. 2. Realizace BT modulu ............................................................................ 29 3. 1. 3. První oživení modulu ............................................................................. 30 3. 1. 4. Testování přenosu zvuku ...................................................................... 31 3. 1. 5. Zhodnocení ........................................................................................... 31 3. 2. Kodekový modul ........................................................................................... 32 3. 2. 1. Účel modulu........................................................................................... 33 3. 2. 2. Kodek PHIPIPS UDA1344TS ................................................................ 33 3. 2. 3. Realizace kodeku .................................................................................. 35 3. 2. 4. Nastavení vzorkovací frekvence............................................................ 35 3. 2. 5. Jak nastavovat L3 interface................................................................... 36 3. 2. 6. Nastavení kodeku pomocí L3 interface ................................................. 38 3. 2. 7. Kontrola výstupního zesilovače ............................................................. 39 3. 2. 8. Nastavování vstupního zesilovače ........................................................ 39 3. 2. 9. Finální testování modulu ....................................................................... 40 3. 2. 10. Zhodnocení.......................................................................................... 40 3. 2. Programovací modul pro DSPIC4013 ........................................................... 41
9
10
3. 2. 1. Účel modulu........................................................................................... 41 3. 2. 2. Co modul obsahuje................................................................................ 41 3. 2. 3. Nastavení modulu.................................................................................. 42 3. 2. 4. Zhodnocení ........................................................................................... 42 3. 3. Programování mikroprocesoru dsPIC30F4013 ............................................. 43 3. 3. 1. Práce s porty ......................................................................................... 43 3. 3. 2. Práce se sériovou linkou (UART) .......................................................... 44 3. 3. 3. Práce s rozhraním DCI .......................................................................... 44 3. 3. 4. Nastavení rozhraní ................................................................................ 44 3. 3. 5. Zasílaná data pro L3 interface ............................................................... 47 3. 3. 6. Sběr dat a jejich odesílání přes UART................................................... 48 3. 3. 7. Struktura hlavního programu MAIN ....................................................... 49 3. 3. 8. Zhodnocení ........................................................................................... 49 4. Závěr .................................................................................................................... 50
11
12
1.Úvod Smyslem tohoto projektu bylo vyzkoumat pro firmu IBM, zda je reálné přenášet zvuk pomocí technologie Blue tooth (BT). Jedná se o mikrofon umístěný na zdi, který by měl zaznamenávat zvuk v inteligentní místnosti. Ten bude přenášen dále do PC. Toto PC bude brané jako BT Master zařízení, do kterého bude možno přenášet signály z více mikrofonů naráz. Mikrofony budou brány jako Slave zařízení. Dále bylo účelem zjistit, zda je možné tyto mikrofony napájet solárními články, za jakých podmínek a jak velké a těžké tyto články budou, aby splňovaly potřebné parametry pro napájení zařízení. Parametry: •
Zvuk – 16 kHz, 16-bit
•
Výdrž – nepřetržitý provoz
13
2. Rozvržení postupu řešení v „rešeršní“ části: Nejprve jsem musel vyřešit, z jaké strany budu projekt řešit. Rozhodl jsem se takto: 1) Řešil jsem, jaký modul budu používat pro přenos zvuku. Začal jsem touto částí, protože jednotlivé moduly mají různé napájecí napětí. 2) Poté, co jsem vybral modul BT a zjistil jeho parametry napětí a přibližnou spotřebu, jsem řešil souběžně výběr jak solárního článku tak baterie, stabilizátoru, popřípadě měniče napětí. 3) Vybíral jsem vhodný mikroprocesor na řízení BT vysílače. 4) A v poslední řadě jsem vybíral mikrofon, který bude snímat zvuk
2. 1. Výběr BlueTooth zařízení Zde se řešilo: 1) Schopnost zařízení přenášet dostatečný datový tok, tj. 256 kbaudů (16kHz*16bit = 256 kbaudů/s) 2) Co nejmenší spotřeba zařízení kvůli minimalizaci rozměrů solárního článku. 3) Problémy s přílišným dosahem kvůli zabezpečení proti odposlechu (security). 4) Normy radiových vysílačů, jestli nevysílá přílišný výkon, zda není nutno tento výkon řídit a zda má provedeny schvalovací testy pro provoz v ČR.
14
2. 2. Zkoumané moduly 2. 2. 1. Connectblue 33iBT Jedná se o modul firmy http://www.connectblue.com1 Tato firma vyrábí samostatné moduly bez řídícího mikroprocesoru. Velmi rychle vyvíjí zařízení pro nové standardy. 27. prosince 2005 jsem prohlížel jejich stránky a již měli vyvinuto zařízení podporující standard BT 2.0. Tato verze již podporuje technologie EDR, která je schopná přenášet datové toky až 3Mb/s.
Obrázek 1 - Data 33i BT
Data 33i BT: •
Spotřeba Avg. 78 mA, peak 210mA
•
Napájení 3,3 – 6V
•
rozměry 40x42x5mm
•
RS232
•
podpora až 7 zařízení
•
199 euro pro 1000 ks
1
http://www.connectblue.com/fileadmin/Connectblue/SPA2_Files/Technical_Overview_G2.PDF k 20.6.2006
15
Jedná se pouze o vysílač BT. Výhodou tohoto zařízení je možnost využití celého potenciálu BT, tedy přenášet 720 kb/s. Jeho průměrná spotřeba je cca 300 mW, což je dostatečně malá spotřeba na napájení solárními články. Dále zařízení RS232 je vhodné pro komunikaci se řídícím mikroprocesorem, jehož maximální přenosová kapacita je až 921 kbaudů. Nevýhodou je nutnost řízení externím mikroprocesorem, protože toto zařízení ho neobsahuje. Bylo by nutné řídit jak veškerou komunikaci tak i vyzářený výkon, toto vyplývá z normy pro BT. Zařízení je ve třídě 1, z čehož vyplývá, že jeho dosah je až 100m. Vyzářený výkon je max. 100mW. Zařízení je schopné v jedné síti PICONET mít až 7 zařízení a tvořit i více těchto sítí. PICONET (jedná se o síť, kde je jedno zařízení master a zbytek slave - typicky 3 nebo 7 zařízení). Dále zde chybí audio codec, který by musel být buď v mikroprocesoru, nebo doplněn jako externí, což je další spotřeba elektrické energie navíc. Jako zásadní problém se ale nakonec ukázalo, že tato firma prodává svá zařízení pouze v tisícovém množství a společnosti zabývající se prodejem jednotkového množství nebyly schopny v potřebném termínu dodat zboží. Problémy s řízením - bylo by značně složité nastudovat a naprogramovat řízení komunikace modulu s PC. Musí se nastavovat různé komunikační signály atd. a toto je značně pracné. Zhodnocení: 1. Přenosová rychlost – vyhovující 2. Spotřeba – vyhovující 3. Jednoduchost programování komunikace – velmi nevyhovující 4. Dostupnost – nedostupné
16
2. 2. 2. ToothPIC Jedná se o modul firmy Flexipanel http://www.flexipanel.com1 Tato firma se zabývá vytvářením zařízení komunikujících přes bezdrátové technologie. Jedná se především o BT a ZigBee technologii, o které se zmiňují ostatní projekty.
Obrázek 2 - Data ToothPIC
Data ToothPIC: •
FCC / CE / IC certifikáty Bluetooth V1.1, rádio, 100m dosah, integrovaná anténa
1
•
součástí je mikroprocesor PIC18LF6720
•
128Kbyte Flash, 3.5K RAM, 1K EPROM až 512Kbyte I2C externí paměť
•
12 × 10-bit A/D převodník
•
5 × 10-bit PWM výstupy
•
Sériová linka UART, I2C a SPI komunikace
•
2 přerušení
•
20MHz a 32KHz oscilátor
•
rozměry 45 x 22 mm
http://www.flexipanel.com/BluetoothModules.htm k 20.6.2006
17
Jedná se o zařízení, které obsahuje vysílač BT – Blue Matik a řídící mikroprocesor PIC. Toto zařízení je zajímavé především tím, že veškerá komunikace s PC – master zařízením je již zajištěna díky PICu. Tím pádem odpadají problémy s řízením. Zařízení má velký rozsah napájecího napětí 5-10V. Zásadním problémem je velmi malá propustnost mezi mikroprocesorem a vysílačem Blue Matik, které zprostředkovává sériová linka, která je schopna přenášet maximální datový tok 50kbaudů a to je absolutně nedostačující. A dále procesor není dostatečně výkonný na kompresi dat. Dalším zásadním problémem se stalo napájení. Zařízení má spotřebu přes 1W, což je pro napájení ze solárních článků extrémně moc. Navíc je zde nutné připojit A/D převodník, protože PIC má pouze 10 bitový převodník. Toto je nedostačující, protože potřebujeme 16 – bitový. Tím pádem opět narůstá spotřeba celého zařízení. K naprogramování tohoto zařízení pomocí programu MPLAB lze využít studentské 60 denní verze free. Zhodnocení: 1. Přenosová rychlost – velmi nevyhovující 2. Spotřeba – velmi nevyhovující 3. Jednoduchost programování komunikace – není třeba, je zajištěno 4. Dostupnost – ano, s firmou dobrá komunikace
18
2. 2. 3. Class 2 BT Module F2M03AC2 Jedná se o modul firmy Free2move http://www.datasoft.se1 Tato firma se zabývá bezdrátovými zařízeními pro přenos hlasu a dat ze snímačů. Jedná se především o BT zařízení a o infraportové zařízení.
Obrázek 3 - F2M03AC2
Data Class 2 BT Module: •
kompletní BT systém včetně antény
•
dostupné s kompletní BT softwarovým balíčkem
•
sériové rozhraní
•
8 digitálních I/O portů
•
2 analogové I/O porty
•
analogový a digitální PCM hlasový vstup až pro 3 kanály
•
rozměry 24x13mm
•
cena 41 EUR
Jedná se o zařízení obsahující řídící mikroprocesor a vysílač BT. Komunikace s PC je zajištěna pomocí řídícího mikroprocesoru. Není třeba programovat toto spojení.
1
http://www.datasoft.se/class2modulewithantennaf2m03ac2.htm k 20.6.2006
19
Tento modul musí být řízen mikroprocesorem, který pouze nastavuje základní příkazy pro mikroprocesor jako je zesilování, zeslabování zvuku, zapínání a vypínání stand by režimu. Proto tento mikroprocesor nemusí mít téměř žádný výpočetní výkon a tím pádem bude mít velmi malou spotřebu elektrické energie. Primárním účelem tohoto zařízení je přenos zvuku. Proto obsahuje analogový vstup, na který stačí pouze připojit mikrofon. Zařízení obsahuje audio codec, který je buďto 15 bitový nebo 8 bitový. Bohužel vzorkovací frekvence je pouze 8 000 vzorků za sekundu. Avšak v době objednávání byl tento modul nejlepším možným řešením. Napájecí napětí zařízení je 2,7 – 3,3 V, z čehož vyplývá, že pokud nebude vyhovovat napájení ze solárních článků, lze velmi jednoduše připojit 2 tužkové baterie a zařízení bude bez problému fungovat. Spotřeba tohoto zařízení je velmi malá. Její odhadovaná velikost je něco kolem 200 mW, což je nejnižší nalezená spotřeba ze všech zkoumaných zařízení. I po připojení mikrofonu a řídícího mikroprocesoru bude celková spotřeba maximálně 250 mW. Další výhodou je dosah 20m. Toto je ideální vzdálenost, která je jak dostatečně velká pro komunikaci zařízení s PC přes celou místnost. Je zároveň i dostatečně malá na to, aby nemohlo docházet k odposlouchávání zařízení. BT vysílání je sice kódováno 128-bitovým klíčem, ale jako vše i toto může být prolomeno. Proto je tento dosah ideální. Další nezanedbatelnou výhodou jsou velmi malé rozměry, z čehož vyplývá i možnost implementace zařízení i na jiné platformy – jako je mikrofon pro CarPC nebo BlueCar. Nevýhodou tohoto zařízení je, že mohou být v jedné síti PICONET pouze 3 SLAVE zařízení, tedy pouze 3 mikrofony. BT stack – K BT stacku nemáme přístup. Zařízení se kupuje s různým firmwarem. S námi zakoupeným firmwarem se zařízení tváří jako sériová linka, do které musíme jednotlivé příkazy posílat pomocí mikroprocesoru. Zhodnocení: 1. Přenosová rychlost – značná, ale stále nedostačující 2. Spotřeba – velmi nízká 3. Jednoduchost programování komunikace – není třeba, je již zajištěna 4. Dostupnost – již zakoupeno 20
2. 3. Výběr napájení Po vybrání BT modulu, když už jsme znali velikost napájecího napětí a přibližnou celkovou spotřebu celého zařízení, jsme přešli k výběru napájecí části. Rozhodovalo se mezi několika variantami. Šlo především o výběr typu baterie. Rozhodoval jsem se mezi lithiovým článkem a gelovým akumulátorem. Následně bylo nutno brát v úvaru poměr hmotnosti a rozměru oproti kapacitě. A dále také velmi záleželo na možnosti neustálého dobíjení článku.
2. 3. 1. Li-Ion (Li-Pol) baterie Tyto baterie mají své klady ale i zápory. Jejich značnou výhodou je jejich vysoká kapacita při malé hmotnosti. Rozdíl objemu oproti olověným akumulátorům není až tak markantní. Mají bezproblémové umísťování (neobsahují žádný elektrolyt, který lze vylít). Jejich obrovskou nevýhodou je jejich dobíjení, které je značně problematické. Nejedná se pouze o nabíjení, ale problémy nastávají, i pokud se jedná o vybíjení baterie.
Nabíjení: Nabíjení těchto akumulátorů je značně problematické. Tento problém se musí řešit pomocí speciálních nabíječek. V principu se musí dodržovat tyto zásady: •
Nabíjecí napětí nesmí přesáhnout jmenovité napětí 4,2V pro baterie Li-Ion, respektive 4,1V pro baterie Li-Pol. Pozor, nejedná se pouze o hodnotu “Báj voko“, ale jde o přesnou hodnotu s maximální odchylkou +0,5%. Již při této hodnotě dochází k nevratnému poškození baterie, což vede ke snižování její kapacity.
•
Baterie se nabíjí stejnosměrným proudem a tento proud se v průběhu dobíjecího cyklu postupně snižuje. Přitom tato hodnota proudu musí být hlídána, aby nepřekročila danou mez.
21
•
Pokud nebude zajištěna ochrana proti překročení daného dovoleného proudu, dojde k přehřátí baterie a tím pádem k její explozi a v nehorším případě až k hoření akumulátoru. Toto bývá většinou ošetřeno pomocí přetlakového ventilu. Pokud ale k tomuto překročení dojde, je akumulátor nenávratně poškozen a dále již není schopen uchovávat elektrickou energii.
•
Další problém nastává při snaze dobíjet baterii přes její maximální kapacitu. Jinými slovy, když necháme baterii neustále připojenou na zdroj (v našem případě solární článek), čehož se v letním období lehce dosáhne, protože nabíjecí doba může být i klidně 10 hodin. Za tuto dobu bude článek již jistě nabit. Tím pádem by se muselo řešit, za jakých podmínek se přestane článek nabíjet a kdy by bylo vhodné ho zase začít nabíjet. Vzniká zde dilema mezi snižováním životnosti baterie a jejím maximálním dobitím (maximálního využití slunečního svitu).
Vybíjení: Jedná se zase o velmi komplexní problém a to: •
Jmenovité napětí této baterie je 3,7V a maximální vybíjecí proud je dán parametry daného typu baterie.
•
Baterie má téměř nulový svodový proud (proud naprázdno)
•
Při vybíjení nastává jeden zásadní problém. Minimální hodnota napětí při vybíjení nesmí klesnout pod hodnotu 2,5V, jinak dojde ke značnému poškození baterie, kdy klesá její maximální kapacita a tím pádem dochází ke snižování její životnosti. Toto musí být opět zajištěno nějakými vybíjecími obvody. Pokud se toto opakuje víckrát, je baterie již po několika málo jednotkách cyklů prakticky nepoužitelná, protože její kapacita poklesne na velmi nízkou hodnotu.
22
Z tohoto vyplývá, že pokud bychom chtěli toto nabíjení a vybíjení řešit pomocí mikroprocesoru, který ovládá BT vysílač, pak by se jednalo o velmi složitý problém, kde bychom museli zařazovat: •
převodník napětí na měření napětí článku jak při vybíjení, tak při dobíjení baterie
•
převodník proudu, který měřil velikost dobíjecího proudu
•
D/A převodník, který by zařizoval přes operační zesilovač regulaci dobíjecího proudu Z tohoto je jasné, že v našem případě by bylo možné zakoupit již hotové
nabíjecí a vybíjecí obvody. Avšak pro naší požadovanou kapacitu toto řešení ztrácí smysl, protože pokud přidáme k akumulátoru nabíjecí a vybíjecí obvody, vznikne nám tím značně složité řešení. Nehledě na to, že tímto nám naroste velikost tohoto zásobníku energie a tím pádem i jeho hmotnost. A ještě zde vzniká problém při realizaci. Čím víc součástek, tím víc možných problémů. Z tohoto důvodu jsem toto řešení zavrhl.
2. 3. 2. Olověný akumulátor Jedná se o klasický olověný akumulátor. Tento akumulátor je pouze odlišný obsahovaným elektrolytem. Tento elektrolyt je tvořen tuhým gelem, díky němuž nezáleží na poloze akumulátoru a může být umístěn v libovolné poloze. Gel je utěsněn a nevyteče jako elektrolyt. Značnou výhodou těchto akumulátorů je jejich možnost být neustále pod napětím. Tato hodnota napětí pro akumulátor se jmenovitým napětím 6V je 6,756,95V. V tomto případě daný zdroj není schopen protlačit více proudu, protože akumulátoru vzroste jeho vnitřní odpor na velmi vysokou hodnotu, z čehož vyplývá, že akumulátorem neprochází proud a nezahřívá se. Jediné, co se musí zajistit, je zdroj s daným požadovaným napětím. Další výhodou je to, že akumulátor můžeme libovolně dobíjet a vybíjet. Nezáleží na počtu cyklů. Neničí se tím.
23
Zásadní výhodou je dále to, že akumulátor nevyžaduje žádné speciální nabíjecí ani vybíjecí obvody. Lze jej dobíjet přímo ze solárních článků a tím pádem odpadá možnost vzniku závad na nabíjecích obvodech.
2. 3. 3. Porovnání obou baterií Olověný akumulátor se hodí pro napájení obvodů mnohem více. Odpadají problémy
s dobíjením
a
vybíjením
a
také
se
nemusí
řešit
problémy
s
neustálým připojením pod napětím. Hmotnost a rozměry jsou vyšší, ale v dané požadované kapacitě je toto kompenzováno velikostí nabíjecích obvodů. Další výhodou je cena, jelikož samotný olověný akumulátor stojí značně méně než Li-Ion baterie s dobíjecími obvody.
2. 3. 4. Solární článek Tři nejčastější typy článků, které se v současnosti používají: Typy článků
Materiál
Stupeň účinnosti
Amorfní
Napařovaná křemíková vrstva
Polykrystalický
Křemíkové podložky
10 – 14 %
Monokrystalický
Křemíkové podložky
13 – 17 %
4–8%
Z této tabulky jasně vyplývá, že budeme volit solární článek typu monokrystalický křemík, protože má největší účinnost a jelikož požadujeme co nejmenší rozměry a hmotnost. Amorfní článek je levnější než ostatní dva, ale po několika letech ztrácí na výkonu. Kdežto polykrystalický a monokrystalický článek si zachovávají stejné parametry po mnoho let.
2. 3. 5. Stabilizátor napětí Zde se jednalo především o to, aby zdroj energie byl co nejméně vyčerpáván. Proto hlavním měřítkem byla účinnost. Bylo rozhodováno mezi stabilizátory napětí a měničem elektrického napětí. Z hlediska účinnosti se ukázalo, že měnič napětí má značně lepší účinnost. Proto bylo rozhodnuto použít na zdroj vhodného napětí měnič.
24
2. 6. Mikrofon Zde žádné speciální požadavky kladeny nebyly. Pouze byly sledovány rozměry mikrofonu a jeho parametry, zda tento mikrofon opravdu snímá požadované spektrum zvuku, v našem případě lidský hlas.
2. 7. Vybrané součástky + jejich specifikace 2. 7. 1. Solární článek Vybral jsem solární článek firmy Solartec http://server.solartec.cz Jedná se o solární články vyráběné technologií monokrystalického křemíku. Účinnost tohoto článku je kolem 16%. Zvolil jsem článek Solartec 8 – 180 Jmenovité napětí – 8V Jmenovitý proud – 180 x K Rozměry – 183 x 125 mm Hmotnost – 0,31kg Jmenovitý výkon v období •
Zima – 1,5W
•
Jaro, Podzim – 4W
•
Léto – 8W
Konstanty K dle období •
Zima – 0,8
•
Jaro, Podzim – 2,2 - 2,5
•
Léto – 4,5
25
2. 7. 2. Baterie Při konzultaci s pracovníkem firmy Solartec jsem se dozvěděl, že je potřebné zálohovat napájení po dobu přibližně 4 dnů, protože nemusí být dostatečný sluneční svit potřebný pro funkci solárního článku. Zvolil jsem - s ohledem na spotřebu celého zařízení včetně měničů, mikrofonu, vysílače, mikroprocesoru - gelový akumulátor Panasonic Panasonic 3,4Ah/6V Kapacita 3,4Ah Jmenovité napětí 6V. Hmotnost 0,63kg
2. 7. 3. Měnič D/D Vycházel jsem z toho, že napětí akumulátoru je 6V. Potřeboval jsem měnič s velmi vysokou účinností a aby velikost dodávaného napětí byla 3V, které vyžaduje jak mikrofon, tak BT modul. Proto jsem zvolil stabilizátor MAX653CSA. Jedná se o stabilizátor, který využívá kumulace energie v cívce. MAX639CPA Rozsah stabilizovaného napětí – 5,5 – 11,5V Poskytovaná napětí – 3 / 3,3 / 5 V Účinnost - cca 90% Maximální dodávaný proud – 1A
2. 7. 4. BT modul Zvolil jsem modul od firmy Free2move http://www.free2move.com jeho parametry jsou v kapitole 2. 2. 3. Class 2 BT Module F2M03AC2
2. 7. 5. Mikrofon Zvolil jsem kondenzátorový mikrofon od firmy GM electronic.
26
Blokové schéma konečného zařízení vypadá následovně
Solární článek 8V 180mA
Akumulátor 6V 3,4Ah
PC - Master
Napěťový měnič 5,5-11,5V /3V
BT + mikroproc. KODEK
Obrázek 4 - Blokové schéma finálního řešení
2. 7. 6. Popis funkce blokového schématu Ze solárního článku je napětí „sráženo“ dvojicí diod, jelikož jejich účinnost je téměř stejná jako napěťový měnič, ale přitom cena, hmotnost, velikost a jednoduchost řešení je mnohem lepší. Tímto úkonem je napětí již v potřebné hodnotě 6,75 – 6,95 voltu. Toto napětí je nutné pro neustálé připojení akumulátoru pod napětí. Dále z akumulátoru napájíme napěťový měnič. Ten sráží napětí na 3 volty. Toto napětí je přiváděno do kodeku a na BT zařízení. Mikrofon snímá okolní hluk, kodek převádí zvuk na data, tyto data „sbírá“ mikroprocesor a odesílá je po sériové lince do BT modulu. BT vysílá data do PC, kde se nachází BT přijímač. Blokové schéma napájení
Obrázek 5 - Blokové schéma napájení
27
3. Realizace Projektu 3. 1. BT modul
Obrázek 6 - BT modul pohled shora
Obrázek 7 - BT modul pohled zespodu
28
3. 1. 1. Účel modulu Tento modul je určen pro přenos dat přes BT kanál a zároveň dokáže přenášet až 3 kanály PCM. Co modul obsahuje: •
Vstupní napěťový měnič pro práci s napájením 5,5 – 11,5V
•
Převodník napětí UART <=> RS-232
•
Diodu signalizující připojení modulu k BT síti
•
Resetovací tlačítko
•
Konektor JACK pro mikrofon
•
Konektor JACK pro sluchátka
•
Podpůrné pasivní součástky pro chod integrovaných obvodů
3. 1. 2. Realizace BT modulu Po obdržení modulu F2M03AC2 firmy datasoft bylo prvním úkolem zjistit, zdali je tento modul funkční. Toto bylo ověřeno na přípravku laboro, kde se jednotlivé integrované obvody propojovali pomocí drátků v nepájivém poli. V první části bylo nutností obvod F2M03AC2 naletovat na precizní patici DIL40. Protože tento obvod má velmi malé konektory, nebyla by možná dostatečná manipulace s obvodem. Také bylo nutno zapojit integrovaný obvod na převod napětí 3,3V <-> +-13,2V. Jednalo se o zařízení MAX3232. Tento obvod byl potřeba kvůli sériové komunikaci. Protože BT zařízení, které máme k dispozici komunikuje pomocí UARTu, který pracuje na 3,3 voltech a klasická sériová linka RS-232, kterou používají počítačové stanice, pracuje na napětích (-25 až -3) a (+3 až 25)voltů. Napájecí napětí 3,3V, které potřebuje jak obvod MAX3232 tak F2M03AC2, mi poskytnul laboratorní zdroj. Připojil jsem konektor canon 9-pin. Z tohoto konektoru byly využity 3 vývody. Tx-vysílání, Rx-příjem, GND-zem. Tyto tři základní vývody stačí na navázání sériové komunikace. 29
3. 1. 3. První oživení modulu Prvním úkolem pro navázání BlueToothové komunikace bylo zapojit a nainstalovat BT zásuvný USB modul. Jednalo se o modul firmy MSI. Tento modul podporuje BT verzi 2.0, tedy podporuje i technologii EDR (enhanced data rate), z čehož vyplývá, že tento modul je schopen komunikovat maximální rychlostí 3Mb/s. Po zasunutí tohoto modulu bylo nutné nainstalovat dodaný software a ovladače. Toto proběhlo bez problémů. Software byl nutný pro vyhledání okolních BT zařízení a pro spárování obou zařízení. Dále bylo nutné odzkoušet funkci obvodu MAX 3232, zdali dodává potřebná napětí, aby nemohlo dojít ke zničení ostatních obvodů z důvodu nesprávných hodnot logických úrovní. Toto jsem ověřil měřením pomocí voltmetru. Neméně důležité bylo správně nastavit vstupně/výstupní porty PIO a RESET u F2M03AC2 modulu Jednalo se o tyto vývody: •
Port PIO2 - tímto portem je uzavřen komunikační kanál a také brání jeho otevření, pokud je port nastaven do logické 1
•
Port PIO3- signalizuje úspěšné navázání BT komunikace. Na tento port byla připojena signalizační dioda
•
RESET – Obvod je resetován, pokud je reset v logické 0. Čili bylo nutnoé přivést na tento port logickou 1.
Po celé této proceduře bylo zařízení připojeno na napájecí napětí získané z laboratorního zdroje. Toto napětí bylo nastaveno na 3 volty a změřeno pro jistotu voltmetrem. Po připojení na napájecí napětí a po správném nastavení všech vstupů bylo v počítačové stanici zahájeno prohledávání okolních BT zařízení. Tato procedura proběhla úspěšně. Naše zařízení F2M03AC2 bylo nalezeno a zobrazovalo se jako sériová linka, což je způsobeno nastavením modulu a BT stackem. Poté byl proveden pokus o navázání komunikace a toto se také zdařilo. Rozsvítila se LED dioda signalizující úspěšně navázané spojení. Dále jsem odzkoušel zrušení spojení pomocí portu PIO2 a i toto proběhlo úspěšně.
30
Následujícím krokem bylo odzkoušení funkce sériové linky RS-232. Po propojení počítačové stanice s našim modulem přes konektor Canon byl zpuštěn hyperterminál. Zde byla nastavena komunikační rychlost 38400 baudu na COM1, což je „kabelová“ sériová linka. Spojení se zdařilo. Otevřel jsem si druhý hyperterminál na COM4 - toto je BT sériová linka. Spojení se také zdařilo. Posílal jsem znaky z jednoho hyperterminálu a na druhém se mi tento znak objevoval. Tímto jsem odzkoušel správnou funkci sériového portu.
3. 1. 4. Testování přenosu zvuku Modul musel navázat spojení s firemním softwarem. Nejprve bylo nutné nainstalovat program do PC stanice. Tento software je dodávaný výrobcem BT modulu. Díky tomuto programu lze modul nastavovat. Toto lze provádět pouze přes sériové rozhraní, tedy nikoliv přes BT kanál. Po provedení všech těchto podmínek se povedla navázat komunikace modulu s programem. V programu jdou nastavovat různé parametry. V mém případě jsem se zajímal především o baudrate, o nastavení BT stacku a zapnutí PCM kanálu. Snažil jsem se různými kombinacemi „přesvědčit“ windows, aby si můj modul identifikovali jako zvukové zařízení, ale bohužel se toto nezdařilo. Po konzultaci s pracovníkem firmy dodávající zařízení – Datasoft nám bylo sděleno, že windows s tímto mají problémy a že bychom si museli zakoupit Handsfree set. Dále jsem zkoušel zprovoznit tento modul pod operačním systémem LINUX, ale toto se bohužel také nepovedlo. Proto jsem vyzkoušel spojit 2 moduly mezi sebou. Jeden modul byl nastaven jako MASTE druhý jako SLAVE a po spárování modulů byl ozkoušen přenos zvuku. Toto proběhlo v pořádku - přenos probíhal bez problémů. Tímto jsem ověřil funkci přenosu zvuku.
3. 1. 5. Zhodnocení Modul je plně funkční, jelikož se povedla rozchodit komunikace PCM mezi dvěma moduly. Napájení bylo realizováno pouze z laboratorního zdroje přes měnič napětí.
Baterie
a
solární
články
nebyli
realizovány
z nedostatku
času
a
předpokládaného nedostatečného osvětlení místností, kde by měl být mikrofon provozován a značných rozměrů solárních článků.
31
3. 2. Kodekový modul
Obrázek 8 - Kodekový modul pohled shora
Obrázek 9 - Kodekový modul pohled zespodu
32
3. 2. 1. Účel modulu Tento modul je primárně určen pro převod analogového signálu na digitální. V našem případě se jedná o převod hlasu. Druhou možností je využít tento modul jako výstupní zařízení - čili převádí digitální data na zvuk. Tento kodek přenáší 2 kanály pro vstup a 2 kanály pro výstup (levý a pravý).
Co modul obsahuje •
V/V konektory o Analogový vstup o Line in o Line out o Analogový výstup
•
Rozhraní pro komunikaci s mikroprocesorem PIC4013 – čtyřiceti pinové
•
Integrovaný mikrofon na desce
•
Vstupní zesilovač pro integrovaný mikrofon. Pokud je zapojen externí mikrofon, je interní odpojen a zesilovač je využíván pro externí mikrofon.
•
Výstupní zesilovač. Jeho vývody jsou připojeny na Analogový výstup
•
Převodník napětí 3V <=> 5V kvůli komunikaci mezi kodekem (3V)
a
mikroprocesorem (5V) •
Krystal generující frekvenci
•
Registry D, pro dělení frekvence z krystalu
•
Stabilizátor napětí pro napájení kodeku 3V
•
Jumpery pro nastavování modulu
•
Kodek UDA1344TS
•
Podpůrné pasivní součástky, vyžadované pro chod jednotlivých integrovaných obvodů a pro vylepšení elektrických vlastností zařízení.
3. 2. 2. Kodek PHIPIPS UDA1344TS Jedná se o: •
Nízko spotřebový A/D, D/A převodník
•
Napájecí napětí 3V
•
Obsahuje detektor přebuzení
33
•
Vzorkovací frekvence od 8 do 55 kHz
•
Digitální filtry
•
Nastavování parametrů pomocí L3 interface, nebo statickými piny
Typy rozhraní: •
I2C-bus
•
MSB-justified nebo LSB-justified 16, 18 a 20 bitový formát kompatibilní
Možnosti nastavování pomocí L3 interface: •
Digitální ekvalizér s možností nastavování basů a středů
•
Digitální nastavování hlasitosti
Obrázek 10 - Blokové schéma UDA1344TS
34
Tabulka 1 - Tabulka popisující použité signály rozhraní mezi kodekem a dsPICDEM2.
Popis důležitých signálů DATAI – Digitální vstupní signál pro kodek DATAO – Digitální výstupní signál z kodeku WS – Signál generovaný po 16 bitech (konec frame) BCK – Vzorkovací signál hodin (16kHz)
3. 2. 3. Realizace kodeku V první fázi jsem zapájel pouze vstupní a výstupní zesilovač a zkontroloval jejich funkčnost. Bylo slyšet značné přebuzení, které bylo nutné v pozdějších fázích zkorigovat. Výše zmíněný kodek jsem zapájel i s podpůrnými obvody na předpřipravený plošný spoj, jehož návrh realizoval Ing. Miroslav Skrbek Ph.D. Modul jsem najumproval podle požadavků a na závěr jsem kodek nastavil pomocí mikroprocesoru PIC4013.
3. 2. 4. Nastavení vzorkovací frekvence Pro chod kodeku bylo nutné nastavit vzorkovací frekvenci, která je v mém případě 16 kHz. Této frekvence je dosaženo pomocí klopných obvodů D nacházejících se na desce modulu, dělením frekvence generované krystalem. Tato frekvence lze měnit pomocí pinů. Tabulka 2 ukazuje, jak je třeba nastavit jumpery na desce kodeku pro různé vzorkovací frekvence. Předpokládá se osazení krystalem 24,576MHz.
35
Tabulka 2 - Tabulka nastavení jumperů pro vzorkovací frekvence
3. 2. 5. Jak nastavovat L3 interface Jedná se o rozhraní, pomocí kterého se řídí nastavení kodeku. Nastavení je řízeno bitovými posloupnostmi, které jsou přijímány z mikroprocesoru. Obrázek 11 popisuje průběh zasílání dat. Nejprve je zaslána adresa – L3MODE = 0, zároveň jsou generovány hodiny pomocí mikrokontroleru PIC 4013 na portu L3CLOCK = 0->1->. Tyto hodiny doprovází požadovaná adresa na portu L3DATA = X. Poté jsou zasílána data – L3MODE = 1, zároveň jsou generovány hodiny pomocí mikrokontroleru PIC 4013 na portu L3CLOCK = 0->1->.
;
Tyto
hodiny
doprovází požadovaná data na portu L3DATA = X.
Obrázek 11 - Průběh nastavování L3 interface
36
Adresa a data musí mít přesně definovaný průběh. Požadavky jsou kladeny na minimální dobu, po kterou musí být signál v daném stavu nastaven, aby jej byl kodek schopen zachytit a rozeznat. V tabulce 3 jsou napsány minimální doby trvání pro jednotlivé signály. Průběh adresace je definován v obrázku 12. Průběh dat je definován v obrázku 13.
Obrázek 12 - Průběh adresačního modu
Obrázek 13 - Průběh datového modu
37
Tabulka 3 - časování
3. 2. 6. Nastavení kodeku pomocí L3 interface Nejprve jsem nastavil L3 interface pro nastavování status (nastavení systémových hodin, formát vstupně výstupních dat a nastavování DC filtrů). Další krok bylo zaslání nastavovacích dat, neboli nastavení systémových hodin pro požadovanou frekvenci 16kHz – nastaveno na 384fs. Toto bylo zjištěno z tabulky 2 pro nastavení vzorkovací frekvence. Nastavení formátu, v jakém bude kodek data odesílat v našem případě I2C a digitální filtr jsem nechal vypnutý. Po tomto nastavení jsem na osciloskopu změřil, že zařízení nekomunikuje. Z tohoto důvodu jsem zkusil nastavit i ostatní položky. Pro toto řešení jsem nastavil L3 interface do modu data (nastavení: hlasitost, zesílení basů a středů, mute, modu a zapnutí vstupu a výstupu). Jelikož datový registr není dostatečně velký pro nastavení všech parametrů naráz, má kodek toto nastavení ve 4 registrech. Tím pádem se musí nastavení provádět 4x, aby bylo možné nastavit všechny parametry. V datové části jsem zasílal toto: 1. Hlasitost (0 až 60 dB) 2. Zesílení busů a nastavení středů jsem nechal beze změny 3. De-emphasis jsem nechal vypnuté, mute sem vypnul a filtr jsem také vypnul 4. Zapnul jsem vstup i výstup z kodeku 38
Po tomto nastavení jsem připojil na pin WS jednu sondu osciloskopu pro synchronizaci osciloskopu. Druhou sondu jsem připojil na pin DATAO. Při fouknutí do mikrofonu bylo vidět na datovém konektoru přibývání významnějších bitů, čili zvyšující se binární hodnota generovaná kodekem, neboli větší vstupní amplitudu. Bylo vidět, že kodek generuje data ze zvuku. Tímto byla ověřena funkce analogově digitálního převodníku. Jako další byl testován analogový výstup z kodeku. Vysílal jsem obdélníkový průběh a měřením na osciloskopu zjistil, že modul je dobře nastaven a převádí data na výstup. Po připojení sluchátek byl slyšet pískot (způsobeno obdélníkovým signálem o vyšším kmitočtu). Tím byla ověřena funkce převodu digitálních dat na analogová.
3. 2. 7. Kontrola výstupního zesilovače Nejprve jsem změřil výstupní napětí generované kodekem UDA1344TS na konektoru Line out. Jeho hodnota odpovídala normě, čili zařízení pracuje v odpovídající hladině napětí. Dále jsem měřil hodnoty napětí na výstupním zesilovači. Zde hodnota neodpovídala očekávané. Po prozkoumání různých možností jsem zjistil, že u jednoho SMD odporu jsem nepřipájel jednu jeho nožičku. Po jejím připájení už byly hodnoty v očekávaném rozmezí.
3. 2. 8. Nastavování vstupního zesilovače Nejprve jsem změřil hodnotu napětí na konektoru Line in. Tato hodnota odpovídala normě. V dalším kroku jsem připojil sondu osciloskopu na výstup zesilovače. Na osciloskopu se objevily obdélníky s pozvolnými vzestupnými a sestupnými hranami a občas malý sinusový průběh. Z toho jsem vyvodil skutečnost, že zesilovač limituje a tím pádem zkresluje. Pro odstranění bylo nutné snížit zesílení. Snížení zesílení jsem provedl pomocí kalibračního potenciometru. Nastavením na minimální hodnotu jsem dosáhl toho, že zesilovač již nezkresloval.
39
3. 2. 9. Finální testování modulu Po nastavení vstupního a výstupního zesilovače jsem se snažil udělat softwarovou zpětnou smyčku pro ověření funkce, ale toto se mi nedařilo. Jelikož toto byla jedna z možností, jak ověřit funkci, tak jsem se tímto řešením přestal zabývat. Jako druhou možnost otestování funkčnosti jsem využil drát. Po nastavení kodeku mikroprocesorem jsem odpojil jumpery, které spojovaly výstup a vstup kodeku s mikroprocesorem a na jejich vývody jsem přiložil konce drátu. Připojil jsem sluchátka na analogový výstup a mluvil do mikrofonu. Ve sluchátkách jsem se slyšel - byl slyšet velmi slabý šum. Tím bylo jasné, že všechny komponenty jsou správně nastaveny a definitivně bylo potvrzeno, že data zasílaná přes L3 interface jsou správná.
3. 2. 10. Zhodnocení Kodekový modul je plně funkční. Jemné rušení mohlo být způsobeno okolními zdroji pro napájení ostatních modulů a zdrojů pro měřící techniku.
40
3. 2. Programovací modul pro DSPIC4013 Jedná se o modul dsPICDEM2 firmy MICROCHIP. http://www.microchip.com1
Obrázek 14 - Programovací modul pro DSPIC4013
3. 2. 1. Účel modulu Jedná se o univerzální programovací modul. Pomocí tohoto modulu lze programovat procesory řady dsPIC30Fxxxx.
3. 2. 2. Co modul obsahuje •
Mnohonásobný socket pro 18, 28, 40 PDIP a SPDIP zařízení
•
Ukázkový aplikační program v MPLAB IDE, workspace a projektové ukázkové programy pro dsPIC30F zařízení (možno stáhnout i z webu microchipu)
1
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en0 23561&part=DM300018 k 20.6.2006
41
•
dsPIC30F4011 40-pin PDIP ukázkové zařízení instalované na desce
•
stabilizátor napětí na 5V
•
MPLAB ICD 2 okruhový Debugger
•
MPLAB ICE 4000
•
Rozhraní RS-232
•
Rozhraní Controller Area Network (CAN)
•
Teplotní senzor a potenciometry pro simulování A/D vstupů
•
2 tlačítka a 2 LED diody
•
2x16 znaků LCD display s SPI™ rozhraním
•
Přístup ke všem pinům procesorů dsPIC30F přes 2x40-ti pinový socket
3. 2. 3. Nastavení modulu Tento programátor je nutné nastavit na daný druh mikroprocesoru pomocí jumperů nacházejících se na desce. Návod je v datasheetu. Pokud se postupuje přesně podle pokynů, deska funguje bez problémů. Dále je nutné ho samozřejmě připojit k napájení. Připojit programátor, jak říkají studenti „takové to modré kolečko“, k desce. Druhý konec programátoru se připojuje do PC pomocí USB kabelu. Napájení programátoru je zajištěno z USB rozhraní. POZOR – Po naprogramování je nutné buďto vytáhnout programovací kabel, nebo vypnout switch, který určuje který procesor se bude programovat (modul obsahuje více slotů pro procesory). Mikroprocesory totiž využívají ke svému programování vstupně výstupní piny a pokud začne provádět svůj program, tak se začne programovací modul „prát“ s programovacím portem, což má za následek nedefinované úrovně napětí (v mém případě byla hodnota v log. 1 = 1,5V místo 5V). Toto vede k nesprávné funkci.
3. 2. 4. Zhodnocení Zakoupený modul pracoval bez problémů a korektně.
42
3. 3. Programování mikroprocesoru dsPIC30F4013 Nejprve jsem si stáhnul ukázkový projekt z internetové stránky microchipu. Pokusil jsem se ho rozchodit a to se mi po nějaké době nakonec povedlo. Tento program využíval teplotního čidla a potenciometru umístěného na desce. Na LCD display se ukazovala hodnota nastavená na potenciometru a teplota naměřená na teplotním čidlu. Tento program je psán v programovacím jazyku C.
3. 3. 1. Práce s porty Stažené demo jsem postupně upravil a vyzkoušel několik testovacích programů. Jako první pokus jsem se pokusil rozsvítil LED diodu nacházející se na programovací desce. Toho se mi povedlo dosáhnout. Postup – v datasheetu jsem si našel práci s I/O porty, protože LED diody jsou připojeny na port B. Musel jsem nastavit port B jako výstupní. Pro jednoduchost jsem nastavil všechny piny jako výstupní (TRISB = 0x0000). A nastavil jsem jejich hodnotu do logické 1 (LATB =0xFFFF). Zakomentoval jsem demo program a nechal jsem pouze nastavení procesoru (vypnutí watch dog – hlídá zacyklení v programu, zapojení krystalu, nastavení multiplikátoru procesoru – ovlivňuje počet MIPSů). Druhým pokusem bylo rozblikat diody. Toto jsem realizoval pomocí jednoduché IF podmínky, přepínáním hodnoty LATB na 0000 a FFFF. Tím jsem ověřil, že opravdu překládám svůj program a ne nějaké jiné části programu z ukázkového projektu. Jako třetí úkol jsem si vytvořil vlastní projekt. Nahrál jsem předchozí program pro test funkčnosti. Vše bylo v pořádku, proto jsem přešel na další úkoly.
43
3. 3. 2. Práce se sériovou linkou (UART) Jako první cíl jsem si určil cyklicky posílat znak přes UART do PC, kde by se tento znak zobrazil v hyperterminálu. Postup – Nejprve bylo nutné nastavit rozhraní UART. Tato procedura byla již hotova v ukázkové verzi, proto jsem ji využil. Jmenuje se InitUART() UART používá k odesílání znaků buffer (registr UxTXREG), který má velikost 4x16bitů. Udělal jsem si proto funkci, která ukládá do bufferu znak a zároveň jsem kontroloval zaplnění bufferu, k čemuž slouží signál UTXBF. Tento byt je v log 1, pokud je buffer plný. V tuto dobu nejsou znaky ukládány do záchytného registru UxTXREG. Tuto proceduru jsem dal do cyklu. Program přeložil, nahrál do přípravku, resetoval přípravek, zapnul hyperterminál a nastavil ho na shodný baudrate, jaký byl nastaven u sériové linky mikroprocesoru. Po provedení všech těchto operací, se mi začaly přijímat vysílané znaky. Tím pádem bylo jasné, že UART rozhraní je správně nastavené a funkční.
3. 3. 3. Práce s rozhraním DCI První úlohou bylo nainicializovat rozhraní takovým způsobem, aby nastavení odpovídalo požadavkům kodeku. Problém byl v tom, že oba moduly, jsou značně univerzální. Proto se muselo zvolit vhodné nastavení kodeku a jemu uzpůsobit nastavení rozhraní.
3. 3. 4. Nastavení rozhraní Rozhraní jsem nakonfiguroval tak, jak je popsáno v následujících tabulkách 4 a 5.
44
Obrázek 15 - Blokový diagram DCI modulu
Obrázek 16 - Blokový diagram sdílené portové struktury
45
Tabulka 4 - Nastavení DCICON1 registru
Nastavení DCICON1 registru BIT
Název
Funkce
Hodn.
15
DCIEN
Zapnutí modulu
1
14
Reserved
Čteno jako 0
X
13
DCISIDL
Modul pracuje, když CPU nepracuje
0
12
Reserved
Čteno jako 0
X
11
DLOOP
Digitální Loopmode vypnut
0
10
CSCKD
CSCK pin nastaven jako vstup
1
9
CSCKE
Data
měněna
na
vzestupnou
hranu,
vzorek 0
na sestupnou hranu 8
COFSD
COFS pin nastaven jako výstup
0
7
UNFM
Zasílání poslední hodnoty při podtečení zásobníku
0
6
CSDOM
Při vypnutí odesílání nastaven pin do 0
0
5
DJST
Začátek přijímání/vysílání začíná na nástupnou hranu 1 synchronizačního signálu
4-2
Reserveed
Čteno jako 0
00
1-0
COFSM
Nastavení typu synch. modu na I2C
01
Tabulka 5 - Nastavení DCICON2 registru
Nastavení DCICON2 registru BIT
Název
Funkce
15 -12
Reserved Čteno jako 0
11 -10
BLEN
9
Reserved Čteno jako 0
X
8-5
COFSG
0000
4
Reserved Čteno jako 0
X
3-0
WS
1111
Počet
Hodn. záchytných
X registrů
zaplněných
generováním přerušení nastaven na 4 Generování synchronizace po přijmutí 1 slova Velikost jednoho slova 16 bitů
před
11
Při nastavování Registrů DCICON jsem vycházel z blokového schématu obrázek 16 a informací vyčtených v datasheetu pro kodek UDA1344TS
46
Registry RSCON/TSCON jsou nastaveny do 0xFFFF/0x0000, pokud chceme povolit/zakázat přijímání/vysílání. V mém případě jsou oba v 0xFFFF, protože přes modul zapisuji i čtu data. Registr DCISTAT je plněn hardwarově na základě stavu modulu. Informace z jednotlivých bitů registru se využívají pro podmínky v programech. Význam jednotlivých bytů je popsán v datasheetu. Po nastavení všech registrů podle tabulek 4 a 5 nebylo nutné další nastavování portů, protože po zapnutí DCI modulu si hardware převezme nastavení portů. Proto není nutné nastavovat vstupy a výstupy jednotlivých pinů pomocí registru TRISB. Blokové schéma funkce přebírání ovládání portů je na obrázku 16. Toto nastavení se nachází v proceduře Init_DCI, kterou volám na začátku programu. Tímto je vyřešeno nastavení modulu DCI.
3. 3. 5. Zasílaná data pro L3 interface Pro nastavení kodeku jsem si vytvořil proceduru L3address(adr, data), která má 2 vstupní parametry. První parametr jsou data zasílaná v adresačním modu. Druhý parametr jsou data zasílaná pro jednotlivé nastavení. Oboje hodnoty byly v proceduře ukládány do registru LATB. Hodnoty v tomto registru jsou promítnuty na jednotlivé piny socketu B. Měnil sem nastavení pouze u bitů, na které jsou připojeny piny L3MODE, L3DATA, L3CLOCK a postupně podle zadané hodnoty odesílal v cyklu při hodinovém impulzu na pinu L3CLOCK datové bity na pin L3DATA. Jelikož zařízení pracuje se sběrnicí I2C, která není pouze dvoubodový spoj, musí mít každé zařízení svojí adresu. V případě kodeku UDA1344TS je jeho adresa xx000101. Nejvýznamnější bity (xx) „říkají“, zda-li a kdy druhý parametr DATA bude nastavovat STATUS nebo DATA. Toto nastavení je popsáno v kapitole „3.2.6. Nastavení kodeku pomocí L3 interface“
47
Nastavení STATUS L3data (adr = 0b10000101; data = 0b00010000) data = 00xxxxxx – defaultně 0 data = xx01xxxx – frekvence systémových hodin 384fs data = xxxx000x – nastavení formátu dat na I2C data = xxxxxxx0 – vypnutý digitální filtr Nastavení DATA L3data (adr = 0b00000101; data =N) 1. N = 0b00000000 – nastavení útlumu hlasitost 0dB a. N = 0b00xxxxxx – nastavování hlasitosti b. N = 0bxx000000 – nastavení hlasitosti 2. N = 0b01000000 – nastavení basů a středů a. N = 0b01xxxxxx – nastavení basů a středů b. N = 0bxx0000xx – nastavení basů c. N = 0bxxxxxx00 – nastavení středů 3. N = 0b10000000 – nastavení de-emphasis, mute, filtr mod a. N = 0b100xxxxx – nastavení de-emphasis, mute, filtr mod b. N = 0bxxx00xxx – de-emphasis vypnuto c. N = 0bxxxxx0xx – mute vypnuto d. N = 0bxxxxxx00 – filtr flat 4. N = 0b11000011 – nastavení zapnutí A/D a D/A převodníku a. N = 0b110000xx – nastavení zapnutí A/D a D/A převodníku b. N = 0bxxxxxx11 – zapnuté oba převodníky A/D i D/A
3. 3. 6. Sběr dat a jejich odesílání přes UART Toto je realizováno pomocí funkce readDCI_to_UART. Funkce kontroluje, zdali jsou přijata nová data v DCI záchytném registru a zároveň je-li prázdný vysílací buffer. Pokud ano, naplní záchytný vysílací buffer daty z registrů DCI. Toto řešení je koncipováno tak, že pokud se data nestíhají odesílat, jsou zahazována. Odesílány jsou vždy 4 hodnoty naráz, protože DCI i UART mají 4 slovové záchytné registry.
48
3. 3. 7. Struktura hlavního programu MAIN •
Nejprve se nakonfigurují všechny registry nastavením ADPCFG = 0xFFFF;
•
Je zavolána procedura InitUART() pro nastavení sériového rozhraní UART
•
Následuje inicializace rozhraní InitDCI()
•
Poté se nastaví kodek ve 4 fázích pomocí procedury L3address, nastavení basů a středů není potřeba, jinak 5 fází.
•
Nakonec je v nekonečné smyčce volána procedura ReadDCI_to_UART
3. 3. 8. Zhodnocení Podařilo se mi zprovoznit rozhraní DCI a rozhraní UART. Dále se bude muset pravděpodobně měnit nastavení zasílaných dat a to podle toho, jak bude zvuk přijímán v PC, případně dodělat kompresi dat.
49
4. Závěr Co se zdařilo: •
Vytvořit modul, který komunikuje přes BT kanál a plně ho zprovoznit.
•
Vytvořit modul s kodekem a to plně funkční.
•
Naprogramovat PIC4013 tak, aby komunikoval přes sériové rozhraní a nastavil kodek.
•
Získávat data z kodeku procesorem. Ty následně posílat přes sériovou linku do BT modulu. Tyto data jsou poté vysílána přes BT kanál do PC. Dále jsou pomocí USB-BT zařízení přijímána v hyperterminálu.
Co se nezdařilo: •
Přijmutá data poslat na zvukovou kartu nebo přehrát.
50
Přílohy
51
52
Zdrojové kódy
MAIN #include
// knihovna PICu _FOSC(CSW_FSCM_OFF & XT_PLL8); // zapnutí externího krystalu7.3728 MHz _FWDT(WDT_OFF); //Turn off the Watch-Dog Timer. _FBORPOR(MCLR_EN & PWRT_OFF); //Enable MCLR reset pin and turn off the //power-up timers. _FGS(CODE_PROT_OFF); //Disable Code Protection extern SPI_Init(void); extern WriteUART_to_RS232(void); extern UART_Inexternit(void); extern WriteChar_to_RS232(char); extern Write_to_DCI(unsigned int); extern LoopBack(void); extern ReadDCI_to_UART(void); int main (void) { ADPCFG = 0xFFFF; //After reset all port pins multiplexed //with the A/D converter are configred analog. //We will reconfigure them to be digital //by writing all 1's to the ADPCFG register. //Note: All dsPIC registers are memory mapped. //The address of ADPCFG and other registers //are defined in the device linker script //in your project. //Function UART_Init() available in file, UART.c UART_Init(); //Initialize the UART module to communicate //with the COM port on the Host PC via an //RS232 cable and the DB9 connector. //Funkce InitDCI nastavuje rozhrani DCI. cili prijem hodin z externiho modulu // nastaveni portu InitDCI(); // DCI jako prijem i odesilani //Nastavení L3 interface L3address(0b00010110,0b00010000); //adresa zarizeni kodeku L3address(0b00010100,0b00000000); //volume L3address(0b00010100,0b10000000); //mute ne L3address(0b00010100,0b11000011); //power*/ TRISB = 0x1600; while(1){ ReadDCI_to_UART(); } return(0);
//nekonecna smycka odesilani dat z DCI na UART
53
}
UART + DCI ; © 2005 Microchip Technology Inc. ; ; Microchip Technology Inc. (“Microchip”) licenses this software to you ; solely for use with Microchip dsPIC® digital signal controller ; products. The software is owned by Microchip and is protected under ; applicable copyright laws. All rights reserved. ; ; SOFTWARE IS PROVIDED “AS IS.” MICROCHIP EXPRESSLY DISCLAIMS ANY ; WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT ; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A ; PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP ; BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL ; DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF ; PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS ; BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ; ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS. ; ; ;FILE DESCRIPTION: ; One of the UART modules on the dsPIC30F device is used to refresh ; the Hyperterminal display connected to the RS232 port on the ; dsPICDEM2 development board. Either UART1 or UART2 modules are used. ; When UART1 module is used, this project may optionally use the ; alternate UART tx/rx pins on the dsPIC30F device. ; ;REVISION HISTORY: ; $Log: UART.c,v $ ; Revision 1.1.1.1 2005/06/06 09:16:46 VasukiH ; First release of software ; ; */ //Pre-Processor Directives: #include #include "system.h"
54
#define BAUDRATE Rate #define BRGVAL
115200
//Desired Baud
((FCY/BAUDRATE)/16)-1 //Formula for U1BRG register //from dsPIC30F Family //Reference Manual
//Declaration to Link External Functions & Variables: extern unsigned char DisplayData[]; //Functions and Variables with Global Scope: void UART_Init (void); void WriteUART_to_RS232(void); void __attribute__((__interrupt__)) _U1TXInterrupt(void); unsigned char *UARTCharPtr; //Functions //UART_Init() sets up the UART for a 8-bit data, No Parity, 1 Stop bit //at 9600 baud with transmitter interrupts enabled void UART_Init (void) { U1MODE = 0x0000; //Clear UART1 registers U1STA = 0x0000; //Since the SPI1 (SCK1, SDO1, SDI1) pins are multiplexed with the UART //(U1TX and U1RX ) pins on this device this demonstration program //will use alternate UART1 pins (U1ATX and U1ARX) //The SPI1 module is used to comunicate to the LCD Controller while //UART1 module is used to communicate with the RS232 port on the PC U1MODEbits.ALTIO = 1; //Enable U1ATX and U1ARX instead of //U1TX and U1RX pins U1MODEbits.UARTEN = 1; //Enable UART1 module U1BRG = BRGVAL; //Load UART1 Baud Rate Generator IFS0bits.U1RXIF = 0; //Clear UART1 Receiver Interrupt Flag IFS0bits.U1TXIF = 0; //Clear UART1 Transmitter Interrupt Flag IEC0bits.U1RXIE = 0; //Disable UART1 Receiver ISR IEC0bits.U1TXIE = 1; //Enable UART1 Transmitter ISR U1STAbits.UTXISEL = 1; //Setup UART1 transmitter to interrupt //when a character is transferred to the //Transmit Shift register and as result, //the transmit buffer becomes empty. U1STAbits.UTXEN = 1; //Enable UART1 transmitter UARTCharPtr = &DisplayData[0]; //Initialize UARTCharPtr to point //to the first character in the Display buffer
55
} //WriteUART_to_RS232() triggers interrupt-driven UART communication by writing //the first character in the Display buffer to the UART Transmit register void WriteUART_to_RS232(void) { if ((UARTCharPtr > &DisplayData[0]) && (UARTCharPtr < &DisplayData[38])) return; else { UARTCharPtr = &DisplayData[0]; //Re-Initialize UART display //buffer pointer to point to //the first character U1TXREG = *UARTCharPtr++; //Load the UART transmit //register with first character } } //_U1TXInterrupt() is the UART1 Interrupt Service Routine. //The routine must have global scope in order to be an ISR. //The ISR name is the same name provided for the module in the device linker //script. //The UART1 ISR loads the UART1 4-deep FIFO buffers with the next //4 characters in the Display buffer unless it encounters a null character. void __attribute__((__interrupt__)) _U1TXInterrupt(void) { int i = 0; while ((*UARTCharPtr != '\0') && (i < 4)) { U1TXREG = *UARTCharPtr++; i++; } IFS0bits.U1TXIF = 0; //Clear the UART1 transmitter interrupt flag } void WriteChar_to_UART(char znak) { U1STAbits.UTXEN = 1; if(U1STAbits.URXISEL != 3) plny vysilaci buffer
// pokud neni generovany preruseni, ze je
//tak ukladej znak do vysílacího bufferu U1TXREG = znak; // ulozeni znaku do vysilaciho registru } void InitDCI(void) { DCICON1 = 0x8421;
// inicializace DCI rozhrani // nastaveni DCI na vysilani 0x8421
56
DCICON2 = 0x0C0F; JEDNOM SLOVU INTR. TSCON = 0xFFFF; RSCON = 0xFFFF;
// nastaveni velikosti zasilanych dat, PO // povolení vysilani do modulu z DCI transmit // povolení prijem z modulu do DCI receave
} void L3address(unsigned char adr, unsigned char data) // nastavovací procedura kodeku - L3 interface { int i = 0; int pom = 1; int chlivek = 0; TRISB = 0x1600; //nastaveni portu jako vystup 10 jako prijimaci LATB=0xFFFF; //nastaveni reg. do 1 Delay900ns(1); LATB=0xFFDF; //L3MODE na 0 Delay900ns(1); for(i=0;i<8;i++) //L3CLOCK 8 impulzu { chlivek = (pom & adr); // nastavit 1 nebo 0 if (chlivek) { LATB = 0xFF9F; Delay900ns(1); LATB = 0xFFDF; Delay900ns(1); } else { LATB = 0xFF1F; Delay900ns(1); LATB = 0xFF5F; Delay900ns(1); } pom = pom*2; } LATB=0xFFFF; Delay900ns(1); // data pom = 1; chlivek = 0;
// srazim L3 clock na 0
//nastaveni reg. do 1
for(i=0;i<8;i++)//L3CLOCK 8 impulzu { chlivek = (pom & data); // nastavit 1 nebo 0 if (chlivek) // nastaveni datoveho bitu {
57
LATB = 0xFFBF; Delay900ns(1); LATB = 0xFFFF; Delay900ns(1); } else { LATB = 0xFF3F; Delay900ns(1); LATB = 0xFF7F; Delay900ns(1); } pom = pom*2; } }
// hejbu s bitem clock
// srazim L3 clock na 0
void ReadDCI_to_UART(void) // odesilani prijmutych dat do bufferu UART, pro odeslani po UART { U1STAbits.UTXEN = 1; //povoleni vysilani na UART //if(LATB12){ //NEBO PORTB12 if((DCISTATbits.RFUL) && (U1STAbits.UTXBF == 0)) // pokud jsou prijata nova data { U1TXREG = RXBUF0; U1TXREG = RXBUF1; U1TXREG = RXBUF2; U1TXREG = RXBUF3; } } LoopBack(void) //pokus o zpetnou vazbu { //if(LATBbits.LATB12 = 1){LATBbits.LATB0 = 1;} //else {LATBbits.LATB0 = 0;} if(DCISTATbits.RFUL) { TXBUF0 = RXBUF0; } while(DCISTATbits.TMPTY == 0); //odesilej, dokud neni prazdny reg. pak prijmi nova data }
Delay ; © 2005 Microchip Technology Inc. ; ; Microchip Technology Inc. (“Microchip”) licenses this software to you
58
; solely for use with Microchip dsPIC® digital signal controller ; products. The software is owned by Microchip and is protected under ; applicable copyright laws. All rights reserved. ; ; SOFTWARE IS PROVIDED “AS IS.” MICROCHIP EXPRESSLY DISCLAIMS ANY ; WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT ; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A ; PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL MICROCHIP ; BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL ; DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF ; PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS ; BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), ; ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS. ; ; ;FILE DESCRIPTION: ; This is an MPLAB ASM30 Assembler source file for dsPIC30F processors. ; This file contains software delay routines. ; ;REVISION HISTORY: ; $Log: Delay.s,v $ ; Revision 1.1.1.1 2005/06/06 09:16:46 VasukiH ; First release of software ; ; */ ;Symbol/Literal/Immediate Operand Definitions: ;".equ" directives are similar to "#define" pre-processor directives in C .equ NANOSEC260, 1 ;260ns approx = 4*TCY at 14.7 MIPS .equ NANOSEC125, 2 ;125ns approx = 2*TCY at 14.7 MIPS .equ MICROSEC, 8*NANOSEC125 ;8*125ns =1us .equ MILLISEC, 1000*MICROSEC ;1000*1us = 1000*8*125ns = 1ms ;Global Declarations for Functions and variables: .global _Delay5us .global _Delay5ms .global _Delay900ns ;Code Sections: ;Code sections are named ".text" .section .text
59
_Delay900ns: push w1 ;Store w1 on to stack mov #NANOSEC260, w1 ;w1 = MICROSEC dec w1, w1 ;w1 = w1 - 1 bra nz, $-2 ;If w1 != 0 then Branch to previous instruction dec w0, w0 ;else w0 = w0 - 1 bra nz, $-8 ;If w0 != 0 then Branch back 4 instructions pop w1 ;else restore w1 from stack return ;Return to calling routine
_Delay5us: ;Function Prototype for C: ; void Delay5us(int Count) ; Note: "_" prefixed to the function name is not used when calling the ; function from a C file. ; Function Execution Time when Count=1 is 5 microseconds at 14.74 MIPS ; push w1 ;Store w1 on to stack mov #MICROSEC, w1 ;w1 = MICROSEC dec w1, w1 ;w1 = w1 - 1 bra nz, $-2 ;If w1 != 0 then Branch to previous instruction dec w0, w0 ;else w0 = w0 - 1 bra nz, $-8 ;If w0 != 0 then Branch back 4 instructions pop w1 ;else restore w1 from stack return ;Return to calling routine _Delay5ms: ;Function Prototype for C: ; void Delay5ms(int Count) ; Note: "_" prefixed to the function name is not used when calling the ; function from a C file. ; Function Execution Time when Count=1 is 5 milliseconds at 14.74 MIPS push w1 ;Store w1 on to stack mov #MILLISEC, w1 ;w1 = MILLISEC dec w1, w1 ;w1 = w1 - 1 bra nz, $-2 ;If w1 != 0 then Branch to previous instruction dec w0, w0 ;else w0 = w0 - 1 bra nz, $-8 ;If w0 != 0 then Branch back 4 instructions pop w1 ;else restore w1 from stack return ;Return to calling routine .end
;End
of
File
60
Seznamy
61
62
Seznam obrázků Obrázek 1 - Data 33i BT ........................................................................................... 15 Obrázek 2 - Data ToothPIC ...................................................................................... 17 Obrázek 3 - F2M03AC2............................................................................................ 19 Obrázek 4 - Blokové schéma finálního řešení .......................................................... 27 Obrázek 5 - Blokové schéma napájení..................................................................... 27 Obrázek 6 - BT modul pohled shora......................................................................... 28 Obrázek 7 - BT modul pohled zespodu .................................................................... 28 Obrázek 8 - Kodekový modul pohled shora.............................................................. 32 Obrázek 9 - Kodekový modul pohled zespodu ......................................................... 32 Obrázek 10 - Blokové schéma UDA1344TS............................................................. 34 Obrázek 11 - Průběh nastavování L3 interface ........................................................ 36 Obrázek 12 - Průběh adresačního modu.................................................................. 37 Obrázek 13 - Průběh datového modu....................................................................... 37 Obrázek 14 - Programovací modul pro DSPIC4013................................................. 41 Obrázek 15 - Blokový diagram DCI modulu.............................................................. 45 Obrázek 16 - Blokový diagram sdílené portové struktury ......................................... 45
63
Seznam tabulek Tabulka 1 - Tabulka popisující použité signály rozhraní mezi kodekem a dsPICDEM2.............................................................................................................. 35 Tabulka 2 - Tabulka nastavení jumperů pro vzorkovací frekvence........................... 36 Tabulka 3 - časování ................................................................................................ 38 Tabulka 4 - Nastavení DCICON1 registru................................................................. 46 Tabulka 5 - Nastavení DCICON2 registru................................................................. 46
64
Seznam použité literatury http://pdf1.alldatasheet.com/datasheet-pdf/view/73163/MAXIM/MAX3232.html http://pdf1.alldatasheet.com/datasheet-pdf/view/73653/MAXIM/MAX639.html http://www.datasoft.se/documents/DatasheetF2M03AC2DSS.pdf http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406 &dDocName=en023561&part=DM300018 http://www.connectblue.com/fileadmin/Connectblue/SPA2_Files/Technical_Overview _G2.PDF http://www.flexipanel.com/Docs/Toothpick%20DS380-9.pdf http://server.solartec.cz/cenik.php3?JAZYK=1&TYP_CENIKU=0&SKUPINA=2 http://ww1.microchip.com/downloads/en/DeviceDoc/DS21699B.pdf http://pdf1.alldatasheet.com/datasheet-pdf/view/19855/PHILIPS/UDA1344TS.html http://ww1.microchip.com/downloads/en/DeviceDoc/70138c.pdf http://ww1.microchip.com/downloads/en/DeviceDoc/70046E.pdf http://www.alldatasheet.com
65