• Nebyly nalezeny žádné výsledky

Bakalářská práce

N/A
N/A
Protected

Academic year: 2022

Podíl "Bakalářská práce"

Copied!
57
0
0

Načítání.... (zobrazit plný text nyní)

Fulltext

(1)

L.S.

doc.Ing. Hana Kubátová, CSc.

vedoucí katedry

prof.Ing. Pavel Tvrdík, CSc.

děkan

Č

ESKÉ VYSOKÉ UČENÍ TECHNICKÉ V 

P

RAZE

F

AKULTA INFORMAČNÍCH TECHNOLOGIÍ

ZADÁNÍ BAKALÁŘSKÉ PRÁCE

Název: Knihovna pro ovládání FM tuneru, teplotního senzoru a obvodu reálného času Student: Petr Elexa

Vedoucí: Ing. Matěj Bartík Studijní program: Informatika

Studijní obor: Počítačové inženýrství Katedra: Katedra číslicového návrhu Platnost zadání: do konce letního semestru 2015/16

Pokyny pro vypracování

Vytvořte knihovnu zprostředkující jednotlivé funkce zadaných obvodů v jazyce C a/nebo assembleru.

Cílovou platformou pro nasazení knihovny je Atmel ATtiny85.

Implementujte podporu pro tyto obvody: TEA5767 (FM tuner), BMP180 (senzor pro měření teploty a relativní vlhkosti), DS1307 (obvod reálného času).

V případě, že z obvodu TEA5767 nelze získat RDS data přímo, navrhněte možnost, jak získat RDS data softwarovým zpracováním signálu, použitím jiného FM tuneru, popřípadně modifikací stávajícího zapojení.

Seznam odborné literatury

Dodá vedoucí práce.

(2)
(3)

České vysoké učení technické v Praze Fakulta informačních technologií Katedra číslicového návrhu

Bakalářská práce

Knihovna pro ovládání FM tuneru,

teplotního senzoru a obvodu reálného času

Petr Elexa

Vedoucí práce: Ing. Matěj Bartík

(4)
(5)

Poděkování

(6)
(7)

Prohlášení

Prohlašuji, že jsem předloženou práci vypracoval(a) samostatně a že jsem uvedl(a) veškeré použité informační zdroje v souladu s Metodickým pokynem o etické přípravě vysokoškolských závěrečných prací.

Beru na vědomí, že se na moji práci vztahují práva a povinnosti vyplývající ze zákona č. 121/2000 Sb., autorského zákona, ve znění pozdějších předpisů, zejména skutečnost, že České vysoké učení technické v Praze má právo na uzavření licenční smlouvy o užití této práce jako školního díla podle § 60 odst. 1 autorského zákona.

(8)

České vysoké učení technické v Praze Fakulta informačních technologií

c

2015 Petr Elexa. Všechna práva vyhrazena.

Tato práce vznikla jako školní dílo na Českém vysokém učení technickém v Praze, Fakultě informačních technologií. Práce je chráněna právními před- pisy a mezinárodními úmluvami o právu autorském a právech souvisejících s právem autorským. K jejímu užití, s výjimkou bezúplatných zákonných li- cencí, je nezbytný souhlas autora.

Odkaz na tuto práci

Elexa, Petr. Knihovna pro ovládání FM tuneru, teplotního senzoru a obvodu reálného času. Bakalářská práce. Praha: České vysoké učení technické v Praze, Fakulta informačních technologií, 2015.

(9)

Abstrakt

Bakalářská práce se zabývá implementací knihoven pro obvody TEA5767, BMP180 a DS1307 na platformě Atmel ATtiny85. Komunikace s obvody pro- bíhá přes sběrnici I2C, pro kterou se v rámci práce vytvořil ovladač. Byly prozkoumány různé možnosti získávání dat z protokolu RDS. Knihovny se vyvíjely na počítači Raspberry Pi v jazyce C a poté se přenesly na cílenou platformu. Výsledná implementace se otestovala na Raspberry Pi a posléze ATtiny85.

Klíčová slova Atmel AVR, sběrnice I2C, ATtiny85, TEA5767, BMP180, DS1307, RDS

(10)

Abstract

This bachelor thesis deals with the implementation of libraries for TEA5767, BMP180 and DS1307 ICs targeting platform Atmel ATtiny85. Communication with the ICs takes place via I2C-bus, for which part of the work created I2C driver. Various options were explored for data acquisition from the RDS pro- tocol. Libraries have been developed on Raspberry Pi computer in C language and then transferred to the targeted platform. The implementation was tested on Raspberry Pi, and then ATtiny85.

Keywords Atmel AVR, I2C-bus, ATtiny85, TEA5767, BMP180, DS1307, RDS

x

(11)

Obsah

Úvod 1

1 Analýza a návrh 3

1.1 Hardware . . . 3

1.1.1 Sběrnice I2C . . . 3

1.1.2 Cílová platforma ATtiny85 . . . 6

1.1.3 Modul USI . . . 6

1.1.4 Obvod BMP180 . . . 9

1.1.5 Obvod DS1307 . . . 11

1.1.6 Obvod TEA5767 a RDS . . . 13

1.1.7 Závěr hardwaru . . . 19

1.2 Software . . . 20

1.2.1 Funkční požadavky implementace . . . 20

1.2.2 Další požadavky na implementaci . . . 20

1.2.3 Existující a podobné implentace . . . 21

1.2.4 Vývojová prostředí a nástoje . . . 21

1.2.5 Závěr softwaru . . . 22

2 Implementace knihovny 23 2.1 Knihovny . . . 23

2.2 Vývojová deska . . . 23

2.3 Raspberry Pi . . . 23

2.4 Vývoj knihoven . . . 24

2.5 Výpočet teploty a tlaku . . . 25

2.6 Optimalizace velikosti výsledného kódu . . . 26

2.7 Seznam funkcí . . . 27

2.8 Velikost kódu implementace . . . 28

3 Testování knihoven 29 3.1 Knihovna tea5767 . . . 29

(12)

3.2 Knihovna bmp180 . . . 30

3.3 Knihovna ds1307 . . . 30

3.4 Knihovna tinyi2c . . . 30

3.5 Funkce pro čtení a zápis stanic z EEPROM . . . 31

3.6 Ověření bmp180 a ds1307 na ATtiny85 . . . 31

3.7 Problémy při testování . . . 32

Závěr 33

Literatura 35

A Seznam použitých zkratek 39

B Obsah přiloženého CD 41

xii

(13)

Seznam obrázků

1.1 Typické zapojení na I2C . . . 4

1.2 Přenos bitu v I2C, převzato z [1] . . . 4

1.3 Změna směru transakce v I2C, převzato z [1] . . . 5

1.4 Jedna transakce dat v I2C, převzato z [1] . . . 6

1.5 Vývody ATtiny85, převzato z [2] . . . 6

1.6 Blokový diagram USI, převzato z [2] . . . 7

1.7 USICR – USI řídící registr, převzato z [2] . . . 8

1.8 USISR – USI stavový registr, převzato z [2] . . . 8

1.9 PORTB – Port B datový registr, převzato z [2] . . . 10

1.10 DDRB – Port B registr pro směr data, převzato z [2] . . . 10

1.11 DS1307 typické zapojení, převzato z [3] . . . 12

1.12 Popis registrů v DS1307, převzato z [3] . . . 12

1.13 Formát skupiny v RDS, převzato z [4] . . . 18

2.1 Vývojová deska s ATtiny85 . . . 24

2.2 Ilustrační zapojení obvodů při vývoji . . . 25

(14)
(15)

Seznam tabulek

1.1 Možnosti nastavení USIWM[1:0] . . . 9

1.2 Možnosti nastavení USICLK a USICS[1:0] . . . 9

1.3 Kalibrační koeficienty . . . 10

1.4 Příkazy pro měření tlaku . . . 11

1.5 Volba frekvence SQW/OUT . . . 13

1.6 Formát čtených bajtů z TEA5767 . . . 15

1.7 Formát zapisovných bajtů do TEA5767 . . . 16

2.1 Knihovna tea5767 . . . 27

2.2 Knihovna bmp180 . . . 27

2.3 Knihovna ds1307 . . . 27

2.4 Knihovna tinyi2c . . . 28

(16)
(17)

Úvod

Cílem práce je implementovat programovou knihovnu pro mikrokontrolér At- mel ATtiny85, jejíž API bude zprostředkovávat jednotlivé funkce zadaných obvodů TEA5767, DS1307 a BMP180. Tyto obvody se použijí pro konstrukci radiobudíku. Knihovna má za cíl zpřístupnit funkce obvodů pro jejich snadné ovládání a získávání dat z nich. Knihovna bude součástí firmwaru radiobudíku.

Část práce se zabývá získáváním dat z protokolu RDS, který je určený k přenosu doplňkových informací v FM rádiové síti. Tyto informace jsou na- příklad alternativní frekvence stanice, název rozhlasové stanice, název vysí- laného programu, dopravní informace, čas, datum apod. Schopnost přijímat RDS data se dnes už nachází u většiny rádiem vybavených zařízení. V pří- padě nemožnosti získat tato data ze zadaných obvodů, budou prozkoumány, navrženy a popsány další možnosti.

Projekt radiobudíku je tvořen z dalších bakalářských prací zabývajících se vytvořením ovládacího softwaru, USB ovladače, desky plošných spojů. Kon- kurenční výhodou radiobudíku oproti běžně dostupným bude ovládání přes USB port. Má být vyráběn s nízkými výrobními náklady a bude prodáván jako propagační předmět Fakulty informačních technologií.

V první kapitole se práce v části hardware zabývá analýzou jednotlivých obvodů, jejich vlastností, RDS protokolem. Část software se zabývá existují- cích řešení a volbou vhodného postupu při realizaci knihovny.

Druhá kapitola popisuje realizovanou implementaci a použitou platformu Raspberry Pi pro vývoj a testování.

Poslední kapitola popisuje testování jednotlivých funkčních celků knihovny na Raspberry Pi i ATtiny85. Jsou zde popsány problémy, které nastaly při testování.

(18)
(19)

Kapitola 1

Analýza a návrh

Tato kapitola je rozdělena na části hardware a software. První část se za- bývá mikrokontrolérem ATtiny85, senzorem BMP180, obvodem reálného času DS1307, FM tunerem TEA5767, RDS daty, sběrnicí I2C a vlastnostmi těchto obvodu ovládaných přes sběrnici I2C. Druhá část prozkoumává existující řešení a volbu vhodného postupu při realizaci knihovny.

1.1 Hardware

Předběžným prostudováním vlastností cílové platformy, FM tuneru, teplot- ního senzoru a obvodu reálného času vyplynulo, že je potřeba se seznámit se specifikací sběrnice I2C jako jediným možným komunikačním rozhraním, které podporují všechny obvody. Dále s modulem USI (Universal Serial Interface) v mikrokontroléru ATtiny85.

1.1.1 Sběrnice I2C

Sběrnice I2C [1] (Inter-Integrated Circuit) je obousměrná sériová sběrnice vy- vinutá pro komunikaci se zejména jednočipovými periferiemi jako senzory, řadiče LCD, EEPROM apod. obsažených v elektronice. Sběrnice vyžaduje jen dva vodiče, kde jeden přenáší synchronní datový signál (SDA) a druhý syn- chronní hodinový signál (SCL). Každé zařízení na sběrnici je adresovatelné svojí jedinečnou adresou. Je možné adresovat až 128 zařízení (při 7bitové ad- rese). Zařízení komunikují ve stylu Master-Slave.

Master zařízení vždy generuje hodinový signál, zahajuje komunikaci a ukončuje komunikaci. Slave je zařízení adresované Masterem a pouze vyko- nává přijaté příkazy, případně na ně odpovídá. Master a Slave zařízení mohou být jak příjemcem, tak odesílatelem dat.

V případě více Master zařízení na sběrnici (Multi-Master) je potřeba, aby všechna Master zařízení podporovala arbitraci a synchronizaci hodin. Jedno Master zařízení na sběrnici se označuje Single-Master.

(20)

1. Analýza a návrh

Vdd

SDASCL Rvýtažný

Master

MCU senzor

Slave Slave

A/D

Slave RTC

Obrázek 1.1: Typické zapojení na I2C

mba607 data line

stable;

data valid

change of data allowed SDA

SCL

Obrázek 1.2: Přenos bitu v I2C, převzato z [1]

1.1.1.1 Rychlostní režimy

Specifikace I2C v současnosti definuje čtyři rychlostí režimy. Standard-mode podporuje rychlost přenosu do 100 kbit/s, Fast-mode do 400 kbit/s a Fast- mode Plus do 1 Mbit/s. Tyto tři režimy podporují více master zařízení. Po- slední je Ultra Fast-mode s rychlostí do 5 Mbit/s, tento režim ale nepodporuje více než jedno Master zařízení a Slave zařízení mohou být jen příjemci (jed- nosměrný přenos dat).

1.1.1.2 Fyzická vrstva

Signály SDA a SCL jsou připojeny přes výtažný odpor ke kladnému zdroji napětí. V klidovém stavu, tedy pokud neprobíhá žádná komunikace, jsou oba signály na úrovni logické jedna (HIGH). Úroveň logická nula (LOW) je za- řízením vynucena připojením signálu k zemi pomocí otevřeného kolektoru.

Rozhodovací napěťově úrovně jsou stanoveny pro LOW na 30 % a pro HIGH na 70 % zdrojového napětí. Frekvence signálu SCL závisí na zvolené rychlosti komunikace. V případě Standard-mode je to 100 kHz, to znamená, že SCL musí setrvat na LOW minimálně po dobu 4,7 µs a HIGH 4 µs.

Přenášený bit na signálu SDA je platný, když SCL je HIGH a nesmí se v této době měnit. Změna je možná pouze v okamžiku, když SCL je LOW.

Lze vidět na obrázku 1.2. Výjimkou je podmínka START a STOP. Podmínka START zahajuje transakci a generuje se přechodem z HIGH do LOW na signálu SDA, když signál SCL je HIGH. Podmínka STOP ukončuje transakci a generuje se přechodem z LOW do HIGH na SDA, když signál SCL je HIGH.

Znázorněno na obrázku 1.4.

4

(21)

1.1. Hardware

DATA A R/W

read or write

DATAA/A A R/W

(n bytes + ack.)*

direction of transfer may change at this point.

read or write (n bytes

+ ack.)*

Sr = repeated START condition A/A

*not shaded because transfer direction of data and acknowledge bits depends on R/W bits.

SLAVE ADDRESS

S Sr SLAVE ADDRESS P

A = acknowledge (SDA LOW) A = not acknowledge (SDA HIGH) S = START condition

P = STOP condition from master to slave

from slave to master

Obrázek 1.3: Změna směru transakce v I2C, převzato z [1]

1.1.1.3 Linková vrstva

Data od odesílatele se přenášejí jako jeden bajt dat, tedy přesně osm bitů dat od nejvýznamnějšího bitu, následovaný potvrzovacím bitem od příjemce.

Počet celkem přenesených bajtů není nijak omezen.

Začátek jedné transakce se vždy zahajuje vysláním podmínky START. Po ní Master vyšle 7bitovou adresu Slave zařízení (je specifikováno i 10bitové ad- resování), osmý nejméně významný bit značí směr dat – logická nula znamená zápis dat a logická jedna znamená čtení dat. Master uvolní signál SDA a vy- generuje devátý hodinový puls, kde očekává potvrzovací bit. Pokud Slave tato data přijal a jedná se o jeho adresu, podrží Slave po dobu devátého hodino- vého pulsu signál SDA v LOW. Takto probíhá potvrzení, které se značí jako ACK. V opačném případě se jedná o nepotvrzení (NACK) a Master transakci ukončí, případně zahájí novou. V závislosti na směru dat se Master nebo Slave stane příjemcem a druhý odesílatelem. Každý přenesený bajt je příjemcem po- tvrzen, v případě že Master je příjemcem po posledním bajtu vyšle NACK.

Transakci ukončí Master vysláním podmínky STOP. Částečně znázorněno na obrázku 1.4.

Potřebuje-li Master otočit směr dat v průběhu přenosu, vyšle po potvrzení opakovaně podmínku START a adresu s převráceným bitem směru dat. Tento postup je detailněji zobrazen na obrázku 1.3.

1.1.1.4 Clock stretching

Clock stretching [1, kap. 3.1.9] je způsob pozastavení transakce držením sig- nálu SCL v LOW. Držení vynutí čekání Master zařízení dokud SCL nebude HIGH. Používá se na Slave zařízeních k získání času na zpracování. Podpora této vlastnosti není povinná a mnoho jednoduchých zařízení ji neobsahuje.

Pozastavení může probíhat po každém bitu, to vede ke snižování hodinové frekvence nebo po jednom bajtu.

(22)

1. Analýza a návrh

S

1 - 7 8 9 1 - 7 8 9 1 - 7 8 9

P conditionSTOP START

condition ADDRESS R/W ACK DATA ACK DATA ACK

SDA

SCL

mbc604

Obrázek 1.4: Jedna transakce dat v I2C, převzato z [1]

1.1.2 Cílová platforma ATtiny85

ATtiny85 [2] je jednočipový 8bitový mikrokontrolér s osmy piny (obr. 1.5).

Dva z pinů jsou použity pro napájení v rozsahu 2,7–5 V. Datové piny jsou konfigurovatelné pro různé funkce. Je postavený na architektuře Atmel AVR odvozené od RISC. Na čipu se nachází 8 kB flash paměti pro program, 512 B paměti typu EEPROM a 512 B SRAM. Maximální pracovní frekvence se po- hybuje mezi 0–20 MHz v závislosti na napájecím napětí. Disponuje 10bitovým A/D převodníkem, dvěma 8bitovými čítači nebo časovači a univerzálním séri- ovým rozhraním.

K dispozici je dobrá dokumentace a mnoho aplikačních poznámek. Vel- kou výhodou je malá cena a spotřeba. Nevýhodou je nízký počet vstupně- výstupních pinů a malá programová paměť.

Flash paměť a EEPROM je programovatelná v systému za pomoci SPI rozhraní. Tento proces se nazývá In-System Programming, zkráceně ISP. Po- mocí ladícího systému debugWIRE je možné řídit běh programu s doplňkovým ladícím hardwarem. Tím je například nástroj AVR Dragon.

1 2 3 4

8 7 6 5 (PCINT5/RESET/ADC0/dW) PB5

(PCINT3/XTAL1/CLKI/OC1B/ADC3) PB3 (PCINT4/XTAL2/CLKO/OC1B/ADC2) PB4 GND

VCC

PB2 (SCK/USCK/SCL/ADC1/T0/INT0/PCINT2) PB1 (MISO/DO/AIN1/OC0B/OC1A/PCINT1) PB0 (MOSI/DI/SDA/AIN0/OC0A/OC1A/AREF/PCINT0)

Obrázek 1.5: Vývody ATtiny85, převzato z [2]

1.1.3 Modul USI

Mikrokontrolér ATtiny85 je vybaven univerzálním sériovým rozhraním (USI) [2, kap. 15], které lze použít pro dvou nebo tří vodičové synchronní datové pře- 6

(23)

1.1. Hardware

DATA BUS USIPF USITCUSICLKUSICS0USICS1

USIOIFUSIOIE USIDC

USISIF USIWM0USIWM1

USISIEBit7

Two-wire Cl ock Control Unit

DO (Output only)

DI/SDA (Input/Open Drain)

USCK/SCL (Input/Open Drain) 4-bit Counter

USIDR

USISR

D Q LE

USICR

CLOCK HOLD TIM0 COMP

Bit0

[1]

3 01 2 3 01 2

0 1

2 USIBR

Obrázek 1.6: Blokový diagram USI, převzato z [2]

nosy. Poskytuje podpůrné hardwarové zdroje pro zjednodušení implementace sběrnice I2C (režim Master i Slave) nebo rozhraní SPI. Snižuje tím velikost kódu implementace a zvyšuje rychlost přenosu. Podporovány jsou režimy Mas- ter a Slave. Blokový diagram je na obrázku 1.6.

Přenášená data jsou obsažena v 8bitovém posuvném registru USIDR. Ten se automaticky posouvá se zvolenou hranou hodin. Vždy po dokončení jednoho přenosu se uloží kopie obsahu USIDR do registru USIBR. Tím se získává více času na přečtení těchto dat bez jejich ztráty.

Na blokovém diagramu (obr. 1.6) je vidět, že nejvýznamnější bit USIDR je připojen podle zvoleného režimu USI k jednomu ze dvou výstupů. Mezi nejvý- znamnějším bitem USIDR a výstupem je transparentní latch, která zajišťuje zpoždění změny na výstupu k opačné hraně hodin čtení vstupu. Například čte-li se vstup na náběžné hraně hodin, pak se výstup změní až s příchodem sestupné hrany.

Rozhraní USI se ovládá pomocí řídícího registru USICR a stavového re- gistru USISR, který kromě příznaků obsahuje i aktuální hodnotu 4bitového čítače. Popis jednotlivých bitů USICR znázorněných na obrázku 1.7:

• USIIE – zapsáním logické jedna se povolí přerušení při detekci podmínky START.

• USIOE – zapsáním logické jedna se povolí přerušení při přetečení čítače.

(24)

1. Analýza a návrh

Bit 7 6 5 4 3 2 1 0

0x0D USISIE USIOIE USIWM1 USIWM0 USICS1 USICS0 USICLK USITC USICR

Read/Write R/W R/W R/W R/W R/W R/W W W

Initial Value 0 0 0 0 0 0 0 0

Obrázek 1.7: USICR – USI řídící registr, převzato z [2]

Bit 7 6 5 4 3 2 1 0

0x0E USISIF USIOIF USIPF USIDC USICNT3 USICNT2 USICNT1 USICNT0 USISR

Read/Write R/W R/W R/W R R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Obrázek 1.8: USISR – USI stavový registr, převzato z [2]

• USIWM[1:0] – výběr operačního režimu rozhraní USI. Možnosti nasta- vení jsou ukázány v tabulce 1.1.

• USICS[1:0] – výběr zdroje hodinového signálu. Možnosti nastavení jsou ukázány v tabulce 1.2.

• USICLK – v případě vybrání USICLK jako zdroje hodin se zapsáním logické jedna posune USIDR o jednu pozici a zvýší se hodnota čítače o jedna. Hodnota je vždy logická nula.

• USITC – zapsáním logické jedna přepne hodnotu USCK/SCL z logické jedna na nulu nebo naopak. Nezávislé na směru pinu. Hodnota je vždy logická nula.

Popis jednotlivých bitů USISR znázorněných na obrázku 1.8 (příznaky se mažou zapsáním logické jedna):

• USISIF – příznak nastavený při detekování podmínky START.

• USIOIF – příznak nastavený při přetečení čítače.

• USIPF – příznak nastavený při detekování podmínky STOP.

• USIDC – pokud se hodnota na výstupu liší s hodnotou v USIDR čtení vrací logická jedna.

• USICNT[3:0] – hodnota čítače.

1.1.3.1 Dvou vodičový režim

Dvou vodičový režim (TWI) je kompatibilní se sběrnicí I2C. Piny SDA (PB0) a SCL (PB2) jsou obousměrné a používají výstup typu otevřený kolektor.

Směr pinů se volí nastavením vhodných bitů v registru DDRB (popis na obr.

1.10). Pro je SDA je to bit DDB0 a SCL bit DDB2.

8

(25)

1.1. Hardware Tabulka 1.1: Možnosti nastavení USIWM[1:0]

USIWM1 USIWM0 Popis režimu

0 0 Vypne rozhraní USI.

0 1 Tří vodičový režim, používá piny jsou DO, DI, USCK.

1 0 Dvou vodičový režim, používá piny SDA a SCL.

Při detekci podmínky START dojde k držení sig- nálu SCL v LOW, dokuď nedojde k vymazání příznaku USISIF ve stavovém registru.

1 1 Dvou vodičový režim. Při detekci podmínky START nebo přetečení čítače dojde k držení sig- nálu SCL v LOW, dokuď nedojde k vymazání příznaku USISIF nebo USIOIF ve stavovém re- gistru.

Tabulka 1.2: Možnosti nastavení USICLK a USICS[1:0]

USICS1 USICS0 USICLK Zdroj hodin USIDR Zdroj hodin čítače

0 0 0 Žádný Žádný

0 0 1 Software (USICLK) Software (USICLK)

0 1 X Timer/Counter0 Timer/Counter0

1 0 0 Externí nábežná hrana Externí obě hrany 1 1 0 Externí sestupná hrana Externí obě hrany 1 0 1 Externí nábežná hrana Software (USITC) 1 1 1 Externí sestupná hrana Software (USITC) Hodnota na SCL se řídí hodnotou bitu PORTB2 v registru PORTB (popis na obr. 1.9), kdy logická nula sepne otevřený kolektor a úroveň signálu se změní na LOW. V případě SDA se úroveň změní na LOW, když je logická nula v nejvýznamnějším bitu USIDR nebo bitu PORTB0 v registru PORTB.

Otevřený kolektor u obou pinů není sepnut, při zapsání logické jedna do bitu v registru PORTB a nejvýznamnějšího bitu USIDR (pro SDA).

Integrované výtažný odpor u pinů SDA a SCL jsou v tomto režimu vypnuty a je třeba použít vhodné externí.

1.1.4 Obvod BMP180

BMP180 [5] je senzor pro měření atmosférického tlaku a teploty s vysokou přesností. Není pravda, že senzor měří relativní vlhkost, jak mylně uvádí za- dání práce. Je založen na piezorezistivní technologii.

Napájecí napětí je v rozsahu 1,62–3,6 V. Měření tlaku má přesnost 6 Pa v nejnižším rozlišení a až 3 Pa v nejvyšším rozlišení. Přesnost a frekvence měření určuje spotřebu obvodu, která je v řádu mikroampér. Rozsah měření

(26)

1. Analýza a návrh

Bit 7 6 5 4 3 2 1 0

0x18 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB

Read/Write R R R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Obrázek 1.9: PORTB – Port B datový registr, převzato z [2]

Bit 7 6 5 4 3 2 1 0

0x17 DDB5 DDB4 DDB3 DDB2 DDB1 DDB0 DDRB

Read/Write R R R/W R/W R/W R/W R/W R/W

Initial Value 0 0 0 0 0 0 0 0

Obrázek 1.10: DDRB – Port B registr pro směr data, převzato z [2]

Tabulka 1.3: Kalibrační koeficienty Adresy registrů

Koeficient Nejvýznamější bajt Nejméně významný bajt

AC1 0xAA 0xAB

AC2 0xAC 0xAD

AC3 0xAE 0xAF

AC4 0xB0 0xB1

AC5 0xB2 0xB3

AC6 0xB4 0xB5

B1 0xB6 0xB7

B2 0xB8 0xB9

MB 0xBA 0xBB

MC 0xBC 0xBD

MD 0xBE 0xBF

je 300–1100 hPa pro tlak a 0–65C pro teplotu. Obvod se ovládá přes sběrnici I2C jako Slave zařízení s rychlostí až 3,4 Mbit/s. Adresa zařízení je 1110111.

1.1.4.1 Měření

Hodnoty o teplotě a tlaku z obvodu jsou „nekompenzované“. Správné hod- noty ve fyzikálních veličinách se vypočítají z hodnot se senzoru a kalibračních dat uložených na integrované EEPROM. Ta obsahuje jedenáct koeficientů po 16 bitech kalibračních dat určených ke kompenzaci naměřených dat ze senzoru.

Čtení těchto dat probíhá z registrů. Jejich adresy a jednotlivé koeficienty jsou v tabulce 1.3.

Měření probíhá následovně:

1. Pošle se příkaz k měření teploty zapsáním hodnoty 0x2E na adresu 0xF4.

2. Čeká se 4,5 ms na A/D převodník.

3. Změřená hodnota se přečte z adresy registru 0xF6.

10

(27)

1.1. Hardware Tabulka 1.4: Příkazy pro měření tlaku

Režim Hodnota příkazu Doba převodu [ms] Přesnost [Pa]

Úspora energie (0) 0x34 4,5 6

Standard (1) 0x74 7,5 5

Velké rozlišení (2) 0xB4 13,5 4

Velmi velké rozlišení (3) 0xF4 25,5 3

4. Na základě zvolené přesnosti se vybere hodnota z tabulky 1.4 a zapíše na adresu 0xF4. Tím se pošle příkaz k měření tlaku.

5. Podle přesnosti se čeká 4,5–25,5 ms.

6. Změřená hodnota se přečte po jednotlivých bajtech z adres 0xF6, 0xF7 a 0xF8.

7. Spočítají se správné hodnoty teploty a tlaku s pomocí kalibračních dat.

Změřené hodnoty teploty jsou v násobcích 0,1C a tlaku v násobcích 1 Pa.

Zápis do konkrétního registru se dělá posláním jeho adresy hned po jeho I2C adrese. Následně se pošle zapisovaná hodnota. Při čtení je po odeslání adresy registru potřeba vyslat opakovaně podmínku START a změnit směr dat na čtení. Senzor poté odešle data z registru (případně i z dalšího, pokud čteme dvou bajtovou hodnotu). Čtení senzoru se následně ukončí vysláním NACK a podmínky STOP.

1.1.5 Obvod DS1307

DS1307 [3] je obvod reálného času (RTC) uchovávající aktuální čas a datum.

Napájecí napětí je 5 V. Hodiny jsou poháněny precizním 32,768 kHz krystalem.

Spotřeba při běhu z baterie je menší než 500 nA. Obvod obsahuje 56 bajtů SRAM zálohované baterií na uživatelská data. Dále osm 8bitových registrů, ze kterých prvních sedm je použito pro uložení sekund, minut, hodin, dne, data a roku (po jednom bajtu). Osmý registr slouží k řízení funkce pinu SQW/OUT.

1.1.5.1 Čas a datum

Čas a datum jsou uloženy v sedmy registrech ve formátu BCD (Binary Coded Decimal) jak je vidět v tabulce 1.12. BCD je způsob binárního kódování de- kadických čísel tím způsobem, že v tomto případě čtveřice bitů reprezentuje jednu dekadickou číslici. Například 00110100 ve formátu BCD je 34 v deka- dické soustavě.

Obvod dělá automaticky korekturu měsíců kratších než 31 dní a přechod- ných roků (správně až do roku 2100). Podporuje 24hodinový i 12hodinový formát hodin. Formát se volí šestým bitem hodinového registru, logická jedna

(28)

1. Analýza a návrh

DS1307

CPU

VCC

VCC

VCC

SDA SCL

GND X2 X1

VCC RPU RPU KRYSTAL

Krystal

SQW/OUT

VBAT

Obrázek 1.11: DS1307 typické zapojení, převzato z [3]

ADDRESS BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 FUNCTION RANGE

00h CH 10 Seconds Seconds Seconds 00–59

01h 0 10 Minutes Minutes Minutes 00–59

02h 0 12 10

Hour 10

Hour Hours Hours 1–12

+AM/PM 00–23

24 PM/

AM

03h 0 0 0 0 0 DAY Day 01–07

04h 0 0 10 Date Date Date 01–31

05h 0 0 0 10

Month Month Month 01–12

06h 10 Year Year Year 00–99

07h OUT 0 0 SQWE 0 0 RS1 RS0 Control

08h–3Fh RAM

56 x 8 00h–FFh

Obrázek 1.12: Popis registrů v DS1307, převzato z [3]

znamená 12hodinový režim. V 12hodinovém režimu pátý bit značí AM (lo- gická nula) nebo PM (logická jedna). Změna formátu vyžaduje znovu zapsání času a data.

Informace o času a datu jsou při prvním připojení k napájení nastaveny na počáteční hodnoty a hodiny jsou zastaveny nastaveným bitem CH. Čtení i zápis probíhá přes vedlejší registry, které zamezují chybám při probíhající ak- tualizaci registrů. Zapisovat se musí vždy všech sedm registrů a to v intervalu jedné sekundy. Při provozu z baterie nelze s obvodem komunikovat, z důvodu šetření energie baterie.

1.1.5.2 Nastavení výstupu SQW/OUT

Řídící registr umožnuje nastavit pin SQW/OUT, aby generoval čtvercový sig- nál nebo konstantní nulu či jedničku na výstupu pinu. Bit OUT vybírá kon- stantní jedničku nebo nulu na výstupu. Funguje pouze, pokud je SQWE bit nula. Nastavením bitu SQWE na jedna se povoluje generování čtvercového signálu. Bity RS1 a RS0 volí frekvenci čtvercového signálu tak, jako v tabulce 12

(29)

1.1. Hardware Tabulka 1.5: Volba frekvence SQW/OUT

RS1 RS0 frekvence [Hz]

0 0 1

0 1 4096

1 0 8192

1 1 32768

1.5.

1.1.5.3 Způsob komunikace

Komunikace s mikrokontrolérem probíhá přes sběrnici I2C v režimu Slave pod adresou 1101000. Nejvyšší možná rychlost je 100 kbit/s. Čtení a zápis z kon- krétního registru předchází zapsání jeho adresy. U zápisu je to první bajt po adrese obvodu. U čtení je nutné nastavit adresu registru předem zápisem jed- noho bajtu hned po adrese. Vždy po zapsání nebo přečtení jednoho bajtu se adresa registru inkrementuje.

1.1.6 Obvod TEA5767 a RDS

TEA5767 [6] je jednočipový stereo FM tuner. Napájecí napětí může být v roz- sahu 2,5–5 V. Určený je pro přenosná zařízení. Spotřeba je nízká, typická spo- třeba se pohybuje okolo 13 mA. Systém ladění rádiových frekvencí je založený na fázovém závěsu (anglicky PLL – Phase-Locked Loop). Obvod potřebuje pro fungování 32,768 kHz nebo 13 MHz hodinový krystal. Příjem je možný ev- ropského, amerického a japonského FM pásma. Úroveň přijímaného signálu je vyjádřena v 4bitové hodnotě.

1.1.6.1 Ladění stanic

Naladění stanice se provádí zapsáním 14bitového slova do programovatelného děliče. Slovo se počítá z frekvence, kterou chceme naladit podle následujícího předpisu:

slovo= (4·(Frf ±Fpf))

Fref (1.1)

Frf – laděná frekvece [Hz]

Fpf – přechodná frekvence [Hz]

Fref – referenční frekvence [Hz]

Referenční frekvence je 32 768 Hz pro 32,768 kHz krystal nebo 50 000 Hz pro 13 MHz krystal. Přechodná frekvence FM tuneru je 225 kHz.

(30)

1. Analýza a návrh

Přechodná frekvece se přičítá k referenční frekvenci, když je HLSI bit na- staven na jedna, jinak se odčítá. Bitem HLSI se vybírá, zda frekvence lokálního oscilátoru je menší (HLSI je nula) nebo větší (HLSI je jedna), než frekvence požadovaná.

1.1.6.2 Vyhledávání stanic

Vyhledávání rádio stanic je řízeno plně softwarem nebo je autonomní, kdy obvod sám zastaví na frekvenci podle požadované úrovně signálu. Autonomní hledání se připraví nastavením MUTE a SEARCH bitu, zvolí se směr a po- žadovaná úroveň signálu. Zapsáním frekvence o jeden krok (100 kHz) větší respektive menší se hledání zahájí. Když obvod nalezne stanici nebo narazí na konec frekvenčního pásma, nastaví bit READY, aby informoval řídící software.

V případě referenční frekvence 32 768 Hz se musí frekvence přečtená z FM tuneru zaokrouhlovat (krok je 3·32 768 Hz = 98,304 kHz). Jinak se vyhledávání nebude pohybovat v 100 kHz krocích.

1.1.6.3 Další funkce FM tuneru

• Softmute – zeslabuje šum mezi stanicemi a při velmi slabém signálu.

• Stereo Noise Cancelling (SNC) – při slabém signálu přejde dekodér ze stereo na mono. Slouží ke snížení výstupního šumu.

• High Cut Control (HCC) – ořezává vysoké frekvence. Snížuje výstupní šum při slabém signálu.

• Pohotovostní režim – šetří energií.

1.1.6.4 Ovládání FM tuneru

FM tuner se ovládá přes sběrnici I2C (maximálně 400 kbit/s) případně roz- hraní SPI. Jeho I2C adresa je 1100000. Při komunikaci přes I2C se pokaždé čte nebo zapisuje pět bajtů dat hned po adrese obvodu a směru dat, v pořadí od prvního až k pátému bajtu. Po resetování napájení jsou všechny bity v obvodu nula kromě bitu MUTE. Formát všech zapisovaných bajtů je v tabulce 1.7 a čtených v tabulce 1.6.

Popis použitých bitů v tabulce čtených bajtů:

• RF – logická jedna indikuje nalezení stanice nebo dosažení limitu pásma.

• BLF – logická jedna indikuje dosaženní limitu pásma.

• PLL[13:8] – horních šest bitů 14bitového slova z programovatelného dě- liče.

• PLL[7:0] – dolních osm bitů 14bitového slova z programovatelného děliče.

14

(31)

1.1. Hardware Tabulka 1.6: Formát čtených bajtů z TEA5767

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 První bajt

RF BLF PLL13 PLL12 PLL11 PLL10 PLL9 PLL8

Druhý bajt

PLL7 PLL6 PLL5 PLL4 PLL3 PLL2 PLL1 PLL0

Třetí bajt

STEREO IF6 IF5 IF4 IF3 IF2 IF1 IF0

Čtvrtý bajt

LEV3 LEV2 LEV1 LEV0 CI3 CI2 CI1 0

Pátý bajt

0 0 0 0 0 0 0 0

• STEREO – logická jedna značí příjem stereo signálu.

• IF[6:0] – hodnota 7bitového čítače přechodné frekvence.

• LEV[3:0] – úroveň přijímaného signálu z A/D převodníku.

• CI[3:1] – identifikace čipu. Jsou nastaveny na logickou nulu.

Popis použitých bitů v tabulce zapisovaných bajtů:

• MUTE – logická jedna ztlumí oba audio kanály.

• SM – logická jedna povolí autonomní vyhledávání stanic.

• PLL[13:8] – horních šest bitů 14bitového slova pro naladění frekvence.

• PLL[7:0] – dolních osm bitů 14bitového slova pro naladění frekvence.

• SUD – logická jedna volí směr hledání nahoru, logická nula směr hledání dolu.

• SSL[1:0] – úroveň signálu při, které se zastaví hledání. Bitová hodnota

„01“ zastaví hledání při úrovni signálu pět, „10“ při úrovni sedm a „11“

při úrovni deseti.

• HLSI – Frekvence lokálního oscilátoru je menší (HLSI je log. nula) nebo větší (HLSI je jedna), než frekvence požadovaná.

• MS – logická jedna vynutí mono audio, logická nula povolí stereo.

• MR – logická jedna ztlumí pravý audio kanál.

• ML – logická jedna ztlumí levý audio kanál.

(32)

1. Analýza a návrh

Tabulka 1.7: Formát zapisovných bajtů do TEA5767

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 První bajt

MUTE SM PLL13 PLL12 PLL11 PLL10 PLL9 PLL8

Druhý bajt

PLL7 PLL6 PLL5 PLL4 PLL3 PLL2 PLL1 PLL0

Třetí bajt

SUD SSL1 SSL0 HLSI MS MR ML SWP1

Čtvrtý bajt

SWP2 STBY BL XTAL SMUTE HCC SNC SI

Pátý bajt

PLLREF DTC – – – – – –

• SWP1 – logická jedna nastaví úroveň pinu SWPORT1 na HIGH, logická nula na LOW.

• SWP2 – logická jedna nastaví úroveň pinu SWPORT2 na HIGH, logická nula na LOW.

• STBY – logická jedna přepne FM tuner do pohotovostního režimu.

• BL – logická jedna zvolí limit pásma pro Japonsko, logická nula pro USA a Evropu.

• XTAL – spolu s PLLREF se tímto bitem vybýrá frekvence externích hodin. Pokud je PLLREF nula, jedna v XTAL vybere 13 MHz krystalový oscilátor a nula 32,768 kHz krystalový oscilátor.

• SMUTE – logická jedna zapne Softmute, logická nula vypne.

• HCC – logická jedna zapne High Cut Control, logická nula vypne.

• SNC – logická jedna zapne Stereo Noise Cancelling, logická nula vypne.

• SI – logická jedna udělá z pinu SWPORT1 výstup bitu RF, logická nula umožní programovat pin pomocí bitu SWP1.

• PLLREF – logická jedna povolí 6,5 MHz referenční frekvenci, logická nula zakáže.

• DTC – logická jedna zvolí časovou konstantu deemfáze 75 µs, logická nula konstantu 50 µs.

16

(33)

1.1. Hardware 1.1.6.5 RDS (Radio Data System)

RDS je protokol sloužící k přenosu doplňkových digitálních informací určený k použití pro FM rádiové sítě [7, 8]. Jedná se o mezinárodní standard a až na některé rozdíly je stejný se standardem v USA nazývaný RBDS [4]. Dnes už tuto technologii používá naprostá většina FM rádií, díky dostupnosti a malé ceně jednočipových řešení implementujících RDS.

1.1.6.6 Významné funkce v RDS

Zde se nachází popis významných funkcí v RDS, které jsou dnes běžně pod- porovány rádii.

• AF (Alternative Frequencies list) – seznam náhradních frekvencí pro danou stanici ve stejném regionu nebo v přilehlých regionech.

• CT (Clock Time and date) – aktuální čas a datum.

• EON (Enhanced Other Networks information) – umožnuje získávat in- formace o jiných stanicích, než právě přijímané.

• PI (Programme Identification) – jedinečný kód stanice, slouží k rozlišení stanic v regionu.

• PS (Programme Service) – název rozhlasové stanice.

• PTY (Programme TYpe) – identifikace typu právě vysílaného programu pomocí jednoho z 31 kódů pro PTY.

• RT (Radio Text) – přenos textu pro zobrazení na display.

• TA (Traffic Announcement identification) – signalizuje, že právě probíhá dopravní hlášení.

• TDC (Transparent Data Channels) – 32 kanálů pro přenos různých typů dat.

• TMC (Traffic Message Channel) – přenos dopravních informací.

• TP (Traffic Programme) – indikuje zda právě naladěná stanice přenáší dopravní hlášení.

1.1.6.7 Kódování a modulace RDS dat

RDS data jsou přenášena na nosné frekvenci 57 kHz, pro stereo příjem je to trojnásobek 19 kHz (pilotního tónu). Rychlost přenosu dat je 1187,5 bit/s (odvozeno od nosné frekvence podělením 48). Informace se posílají po jednot- livých skupinách o velikosti 104 bitů. Detail skupiny je na obrázku 1.13.

(34)

1. Analýza a návrh

Checkword + offset A

Checkword + offset B

Checkword + offset C or C'

Checkword + offset D

PI code PTY

BoTP t2

PI

Block 1 Block 2 Block 3 Block 4

One group = 104 bits 87.6 ms

First transmitted bit of group Last transmitted bit of group

t1

Offset C = version A Offset C' = version B Group

type code

Least signifiant bit Most signifiant bit

4 - bit group type code 0 = version A 1 = version B Traffic

prog.

A0 B0 code PT4 PT3 PT2 PT1 PT0 A1

A2 A3

Obrázek 1.13: Formát skupiny v RDS, převzato z [4]

Proces modulace je následující. První probíhá diferenciální zakódování zdrojových dat dle pravidel, které odpovídají logické funkci XOR. Následně se datový signál dvojfázově zakóduje a odfiltrují se vysoké frekvence. Jako po- slední se signál amplitudově moduluje na nosnou frekvenci. Nosná frekvence je potlačena.

1.1.6.8 Demodulace a dekódování RDS dat

Pro získání původního datového signálu se vyfiltruje 57 kHz přes pásmovou propust, signál se amplitudově demoduluje při nosné frekvenci, dvojfázově a diferenciálně dekóduje (princip je stejný jako v případě zakódování). Záro- veň se obnoví hodinový signál. Po detekci chyb a případné opravě chyb se synchronizací obdržené skupiny dat získáváme požadované RDS informace.

1.1.6.9 Stávající FM tuner

Z dokumentace k obvodu vyplívá, že RDS data se z použitého FM tuneru nedají přímo získat. Nabízí ale na výstupu demodulovaný multiplexní signál stanice (MPX – multiplex) pro připojení externího RDS dekodéru. Níže jsou prozkoumány další způsoby.

1.1.6.10 Externí RDS preprocesor

První z možností je přidání kompatibilního RDS preprocesoru na výstupní signál MPX stávajícího FM tuneru, který zajistí demodulaci a dekódování.

Příkladem je obvod SAA6588 [9] komunikující po I2C sběrnici. Preprocesory jsou dnes už špatně dostupné a vzhledem k vysoké pořizovací ceně se nevy- platí tato možnost uvažovat. Další obvod navíc komplikuje a prodražuje desku plošných spojů.

18

(35)

1.1. Hardware 1.1.6.11 Softwarové zpracování

Druhou je digitalizace signálu MPX za pomoci A/D převodníku a následné softwarové zpracování provádět v mikrokontroléru. V tomto případě to ale není možné, jelikož A/D převodník v MCU má teoreticky nejvyšší vzorkovací frekvenci přibližně 77 kHz při nejnižším rozlišení. Tato hodnota podle Nyquis- tova kritéria [10] nedostačuje a digitalizovaný signál by byl značně zkreslený.

Výhodné použití techniky podvzorkování ztroskotává na nedostatečných pa- rametrech převodníku.

Tento způsob vyžaduje značné nároky na zpracování, které jednoduchý mikrokontrolér nemůže splnit. Mikrokontrolér musí zárověň komunikovat po sběrnici USB. Problémem je použití pinů A/D převodníku pro komunikaci po USB sběrnice.

1.1.6.12 Externí demodulátor RDS

Další možností je využití obvodu jako TDA7478, který zajišťuje jen demo- dulaci a dekódování signálu MPX z FM tuneru. Čtení a zpracování signálů RDDA (RDS data) a RDCL (RDS hodiny) z RDS demodulátoru by měl za- jistit mikrokontrolér. Oproti předchozí variantě je zatížení mikrokontroléru se zpracováním výrazně menší. RDS demodulátory jsou sice dostupnější, ale není kam připojit signály RDDA a RDCL z důvodu vyčerpaní všech vstupně- výstupních pinů mikrokontroléru, které se využívají pro sériovou komunikaci.

1.1.6.13 FM tuner s RDS

Poslední a nejlepší možností je nahrazení použitého FM tuneru za novější s vestavěnou podporou RDS dat, ze kterých se tato už předzpracovaná data dají získat. Jsou jimi třeba RDA5807M nebo Si4703. Výhodou je porovnatelná cena se stávajícím FM tunerem, některé nové funkce využívající integrovaného příjmu RDS a nulové nároky na změnu současného zapojení. Tato možnost se jeví jako vhodná pro další verzi radiobudíku.

1.1.6.14 Závěr RDS

Z důvodů které vyplynuly, se nepočítá v této implementaci se získáváním RDS dat. V současné době se čeká na novou verzi vývojové platformy obsahující lepší FM tuner, který podporuje příjem RDS dat.

1.1.7 Závěr hardwaru

Cílová platforma je velice minimalistická. Jedná se o 8bitový mikrokontrolér na architektuře Atmel AVR. Nabízí pouze několik kB paměti pro program a 6 datových pinů. Komunikace s obvody je možná přes I2C. Jedná se o velmi

(36)

1. Analýza a návrh

rozšířenou sériovou sběrnici, která je jednoduchá a univerzální. Platforma sběr- nici I2C přímo nepodporuje, ale s využitím bloku USI je možné sběrnici I2C softwarově implementovat.

Zadané obvody jsou TEA5767 – nízko odběrový jednočipový FM stereo tuner, BMP180 – senzor atmosférického tlaku se značným stupněm přesnosti a zároveň teplotní senzor (přestože v zadání se uvádí jinak) a poslední DS1307 – obvod reálného času uchovávající aktuální čas a datum ve formátu BCD, navíc obsahuje i 56 bajtů NV SRAM pro další informace.

Současně byly navrženy další možnosti získávání RDS dat a to použitím RDS preprocesoru, RDS demodulátoru, zpracováním RDS signálu na mikro- kontroléru a náhradou FM tuneru za jiný. Vybranou možností je FM tuner s podporou RDS, ale čeká se na novou verzi vývojové platformy s takovým tunerem.

1.2 Software

1.2.1 Funkční požadavky implementace

Knihovna je určena pro radiobudík. Z tohoto důvodu se musí zpřístupnit hlavní funkce zadaných obvodů a další funkce, které vycházejí ze specifikace radiobudíku, popřípadě jsou z nich odvozené a zároveň souvisejí s obvody.

Specifikace radiobudíku související s obvody:

• Naladit stanice veřejného rozhlasu ve standardním frekvenčním rozsahu.

• Možnost naladěné stanice uložit do paměti.

• Možnost jim přiřadit nebo editovat jejich název a frekvenci.

• Pamatovat si poslední naladěnou stanici.

• Možnost nastavit a udržet čas.

1.2.2 Další požadavky na implementaci Ze zjištěných skutečností se odvodily další požadavky:

• Velikost programu by měla být co nejmenší.

• Používat co nejmenší datové typy.

• Nepoužívat datové typy s pohyblivou řadovou čárku.

20

(37)

1.2. Software

1.2.3 Existující a podobné implentace

V době psaní této zprávy jsou na Internetu k nalezení různé knihovny (ovla- dače) v jazyce C nebo C++. Není cíleno jako vyčerpávající seznam všech dostupných knihoven. Pro obvod BMP180 (teplotního senzor) to jsou:

• BMP180_driver[11] – linuxový ovladač s částečnou dokumentací přímo od výrobce obvodu psaný v jazyce C. Může být užitečné jako zdroj informací k obvodu.

• Unified BMP085/BMP180 Driver [12] – ovladač postavený na unifiko- vaném ovladači od stejnojmenné firmy pro plaformu Arduino v jazyce C++ publikovaný pod licencí BSD.

Pro obvod TEA5767 (FM tuner):

• Radio[13] – knihovna s dokumentací podporující různé FM tunery psaná v jazyce C++ pro platformu Arduino publikovaná pod licencí BSD.

• TEA5767 [14] – knihovna v jazyce C++ pro platformu Arduino. Publi- kováno pod licencí GNU GPLv2.

A nakonec pro DS1307 (obvod reálného času):

• rtclib[15] – knihovna s dokumentací podporující různé obvody reálého času v jazyce C++ pro platformu Arduino. MIT licence.

• RTClib[16] – knihovna odvozená od předchozí přidávající další funkce.

Dále existují linuxové ovladače pro TEA5767 a DS1307. Využívají ale mnoho linuxových knihoven a zbytečně složitých konstrukcí.

Od výrobce mikrokontrolér ATtiny85 je dostupná aplikační poznámka [17], která popisuje použití USI rozhraní a následně implementuje ovladač pro I2C Master. Implementace je dostupná jako její příloha.

1.2.4 Vývojová prostředí a nástoje

Pro vývoj jsou od výrobce dostupné softwarové nástroje Atmel Studio IDE (pouze pro OS Windows) a Atmel AVR 8-bit Toolchain pro vývoj v jazyce C, C++ a Assembleru. Tyto nástroje kromě upraveného překladače GCC obsahují i různé C knihovny včetně standardní knihovny jazyka C.

Běžně se používá i Arduino IDE, které sice oficiálně podporuje jen rodinu Atmel ATmega mikrokontrolérů, ale existují rozšíření podporující ATtiny85.

(38)

1. Analýza a návrh

1.2.5 Závěr softwaru

První možností jak posupovat při implementaci je vhodně použít existující řešení pro jednotlivé obvody a případně je upravit. Zde je nutné se detailně seznámit s každým řešením a jeho dokumentací, také zjistit jestli řešení neob- sahuje chyby a otestovat ho.

Druhou je napsat vlastní řešení od začátku. Využitím jazyku C, C++, jazyku symbolických instrukcí (assembler) nebo kombinací těchto jazyků.

Poslední možností je kombinací výše uvedených. Použít pouze některé části již existujících řešení a zbytek doimplementovat. Nebezpečím je zanesení chyb tímto způsobem do vlastní implementace.

Hlavním hlediskem při rozhodování je malá programová paměť cílového mikrokontroléru, o kterou se tato knihovna bude dělit z dalšími součástmi pro- jektu radiobudíku. Proto neuvažuji řešení psaná v jazyce C++, pro který sice existuje neúplný překladač, ale výsledná velikost bývá zpravidla větší. Jako je- diné uvedené existující řešení pro obvod BMP180 v jazyce C jeBMP180_driver [11], jedná se o ovladač operačního systému Linux a nelze ho použít. Bude užitečný jako cenný zdroj informací. Zvolila se tedy poslední možnost, kde se z existujících řešení použije jen ovladač pro I2C Master zařízení. Tento ovladač je dostupný jako příloha aplikační poznámky [17] k 8bitovým mikrokontrolé- rům na architektuře AVR. Knihovny pro obvody budou doimplementovány od začátku.

Vývoj knihovny (kromě I2C ovladače) se plánuje na jiné než cílové plat- formě, konkrétně na Raspberry Pi model B [18]. Raspberry Pi umožnuje pro- vozovat operační systém, které obsahují fungující ovladač pro I2C Master. To zajišťuje jednoduché ladění implementace na rozdíl od ATtiny85. Následně po odladění na Raspberry Pi se implementace přenese na cílovou platformu.

Programovacím jazykem implementace se zvolil jazyk C, jazyk assembler je platformě závislý a neumožnil by přenos odladěné knihovny z Raspberry Pi na ATtiny85. Vývojové prostředí pro ATtiny85 se zvolilo IDE Atmel Studio 6.2 s balíčkem AVR 8-bit GNU Toolchain 3.4.5. Tento nástroj poskytuje všechny potřebné nástroje pro vývoj a je ovladatelný přes GUI. Zvolený překladač podporuje zápis assembleru přímo do zdrojového kódu jazyka C.

22

(39)

Kapitola 2

Implementace knihovny

Kapitola popisuje kromě samotné implementace používanou vývojovou desku s mikrokontrolérem. Dále popisuje počítač Raspberry Pi, na kterém probíhal vývoj knihoven. Jsou zde také popsány použité výrazy pro výpočet teploty a tlaku ze senzoru. Na závěr kapitoly je uveden seznam funkcí a jejich velikost, kterou zabírají v programové paměti.

2.1 Knihovny

Knihovna je implementována jako čtyři samostatné části – knihovna pro každý obvod a I2C Master ovladač. Tím se zajistila lepší přehlednost zdrojového kódu a oddělení funkcí obvodů. Názvy knihovny jsou tea5767, bmp180 a ds1307. Jejich názvy značí, ke kterému obvodu patří. Knihovna pro I2C Master se nazývá tinyi2c.

2.2 Vývojová deska

Vývojová deska (obrázek 2.1) obsahuje mikrokontrolér ATtiny85 v patici, krys- talový oscilátor o frekvenci 12 MHz, USB konektor a ISP konektor. Na ISP konektor jsou vyvedeny piny PB0, PB1, PB2, PB5, napájecí napětí a zem od mikrokontroléru. Programování platformy se provádělo nástrojem Atmel AVRISP mkII, přes ISP rozhraní. Tento nástroj se připojuje přes USB a plně funguje v použitém integrovaném vývojovém prostředí Atmel Studio 6.2. Ná- stroj je schopen programovat flash paměť a EEPROM čipu.

2.3 Raspberry Pi

Raspberry Pi je počítač na jedné desce o velikosti platební karty. Byl vyvinut nadací Raspberry Pi. Dočkal se velké popularity a v současné době je v prodeji druhá verze. Umožňuje provoz operačních systému jako Linux a FreeBSD.

(40)

2. Implementace knihovny

Obrázek 2.1: Vývojová deska s ATtiny85

Konkrétně druhá revize modelu B (první verze) je postavená na čipu Broadcom BCM2835. Jedná se o systém na čipu (SoC), který integruje všechny komponenty počítače. Tento čip obsahuje jeden 32bitový ARMv6 procesor ro- diny ARM11 běžící na taktu 700Mhz, dále grafický koprocesor VideoCore IV a 512 MB operační paměti. Napájecí napětí je 5V.

Přítomné periferie jsou pozice na SD paměťovou kartu, HDMI výstup, dva USB porty, analogový audio výstup, kompozitní video výstup, 100 Mbit/s ethernet aj. Z paměťové karty se při zapnutí napájení čte zavaděč a počítač bez ní není schopen nastartovat. Na desce je tzv. GPIO konektor s 26 piny pro GPIO, UART, I2C Master, SPI, napětí 5 V a 3,3 V.

Výhodou zařízení je možnost běhu operačního systému, nízká pořizovací cena, možnost napájení z MicroUSB a vzdálené ovládání ze stolního počítače.

Také oba piny pro sběrnice I2C mají integrované výtažné odpory o hodnotě 1,8 kΩ připojené k napětí 3,3 V, jak je vidět na schéma [19].

2.4 Vývoj knihoven

První část vývoje probíhala na Raspberry Pi model B revize 2 s operačním systémem Raspbian. Raspbian je odvozen od OS Debian pro ARM procesory.

Pro překlad zdrojového kódu se používal překladač GCC 4.6.3 dostupný pro Raspbian. Raspberry Pi se ovládalo přes SSH protokol.

Nevýhodou tohoto přístupu je nemožnost použití specifických deklarací překladače a funkcí mikrokontroléru. Také je nutné mít stejné rozhraní knihovny tinyi2c, jako je rozhraní v jazyce C pro I2C komunikaci v OS Raspbian. Jinak není možné volně přenášet implementaci na ATtiny85.

Na Raspberry Pi se vyvíjely knihovnytea5767,bmp180ads1307. Knihovna tinyi2c se vyvíjela na ATtiny85 a její základ vychází z přílohy k aplikační poznámce [17], která implementuje ovladač pro TWI Master kompatibilní se 24

(41)

2.5. Výpočet teploty a tlaku

Obrázek 2.2: Ilustrační zapojení obvodů při vývoji

sběrnicí I2C. Části knihoven přistupující k EEPROM na ATtiny85 byly doim- plementovány po přenesení implementace. V době vývoje ovládacích knihoven a po něm se prováděly testy pro ověření správné funkce. Většinou se testovaly jednotlivé knihovní funkce samostatně. Výjimkou byla knihovna pro sběrnici I2C, která se otestovala jako celek. Testování probíhalo na Raspberry Pi i ATtiny85. Více o testování je v kapitole 3.

Použité vývojové zapojení s Raspberry Pi a obvody je ilustrováno na ob- rázku 2.2. Výtažné odpory jsou zde pro případ, kdy místo Raspberry Pi byl připojen mikrokontrolér. Současné paralelní zapojení s integrovanými odpory na Raspberry Pi není problém.

2.5 Výpočet teploty a tlaku

K získání teploty a tlaku ve správných fyzikálních jednotkách se použily níže uvedené výpočty z manuálu k obvodu [5]. Výpočty mají jako vstupní para- metry kalibračních koeficienty uvedené v tabulce 1.3 a přečtenou hodnotu ze senzoru.

(42)

2. Implementace knihovny

Výpočet teploty:

x1 = ((utac6ac5)/32768 (2.1) x2 = (mc·2048)/(x1+md) (2.2)

b5=x1+x2 (2.3)

teplota= (b5+ 8)/16 (2.4)

Výpočet tlaku, kde U P značí data získaná ze senzoru a oss je hodnota zvoleného režimu měření1:

b6=b5−4000 (2.5)

x1 = (b2·(b6·b6/4096))/2048 (2.6) x2 = (ac2·b6)/2048 (2.7)

x3=x1+x2 (2.8)

b3= ((((ac1·4 +x3oss) + 2)/4 (2.9) x1 = (ac3·b6)/8192 (2.10) x2 = (b1·(b6·b6/4096))/65536 (2.11) x3= ((x1+x2) + 2)/4 (2.12) b4= (ac4·(x3 + 32768))/32768 (2.13) b7 = (U P −b3)·(50000»oss) (2.14)

tlak=

( (b7·2)/b4 je-lib7 <0x80000000,

(b7/b4)·2 jinak. (2.15)

x1 = (tlak/256)·(tlak/256) (2.16) x1 = (x1·3038)/65536 (2.17) x2 = (−7357·tlak)/65536 (2.18) tlak =tlak+ (x1+x2+ 3791)/16 (2.19)

2.6 Optimalizace velikosti výsledného kódu

Optimalizace velikosti kódu se prováděla používáním co nejmenších datových typů. Omezilo se použití globálních proměnných, které svojí adresou zabírají místo v operační paměti a přístup k nim vyžaduje více instrukcí. Jednoduché funkce byly spojovány dohromady. Funkce, u kterých není návratová hodnota skutečně nutná, se nepoužila. Snižoval se počet ukazatelů na jednoduché pro- měnné, které se vejdou do registru. Používalo volání už existujících funkcí, pokud to vedlo ke snížení velikosti programu, a to i na úkor rychlosti vykoná- vání.

1Znaky«a»jsou ve významu bitového posunu vlevo respektive vpravo onpozic.

26

(43)

2.7. Seznam funkcí

2.7 Seznam funkcí

Seznamy funkcí jsou uvedeny v tabulkách 2.1, 2.2, 2.3 a 2.4. Velikost funkcí je při použití AVR 8-bit GNU Toolchain verze 3.4.5.1522 obsahující překladač GCC verze 4.8.1.

Tabulka 2.1: Knihovna tea5767

Funkce Velikost [bajt]

tea5767_init() 48

tea5767_isStereoReception() 20 tea5767_getSignalLevel() 38 tea5767_getFrequency() 86 tea5767_setFrequency() 164 tea5767_tuneFrequency() 92

tea5767_settings() 56

tea5767_enhancementsForWeakSignal() 28

tea5767_search() 270

tea5767_saveStationToPos() 46 tea5767_nameOfStationAtPos() 46

readData() 16

writeData() 16

tea5767_updatePLL() 38

964

Tabulka 2.2: Knihovna bmp180 Funkce Velikost [bajt]

bmp180_init() 76

bmp180_getTemperature() 158 bmp180_getPressure() 868 read16bRegister() 80

1182

Tabulka 2.3: Knihovna ds1307 Funkce Velikost [bajt]

ds1307_getTime() 98 ds1307_setTime() 52 ds1307_setupSqwRate() 54 204

(44)

2. Implementace knihovny

Tabulka 2.4: Knihovna tinyi2c Funkce Velikost [bajt]

i2c_init() 22

i2c_read() 104

i2c_write() 88

i2c_readRegister() 72 i2c_setSlaveAddress() 8

transferData() 36 writeAndCheckACK() 24 genStartCondition() 22 genStopCondition() 20 396

2.8 Velikost kódu implementace

Velikost implementace je pro knihovnutea5767964 B,bmp1801182 B,ds1307 204 B a tinyi2c396 B.

Celková velikost knihoven bez 2 ovladače je 2352 B, s ovladačem pro USI periferní obvod je velikost 2746 B.

28

(45)

Kapitola 3

Testování knihoven

Ovládací knihovny byly průběžně testovány pro ověření správné funkce. Větši- nou se testovaly jednotlivé knihovní funkce samostatně. Výjimkou byla knihovna pro sběrnici I2C, která se otestovala jako celek.

Cílová platforma nedává bez připojení k debuggeru téměř žádné informace a nebyly použity žádné nástroje pro odposlouchávání I2C komunikace. Použí- valo se tedy stejně jako pro vývoj počítače Raspberry Pi, kde se využívalo už existující funkční rozhraní pro I2C (identické s knihovnoutinyi2c). Kontrolní informace se díky operačnímu systému mohly vypisovat do konzole.

Po dokončení testování knihoven na Raspberry Pi se přenesla implemen- tace na ATtiny85. V rámci možností otestovala bezchybnost implementované komunikace přes sběrnici I2C a zároveň s tím i knihovna tea5767. Následně se ověřila funkčnost přenesených knihoven bmp180ads1307.

Všechny provedené testy na Raspberry Pi a ATtiny85 ve finále skončily úspěchem.

3.1 Knihovna tea5767

Všechny funkce v knihovně ve výsledku čtou nebo zapisují pět bajtů dat do nebo z FM tuneru. Toho se využilo při testování vypisováním těchto dat. Vět- šina funkcí je velice jednoduchá u rozsáhlejších se použilo dalších pomocných kontrolních výpisů konzoli. Vytvořil se jednoduchý ovládací program, který umožnoval ovládat FM tuner z konzole.

Jednotlivě se ověřily funkce od těch jednoduchých, které pouze mění nebo čtou bity v přenášeném bloku pěti bajtů. Těmi jsou naladění a čtení frekvence, nastavení audio výstupu, indikace stereo příjmu a zapnutí vylepšení pro příjem slabého signálu. Vždy se srovnávala očekávaná hodnota přenášených pěti bajtů dat s vypsanou hodnotou po zavolání dané funkce. Následně se ověřila funkce vyhledávání stanic a algoritmus pro volbu bitu HLSI. Mimo jiné se pro další ověřování použily funkce tea5767_IFcounterResulta tea5767_toggleHLSI vytvořené k ladění.

Odkazy

Související dokumenty

Název učebního materiálu: NXT programování robota – reakce na překážku (tlakový senzor).. Číslo učebního materiálu:

Název učebního materiálu: NXT programování robota – reakce na vzdálenost (ultrazvukový senzor).. Číslo učebního materiálu:

„OFF“ otevírá/zavírá ventil. Jako kontrolní prvek je zde senzor, který svým rozsvícením potvrzuje souhlasnou polohu přepínače a ventilu. Dále se nachází tlakové

Keywords: Sensor, measurement, oscillator, microcontroller.. Základní problematika senzorů. Základní parametry senzorů. Statické vlastnosti senzorů. Základní typy

Senzor, kterým se práce zabývá, by mohl být využit k relativně přesnému měření krátkých vzdáleností od vodivých povrchů za použití standardního vlnovodu R100 s

Původní zadání mé bakalářské práce bylo teoretické vypracování tématu „Teplotní senzor na principu NTC s CAN výstupem“. Avšak na první konzultaci ve

Tato firma vyvinula více senzorový data fusion algoritmus, který pomocí inerciálních senzorů je schopný zachytit pohyb těchto senzorů v prostoru a tím pádem i mapovat

32 U spirometru využívající turbínkový senzor budeme postupovat při měření shodně jako u spirometru využívajícího diferenciální senzor ale je zapotřebí