Mikroprocesorová technika a embedded systémy

Rozměr: px
Začít zobrazení ze stránky:

Download "Mikroprocesorová technika a embedded systémy"

Transkript

1 Mikroprocesorová technika a embedded systémy Počítačová cvičení doc. Ing. Tomáš Frýza, Ph.D. doc. Ing. Jiří Šebesta, Ph.D. Ing. Zbyněk Fedra, Ph.D. Ing. Petr Zelinka ÚSTAV RADIOELEKTRONIKY

2 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 1 Obsah 1 Vývojové prostředí AVR Studio, aritmetické operace Zadání Teoretické poznatky Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Ovládání LED diod, využití podprogramů Zadání Teoretické poznatky Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Obsluha přerušení Zadání Teoretické poznatky Externí požadavek na přerušení Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Interní časovač/čítač, generování PWM signálu Zadání Teoretické poznatky Přerušení od časovače/čítače Pulzně šířková modulace Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Programování v jazyce C, obsluha přerušení Zadání Teoretické poznatky Vyšší programovací jazyky Obsluha přerušení v jazyce C Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky

3 2 Mikroprocesorová technika a embedded systémy 6 Řízení komunikace s displejem Zadání Teoretické poznatky Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Zpracování analogových signálů Zadání Teoretické poznatky Analogově digitální převodník Zásuvný audio modul Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Sériový přenos dat Zadání Teoretické poznatky Asynchronní komunikace UART Sběrnice I2C Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Vývojové prostředí Code Composer Studio Zadání Teoretické poznatky Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Filtrace signálů, implementace FIR filtru Zadání Teoretické poznatky Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Diskrétní Fourierova transformace Zadání Teoretické poznatky Pokyny k zadání

4 Fakulta elektrotechniky a komunikačních technologií VUT v Brně Náměty pro další aplikace Shrnutí Kontrolní otázky Kombinace programování v jazyce C a v LJSA Zadání Teoretické poznatky Pokyny k zadání Náměty pro další aplikace Shrnutí Kontrolní otázky Literatura 69 A Manuál vývojového prostředí AVR Studio 72 A.1 Nový projekt a simulátor A.2 Programování cílového mikrokontroléru pomocí ISP B Základní popis jazyka C 76 B.1 Proměnné a operandy B.2 Podmíněný skok B.3 Cyklus v jazyce C B.4 Specifika překladače GCC a knihovny AVR Libc C Vývojová deska ATmega16 82 D Znaková sada LCD displeje 86

5 4 Mikroprocesorová technika a embedded systémy Seznam obrázků 2.1 Připojení LED diod na vývojové desce STK Princip tvorby PWM signálu Časový diagram generování PWM signálu Výběr programátoru AVRISP mkii Aplikace AVR Wizard pro nastavení řídicích registrů AVR Příklad zapojení 7segmentového displeje Zapojení LCD displeje na vývojové desce ATmega Nově definované znaky pro LCD displej Obvodové zapojení zásuvného audio modulu Struktura asynchronního rámce Časové průběhy na sběrnici I2C Freewarová aplikace Terminal pro ovládání sériového portu počítače Výběr simulátoru signálového procesoru TMS320C Vývojové prostředí Code Composer Studio firmy Texas Instruments Grafický nástroj fdatool v prostředí Matlab pro návrh filtrů Aplikace Soundcard Scope pro generování a analýzu signálů Výpočet 8bodové FFT s využitím DIF (Decimation in Frequency) Interní nástroj CCS pro hodnocení početní náročnosti algoritmů A.1 Vytvoření nového projektu v prostředí AVR Studio A.2 Výběr ladícího nástroje a cílového mikrokontroléru A.3 Vývojové prostředí AVR Studio s vytvořeným projektem A.4 Ladící prostředí AVR Studia A.5 Dialogové okno pro programování mikrokontroléru ATmega B.1 Anatomie programu v jazyce C C.1 Zapojení vývojové desky Development Board ATmega D.1 Znaková sada LCD displeje

6 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 5 Seznam tabulek 3.1 Přehled vektorů přerušení pro mikrokontrolér ATmega Způsob spouštění externích přerušení INTn (registr MCUCR) Nastavení předděličky časovače/čítače 0 (registr TCCR0) Přehled vektorů přerušení pro mikrokontrolér ATmega16 v jazyce C Vybrané příkazy pro komunikaci s LCD displejem Soupis vybraných funkcí z knihovny pro LCD Princip využití kruhové paměti Vybrané instrukce signálového procesoru TMS320C B.1 Základní typy a rozsahy hodnot proměnných v jazyce C B.2 Základní aritmetické operace v jazyce C B.3 Bitové a logické operace v jazyce C B.4 Relační operandy v jazyce C C.1 Seznam součástek vývojové desky Development Board ATmega

7 6 Mikroprocesorová technika a embedded systémy Seznam zdrojových kódů 1.1 Jednoduchá aplikace pro mikrokontrolér AVR Příklad zdrojového kódu pro AVR Aplikace s LED diodami pro mikrokontrolér AVR Definice zásobníku Kostra aplikace využívající externí zdroj přerušení Kostra aplikace využívající externí zdroj přerušení v jazyce C Úsek kódu v jazyce C Kostra aplikace pro ovládání 7segmentového displeje Kombinace výpisu řetězce a hodnoty na znakový displej Řízení komunikace prostřednictvím sériové sběrnice I2C Výpočet skalárního součinu vektorů pro TMS320C Realizace kruhové paměti Realizace číslicového filtru typu FIR Ovládání LED diod a přepínačů Funkce pro ovládání LED diod a přepínačů Implementace DFT na signálový procesor TMS320C Výpočet skalárního součinu v LJSA Implementace FFT na signálový procesor TMS320C B.1 Hlavní funkce aplikace v jazyce C B.2 Deklarace a plnění proměnných v jazyce C B.3 Základní větvení programu B.4 Větvení programu pomocí switch a case B.5 Cyklus pomocí for B.6 Cyklus pomocí while B.7 Realizace nekonečné smyčky B.8 Realizace nekonečné smyčky v aplikaci s přerušením B.9 Nejpoužívanější funkce z knihovny AVR Libc

8 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 7 1 Vývojové prostředí AVR Studio, aritmetické operace Test předchozích znalostí 1. Jaké jsou hlavní rozdíly von Neumannovy a Harvardské architektury. 2. Jakým způsobem lze převádět hodnoty z binární soustavy do hexadecimální, příp. do soustavy desítkové? 3. Jaké instrukce lze u mikrokontroléru AVR použít k výpočtu součtu, součinu a rozdílu dvou hodnot? Cíle počítačového cvičení Cílem počítačového cvičení je osvojení si práce s vývojovým prostředím AVR Studio. Toto prostředí je určené pro psaní a ladění aplikací, stejně jako pro programování mikrokontrolérů typu AVR. Současně má cvičení za cíl umožnit studentům proniknout do způsobů vývoje a testování jednoduchých aplikací, určených pro 8bitový mikrokontrolér ATmega Zadání 1. Seznamte se s vývojovým prostředím AVR Studio pro programování a ladění aplikací s mikrokontroléry AVR. Vytvořte aplikaci pro výpočet skalárního součinu dvou vektorů s = a b v jazyce symbolických adres (JSA). 2. Pomocí integrovaného ladícího nástroje analyzujte správnou funkci vytvořené aplikace. 3. Proved te ruční překlad jedné instrukce z vašeho programu. Výsledek zkontrolujte s počítačovým překladem. 4. Vytvořte program pro realizaci součinu hodnot dvou komplexních čísel. 1.2 Teoretické poznatky V číslicových soustavách, tedy i v mikroprocesorové technice, jsou hodnoty reprezentovány vždy v binární soustavě, tj. rozlišují se jen dva stavy. Vzhledem k faktu, že zápis hodnot v binární podobě je rozsáhlý a nepříliš přehledný, používá se pro lepší kompaktnost zápisu soustava hexadecimální. V této soustavě je možné každou čtveřici bitů nahradit jediným symbolem z množiny 0, 1,..., 9, A,..., F. Poslední číselnou soustavou, která se nejčastěji používá v mikroprocesorové technice je soustava desítková. V této soustavě jsou zpravidla vyžadovány vstupní a výstupní hodnoty pro uživatele; např.: hodnoty operandů na kalkulačce, zobrazená velikost měřeného napětí, čas na digitálních hodinách a podobně. Historie mikrokontrolérů sahá do poloviny sedmdesátých let 20. století, od kdy se vývoj v mikroprocesorové technice rozdělil na dva proudy. První směr vede ke zvyšování početního výkonu procesorů, větších kapacit i rychlostí pamětí, apod. Do této kategorie patří např. mikroprocesory z oblasti PC techniky. Druhý proud směřoval k integraci všech

9 8 Mikroprocesorová technika a embedded systémy potřebných obvodů do jediné součástky. O mikrokontrolérech (MCU Microcomputer Unit) tedy hovoříme jako o mikroprocesorech, doplněných o obvody pamětí a přídavných periferií, umístěných na jediném čipu (součástce). Takto vytvořený obvod je následně schopen řídit jednoduché aplikace z oblasti spotřební elektroniky, audio-video techniky, zabezpečovacích zařízení, obsluhy klávesnic a myší v PC technice, v automobilovém průmyslu (řídicí jednotky motorů, ABS,...) a v mnoha dalších technických oblastech [Van03]. V současné době existuje celá řada výrobců, kteří produkují mikrokontroléry s různou strukturou. Kromě nejstarší a patrně nejrozšířenější řady 51 firmy Intel, jsou běžné také produkty firmy Microchip (PIC), Freescale (HCS08, HC11,...), či Atmel (AVR). Mikrokontroléry AVR obsahují 32 identických 8bitových registrů pro běžné použití (označované R0 až R31), které mohou obsahovat jak data, tak i adresy. Pamět ový prostor mikrokontroléru dále obsahuje 64 adres vstupně/výstupních registrů, které slouží k periferním funkcím jako jsou řídicí registry jádra MCU, časovače/čítače, A/D převodníky a další (podrobněji o I/O registrech v následujících počítačových cvičeních). Aplikace pro MCU lze vyvíjet v jazyce symbolických adres nebo v jazyce C. Úvodní cvičení budou zaměřena na programování v jazyce symbolických adres. Jednoduchá aplikace pro AVR je zobrazena ve výpise 1.1. Zdrojový kód 1.1: Jednoduchá aplikace pro mikrokontrolér AVR. 1. include <m16def. inc> ; d e f i n i č n í soubor mikrokontroléru ATmega LDI R16, 0xA0 ; naplnění r e g i s t r u R16 hodnotou LDI R17, 40 ; R17 = 40 5 ADD R16, R17 ; součet hodnot r e g i s t r ů : R16 = R16 + R loop : ; ukončení a p l i k a c e 8 RJMP loop ; nekonečná smyčka 1.3 Pokyny k zadání Bod 1. Ve vývojovém prostředí AVR Studio vytvořte zdrojový kód v JSA pro mikrokontrolér ATmega16, který umožní naplnění dvou čtveřic 8bitových registrů každá čtveřice bude reprezentovat prvky vstupních vektorů a = (a 3, a 2, a 1, a 0 ) a b = (b 3, b 2, b 1, b 0 ). Pro výpočet skalárního součinu využijte instrukce mikrokontroléru ATmega16 pro aritmetické operace bez přenosu a z důvodu zjednodušení neuvažujte možnost překročení maximálního rozsahu hodnot pro 8bitový výsledek. Hodnoty prvků vektorů zadejte v desítkové, hexadecimální i v binární podobě a uložte je přímo do zvolených pracovních registrů! Zdrojový kód přeložte do strojového jazyka. Stručný manuál pro práci s prostředím AVR Studio naleznete v příloze A. Bod 2. Korektní funkci programu vyzkoušejte v integrovaném simulátoru. Přepněte se do ladícího režimu a krokováním programu (např. klávesou F11 ) ověřte správnou funkci vaší aplikace. Bod 3. Vyučující vám zadá jednu instrukci z vašeho programu a pomocí manuálu instrukční sady mikrokontrolérů AVR [Atm02] ji ručně přeložte do strojového kódu.

10 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 9 Výsledek zkontrolujte s automatickým překladem programu AVR Studio. Zobrazit strojový kód lze v ladicím módu například příkazem View Disassembler (tlačítko ). Z kolika bitů se skládá jedna instrukce mikrokontroléru AVR? Bod 4. Vytvořte nový projekt pro mikrokontrolér ATmega16 a v JSA naprogramujte aplikaci, která bude realizovat součin hodnot dvou komplexních čísel zadaných ve složkovém tvaru. Pro reálné i imaginární složky uvažujte celá neznaménková čísla, která si zvolíte. Je vhodné volit čísla menší, aby při dílčích aritmetických operacích nedošlo k přetečení a tím k obtížné kontrole správnosti výsledků. Pro každou z komplexních částí vstupních a výstupních hodnot vyčleňte jeden 8bitový registr. Celkem tedy vstupní a výstupní data zaberou šest registrů (reálná a imaginární část pro dvě vstupní čísla a jeden výsledek). Pro připomenutí je součin dvou komplexních čísel a a b definován rovnicí a b = R{a} R{b} I{a} I{b} + (R{a} I{b} + I{a} R{b}) j, (1.1) kde R{a} reprezentuje reálnou část a I{a} imaginární část komplexního čísla a a j je imaginární jednotka. Vypočtenou hodnotu zkontrolujte ručním výpočtem, příp. v programu Matlab. Kolik instrukcí obsahuje váš program pro výpočet součinu komplexních čísel? Jak velkou část paměti program zabírá? Kolik pracovních registrů využíváte celkem? 1.4 Náměty pro další aplikace Naprogramujte algoritmy pro vzájemný převod mezi číselnými soustavami, používanými v mikroprocesorové technice. 1.5 Shrnutí Počítačové cvičení bylo koncipováno jako úvod do vývoje aplikací pro mikrokontrolér ATmega16. Jeho úkolem bylo přiblížit studentům tvorbu programu v jazyce symbolických adres, správné použití základních instrukcí, překlad instrukcí do strojového kódu a ladění programu pomocí interního simulátoru v prostředí AVR Studio. Hlavní důraz byl kladen na užití instrukcí aritmetických operací a operací pro přesun dat. 1.6 Kontrolní otázky Otázka 1.1 Kolik registrů obsahuje mikrokontrolér ATmega16 a jakým způsobem lze v programu AVR Studio zobrazit jejich obsah? Otázka 1.2 Je následující posloupnost instrukcí syntakticky i sémanticky korektní? Doplňte komentáře k jednotlivým instrukcím. Zdrojový kód 1.2: Příklad zdrojového kódu pro AVR. 1 math : ; 2 LDI R15, 1F ; 3 LDI R17, 25 ; 4 ADD R16, R15 ; 5 SUB R16, R17 ;

11 10 Mikroprocesorová technika a embedded systémy Otázka 1.3 Jaká jsou pravidla pro psaní programátorsky-přehledných zdrojových kódů? Otázka 1.4 Jakým způsobem se korektně ukončí program u mikrokontrolérů AVR? Otázka 1.5 Do jakých registrů se ukládá výsledek součtu a součinu?.

12 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 11 2 Ovládání LED diod, využití podprogramů Test předchozích znalostí 1. Jak lze u mikrokontroléru ATmega16 definovat směr komunikace jednotlivých pinů? 2. Jak je možné v mikroprocesorové technice snadno testovat, zda je výsledek aritmetické operace roven nule? Jak lze tento postup využít pro realizaci cyklu? 3. Jakými instrukcemi se volá podprogram a jak je zajištěn bezpečný návrat z něj? 4. Jakou funkci má programový čítač (Program Counter), ukazatel na zásobník (Stack Pointer) a zásobník (Stack)? Cíle počítačového cvičení Cílem počítačového cvičení je využití mikrokontrolérů k řízení jednoduchých procesů prostřednictvím paralelních I/O portů. Dále je cílem cvičení realizace podmíněných skoků a volání podprogramů v jazyce symbolických adres. 2.1 Zadání 1. V jazyce symbolických adres AVR sestavte a ověřte jednoduchou aplikaci pro rozsvícení zvolených LED diod, které jsou připojeny k I/O portu mikrokontroléru. 2. Vytvořte 8bitový binární čítač a jeho hodnotu zobrazte pomocí LED diod. Realizujte zpoždění chodu čítače pomocí podprogramu. 3. Ověřte funkci zásobníku při volání podprogramu. 2.2 Teoretické poznatky Všechny vstupně/výstupní porty (I/O brány) mikrokontroléru ATmega16 mohou být použity jako obecné číslicové vstupy/výstupy a současně mohou tvořit rozhraní k jednotlivým periferiím implementovaným na čipu procesoru. Tyto periferie jsou ve schématickém znaku definovány popisem pinu v závorce; např. PA0 (ADC0) označuje nejnižší pin na portu A a současně nejnižší kanál interního A/D převodníku. Tímto způsobem jsou řešeny I/O obvody všech mikrokontrolérů. Jednotlivé I/O piny procesorů řady AVR jsou řešeny tzv. Read-Modify-Write architekturou, tj. směr toku dat a stav jednotlivých I/O pinů lze libovolně měnit nezávisle na ostatních pinech. Pro práci s I/O bránami, aplikovanými jako obecné číslicové vstupy/výstupy, slouží skupina konfiguračních registrů. U mikrokontroléru AVR jsou pro tyto účely k dispozici následující registry (symbol n definuje název portu A, B, C nebo D): DDRn (Data Direction Registr) určuje směr toku dat, zápisem hodnoty 0 na příslušný bit tohoto registru konfigurujeme I/O pin jako vstupní, zápisem hodnoty 1 jako výstupní. PORTn je datovým registrem portu a odpovídá hodnotě zapsané do vyrovnávacího registru portu, tedy hodnotě kterou zapisujeme na příslušný pin (vývod) brány.

13 12 Mikroprocesorová technika a embedded systémy PINn (Pins Input) je určen pro čtení a odpovídá hodnotě přečtené (synchronizované) z příslušného pinu (log. úroveň signálu přivedená z vnějších obvodů na tento pin). V architektuře AVR jsou definovány další registry pro práci s I/O branami umožňující konfiguraci pull-up rezistorů, nastavení vysoké impedance, apod. Pro naši práci však budou prozatím postačovat výše uvedené registry. Pro často se opakující úseky zdrojového kódu se využívají makra nebo podprogramy. Makra jsou realizována pomocí překladače, kdy se do zdrojového kódu vkládá požadovaná posloupnost instrukcí. Takto psané aplikace tedy zabírají větší část programové paměti. Jejich výkon je ale rychlejší. Podprogram se odlišuje tím, že je v paměti obsažen pouze jednou a při každém použití se tzv. volá, tj. skáče se na místo v paměti, kde je uložen. Po vykonání celého podprogramu, řídicí jednotka zajistí skok na místo, odkud byl podprogram volán návrat z podprogramu. Skoky a návraty z podprogramů způsobují delší dobu výkonu oproti makru. Při volání podprogramu je také nutné uložit tzv. návratovou adresu, tj. pamět ovou pozici kde bude výkon programu pokračovat po návratu z podprogramu. Návratová adresa se ukládá do zásobníku, pro který je vyčleněna část datové paměti SRAM. 2.3 Pokyny k zadání Bod 1. Ve vývojovém prostředí vytvořte nový projekt v jazyce symbolických adres (v kolonce Project type je nutné vybrat volbu Atmel AVR Assembler). V zadané aplikaci je úkolem rozsvítit LED diody zapojené k I/O bráně. Postup je tedy zřejmý, nejprve zápisem do registru DDRn zapíšete konfigurační hodnotu tak, aby příslušné piny dané I/O brány, k nimž jsou LED diody připojeny, byly nastaveny jako výstupní (hodnota 1). Zápisem do příslušného registru PORTn pak definujeme, která z těchto LED diod bude svítit. Pro zápis do registrů periferií (I/O registry) se využívá instrukce OUT, pro čtení pak instrukce IN. Z hlediska hardwarového je tedy nutno vědět jak jsou LED diody k I/O vývodům mikrokontroléru připojeny (viz např. obrázek 2.1). Obrázek 2.1: Připojení LED diod na vývojové desce STK500 [Atm06]. Další důležitou informací při připojování dalších obvodů k I/O pinům je proudová zatížitelnost jednotlivých pinů. Ta je uvedena v katalogovém listu mikrokontroléru a je specifikována jak pro logickou úroveň výstupu 0, tak i 1 a obvykle se tyto hodnoty liší. Současně je třeba kontrolovat také celkový odběr všech připojených obvodů k I/O portům mikrokontroléru, aby nebyla překročena celková dovolená výkonová ztráta na čipu (najdeme ji opět v katalogovém listu a obvykle je definována v závislosti na provozní teplotě okolí).

14 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 13 Pro tuto počítačovou úlohu bude využita vývojová deska STK500 firmy Atmel, připojená k počítači prostřednictvím sériového rozhraní RS-232. Zapojení desky a její popis je uveden v [Atm03]. Vývojová deska umožňuje programovat celou řadu mikrokontrolérů typu AVR. Pro naše potřeby byl vybrán mikrokontrolér ATmega16. K I/O branám procesoru lze pomocí propojek připojovat různé periferní obvody. S ohledem na zadání je port B připojen k sadě LED diod. Propojení neměňte. Nedílnou částí vývojové desky je programovací modul mikrokontroléru, tedy jednotka umožňující naprogramovat mikrokontrolér přímo z prostředí AVR Studio. Tato programovací jednotka umožňuje bezprostřední programování mikrokontroléru zapojeného v reálném systému. Není tedy nutné mikrokontrolér vytahovat či vypajovat z cílového hardwaru. Tento způsob programování je označován zkratkou ISP (In System Programming). V příloze A.2 je stručně ukázáno jak vaši sestavenou, přeloženou a případně odladěnou aplikaci v simulátoru AVR Studia naprogramovat do fyzického mikrokontroléru prostřednictvím ISP. LED diody jsou propojeny s portem B. Všechny LED diody jsou nízkopříkonové (cca 2 ma v propustném směru), což bezpečně vyhovuje parametrům zatížitelnosti mikrokontroléru ATmega16. Zvolte si, které LED rozsvítíte. Můžete využít kostry zdrojového kódu 2.1. Zdrojový kód 2.1: Aplikace s LED diodami pro mikrokontrolér AVR. 1. include <m16def. inc> ; d e f i n i č n í soubor mikrokontroléru ATmega LDI... ; d e f i n i c e výstupního portu 4 OUT DDR?... ; p o u ž i j t e správný název směrového r e g i s t r u 5 LDI... ; r o z s v í c e n í zvolených LED diod 6 OUT PORT?... ; p o u ž i j t e správný název výstupního r e g i s t r u 7 8 loop : ; nekonečná smyčka 9 RJMP loop ; skok na n á v ě š t í loop Bod 2. Binární čítač vytvořte pomocí nekonečné smyčky, ve které budete inkrementovat obsah 8bitové proměnné, tu odesílejte na výstupní port a tím zobrazte pomocí LED diod. Ošetření přetečení maximální hodnoty dané 8 bity neuvažujte. Aby byly změny čítače patrné, je nutno do programu zařadit tzv. zpožd ovací smyčku, která zajistí prodloužení doby trvání jednoho stavu. Zpožd ovací smyčku vytvořte pomocí cyklu s vysokým počtem opakování. Tuto operaci vložte do podprogramu. Kolik opakování obsahuje vaše zpožd ovací smyčka? Vypočtěte dobu trvání podprogramu. Teorie volání a návratů z podprogramů byla probrána na přednášce. Připomeňme jen, že ke správné funkci podprogramu musí být část datové paměti vyhrazena pro zásobník. Definici zásobníku je možné naprogramovat dle zdrojového kódu 2.2. Bod 3. Aplikaci z předchozího bodu spust te v simulátoru a při krokování si poznačte hodnoty ukazatele na zásobník (SP), programového čítače (PC) a návratovou adresu před prvním voláním podprogramu. Po skoku do podprogramu pak zjistěte změny PC a SP. Jaká data jsou uložena v zásobníku? Obsah paměti je možné zobrazit volbou View Memory.

15 14 Mikroprocesorová technika a embedded systémy Zdrojový kód 2.2: Definice zásobníku. 1 stack_definition : ; d e f i n i c e zásobníku na konec paměti SRAM 2 LDI R16, LOW ( RAMEND ) ; do R16 ulož n i ž š í byte p o s l e d n í adresy SRAM 3 OUT SPL, R16 ; SPL ( n i ž š í byte Stack Pointeru ) = R16 4 LDI R16, HIGH ( RAMEND ) ; R16 = v y š š í byte p o s l e d n í adresy SRAM 5 OUT SPH, R16 ; SPH ( v y š š í byte Stack Pointeru ) = R Náměty pro další aplikace Naplnění dat do SRAM pomocí direktiv. Práce s těmito daty v hlavním programu např. modifikace funkcí z počítačového cvičení 1. Vytvoření podprogramu pro výpočet celočíselné odmocniny s použitím bitových posunů. Ověřte rozdíly mezi voláním podprogramu a makrem. Vytvořte nový projekt v JSA. Aplikace bude obsahovat hlavní funkci, makro a podprogram. Makro i podprogram necht realizují součet dvou komplexních čísel. V hlavní části aplikace pak definujte zásobník a postupně spust te/volejte 5 vytvořené makro a podprogram. Aplikaci otestujte v simulátoru. Jak velkou část programové paměti zabírají makra a jakou podprogram? Kolik cyklů trvá výkon všech maker a kolik cyklů trvá výkon všech podprogramů? Pro větší přehlednost je možné v kódu využít direktivu specifikující adresu, kde má být podprogram uložen, např..org 0x0100 pro adresu 0x Shrnutí Počítačové cvičení umožňuje studentům osvojení si použití vstupně/výstupních portů pro obsluhu jednoduchých periferních zařízení. Rovněž představuje tvorbu a programování aplikací pro reálné mikrokontroléry, včetně použití podprogramů a maker pro efektivnější zápis zdrojového kódu. 2.6 Kontrolní otázky Otázka 2.1 Jmenujte alespoň pět direktiv překladače a k čemu konkrétně slouží? Otázka 2.2 Jaké značky se používají pro přehledný zápis funkce programu prostřednictvím vývojových diagramů (zahájení/ukončení, přiřazení, cyklus, podmínka, volání podprogramu)? Nakreslete vývojový diagram aplikace z bodu 2. Otázka 2.3 Popište průběh ukládání návratové adresy při volání podprogramu.

16 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 15 3 Obsluha přerušení Test předchozích znalostí 1. V jakém pamět ovém segmentu a od jaké adresy se nachází všechny řídicí (I/O) registry mikrokontroléru ATmega16? Jaký je rozdíl mezi I/O registry a pracovními registry? 2. Jaké jsou rozdíly mezi podprogramem a obsluhou přerušení? 3. Jmenujte nutné podmínky, které musí být splněny k zahájení obsluhy libovolného přerušení. Cíle počítačového cvičení Cílem počítačového cvičení je osvojení si práce s přerušením mikrokontroléru v jazyce symbolických adres. Konkrétně bude využit externí požadavek na přerušení od tlačítka. 3.1 Zadání 1. Seznamte se s hledáním informací v anglickém katalogovém listě k mikrokontroléru ATmega16. Vyhledejte potřebné informace k nastavení a povolení externího přerušení od tlačítka. 2. V JSA naprogramujte aplikaci 8bitového čítače řízeného externím přerušením. 3. Proved te ošetření stisku tlačítka. 3.2 Teoretické poznatky Úvodní část programové paměti je u mikrokontrolérů zpravidla vyhrazena pro tzv. vektory přerušení. Tyto vektory popisují činnost systému v případě akutních událostí. Pokud dojde u mikroprocesoru k události, která vyvolává přerušení, mikrokontrolér se podívá na konkrétní místo v programové paměti (právě do oblasti vektorů přerušení) a hledá zde program obsluhy vzniklé situace. Z pochopitelných důvodů se do této oblasti nevkládá celý program obsluhy přerušení, ale jen skok na začátek tohoto programu. Počet vektorů přerušení se liší pro jednotlivé procesory (hlavně podle jejich hardwarové vybavenosti). Pro námi používaný mikrokontrolér ATmega16 firmy Atmel lze soupis všech vektorů přerušení nalézt v tabulce 3.1. Typ přerušení, který obsahují všechny systémy je tzv. reset. K němu dojde po připojení napájecího napětí nebo po zresetování systému externím signálem (zpravidla nízkou úrovní). Jelikož po zapnutí systému začne mikroprocesor vykonávat instrukce od začátku programové paměti, je vektor přerušení pro reset umístěn právě na adrese 0x0000. Skoky na příslušné obslužné programy lze realizovat například instrukcí RJMP, jak naznačuje zdrojový kód 3.1. Veškerá přerušení je nutné předem povolit v odpovídajících řídicích registrech a navíc povolit globální přerušení ve stavovém registru SREG (Status Register), což lze přímo provést instrukcí SEI. Při aktivaci přerušení jsou po dobu vykonání obsluhy jednoho přerušení ostatní přerušení obecně zakázána. Obsluhu přerušení je nutné ukončit příkazem

17 16 Mikroprocesorová technika a embedded systémy Tabulka 3.1: Přehled vektorů přerušení pro mikrokontrolér ATmega16. Č. Adresa Zdroj přerušení Popis přerušení 1 0x0000 RESET Externí reset, připojení napájení, x0002 INT0 Externí požadavek na přerušení x0004 INT1 Externí požadavek na přerušení x0006 TIMER2 COMP Časovač/čítač 2 shoda komparace. 5 0x0008 TIMER2 OVF Časovač/čítač 2 přetečení. 6 0x000A TIMER1 CAPT Časovač/čítač 1 zachycení. 7 0x000C TIMER1 COMPA Časovač/čítač 1 shoda s komparátorem A. 8 0x000E TIMER1 COMPB Časovač/čítač 1 shoda s komparátorem B. 9 0x0010 TIMER1 OVF Časovač/čítač 1 přetečení. 10 0x0012 TIMER0 OVF Časovač/čítač 0 přetečení. 11 0x0014 SPI, STC Dokončení sériového přenosu SPI. 12 0x0016 USART, RXC USART kompletní příjem dat. 13 0x0018 USART, UDRE USART prázdný datový registr. 14 0x001A USART, TXC USART kompletní vyslání dat. 15 0x001C ADC ADC dokončení A/D převodu. 16 0x001E EE RDY EEPROM komunikace připravena. 17 0x0020 ANA COMP Změna výstupu analogového komparátoru. 18 0x0022 TWI Událost na sériové sběrnici I2C. 19 0x0024 INT2 Externí požadavek na přerušení x0026 TIMER0 COMP Časovač/čítač 0 shoda komparace. 21 0x0028 SPM RDY Uložení do programové paměti připraveno. RETI (návrat na místo v programu, kdy přišel požadavek na přerušení), který sám opět povolí ostatní přerušení (jedná se o obdobu instrukce RET u návratu z podprogramu). Stejně jako u volání podprogramu je i u obsluhy přerušení nutné předem uložit návratovou adresu. Opět se využije část paměti RAM, která představuje zásobník, tj. na začátku aplikace je nutné jej definovat! Řazení jednotlivých vektorů přerušení v programové paměti zároveň udává jejich prioritu: nejnižší adresa (reset) odpovídá nejvyšší prioritě, atd Externí požadavek na přerušení Externí zdroje přerušení jsou označovány jako INT0, INT1 a INT2 a mohou být přivedeny na odpovídající trojici konkrétních pinů mikrokontroléru ATmega16. Zajímavostí je, že přerušení funguje, i když jsou samotné piny nastaveny jako výstupní. Každé přerušení má odpovídající maskovací bit, který umožňuje povolení či zákaz daného přerušení. Pro všechny tři zdroje externího přerušení se tyto maskovací bity nachází v kontrolním registru GICR (General Interrupt Control Register). Bit INT1 povoluje přerušení od zdroje INT1, atd. Pro povolení daného přerušení je tedy třeba nastavit odpovídající maskovací bit (na hodnotu 1). Dále je nutné specifikovat, za jakých podmínek se bude externí přerušení

18 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 17 Zdrojový kód 3.1: Kostra aplikace využívající externí zdroj přerušení. 1. include <m16def. inc> ; d e f i n i č n í soubor mikrokontroléru ATmega16 2. cseg ; pamět ový segment Flash 3. org 0x0000 ; ulož od adresy 0 x RJMP reset ; skoč na n á v ě š t í r e s e t 5. org 0x0002 ; adresa e x t e r n í h o p ř e r u š e n í INT0 6 RJMP citac ; skoč na n á v ě š t í c i t a c 7 8. org 0x002A ; ulož od adresy 0x002A 9 reset : ; d e f i n i c e zásobníku ; naplnění I /O r e g i s t r ů 12 SEI ; g l o b á l n í p o v o l e n í všech p ř e r u š e n í loop : ; nekonečná smyčka 15 RJMP loop ; skok na n á v ě š t í loop citac : ; začátek e x t e r n í h o p ř e r u š e n í INT ; kód obsluhy e x t e r n í h o p ř e r u š e n í INT0 19 RETI ; ukončení obsluhy p ř e r u š e n í generovat. To lze zajistit pomocí bitů ISCn1 a ISCn0 ( n je označení zdroje přerušení, tj. 0, 1, nebo 2) v registru MCUCR (MCU Control Register). Chceme-li např. generovat externí přerušení INT1 s každou vzestupnou hranou, je nutné nastavit bity ISC11 a ISC10 v tomto registru. Význam jednotlivých nastavení je znázorněn v katalogovém listu mikrokontroléru, či v tabulce 3.2. Tabulka 3.2: Způsob spouštění externích požadavků na přerušení INT0 a INT1 prostřednictvím kontrolního registru MCUCR. ISCn1:0 0b00 0b01 0b10 0b11 Popis funkce Nízká úroveň (log. 0) na pinu INTn generuje požadavek. Jakákoliv změna logické úrovně na pinu INTn generuje požadavek. Sestupná hrana na pinu INTn generuje požadavek. Vzestupná hrana na pinu INTn generuje požadavek. 3.3 Pokyny k zadání Bod 1. V katalogovém listu k mikrokontroléru ATmega16 [Atm16] vyhledejte kapitolu týkající se přerušení (anglicky: Interrupts), případně externího přerušení (External Interrupts). K nastavení externího přerušení je nutné naplnit dva řídicí registry, konkrétně GICR a MCUCR. Vyhledejte si význam jednotlivých bitů těchto registrů a připravte si bitová slova, kterými naplníte tyto registry. Událost, která bude přerušení spouštět si zvolte. Využijte externí přerušení INT0 nebo INT1 generované tlačítkem na pinu PD2 nebo PD3. Nastavujte pouze bity, o kterých byla řeč výše; všechny ostatní ponechte v hodnotě 0. Bod 2. Ve vývojovém prostředí AVR Studio vytvořte nový projekt a v JSA naprogramujte

19 18 Mikroprocesorová technika a embedded systémy aplikaci 8bitového binárního čítače, jehož stav zobrazujte pomocí LED diod na vývojové desce STK500. Změnu stavu čítače realizujte pomocí tlačítka, které bude spouštět externí přerušení INT0 nebo INT1. Využijte nastavení kontrolních registrů GICR a MCUCR z předchozího bodu. Jedná se o I/O registry, proto k jejich naplnění použijte kombinaci instrukcí LDI a OUT. Nezapomeňte definovat zásobník, výstupní port s LED diodami a povolit globální přerušení. Inspirujte se zdrojovým kódem 3.1. Bod 3. Stisk mechanického tlačítka ošetřete krátkým zpožděním. Pro zpoždění použijte podprogram z počítačového cvičení 2. Nakreslete vývojový diagram ošetření stisku tlačítka. Řídicí jednotka mikrokontroléru identifikuje požadavek na přerušení prostřednictvím příznakového bitu. Každý zdroj přerušení má svůj jedinečný příznakový bit. Externí požadavek na přerušení je signalizován bitem v příznakovém registru GIFR (General Interrupt Flag Register) pozor, neplést s GICR! Aby bylo zabráněno opakovanému spuštění obsluhy přerušení, je nutné odpovídající příznakový bit nulovat na konci obslužné rutiny (tj. před instrukcí RETI). Způsob nulování příznakového bitu nastudujte z katalogového listu. 3.4 Náměty pro další aplikace Vytvořte aplikaci s dvojicí externích zdrojů přerušení reagující na náběžnou hranu. Napište obsluhy obou přerušení. První bude mít za úkol změnu stavu 7bitového binárního čítače; druhá obslužná rutina bude nastavovat směr čítání ten signalizujte nevyužitou LED diodou. Aplikace ošetření stisku tlačítka, která bude schopna rozlišit krátký a dlouhý stisk a na základě toho spustit dvojici obslužných funkcí. 3.5 Shrnutí Počítačové cvičení umožnilo studentům proniknout do problematiky obsluhy přerušení mikrokontrolérů. Konkrétně byly popsány vektory přerušení a využití externího zdroje přerušení od tlačítka. Studenti měli možnost vyzkoušet si programování a testování aplikací v jazyce symbolických adres. 3.6 Kontrolní otázky Otázka 3.1 Kam a jakým způsobem se ukládají návratové adresy při volání obsluhy přerušení? Otázka 3.2 Nakreslete vývojový diagram aplikací z kapitoly 3.4. Otázka 3.3 Jaký je rozdíl mezi významem bitů v kontrolních registrech GICR a GIFR?

20 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 19 4 Interní časovač/čítač, generování PWM signálu Test předchozích znalostí 1. K jakým jednoduchým aplikacím lze využít funkce čítání, časování a komparace interního časovače/čítače? 2. Jaké hodnoty obsahují pravdivostní tabulky logických operátorů AND, OR, EX- OR? Jaký je aritmetický dopad bitového posuvu vlevo a vpravo? Jaké instrukce AVR realizují všechny zmíněné bitové operace? 3. Na čem závisí rychlost přetečení libovolného časovače/čítače? 4. Vysvětlete pojem PWM a diskutujte možnosti využití. Cíle počítačového cvičení Cílem počítačového cvičení je nastavování řídicích I/O registrů a hledání informací v anglické dokumentaci. Cíle budou využity v aplikaci s přerušením od časovače/čítače a při generování PWM signálu. 4.1 Zadání 1. Procvičte si hledáním informací v anglickém katalogovém listu k mikrokontroléru ATmega16 a vyhledejte informace pro nastavení interního časovače/čítače. 2. V JSA naprogramujte aplikaci 8bitového čítače řízeného přerušením od 8bitového časovače/čítače. 3. Vyhledejte potřebné informace k nastavení časovače/čítače 0 pro generování PWM signálu a v JSA naprogramujte aplikaci generující PWM signál se střídou 1:2. 4. V JSA naprogramujte aplikaci generující PWM signál s proměnnou střídou. Vizuálně ověřte správnou funkci aplikace pomocí LED diody. 4.2 Teoretické poznatky Přerušení od časovače/čítače Mikrokontrolér ATmega16 nabízí poměrně širokou škálu nastavení a módů dostupných pro časovače/čítače (Timer/Counter) integrované na čipu. V této počítačové úloze se budeme zabývat pouze časovačem/čítačem s označením 0 (jedná se o 8bitový časovač/čítač) a pouze jeho základním použitím. Časovač/čítač můžeme použít bud ve spojení s externím hodinovým signálem, připojeným na pin označený T0 (PB0), nebo s hodinovým signálem odvozeným od jádra mikrokontroléru. Pro větší variabilitu lze nastavit předděličku pro hodinový signál mikrokontroléru a tím zpomalit čítání. Hodnotu předděličky i přepínání zdroje hodin lze volit v kontrolním registru TCCR0 (Timer/Counter Control Register), jehož složení lze nalézt v [Atm16]. Pro nás jsou zajímavé tři bity pro nastavení předděličky jak naznačuje tabulka 4.1.

21 20 Mikroprocesorová technika a embedded systémy Tabulka 4.1: Nastavení předděličky 8bitového časovače/čítače 0 v kontrolním registru TCCR0. CS02:0 0b000 Popis funkce Hodinový signál odpojen, tj. časovač/čítač 0 nepracuje. 0b001 Bez předděličky; f T/C = f CP U. 0b010 Předdělička 8; f T/C = f CP U /8. 0b011 Předdělička 64; f T/C = f CP U /64. 0b100 Předdělička 256; f T/C = f CP U /256. 0b101 Předdělička 1 024; f T/C = f CP U / b110 0b111 Externí zdroj řídicího signálu na pinu T0 (PB0), reakce na sestupnou hranu. Externí zdroj řídicího signálu na pinu T0 (PB0), reakce na náběžnou hranu. S těmito znalostmi můžeme nechat běžet časovač a pomocí přerušení, které se automaticky generuje při jeho přetečení (anglicky: Overflow), odměřovat daný čas. V samotném programu pak funguje toto přerušení jako nejmenší časová jednotka a programově lze na něj navázat další časovač (např. zvolíme předděličku tak, aby celý cyklus trval 10 ms, programem pak ošetříme počítání do 100 a dosáhnout tak doby 1 s). Stejně jako externí přerušení, má i přerušení od časovače/čítače vlastní registr maskování: TIMSK (Timer/Counter Interrupt Mask Register). Pro nás je zajímavý pouze bit TOIE0, který povoluje přerušení při přetečení Pulzně šířková modulace Pulzně šířková modulace PWM (Pulse Width Modulation) představuje způsob modulování přenášených dat. Modulovaný signál má konstantní periodu, ale proměnnou střídu obdélníkového signálu. Střída (anglicky: Duty Cycle) udává poměr mezi dobou trvání vysoké a nízké úrovně. Tento poměr bývá vyjádřen v absolutní (např. 1:3), nebo procentuální míře (např. 25%). Ukázka vstupního a modulovaného signálu je zobrazena na obrázku 4.1. Jednoduchý modulátor lze realizovat pomocí komparátoru, kdy na jeden vstup přivedeme datový signál, a na druhý signál nosný. Ten je tvořen pilovým průběhem. Komparátor pak překlápí výstupní úroveň v závislosti na poměru obou vstupních signálů. Ke generování signálu lze velmi snadno využít také interní časovač/čítač mikrokontroléru, nastavíme-li ho do funkce komparace. V tomto módu totiž časovač/čítač porovnává hodnotu z datového registru TCNT0 (Timer/Counter Register) s hodnotou uloženou v komparačním registru OCR0 (Output Compare Register). V případě rovnosti obou hodnot lze měnit úroveň výstupního signálu na pinu OC0 (PB3). Mikrokontrolér ATmega16 umožňuje použití několika módů generování signálu. V této počítačové úloze se zaměříme pouze na mód s označením Fast PWM. Při tomto nastavení časovač načítá hodnoty od 0x00 do 0xFF, poté nuluje svůj stav a pokračuje v opakovaném načítání. Neinvertující podoba výstupního signálu je nulována při shodě mezi TCNT0 a OCR0 a je nastavena při přetečení datového registru TCNT0. Časový diagram popsané funkce je znázorněn na obrázku 4.2. Je zřejmé, že perioda t OV F takto generovaného signálu zůstává neměnná, a že závisí pouze na frekvenci hodinového signálu mikrokontroléru a na hodnotě předděličky.

22 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 21 (a) (b) Obrázek 4.1: Princip tvorby PWM signálu: (a) vstupní a modulační signál, (b) výstupní (tj. modulovaný) PWM signál. TCNT0 OCR0 OCR OC0 (PB3) t OV F t OV F t OV F t OV F Obrázek 4.2: Časový diagram generování PWM signálu pomocí 8bitového časovače (mód Fast PWM). Aplikaci generování signálu lze obohatit celkem dvěma odlišnými zdroji přerušení. Požadavek na přerušení způsobuje jednak přetečení časovače/čítače a také událost shody mezi datovým a komparačním registrem časovače. Obě tato přerušení se povolují v kontrolním registru TIMSK (Timer/Counter Interrupt Mask Register). 4.3 Pokyny k zadání Bod 1. Ze znalosti frekvence hodinového signálu f CP U (u STK500 je vybrán interní oscilátor s frekvencí f CP U = 1 MHz) vypočtěte dobu, za kterou dojde k přetečení 8bitového časovače/čítače 0. Výpočet proved te pro všechny hodnoty předděličky z tabulky 4.1. V katalogovém listu k mikrokontroléru ATmega16 [Atm16] vyhledejte kapitolu zabývající se 8bitovým časovačem/čítačem 0 (anglicky: 8-bit Timer/Counter0). K jeho nastavení je nutné naplnit dva řídicí registry, konkrétně TCCR0 (Timer/Counter Control Register) a TIMSK (Timer/Counter Interrupt Mask Register). V katalogovém listu si vyhledejte význam jednotlivých bitů těchto registrů a připravte si bitová slova, kterými je naplníte: hodnotu předděličky si zvolte a povolte přerušení při přetečení. Bod 2. Ve vývojovém prostředí AVR Studio vytvořte nový projekt a v JSA naprogramujte aplikaci 8bitového binárního čítače, jehož stav zobrazte pomocí LED diod. Změnu stavu čítače realizujte pomocí přerušení od přetečení časovače/čítače 0. Využijte k tomu

23 22 Mikroprocesorová technika a embedded systémy nastavení registrů TCCR0 a TIMSK z předešlého bodu. Bod 3. V katalogovém listu k mikrokontroléru ATmega16 [Atm16] vyhledejte část zabývající se generováním PWM signálu pomocí komparace u časovače/čítače 0. K nastavení časovače/čítače 0 je nutné naplnit řídicí registr TCCR0. V katalogovém listu si vyhledejte význam jednotlivých bitů tohoto registru a připravte si bitové slovo, kterým tento registr naplníte. Pro generování PWM signálu vyberte tzv. Fast mód PWM, neinvertovanou formu výstupního signálu a vhodnou hodnotu předděličky. Ostatní bity řídicího registru ponechte beze změny. Ve vývojovém prostředí AVR Studio vytvořte nový projekt a v JSA naprogramujte aplikaci generující PWM signál se střídou 1:2. Definujte port B jako výstupní (na pinu PB3 je pomocí časovače/čítače 0 generován PWM signál). Střída generovaného signálu je adekvátní hodnotě, kterou uložíte do komparačního registru OCR0 (Output Compare Register). Tato úloha nevyžaduje generování přerušení, tudíž ani definici zásobníku. Zapsání hodnot do všech I/O registrů stačí provést jen jednou. Nezapomeňte váš program ukončit nekonečnou smyčkou, která tedy nebude obsahovat žádné další instrukce. Vypočtěte periodu generovaného signálu a ověřte ji odečtením hodnoty na osciloskopu (jehož sonda je pochopitelně připojena na pin PB3), příp. pomocí programu Scope [Sco09], který komunikuje se zvukovou kartou počítače. Rovněž ověřte požadovanou střídu signálu. Při psaní kódu se vyvarujte bezmyšlenkovitého opisování instrukcí, či částí kódu z předešlých počítačových cvičení. Snažte se o optimalizaci vašeho programu z hlediska obsazenosti programové paměti. Bod 4. V JSA vytvořte aplikaci, která bude lineárně měnit střídu generovaného PWM signálu. Využijte zdrojového kódu z předešlého bodu. Střídu, tj. komparační hodnotu v registru OCR0 inkrementujte v obsluze přerušení, která se spouští právě při komparaci, plynule od hodnoty 10 po 245 a zpět. Z tabulky 3.1 zjistěte vektor tohoto přerušení. Nezapomeňte definovat zásobník, povolit přerušení pro komparaci a globální přerušení. Zvolíte-li hodnotu předděličky 8 nebo 64 budete schopni vizuálně pozorovat vliv změny střídy také na výstupní LED diodě. 4.4 Náměty pro další aplikace Postupné rozsvěcení a zhasínání LED diod ve stylu Knight Ridera. Aplikace ošetření stisku tlačítka, která bude schopna rozlišit krátký a dlouhý stisk. K rozlišení využijte interního časovače. 4.5 Shrnutí Počítačové cvičení umožnilo studentům hlouběji proniknout do problematiky obsluhy přerušení mikrokontrolérů. Konkrétně bylo generováno přerušení od interního časovače při přetečení i komparaci. Této funkce lze snadno využít při generování výstupního signálu s proměnnou střídou.

24 Fakulta elektrotechniky a komunikačních technologií VUT v Brně Kontrolní otázky Otázka 4.1 Jakou hodnotu bude obsahovat komparační registr, má-li být generován obdélníkový signál se střídou 1:5? Otázka 4.2 Jaké slovo bude obsahovat řídicí registr TCCR0, má-li být časovač/čítač využit ke komparaci hodnot v normálním módu (non-pwm), současně nulovat výstupní úroveň při komparaci a inkrementace časovače má být zpomalena 8? Otázka 4.3 Jakou posloupností instrukcí AVR naplníte registr TCCR0 řídicím slovem z předešlé otázky? Otázka 4.4 Sestavte vývojový diagram aplikace Knight Ridera (kapitola 4.4).

25 24 Mikroprocesorová technika a embedded systémy 5 Programování v jazyce C, obsluha přerušení Test předchozích znalostí 1. V jakém typu paměti a od jakých adres se nachází vektory přerušení u AVR? 2. Jak probíhá výkon obsluhy libovolného přerušení? 3. Jak lze v jazyce C naprogramovat podmínku a cyklus? Cíle počítačového cvičení Cílem počítačového cvičení je osvojení si programování mikrokontrolérů ve vyšším programovacím jazyce C pomocí volného překladače GCC a práce s přerušením. 5.1 Zadání 1. Seznamte se s programováním mikrokontroléru ATmega16 v jazyce C. Vytvořte aplikaci pro výpočet skalárního součinu vektorů s = a b. 2. Seznamte se s programováním obsluhy přerušení v jazyce C. Vytvořte aplikaci binárního čítače řízeného interním 16bitovým časovačem/čítačem. 3. Seznamte se s aplikací AVR Wizard pro generování kostry zdrojového kódu. 4. K aplikaci binárního čítače přidejte obslužná tlačítka a generujte externí požadavky na přerušení. 5.2 Teoretické poznatky Vyšší programovací jazyky Pro vývoj aplikací se zpravidla používají vyšší programovací jazyky; u mikrokontrolérů je to nejčastěji jazyk C. Oproti zdrojovému kódu v jazyce symbolických adres, je kód v jazyce C přehlednější, snadno přenositelný mezi odlišnými architekturami a vývoj takové aplikace je rychlejší. Na druhou stranu zabírá výsledný kód zpravidla více místa v paměti a jeho výkon je tak pomalejší. Tato vlastnost je dána mechanizmem překladu zdrojového kódu z C do JSA a následně do strojového kódu mikrokontroléru. Překladač, tj. program nahrazující úseky programu ve vyšším jazyce posloupnosti instrukcí, často nepracuje optimálně. Přeložený kód tak obsahuje také instrukce, které nejsou bezprostředně nutné k vykonání příslušné funkce. Přesto výhody vyšších jazyků výrazně převyšují tyto nedostatky. V případě, kdy je vyžadována absolutní kontrola nad funkcí a časováním programu, jsou exponované úseky zdrojového kódu psány v JSA, ostatní části jsou ponechány v jazyce C. Programovací jazyk C byl poprvé standardizován americkou společností ANSI (American National Standards Institute) v 80. letech 20. století. Přestože byl tento standard následně převzat také mezinárodní společností ISO (International Organization for Standardization), je stále používán název jazyka ANSI C. V současné době (podzim 2011) je platná verze z roku 1999 s označením ISO/IEC 9899:1999 [Ans99], doplněná již třetí korekcí z roku 2007 (ISO/IEC 9899:1999 Cor. 3:2007(E)). Pracovní skupina WG14, která

26 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 25 připravuje standardizaci jazyka C, však dokončuje nový standard s označením ISO/IEC 9899:201x [Ans1x]. Krátké přiblížení struktury jazyka C je uvedeno v příloze B a na přednášce. Existuje celá řada překladačů tohoto jazyka do strojového kódu. Navzájem se liší mírou optimalizace výsledného kódu, rychlostí překladu a cenou. Jedním z rozšířených překladačů je GCC (GNU Compiler Collection) [Gcc09]. Jak název napovídá, jedná se o soubor překládacích nástrojů projektu GNU, který sdružuje tzv. svobodný software. Doplníme-li překladač GCC knihovnou, popisující strukturu a funkci mikrokontrolérů AVR, můžeme tento volný nástroj využít také k vývoji aplikací pro AVR. Pro operační systém Windows je tato kombinace dostupná prostřednictvím open source projektu s názvem WinAVR [Win08]. Tento nástroj kromě překladače obsahuje také programátor, ladící nástroje a další funkce. Po nainstalování je vše dostupné přímo z vývojového prostředí AVR Studio. V prostředí Linux je možné využít nástroje avra pro překlad aplikací z jazyka symbolických adres, balíčky avr-gcc a avr-binutils pro překlad aplikací z jazyka C, dále avr-libc s knihovnami pro AVR a např. avrdude pro naprogramování cílového mikrokontroléru Obsluha přerušení v jazyce C Význam a použití přerušení v jazyce symbolických adres popisuje počítačové cvičení 3. Připomeňme, že obsluhu libovolného přerušení je nutné vložit do pamět ového prostoru, který udává vektor přerušení. Je tedy nutné vědět, na kterou adresu vektor ukazuje. Při využití programovacího jazyka C a překladače GCC je situace jednodušší. Stačí vytvořit obslužné makro s názvem ISR (Interrupt Service Routine), jehož jediným parametrem je identifikátor zdroje přerušení. Ty jsou pro mikrokontrolér ATmega16 vypsány v tabulce 5.1. Např. pro externí požadavek na přerušení č. 0 je tímto parametrem INT0 vect, apod. Konkrétní adresu vektoru přerušení doplní až překladač. Ten také sám definuje zásobník, či zajišt uje návrat z obsluhy přerušení. Kostra zdrojového kódu, využívající externího přerušení je zobrazena ve výpise 5.1. Tento kód je ekvivalentem zdrojového kódu v jazyce symbolických adres 3.1. Ostatní specifika knihovny pro programování mikrokontrolérů AVR (avr-libc) je možné nalézt v kapitole B.4 a na internetové stránce [Lib09]. 5.3 Pokyny k zadání Bod 1. Ve vývojovém prostředí AVR Studio vytvořte nový projekt v jazyce C (v kolonce Project type je nutné vybrat volbu AVR GCC) pro mikrokontrolér ATmega16. Do projektu vložte hlavičkový soubor avr/io.h, který obsahuje popis vybraného mikrokontroléru. V tomto souboru jsou názvy všech řídicích registrů definovány velkými písmeny, proto mějte na paměti, že ve zdrojovém kódu musíte používat právě tento zápis. Obdobně jako v počítačovém cvičení 1 naprogramujte výpočet skalárního součinu vektorů a = (a 7, a 6,..., a 1, a 0 ) a b = (b 7, b 6,..., b 1, b 0 ). Aplikace bude kromě hlavičkového souboru obsahovat deklaraci a naplnění dvou polí (používejte typ unsigned char), jedinou funkci main(), která obsahuje cyklus s příslušným počtem opakování. K prvkům polí přistupujte pomocí indexu prvku, či pomocí ukazatele. Zkontrolujte, zda jsou vypnuty optimalizace při překladu z jazyka C: spust te Project Configuration Options a v dialogovém okně změňte parametr optimalizace Optimization na -O0.

27 26 Mikroprocesorová technika a embedded systémy Tabulka 5.1: Přehled vektorů přerušení pro mikrokontrolér ATmega16 v jazyce C. Č. Adresa Parametr v C (GCC) Popis přerušení 1 0x0000 Externí reset, připojení napájení, x0002 INT0 vect Externí požadavek na přerušení x0004 INT1 vect Externí požadavek na přerušení x0006 TIMER2 COMP vect Časovač/čítač 2 shoda komparace. 5 0x0008 TIMER2 OVF vect Časovač/čítač 2 přetečení. 6 0x000A TIMER1 CAPT vect Časovač/čítač 1 zachycení. 7 0x000C TIMER1 COMPA vect Časovač/čítač 1 shoda s komparátorem A. 8 0x000E TIMER1 COMPB vect Časovač/čítač 1 shoda s komparátorem B. 9 0x0010 TIMER1 OVF vect Časovač/čítač 1 přetečení. 10 0x0012 TIMER0 OVF vect Časovač/čítač 0 přetečení. 11 0x0014 SPI STC vect Dokončení sériového přenosu SPI. 12 0x0016 USART RXC vect USART kompletní příjem dat. 13 0x0018 USART UDRE vect USART prázdný datový registr. 14 0x001A USART TXC vect USART kompletní vyslání dat. 15 0x001C ADC vect ADC dokončení A/D převodu. 16 0x001E EE RDY vect EEPROM komunikace připravena. 17 0x0020 ANA COMP vect Změna výstupu analogového komparátoru. 18 0x0022 TWI vect Událost na sériové sběrnici I2C. 19 0x0024 INT2 vect Externí požadavek na přerušení x0026 TIMER0 COMP vect Časovač/čítač 0 shoda komparace. 21 0x0028 SPM RDY vect Uložení do programové paměti připraveno. Správnou činnost aplikace ověřte v simulátoru. Hodnoty proměnných lze zobrazit v okně Watch (View Watch Alt++), kde v prvním sloupci zadejte název požadované proměnné. Bod 2. Pro naši další práci v počítačových cvičeních budeme využívat vývojovou desku DEVELOPMENT BOARD ATmega16 vyvinutou na Ústavu radioelektroniky cíleně pro předmět Mikroprocesorová technika a embedded systémy. Zapojení desky a soupis součástek je uveden v příloze C. Jádrem desky je mikrokontrolér ATmega16-16AU s externím krystalem o frekvenci 16 MHz. K I/O branám procesoru lze pomocí propojek připojovat různé periferní obvody, LED diody, tlačítka, klávesnici, LED displej, LCD znakový displej, reproduktor se zesilovačem, řadiče rozhraní RS-232 a USB, D/A převodník či hodinový obvod s kalendářem, řízený sběrnicí I2C. Práce s periferními zařízeními je podstatou mikroprocesorových aplikací a bude náplní dalších počítačových cvičení. Ve vývojovém prostředí AVR Studio vytvořte nový projekt a v jazyce C a naprogramujte 4bitový binární čítač, který bude inkrementovat svou hodnotu každou sekundu a bude řízen přetečením 16bitového časovače/čítače 1 (16-bit Timer/Counter1). Stav čítače zobrazte pomocí LED diod, které jsou připojeny k horní polovině portu D. Pro

28 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 27 Zdrojový kód 5.1: Kostra aplikace využívající externí zdroj přerušení v jazyce C. 1 #include <avr \ i o. h> // hlavičkový soubor pro m i k r o k o n t r o l é r 2 #include <avr \ i n t e r r u p t. h> // hlavičkový soubor pro p ř e r u š e n í 3 4 ISR ( INT0_vect ) { // obsluha e x t e r n í h o p ř e r u š e n í INT // kód obsluhy p ř e r u š e n í 6 } 7 8 int main ( void ) { // h l a v n í funkce 9... // kód h l a v n í funkce 10 sei ( ) ; // g l o b á l n í p o v o l e n í všech p ř e r u š e n í 11 while ( 1 ) ; // nekonečná smyčka return ( 1 ) ; // h l a v n í funkce v r a c í hodnotu 1 14 } správnou funkci stačí nastavit výstupní port D, dále předděličku v řídicím registru TCCR1B (Timer/Counter1 Control Register B) a povolit přerušení při přetečení v registru TIMSK (Timer/Counter Interrupt Mask Register). Struktury registrů naleznete v katalogovém listu [Atm16]. Nezapomeňte, že čítač je pouze 4bitový, a na které části portu jsou LEDky připojeny. Vypočtěte doby přetečení časovače/čítače 1 pro všechny hodnoty předděličky v případě, že frekvence hodinového signálu mikrokontroléru na vývojové desce je f CP U = 16 MHz. Řídicí registry naplňujte způsobem kombinování bitového posuvu doleva << a logického součtu, ukázaným na přednáškách. Vytvořenou aplikaci naprogramujte do paměti mikrokontroléru pomocí programovacího modulu ISP. Tento modul je na desce DEVELOPMENT BOARD ATmega16 umístěn pod maticovou klávesnicí a jeho správná funkce je indikována zelenou signální SMD diodou. Jedná se o modul AVRISP mkii firmy Atmel [Atm04], proto při navázání komunikace AVR Studia s programátorem je nutné vybrat právě tento produkt, jak naznačuje obrázek 5.1. Obrázek 5.1: Výběr programování mikrokontroléru prostřednictvím AVRISP mkii, připojeném prostřednictví USB portu. Bod 3. Spust te aplikaci AVR Wizard [Sev08] a vytvořte v něm nový projekt (Project New Project F2 ) pro mikrokontrolér ATmega16. Tlačítkem Continue se otevře okno, pomocí něhož lze snadno vybírat a nastavovat požadované periférie, jak ukazuje obrázek 5.2. Aplikace AVR Wizard obsahuje celkem osm záložek pro ovládání vstupně/výstupních

29 28 Mikroprocesorová technika a embedded systémy Obrázek 5.2: Aplikace AVR Wizard pro nastavení řídicích registrů mikrokontrolérů AVR [Sev08]. portů, časovače/čítače, watchdogu, A/D převodníku a komparátoru, vnějšího přerušení, sériové komunikace pomocí UART, TWI a SPI. Poslední záložka Libraries umožňuje vkládání uživatelských knihoven a maker. Celý projekt je možné uložit stisknutím tlačítka Save Project, vrátit se na výběr mikrokontroléru tlačítkem Back, ale především vygenerovat zdrojový kód v jazyce C (tlačítko Gen. code). Po stisknutí tohoto tlačítka se v hlavním okně aplikace vygeneruje kostra zdrojového kódu pro překladač GCC. Tento kód je následně možné zkopírovat do projektu v prostředí AVR Studio. Seznamte se s možnostmi a s ovládáním programu AVR Wizard. Nastavte časovač/čítač 1 a port D dle předchozího bodu a vygenerovaný kód s nastavením řídicích registrů zkontrolujte s ručně získanými hodnotami. Bod 4. K aplikaci binárního čítače přidejte obsluhy externích požadavků na přerušení INT0 a INT1, řízené tlačítky. Jedna obsluha necht resetuje stav binárního čítače a druhá at mění směr čítání. Realizujte jednoduchou metodu ošetření stisku mechanického tlačítka. Jaké tlačítko je zdrojem přerušení INT0 na vývojové desce? Použijte nastavení řídicích registrů z počítačového cvičení 3, nebo z programu AVR Wizard. 5.4 Náměty pro další aplikace V jazyce C naprogramujte aplikaci, která generuje periodickou změnu dvou tónů (čistá kvarta). Pro odměřování potřebných časových intervalů využijte přetečení interních časovačů/čítačů 0 a 1. Jeden z nich nastavte pomocí předděličky pro generování příslušných frekvencí výstupního signálu a druhý pro odměřování doby trvání obou tónů.

30 Fakulta elektrotechniky a komunikačních technologií VUT v Brně Shrnutí Počítačová úloha umožňuje studentům proniknout do problematiky programování mikrokontrolérů v jazyce C. Konkrétně byl popsán způsob tvorby obsluhy přerušení od interního časovače/čítače a externí požadavek na přerušení od tlačítka. 5.6 Kontrolní otázky Otázka 5.1 Kolika bitové jsou proměnné typu char a signed int v jazyce C? Otázka 5.2 Nakreslete vývojový diagram aplikace z posledního bodu zadání. Otázka 5.3 Jakou funkci má kód 5.2? Přeložte tento kód do jazyka symbolických adres mikrokontroléru AVR. Kolik bytů přeložený program zabírá? Zdrojový kód 5.2: Úsek kódu v jazyce C. 1 DDRD = 0xF0 ; // 2 PORTD = 0 ; // 3 TCCR1B = ( 1<<2 ) ( 1<<1 ) ; // 4 sei ( ) ; //

31 30 Mikroprocesorová technika a embedded systémy 6 Řízení komunikace s displejem Test předchozích znalostí 1. Nakreslete výstupní charakteristiky bipolárních tranzistorů NPN a PNP. 2. Jaké řídicí signály v mikroprocesorové technice ovládají operaci čtení/zápis? 3. Co je to ASCII tabulka a jaké údaje obsahuje? 4. Jakým způsobem lze v jazyce C kombinovat výpis textového řetězce s hodnotou proměnné určitého typu (např. typu char)? Cíle počítačového cvičení Počítačové cvičení si klade za cíl seznámit studenty s možností připojení 7segmentového displeje a LCD znakového displeje k I/O portu(ům) mikrokontroléru AVR. Využito bude multiplexování 7segmentového displeje a 4bitová datová komunikace mezi mikrokontrolérem ATmega16 a LCD displejem s rozlišením 16 4 znaků. Programování řídicí aplikace bude probíhat ve vyšším programovacím jazyce C a bude využita knihovna pro LCD displej, jejíž autor je Peter Fleury [Fle06]. 6.1 Zadání 1. Realizujte aplikaci pro komunikaci se 7segmentovým displejem. 2. Seznamte se s knihovnou pro využití LCD displeje v jazyce C. 3. Realizujte binární čítač, který bude ovládán 16bitovým časovačem a jeho stav zobrazte pomocí displeje. 6.2 Teoretické poznatky Základním zobrazovacím (indikujícím) prvkem v mikroprocesorové technice je LED dioda. Ovládání LED diod bylo procvičeno v předešlých počítačových cvičeních. Seskupením sedmi světelných segmentů vznikne 7segmentový displej, umožňující zobrazení šestnácti symbolů hexadecimální soustavy. Sdružením více takových displejů, lze zobrazit hodnoty o větším počtu symbolů. Necht je displej tvořen šesti symboly. Pro přímé propojení všech svíticích segmentů s mikrokontrolérem by bylo potřeba 48 výstupních pinů (6 symbolů 8 segmentů vč. desetinné tečky). Toto propojení se nepoužívá. Efektivním propojením je multiplexování jednotlivých symbolů. Datové vodiče pro symboly jsou totožné, ale v časovém multiplexu se spíná vždy jen jeden symbol. Je-li přepínání dostatečně rychlé, lidské okno jej nezaznamená. Tento způsob propojení je použit také na vývojové desce ATmega16 (viz obrázek 6.1). Pro šest symbolů tak postačí 14 výstupních pinů (6 symbolů; port C + 8 segmentů, vč. desetinné tečky; port A). Účinný způsob zobrazení informací v celé řadě řídicích aplikací je pomocí LCD displeje. Toto počítačové cvičení je zaměřeno na použití znakových LCD displejů. Většina vyráběných LCD displejů je ovládána pomocí řídicího obvodu HD44780 firmy Hitachi

32 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 31 PC7 PC2 PA3 PA3 PA4 A1 PA2 PA4 A1 PA2 PA7 A6 PA5 PA7 A6 PA5 PA0 PA0 Obrázek 6.1: Zapojení 7segmentového displeje v laboratoři Mikroprocesorové techniky. [Hit08], příp. jeho ekvivalentů. Tento řadič je normou pro komunikaci s LCD displeji. Zpravidla se vyrábí displeje s rozlišením od 8 1 až po 40 4 znaků s podsvícením (žlutozelené, modré) i bez podsvícení. Znakový LCD displej obsahuje osm datových pinů pro přenos instrukcí a dat, dále sadu tří řídicích signálů a konečně piny pro napájení, nastavení kontrastu a podsvícení. Přestože datové informace, které LCD displej přijímá/vysílá jsou 8bitové, často se komunikace realizuje pouze čtveřicí datových vodičů (označováno jako 4bitová komunikace). Bytová slova se tak posílají ve dvou krocích: nejprve vyšší nibl, následně nižší. Stejným způsobem je realizována komunikace mikrokontroléru ATmega16 s LCD displejem na vývojové desce, jak naznačuje obrázek 6.2. Je zřejmé, že 4bitovou komunikací byl snížen počet nutných pinů mikrokontroléru z jedenácti na sedm. Konkrétně se jedná o piny PA7 až PA1 na portu A. Obrázek 6.2: Zapojení LCD displeje na vývojové desce ATmega16. Řídicí signál RS slouží k identifikaci, zda jsou mezi mikrokontrolérem a LCD displejem přenášeny instrukce nebo data (RS = 0: instrukce, RS = 1: data). Signál R/W identifikuje, zda dochází k zápisu nebo ke čtení do/z LCD displeje (R/W = 0: zápis, R/W = 1: čtení). Sestupná hrana kladného pulzu signálu E (Enable) označuje okamžik, kdy jsou čtena data z datové a řídicí sběrnice. Proces 4bitové komunikace mikrokontroléru ve směru k LCD displeji probíhá v několika krocích. Nejprve se nutné nastavit příslušné hodnoty dvou řídicích signálů RS a R/W. Následně se na datové piny D7 : 4 přivede vyšší nibl zapisovaných dat. Příjem těchto dat v LCD displeji je spuštěn kladným pulzem signálu E, který musí trvat alespoň 3 hodinové cykly. Následně se na datové piny přivede nižší polovina posílaného bytu a opět se potvrdí krátkým pulsem E. Struktura některých instrukcí pro komunikaci s displejem (resp. s řadičem HD44780) je zobrazena v tabulce 6.1. Formát instrukcí je pevně dán. Jedná se vždy o 1bytové slovo doplněné o řídicí signály RS a R/W. Podrobný soupis

33 32 Mikroprocesorová technika a embedded systémy všech instrukcí je možné nalézt v literatuře, např. v [Dov07]. Tabulka 6.1: Vybrané příkazy HD44780 pro komunikaci s LCD displejem. RS R/W DB7 : DB0 Popis instrukce Smazání displeje x Návrat kurzoru na pozici (0,0) IS Nastavení posuvu kurzoru. I: inkrementace pozice kurzoru. S: posuv displeje DCB Zapnutí displeje/kurzoru. D: zapnutí displeje. C: zobrazení kurzoru. B: blikání kurzoru L NFxx Nastavení rozlišení. L=1(0): nastavení 8(4)bitové komunikace. N=1(0): dva(jeden) řádky displeje. F=1(0): velikost fontu 5 10(5 7) cgram Nastavení adresy cgram v CGRAM segmentu. 1 0 data Zápis dat do paměti CGRAM. Zobrazení znaku z adresy data. 1 1 data Čtení dat z paměti CGRAM. Čtení dat z adresy data. 6.3 Pokyny k zadání Bod 1. V jazyce C naprogramujte komunikaci mezi mikrokontrolérem ATmega16 a 7segmentovým displejem na vývojové desce ATmega16. (Zapojení displeje na zobrazeno na obrázku 6.1). Vzhledem k tomu, že 7segmentový displej využívá port A, kde je připojen také LCD displej, zkontrolujte (přepojte) jumpery od LCD na 7segmentový displej. K multiplexování mezi jednotlivými symboly využijte 8mi či 16ti bitový časovač, se kterým jste se seznámili ve cvičeních 4 a 5. Časové intervaly měňte pomocí odpovídajících předděliček. Jaká je maximální doba multiplexování, kterou lidské oko nepostřehne? Vzhledem k propojení jednotlivých svíticích segmentů naprogramujte funkci, která bude realizovat zobrazení vámi zadané číslice na požadovanou pozici na displeji. Svíticí segmenty jsou v zapojení se společnou anodou. V návrhu kostry celé aplikace (kód 6.1) je tato funkce nazvána showseg() a má dva parametry. První představuje hodnotu, kterou chceme zobrazit, druhý parametr pak obsahuje pozici symbolu v celém displeji. Tělo samotné funkce může být tvořeno např. kombinací příkazů switch a case. Bod 2. Odpojte jumpery, které propojují 7segmentový displej s portem A, a k tomuto portu připojte LCD znakový displej. V programu AVR Studio vytvořte nový projekt v jazyce C pro mikrokontrolér ATmega16 a pomocí již hotové knihovny pro komunikaci s LCD displejem naprogramujte aplikaci, která vypíše textový řetězec na displeji. Upravenou knihovnu, jejíž původním autorem byl Peter Fleury [Fle06], si stáhněte z internetových stránek předmětu [Fry01]. Jedná se o dva soubory s názvem lcd c.c a lcd h.h. Oba zkopírujte do adresáře, kde se nachází zdrojový soubor vaší aplikace. Soubor s koncovkou *.c je taky nutné vložit do vašeho projektu. Postup je snadný. Pravým tlačítkem klikněte na složku obsahující zdrojové soubory (Source Files) v levé části AVR Studia

34 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 33 Zdrojový kód 6.1: Kostra aplikace pro ovládání 7segmentového displeje. 1 #include <avr \ i o. h> // hlavičkový soubor pro m i k r o k o n t r o l é r 2 #include <avr \ i n t e r r u p t. h> // hlavičkový soubor pro p ř e r u š e n í 3 4 // prototyp funkce z o b r a z u j í c í jeden symbol na požadované p o z i c i 5 int showseg ( char, char ) ; 6 7 int main ( void ) { // h l a v n í funkce 8... // kód h l a v n í funkce 9 sei ( ) ; // g l o b á l n í p o v o l e n í všech p ř e r u š e n í 10 while ( 1 ) ; // nekonečná smyčka return ( 1 ) ; // h l a v n í funkce v r a c í hodnotu 1 13 } ISR (... ) { // obsluha p ř e r u š e n í p ř i p ř e t e č e n í časovače // kód obsluhy p ř e r u š e n í 17 // z o b r a z e n í jednoho symbolu symbol na p o z i c i p o s i t i o n 18 showseg ( symbol, position ) ; 19 } int showseg ( char symbol, char position ) { 22 switch ( symbol ) { 23 case 0 : // zobraz symbol // doplňte kód c e l é funkce 25 } 26 return ( 0 ) ; // návratová hodnota funkce 27 } a vložte soubor lcd c.c. Hlavičkový soubor lcd h.h se již vloží do projektu automaticky při překladu. Knihovna pro komunikaci s LCD displejem, kterou jste vložili do projektu, obsahuje veškerá nastavení a funkce pro inicializaci a použití LCD displeje. Soupis pomocných funkcí, které budete potřebovat je uveden v tabulce 6.2. Všechny tyto funkce nevrací žádnou hodnotu. Tabulka 6.2: Soupis vybraných funkcí z knihovny pro LCD. Název funkce lcd init() ; lcd clrscr() ; lcd gotoxy( 0,2 ) ; lcd putc( A ) ; lcd puts( "BMPT") ; lcd command( 0x40 ) ; lcd data( 0x0A ) ; Popis funkce Inicializace LCD displeje. Smazání obsahu LCD displeje. Přesun kurzoru na pozici (0,2), tj. 1. sloupec, 3. řádek. Zobrazení znaku A. Zobrazení řetězce znaků BMPT. Zápis 1bytové instrukce do LCD displeje. Zápis 1bytových dat do LCD displeje. Naprogramujte aplikaci, která využije prvních pět funkcí z tabulky 6.2. Nezapomeňte

35 34 Mikroprocesorová technika a embedded systémy vložit hlavičkový soubor knihovny LCD displeje. Knihovny, dostupné ve stejném adresáři jako celá aplikace se vkládají příkazem #include "nazev knihovny.h". V hlavní funkci aplikace inicializujte LCD displej a následně na různé pozice vypište libovolné znaky a řetězce. Výstupní port A, ke kterému je LCD displej připojen není potřeba nastavovat to je již provedeno ve inicializační funkci displeje. Aplikaci ukončete prázdnou nekonečnou smyčkou. Bod 3. Již vytvořený projekt z předešlého bodu rozšiřte o obsluhu přerušení při přetečení 16bitového časovače. Toto přerušení bude inkrementovat stav 4bitového binárního čítače (viz počítačové cvičení 5). Kromě zobrazení stavu čítače pomocí LED diod, zobrazte jeho stav také na LCD displeji. Hodnotu proměnné je možné zobrazit pomocí kombinace příkazů sprintf() z knihovny stdio.h a funkce lcd puts(). Konkrétní použití a syntaxi uvedených příkazů ukazuje zdrojový kód 6.2. Zdrojový kód 6.2: Kombinace výpisu řetězce a celočíselné hodnoty na znakový displej. 1 #include <s t d i o. h> // standardní I /O knihovna ( nutné pro s p r i n t f ) char buffer [ 1 6 ] ; // glob. proměnná ř e t ě z c e k zobraz. na d i s p l e j i // naplnění ř e t ě z c e b u f f e r příslušným textem 6 sprintf ( buffer, Hodnota = \%d, temp ) ; 7 8 // z o b r a z e n í ř e t ě z c e na d i s p l e j i 9 lcd_puts ( buffer ) ; Náměty pro další aplikace Na LCD displeji realizujte jednoduché menu, ve kterém se budete pohybovat pomocí tlačítek. Vytvořte dvojici nových znaků, které bude možné zobrazit na LCD displeji. Dostupná znaková sada LCD displeje je zobrazena v příloze D. Kromě těchto znaků je možné nadefinovat až osm nových znaků. Uživatelsky definované znaky jsou v LCD displeji uloženy od adresy 0 do adresy 7. Tento úsek paměti se nazývá CGRAM (Character Generator RAM). Znaky se definují v matici 5 8 bodů. Zobrazený pixel bude v této matici obsahovat hodnotu 1 ; body které mají být skryty, obsahují 0. Jeden znak je tedy reprezentován osmicí slov (jedno slovo na řádek). Příklad nově definovaných symbolů je znázorněn na obrázku 6.3. Do podobné matice si postupně znázorněte dva znaky, které chcete nadefinovat. Nový znak má smysl uložit do paměti CGRAM na samém začátku aplikace. Pozor, po odpojení napájení LCD displeje budou znaky ztraceny. K nastavení této adresy využijte příkaz lcd command(), jehož argument naleznete v tabulce 6.1. Bezprostředně po této instrukci, LCD displej očekává příjem osmi datových slov popisujících samotný znak, tj. osmkrát využijte funkci lcd data(). Pro správnou komunikaci je nutné po uložení nového znaku, zavolat funkci smazání obsahu displeje, tedy lcd clrscr(). Zobrazit znak, uložený

36 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 35 0b b b b b b b b b b b b b b b b b b b b b b b b11111 (a) 100 % (b) 40 % (c) 0 % Obrázek 6.3: Nově definované znaky pro LCD displej indikátor nabití baterie. na adrese 0 lze pomocí funkce lcd putc( 0 ). Na LCD displeji současně zobrazte vaše dva nové znaky. 6.5 Shrnutí Počítačové cvičení představuje možnost propojení 7segmentového displeje a LCD displeje s mikrokontrolérem AVR. Pro zobrazení hodnot na 7segmentovém displeji byla použita metoda multiplexování. Pro vzájemnou komunikaci s LCD byla použita 4bitová verze datové komunikace a knihovna funkcí v jazyce C, dostupná na Internetu [Fle06]. Studenti si tak osvojili volání pomocných funkcí z knihovny. 6.6 Kontrolní otázky Otázka 6.1 Vysvětlete pojem multiplexování 7segmentového displeje. Otázka 6.2 Načrtněte časové průběhy všech datových i řídicích signálů při čtení 8bitového slova (např. 0x4C) z LCD displeje do mikrokontroléru. Datová komunikace je nastavena jako 4bitová. Otázka 6.3 V binární podobě zapište matici, reprezentující znak A ve znakové sadě LCD displeje.

37 36 Mikroprocesorová technika a embedded systémy 7 Zpracování analogových signálů Test předchozích znalostí 1. Jaká je funkce A/D převodníku a na čem závisí kvantizační chyba? 2. Jak dlouho trvá mikrokontroléru ATmega16 jeden A/D převod? 3. Liší se nějak následující způsoby vkládaní knihovny v jazyce C: #include <nazev knihovny.h> a #include "nazev knihovny.h"? Cíle počítačového cvičení Cílem počítačového cvičení je použití interního A/D převodníku mikrokontroléru ATmega16 ke zpracování analogových signálů. Dalším cílem cvičení je aplikace PWM signálu při D/A převodu a zobrazení dat na LCD displeji. Studenti si osvojí ovládání interních periférií pomocí příslušných kontrolních registrů. 7.1 Zadání 1. S pomocí katalogového listu ATmega16 si připravte potřebný obsah řídicích registrů A/D převodníku. 2. Vytvořte aplikaci s interním A/D převodníkem. 3. Naprogramujte aplikaci kombinující A/D převod a generování audio signálu. 7.2 Teoretické poznatky Všechna digitální zařízení jsou schopna zpracovávat data pouze v číslicové podobě. Vzhledem k situaci, že okolní svět je vždy analogový, je potřeba zpracovávaná data pro mikrokontrolér nejprve převést. K běžné výbavě mikrokontrolérů patří interní A/D převodník, či analogový komparátor. Přítomnost těchto periférií minimalizuje počet externích součástek v zapojení řídicí aplikace. Následující počítačové cvičení je věnováno A/D převodníku a aplikaci PWM signálu (obdoba počítačového cvičení 4) Analogově digitální převodník Vstupní analogový signál může reprezentovat celou řadu veličin: signál od teplotního nebo tlakového čidla, úroveň audio signálu, velikost měřeného napětí, apod. Analogově digitální převod je ve své podstatě otázkou proporcí, tj. jak velkou hodnotu má vstupní signál vzhledem k maximálnímu (referenčnímu) rozsahu převodníku. Například, pokud má vstupní analogový signál hodnotu 2 V a maximální rozsah převodníku je 5 V, reprezentuje výstupní digitální hodnota 40 % plného rozsahu. Použijeme-li jiné referenční napětí, bude výstupní hodnota také odlišná i přes konstantní napětí na analogovém vstupu! Výstupní hodnota A/D převodníku je reprezentována posloupností bitů. Počet těchto bitů specifikuje množství rozlišitelných úrovní převáděného signálu. U 8bitového A/D převodníku je to 256, u 10bitového úrovní, apod. Obecně je tedy úlohou A/D převodníku převádět napětí vstupního analogového signálu na nbitovou digitální reprezentaci v závislosti na referenčním napětí.

38 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 37 Z předchozí úvahy plyne rovnice pro vyjádření závislosti mezi hodnotou vstupního napětí a její digitální reprezentací: ADCH:L = V IN V REF (2 n 1), (7.1) kde ADCH:L je registrový pár s digitální hodnotou převedeného analogového napětí V IN. V REF představuje maximální hodnotu vstupního napětí a n je počet bitů určených k A/D převodu. Doba A/D převodu u ATmega16 je odlišná pro první převáděnou hodnotu a pro všechny následující vzorky. U prvního převodu je nutné nastavit použité analogové obvody převodníku, takže převedená hodnota je k dispozici za 25 cyklů hodinového signálu, který řídí A/D převodník a za 13 cyklů pro všechny následující vzorky. Uvážíme-li, že doporučená frekvence hodinového signálu A/D převodníku mikrokontroléru ATmega16 musí být v rozmezí od 50 khz do 200 khz, je možné dosáhnout rychlosti převodu až 15,3 ksps (Samples Per Second). A/D převodník obsažený v ATmega16 je 10bitový Zásuvný audio modul Pro generování analogových signálů bude využit zásuvný modul, jehož obvodové zapojení je zobrazeno na obrázku 7.1. Modul obsahuje dvojici zdrojů: první (přepínač S1 v poloze 3) přivádí na pin PA0 periodický signál trojúhelníkového tvaru, generovaný dvojicí operačních zesilovačů TLC272. Jeho periodu i napět ové úrovně zjistíte při řešení bodu 2. Obrázek 7.1: Obvodové zapojení zásuvného audio modulu. Druhou možností zásuvného modulu (přepínač S1 v poloze 1, viz obrázek 7.1) je využití audio paměti ISD1730 firmy Nuvoton [Nuv10]. Tento integrovaný obvod umožňuje

39 38 Mikroprocesorová technika a embedded systémy nahrát a následně přehrávat cca 30 s audio signálu se vzorkovací frekvencí danou externím rezistorem R5 (v našem případě f s = 8 khz). 7.3 Pokyny k zadání Bod 1. Požadovanou funkci A/D převodníku (anglicky: Analog to Digital Converter) je nutné nastavit v řídicích registrech ADMUX (ADC Multiplexer Selection Register) a AD- CSRA (ADC Control and Status Register A). S pomocí katalogového listu [Atm16], nebo programu AVR Wizard [Sev08] si připravte hodnoty obou řídicích registrů. V registru ADMUX nastavte napájecí napětí AVCC jako referenční a vstupní kanál převodníku vyberte ADC0. V kontrolním a stavovém registru ADCSRA povolte použití A/D převodníku, zahájení A/D převodu, generaci přerušení po jeho dokončení a rychlost s jakou bude A/D převod probíhat. Nastavte takovou předděličku, aby frekvence odvozeného hodinového signálu byla v rozmezí 50 khz až 200 khz (max. 250 khz). Vypočtěte frekvenci hodinového signálu pro A/D převodník pro všechny hodnoty předděličky za předpokladu, že frekvence MCU je 16 MHz. Bod 2. Naprogramujte aplikaci pro mikrokontrolér ATmega16 v jazyce C, která opakovaně vzorkuje vstupní signál, generovaný zásuvným modulem. Pro připojení tohoto signálu přepněte přepínač na modulu do dolní polohy. Ke změření úrovně analogového napětí použijte vnitřní 10bitový A/D převodník mikrokontroléru. Převedenou hodnotu zobrazte na LCD displeji. Potřebné knihovny pro komunikaci s LCD displejem si stáhněte z internetových stránek předmětu, nebo použijte z počítačového cvičení 6. Po vytvoření nového projektu v programu AVR Studio do něj nezapomeňte vložit zdrojový soubor knihovny lcd c.c (postup je naznačen v uvedeném počítačovém cvičení). Vzhledem k situaci, že interní A/D převodník je 8kanálový a využívá piny PA0 (ADC0) až PA7 (ADC7) umístěné na portu A (ke kterému je ovšem připojen také LCD displej, viz schéma zapojení na obrázku 6.2), je nutné využít jediný volný kanál A/D převodníku umístěný na pinu PA0 (ADC0). A/D převodník budeme využívat v tzv. jednoduchém převodu (režimu), kdy vstupní napětí jednoho kanálu je vztaženo k zemi. A/D převodník umožňuje také převod diferenční hodnoty napětí dvou vstupních signálů včetně řízení zesílení. Tento režim ovšem nebudeme využívat. Naprogramujte obsluhu přerušení, která se spustí po dokončení A/D převodu. Zobrazte hodnotu A/D převodu na LCD displeji. Převedená hodnota je uložena ve dvou datových registrech ADCH:L (ADC Data Register). V jazyce C je tento registrový pár sjednocen do jediné 16bitové proměnné ADCW, kterou můžete v aplikaci využít. Pomocí LED diod vytvořte tzv. bar graf, kdy počet rozsvícených LED diod koresponduje s úrovní analogového signálu. Bod 3. Naprogramujte jednoduchý audio generátor. Přepínač na zásuvném modulu přepněte do horní polohy. Nyní je vstupní kanál A/D převodníku mikrokontroléru spojen s výstupem audio paměti ISD1730. Ta obsahuje přibližně 30 s zvukového signálu, který neustále přehrává. Hodnoty vzorků lze využít k nastavování komparační úrovně časovače/čítače, tj. ke generování PWM signálu. Je-li vhodně nastavena perioda PWM signálu (frekvence musí být několikanásobně vyšší než je vzorkovací frekvence audio signálu), lze jeho přivedením na akustický měnič generovat melodii (hudbu)!

40 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 39 Prostudujte si zapojení vývojové desky ATmega16 (viz příloha C). Ke kterému pinu mikrokontroléru je připojen reproduktor? Který z interních časovačů/čítačů pro generování melodie tedy použijete? Ze znalosti doby trvání A/D převodu vyberte předděličku hodinového signálu, aby byl vstupní signál vzorkován přibližně 8 khz. Pro generování PWM signálu použijte Fast PWM, inverting mode a co nejvyšší frekvenci generovaného signálu. Využijte přerušení po dokončení A/D převodu, které zajistí plnění komparačního registru časovače/čítače. Použijte k tomu přímo hodnotu A/D převodu, kterou je ovšem potřeba zmenšit z 10bitové hodnoty na 8bitovou. Nepoužíváte-li free-running mód A/D převodníku, nezapomeňte na konci obsluhy přerušení opět zahájit další A/D převod. Je důležité, aby doba výkonu přerušení byla co nejkratší, proto v této aplikaci nepoužívejte LCD displej. Komunikace s ním totiž trvá desítky až stovky milisekund. 7.4 Náměty pro další aplikace Rozšiřte aplikaci z bodu 2 o měření periody vzorkovaného signálu, přip. zobrazte na LCD displeji hodnotu napětí V P P. Navrhněte aplikaci, využívající interní komparátor mikrokontroléru. 7.5 Shrnutí Počítačové cvičení umožnilo studentům osvojení si práce s perifériemi mikrokontroléru ATmega16 pro zpracování analogového signálu. Jednalo se o 10bitový interní A/D převodník a PWM generátor. Obě periférie jsou ovládány pomocí kontrolních registrů uložených v datové paměti SRAM v oblasti I/O registrů. Po absolvování počítačového cvičení by studenti měli být schopni použít obě interní periférie a řídit tak A/D převod nebo generovat akustický signál prostřednictvím PWM. 7.6 Kontrolní otázky Otázka 7.1 Jaké minimální napět ové kroky je schopen rozlišit A/D převodník mikrokontroléru ATmega16 při použití vnitřního zdroje referenčního napětí a jaké při použití externího zdroje 5 V? Otázka 7.2 Na čem závisí přesnost měření periody analogového signálu z bodu 2? Otázka 7.3 Proč musí být v bodě 3 splněna podmínka f s f P W M?

41 40 Mikroprocesorová technika a embedded systémy 8 Sériový přenos dat Test předchozích znalostí 1. Jaká je struktura asynchronního rámce? Co je to paritní bit a jakým způsobem se vypočte? 2. Jaká je struktura adresního a datového rámce na sběrnici I2C? 3. Jakými způsoby je možné v jazyce C snadno naprogramovat cyklus typu: opakuj dokud i 0? Cíle počítačového cvičení Cílem počítačového cvičení je seznámit studenty s řízením sériové komunikace pomocí UART a sběrnice I2C. Oba tyto způsoby sériové komunikace podporují interní periférie mikrokontroléru ATmega16 s označením USART a TWI. To umožní programátorovi snadnou implementaci sériové komunikace pro embedded aplikace. 8.1 Zadání 1. Seznamte se se strukturou asynchronního rámce. 2. V jazyce C sestavte program pro mikrokontrolér ATmega16, který vyšle datový rámec pomocí jednotky USART. 3. V jazyce C sestavte program, který bude přeposílat přijatá sériová data zpět do počítače. 4. V jazyce C vytvořte program pro řízení sériové komunikace po sběrnici I2C. 8.2 Teoretické poznatky Asynchronní komunikace UART Pod označením UART (Universal Asynchronous Receiver and Transmitter) se skrývá integrovaný hardware realizující asynchronní sériovou komunikaci s okolím. Pro zachování obecnosti pomineme, že mikrokontrolér ATmega16 je vybaven rozhraním USART (Universal Synchronous Asynchronous Serial Receiver and Transmitter) podporující navíc i synchronní komunikaci. U asynchronní komunikace mohou být data vyslána po sériové lince v libovolném okamžiku. Na rozdíl od komunikace synchronní, není u asynchronního způsobu přenášena informace o časové synchronizaci. Přijímač takového signálu tedy musí být schopen data správně interpretovat jiným způsobem. Využívá se předem zvolená struktura datového rámce, pomoci něhož se data posílají. Datový asynchronní rámec obsahuje jeden start bit (vždy log. 0), dále určitý počet datových bitů v pořadí od LSB k MSB (5 až 9 bitů), volitelný paritní bit pro jednoduché zabezpečení dat (lichá Odd, nebo sudá Even parita) a jeden nebo dva stop bity (log. 1). Mód UART rámce je možné zapsat zkráceně: např. 8N2 pro rámec s 8 datovými bity, žádnou paritou a 2 stop bity. Ukázka jednoho

42 Fakulta elektrotechniky a komunikačních technologií VUT v Brně nečinný stav start LSB MSB parita stop stop nečinný stav T B Obrázek 8.1: Struktura asynchronního rámce pro mód 7E2 (7 datových bitů, sudá parita, 2 stop bity). rámce v módu 7E2 a datové slovo 0b je znázorněna na obrázku 8.1. (T B udává bitovou periodu.) Aby byl zajištěn korektní příjem dat na přijímací straně je nutné, aby jak vysílač, tak přijímač používali shodné nastavení rámce. Navíc je nutné, aby symbolová rychlost vysílače byla shodná se symbolovou rychlostí přijímače. Symbolové rychlosti se nastavují v pevně daných hodnotách, přičemž běžné jsou hodnoty 9 600, , či Bd. Pro mikrokontroléry AVR je potřeba konkrétní hodnotu symbolové rychlosti přepočítat s ohledem na řídicí frekvenci mikrokontroléru f CP U a uložit do registru UBRRH:L (USART Baud Rate Registers). Jedná se o registrový pár, jehož hodnota je dána následujícím vztahem ( ) fcp U UBRRH:L = round 16 SR 1, (8.1) kde SR je požadovaná hodnota symbolové rychlosti v Bd a funkce round() realizuje zaokrouhlení. V případě, že zvolená symbolová rychlost je větší než a frekvence f CP U = 16 MHz, pak stačí naplnit pouze nižší registr UBRRL; vyšší registr UBRRH obsahuje nuly. Kromě řídicího registru pro nastavení symbolové rychlosti, obsahuje asynchronní jednotka ještě tři odlišné řídicí registry a jeden datový. Datový registr UDR (USART I/O Data Register) slouží jak pro přijímač, tak i pro vysílač sériových dat. Data, která chceme vyslat, tak stačí pouze zapsat do tohoto registru a UART jednotka již vykoná vše potřebné. Na druhé straně, po dokončení příjmu je datové slovo uloženo právě v registru UDR. Informace o chybě během přenosu, příp. o tom že přenos byl dokončen je možné vyčíst z řídicího registru UCSRA (USART Control and Status Register A). Zajímavý je bit UDRE (USART Data Register Empty), který informuje, zda je datový registr vysílače již prázdný a je tak možné vyslat další data. Zapnutí vysílače a přijímače jednotky USART, povolení generování přerušení při ukončení vysílání a příjmu asynchronního rámce se nastavuje v registru UCSRB (USART Control and Status Register B). Poslední řídicí registr UCSRC (USART Control and Status Register C) obsahuje specifikaci struktury asynchronního rámce, tj. počet datových bitů, volbu parity i počet stop bitů. Asynchronní přijímač RxD a vysílač TxD je u mikrokontroléru ATmega16 vyveden na pinech PD0 a PD1. Tyto vodiče jsou pomocí převodníku úrovní a konektoru na vývojové desce v laboratoři spojeny se sériovým rozhraním osobního počítače.

43 42 Mikroprocesorová technika a embedded systémy Sběrnice I2C Sběrnice I2C (Inter-Integrated Circuit) byla vyvinuta firmou Philips Semiconductor pro komunikaci mezi dílčími bloky v rámci jednoho zařízení. Tato sběrnice je tvořena dvojicí signálů, představující datový kanál SDA (Synchronous Data) a hodinový signál SCL (Synchronous Clock). Komunikace reprezentuje hierarchické spojení nadřazeného zařízení (Master) a podřízených obvodů (Slave). Úkolem nadřazených obvodů je řízení celé komunikace, vznášení požadavků a generování hodinového signálu. Každý podřízený obvod má implementovánu svou jedinečnou adresu, pomocí níž je adresován. Komunikace po sběrnici je řízena komunikačním protokolem, který popisuje zahájení komunikace (Start Condition), strukturu adresního a datového paketu, dále popisuje způsoby potvrzování přijatých paketů (Acknowledge) a ukončení komunikace (Stop Condition). Klidová úroveň na obou linkách sběrnice I2C je v log. 1 a datovou linku smí ovládat vždy jen jedno zařízení. Pro úroveň signálu na datové lince SDA platí, že musí být neměnná v okamžiku vysoké úrovně hodinového signálu SCL. To neplatí pouze u startovací a ukončovací podmínky. Adresní paket se skládá ze 7bitové adresy podřízeného obvodu, dále z bitu určující následné čtení nebo zápis z/do obvodu. Paket je ukončen potvrzovacím bitem ACK (Acknowledge) od podřízeného obvodu. Je-li hodnota tohoto bitu v log. 0, je potvrzení platné, zůstane-li v log. 1, potvrzení neproběhlo a komunikace nebyla navázána. Adresa je zapisována v pořadí od MSB k LSB. Datový paket obsahuje 8bitové datové slovo, rovněž v pořadí od MSB k LSB a je ukončen potvrzovacím bitem ACK s aktivní úrovní v log. 0. Příklad komunikace mezi mikrokontrolérem ATmega16 (Master) a expandérem portu PCF8574 (Slave) je znázorněn na obrázku 8.2. Adresa podřízeného obvodu je 0b a datové slovo, které bylo zapsáno do expandéru má hodnotu 0b Obrázek 8.2: Časové průběhy na sběrnici I2C při komunikaci s expandérem portu PCF8574. Mikrokontrolér ATmega16 obsahuje interní periférii, pomocí níž je možné ovládat komunikaci na sběrnici I2C. Jedná se o jednotku s názvem TWI (Two-wire Serial Interface).

44 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 43 Pro základní obsluhu jednotky je nutné využít především datový registr pro vysílání i příjem dat TWDR (TWI Data Register), dále řídicí registr TWCR (TWI Control Register) a registr TWBR (TWI Bit Rate Register) pro nastavení frekvence hodinového signálu f SCL. Ta se zpravidla pohybuje do 400 khz. Pro danou frekvenci hodinového signálu mikrokontroléru f CP U a předděličku hodinového signálu jednotky TWPS = 1, je frekvence generovaného signálu SCL dána následujícím vztahem f SCL = f CP U TWBR. (8.2) Ze vztahu (8.2) je patrné, že frekvenci f SCL je možné měnit pouze hodnotou, uloženou v registru TWBR (TWI Bit Rate Register). 8.3 Pokyny k zadání Bod 1. Dle vztahu (8.1) vypočtěte hodnoty UBRRH:L, které specifikují 3 vámi zvolené symbolové rychlosti jednotky USART. Pro jednoduchost uvažujte symbolové rychlosti větší než Bd. Parametry vybírejte podle možností programu Terminal [Ter09] (viz obrázek 8.3), pomoci kterého budete kontrolovat vyslaná data. Zvolte si formát rámce a datové slovo, které budete chtít vyslat. Nakreslete časový průběh takového asynchronního rámce podle obrázku 8.1. Obrázek 8.3: Freewarová aplikace Terminal pro ovládání sériového portu počítače [Ter09]. Bod 2. V prostředí AVR Studio naprogramujte v jazyce C aplikaci pro mikrokontrolér ATmega16, která bude schopna vysílat asynchronní rámec pomocí jednotky USART. V katalogovém listu mikrokontroléru ATmega16 [Atm16], příp. pomocí programu AVR Wizard vyhledejte popis řídicích registrů jednotky USART a připravte si potřebné hodnoty pro správnou funkci vysílače. V registru UCSRB proto zapněte vysílač USART a v registru UCSRC nastavte vámi zvolenou strukturu asynchronního rámce. Řídicí registry UBRRH a UCSRC sdílí stejný pamět ový prostor. Pro rozlišení zápisu do registru UCSRC je nutné

45 44 Mikroprocesorová technika a embedded systémy vždy nastavit bit URSEL. Pro vyslání datového rámce stačí byte zapsat do datového registru UDR. Před samotným zápisem, ale čekejte na vyprázdnění vysílacího registru (viz bit UDRE v registru UCSRA). Tím bude zajištěno, že nedojde ke ztrátě vysílaného rámce. K testování tohoto bitu využijte některou z funkcí uvedených v příloze B.4. Na osciloskopu, který je připojen na vysílací pin jednotky USART, tj. na PD1 ověřte tvar celého asynchronního rámce a změřte skutečnou symbolovou rychlost. Bod 3. Vytvořte nový projekt v prostředí AVR Studio a pro mikrokontrolér ATmega16 naprogramujte v jazyce C aplikaci, která bude přijímat sériová data z počítače pomocí jednotky USART a následně je bude přeposílat zpět. Příjem znaku realizujte jako obsluhu přerušení přijímače USART. Parametr makra ISR, který identifikuje zdroj přerušení, naleznete v tabulce 5.1. Nezapomeňte přidat do zdrojového kódu veškeré náležitosti, které s přerušením souvisí. K nastavení řídicích registrů jednotky USART z předchozího bodu jen přidejte povolení přerušení při příjmu a zapnutí přijímače v registru UCSRB. Obsluha přerušení necht načte obsah přijatých dat z datového registru UDR, opětovným zapsáním dat do tohoto registru iniciujete následné vyslání. Při vysílání opět nejprve čekejte na uvolnění datového registru vysílače jako v předešlém bodě. Správnou funkci aplikace ověříte vysíláním dat z programu Terminal. Zde by se měla v přijímací části bezprostředně zobrazovat stejná data, která byla vyslána. Nezapomeňte v programu Terminal nastavit shodný formát asynchronního rámce, symbolovou rychlost a zahájit komunikaci tlačítkem Connect. Při sériové komunikaci neuvažujte žádné řízení toku, tj. Handshaking v programu Terminal nezapínejte. Bod 4. Vytvořte nový projekt v prostředí AVR Studio a pro mikrokontrolér ATmega16 naprogramujte v jazyce C aplikaci, která umožní navázání komunikace s obvodem expandéru portu PCF8574, který je připojen ke sběrnici I2C. Mikrokontrolér bude ve funkci řídicího obvodu Master a expandér v podřízené funkci Slave. V řídicích registrech jednotky TWI nastavte bitové slovo odpovídající frekvenci hodinového signálu f SCL = 100 khz dle rovnice (8.2), předděličku hodinového signálu ponechte na hodnotě 1. Popis řídicích registrů naleznete v katalogovém listu [Atm16], část Two-wire Serial Interface. Pokud použijete k nastavení řídicích registrů pomocný nástroj AVR Wizard, nezapomeňte, že maximální frekvence mikrokontroléru, kterou lze pomocí této aplikace použít je < 16 MHz! Struktura zdrojového kódu je naznačena v příkladě 8.1. Knihovna pro komunikaci s jednotkou TWI byla vytvořena podle [Atm16] a je dostupná na internetových stránkách předmětu. Nezapomeňte vložit hlavičkový soubor této knihovny do vaší aplikace (řádek 2). Hlavní funkce aplikace obsahuje nastavení TWI periférie (řádek 5), dále je na sběrnici I2C zahájena komunikace (řádek 6), vyslána adresa obvodu expandéru SLA+W (řádek 7), následuje vyslání datového slova (řádek 8), a nakonec je komunikace ukončena (řádek 9). Zobrazte si časové průběhy obou signálů sběrnice I2C na osciloskopu (datový signál SDA je přítomen na pinu PC1, hodinový signál SCL na pinu PC0). Ověřte správnost generovaných dat a frekvence hodinového signálu. 8.4 Náměty pro další aplikace Naprogramujte aplikaci pro sériový přenos dat mezi mikrokontrolérem ATmega16 a obvodem reálného času PCF8583. Vytvořte aplikaci, která přeposílá data mezi obvodem reálného času (RTC Real

46 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 45 Zdrojový kód 8.1: Řízení komunikace prostřednictvím sériové sběrnice I2C. 1 #include <avr \ i o. h> // hlavičkový soubor pro m i k r o k o n t r o l é r 2 #include twi h. h // knihovna pro s b ě r n i c i I2C (TWI) 3 4 int main ( void ) { // h l a v n í funkce a p l i k a c e 5... // d o p i š t e n astavení ř í d i c í c h r e g i s t r ů TWI 6 twi_start ( ) ; // v y s l á n í s t a r t o v a c í podmínky 7 twi_address_w (... ) ; // v y s l á n í adresy SLA+W 8 twi_write (... ) ; // v y s l á n í datového paketu 9 twi_stop ( ) ; // v y s l á n í ukončovací podmínky // d o p i š t e t ě l o h l a v n í funkce 11 } Time Clock) PCF8583 a mikrokontrolérem ATmega16 pomocí sběrnice I2C. Strukturu datových registrů RTC naleznete v katalogovém listě [Rtc97]. Kromě adresace samotné součástky je potřeba provést také výběr jednotlivých datových registrů obvodu RTC. Na LCD displeji si zobrazte údaje o minutách a sekundách. Knihovnu pro komunikaci se sběrnicí I2C z předešlého příkladu je nutné doplnit o funkce realizující vyslání adresy SLA+R a čtení datových slov z podřízeného obvodu. 8.5 Shrnutí Počítačové cvičení umožnilo studentům testovat asynchronní komunikaci mezi mikrokontrolérem ATmega16 a PC pomocí jednotky UART. Dále byla vyzkoušena komunikace mezi obvody Master a Slave po sběrnici I2C. Studenti si osvojili dovednosti potřebné k řízení interních jednotek UART a TWI pomocí kontrolních registrů a používání externích knihoven v jazyce C. 8.6 Kontrolní otázky Otázka 8.1 Jakým způsobem vyhodnotí asynchronní přijímač vyslaná data 0b10100, bylli zvolen mód 5N1, ale symbolová rychlost přijímače byla nastavena oproti vysílači jako dvojnásobná? Otázka 8.2 Jaké napět ové úrovně využívá UART, RS-232 a I2C? Otázka 8.3 Naznačte pořadí rámců na sběrnici I2C při komunikaci dle zadání z kapitoly 8.4.

47 46 Mikroprocesorová technika a embedded systémy 9 Vývojové prostředí Code Composer Studio Test předchozích znalostí 1. Jakými prostředky je docíleno paralelního zpracování instrukcí a dat u signálových procesorů? 2. Jaké jsou praktické dopady programování signálových procesorů ve vyšším programovacím jazyce, v jazyce symbolických adres a v lineárním jazyce symbolických adres. 3. Jakým způsobem lze v jazyce C naplnit jednorozměrné pole již při deklaraci? Cíle počítačového cvičení Cílem tohoto počítačového cvičení je seznámení se s vývojovým prostředím Code Composer Studio, které slouží k programování mikrokontrolérů a signálových procesorů firmy Texas Instruments. Především budou představeny základní možnosti tohoto prostředí pro ladění vyvíjených aplikací. Seznámení bude provedeno prostřednictvím modifikované verze tutoriálu Code Composer Studio IDE, Developing a Simple Program [Tex01]. 9.1 Zadání 1. Seznamte se s vývojovým prostředí Code Composer Studio, určené pro vývoj a testování aplikací pro signálové procesory firmy Texas Instruments. 2. Naprogramujte aplikaci pro výpočet skalárního součinu vektorů. 3. Pro simulátor signálového procesoru TMS naprogramujte kruhovou pamět, využitelnou pro implementaci FIR filtru. 9.2 Teoretické poznatky Signálové procesory slouží k efektivní realizaci algoritmů číslicového zpracování signálů. K tomu je uzpůsobena také jejich vnitřní struktura. Vývoj signálových procesorů směřuje k paralelním systémům, které umožňují současný výkon několika procesů (instrukcí) a také současný výkon několika nezávislých datových toků. Tato struktura je podle [Fly66] označována jako MI/MD (Multiple Instruction Stream/Multiple Data Stream). Pro zvýšení početního výkonu je využito několik funkčních jednotek, které jsou navzájem nezávislé a mohou pracovat současně. Strukturu MI/MD využívají také 32bitové signálové procesory firmy Texas Instruments s označením TMS320C6000. Řada TMS320C6000 obsahuje celkem tři rodiny signálových procesorů. Nejstarší řadou je C62xx, využívající pouze paralelního zpracování instrukcí. Na ni navazuje mnohem výkonnější rodina s označením C64xx, která již umožňuje také paralelní zpracování dat. Obě rodiny jsou tvořeny procesory s pevnou řádovou čárkou (fixed-point). Zástupci procesorů s plovoucí řádovou čárkou (floating-point) jsou vyráběny pod označením C67xx. Architektura všech těchto signálových procesorů je označována jako VLIW (Very Long Instruction Word).

48 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 47 V počítačových cvičeních budeme využívat signálový procesor s plovoucí řádovou čárkou TMS320C6713, který je obecně vhodný pro seznámení se s programováním algoritmů pro číslicové zpracování dat. Číselná reprezentace s plovoucí řádovou čárkou totiž vykazuje obrovský dynamický rozsah a prakticky odpadá nutnost uvažování přetečení hodnot použitých proměnných. Rovněž pro seznámení se s programováním aplikací pro signálové procesory je vhodné využít vyššího programovacího jazyka a nikoliv jazyka symbolických adres. Vzhledem k možnostem optimalizačních nástrojů překladačů zdrojového kódu, velikostem pamětí a hodnotě řídicího hodinového signálu, je v mnohých aplikacích programování v jazyce C naprosto dostačující. Proto je úvodní cvičení se signálovými procesory zaměřeno výhradně na programování v tomto jazyce. V počítačových cvičeních budeme využívat nástroj Code Composer Studio verze Pokyny k zadání Bod 1. Sestavte a v simulátoru odlad te aplikaci realizující zesílení vstupního harmonického signálu. Nastavení CCS Spust te program Setup CCStudio v.3.1, jehož zástupce je na ploše. V levé dolní části otevřeného okna stiskněte tlačítko Remove All. Tím odstraníte veškerá nastavení aplikace. Poté klikněte na záložku Factory Boards a z nabídky vyberte položku C6713 Device Cycle Accurate Simulator a výběr potvrd te tlačítkem << Add. V části System Configuration se tato volba zobrazí (viz obrázek 9.1). Aplikaci ukončete stiskem tlačítka Save & Quit a volbou Yes, v následujícím dialogovém okně, můžete spustit vývojové prostředí Code Composer Studio. Obrázek 9.1: Výběr simulátoru signálového procesoru TMS320C6713 pro prostředí Code Composer Studio. Vytvoření projektu Vytvořte nový projekt (Project New...), zadejte jeho název, umístění na lokálním disku, Project Type ponechte Executable (.out) a cílovou rodinu procesoru

49 48 Mikroprocesorová technika a embedded systémy Kompilace projektu Běh programu Breakpointy Target zvolte TMS320C67XX. Tlačítkem Finish dokončíte tvorbu nového projektu. Vytvořený projekt má příponu.pjt. Z internetových stránek předmětu si stáhněte zdrojové kódy ukázkové aplikace zesileni c soubory.zip a nakopírujte je do vytvořeného adresáře. Jedná se o soubory simulator cmd.cmd, obsahující popis obsazení paměti signálového procesoru, dále datový soubor sine.dat se vzorky harmonického signálu a především zdrojový soubor main c.c, obsahující hlavní funkci vyvíjené aplikace. Pomocí příkazu Project Add Files to Project... postupně vložte zdrojový soubor.c a konfigurační.cmd do vytvořeného projektu. V levé části vývojového prostředí, v tzv. inspektoru projektu (který sdružuje všechny použité soubory a knihovny) si ve složce Source otevřete vložený zdrojový soubor main c.c. Projděte si celý zdrojový kód a ujasněte si funkci jednotlivých příkazů. Obsah projektu uložte příkazem Project Save. Spust te kompilaci celého projektu příkazem Project Rebuild All, nebo příslušným tlačítkem. Všechny zdrojové soubory tak budou překompilovány, převedeny do strojového jazyka procesoru a budou přilinkovány všechny potřebné knihovny. Výstup procesu je zobrazen v dolní části prostředí v záložce Build, včetně identifikace případných chyb a upozornění. Příkazem File Load Program... Ctrl+L nahrajete z adresáře Debug právě překompilovaný kód.out do paměti signálového procesoru v tomto případě simulátoru. (Pozn.: Automatické načítání přeloženého kódu do paměti je možné nastavit pomocí Option Customize..., na záložce Program/Project Load a zatržením checkboxu Load Program After Build.) Naprogramovanou aplikaci spust te příkazem Debug Go Main Ctrl+M. Výkon aplikace se zastaví na začátku hlavní funkce programu. Aplikaci je možné krokovat příkazem Debug Step Into F11, spustit Debug Run F5 a zastavit příkazem Debug Halt Shift+F5. Všechny příkazy pro řízení běhu aplikace mají také svá tlačítka se schématickými ikonami vlevo od inspektora projektu. Při spuštění aplikace se v záložce Stdout v dolní části prostředí vypíše text Start aplikace. Zastavte chod aplikace. Další část práce s prostředím bude zaměřena na vkládání breakpointů, krokování programu a zobrazení hodnot proměnných. Znovunačtěte přeloženou aplikaci do paměti procesoru File Reload Program Ctrl+Shift+L. Dvojím kliknutí na název zdrojového souboru main c.c v inspektoru projektů si ho znovu zobrazte v hlavní části vývojového prostředí. Umístěte kurzor na řádek puts( "zpracování dat...ok" ) ; v nekonečné smyčce hlavní funkce. Na toto místo vložte breakpoint pomocí příslušného tlačítka, zobrazující dlaň, nebo klávesou F9. (Vlevo od začátku řádku se objeví červená značka signalizující, že v tomto místě se výkon programu vždy přeruší.) Otevřete oblast zobrazující hodnoty proměnných View Watch Window. Zde se za běhu programu zobrazují hodnoty zvolených proměnných. Spust te aplikaci příkazem Debug Go Main Ctrl+M a následně Debug Run F5. Výkon programu se skutečně přerušil na vloženém breakpointu. V pravé dolní části prostředí vyberte záložku Watch 1. Po kliknutí na ikonu na začátku řádku, je možné zadat název libovolné proměnné, jejíž hodnotu chceme analyzovat. Zadejte identifikátor zesílení gain, který obsahuje hodnotu definovanou

50 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 49 Testovací data Vizualizace dat na začátku zdrojového souboru jako MINGAIN. V záložce Watch Locals se automaticky zobrazují pouze proměnné, které jsou použity v dané funkci. Vyzkoušejte si to krokováním programu příkazem Debug Step Into F11. V následujícím textu je popsán způsob načítání testovacích dat ze souboru pomocí tzv. probe points a jejich vizualizace v prostředí CCS. Znovunačtěte přeloženou aplikaci do paměti procesoru File Reload Program Ctrl+Shift+L a ve zdrojovém souboru opět nastavte kurzor na řádek s příkazem puts( "zpracování dat...ok" ) ;. Klikněte na tlačítko Toggle Probe Point (ve stejné části jako breakpointy), což se projeví světle modrou značkou u začátku řádku. Zvolte příkaz File File I/O..., který slouží k nastavení všech přístupových bodů. V záložce File Input vložte datový soubor se vzorky harmonického signálu klikněte na tlačítko Add File a v domovském adresáři vašeho programu otevřete soubor sine.dat. V dialogovém okně File I/O nastavte v záložce File Input adresu, kam se mají vzorky signálu ze souboru kopírovat (Address: inp buffer), počet načítaných vzorků (Length: 100), a jejich opakované znovunačtení (zatrhnout checkbox Wrap Around). Klikněte na tlačítko Add Probe Point, v otevřeném dialogovém okně dále klikněte na řádek začínající main c.c line... a v roletce Connect To zvolte položku začínající FILE IN:... Klikněte na tlačítko Replace a použití sondy definitivně potvrdíte postupným stiskem dvou tlačítek OK. Tím je zajištěno, že do proměnné inp buffer, představující buffer se vstupními vzorky zpracovávaného signálu, se bude periodicky načítat vždy 100 vzorků z datového souboru sine.dat. Vývojové prostředí CCS umožňuje jednoduché grafické zobrazení zpracovávaných dat. Příkazem View Graph Time/Frequency... otevřete dialogové okno, ve kterém nastavte následující vlastnosti. Titulek okna Graph Title změňte na Vstupní signál, adresu paměti Start Address, od které se budou vzorky načítat změňte na inp buffer, počet načítaných Acquisition Buffer Size a zobrazovaných Display Data Size vzorků nastavte na 100, vypněte automatickou změnu měřítka Autoscale a maximální hodnotu v ose y Maximum Y-value snižte na Tlačítkem OK se vám otevře nové okno pro zobrazení časového průběhu vstupního signálu. Klikněte na toto okno pravým tlačítkem a v kontextovém menu vyberte Float In Main Window. Ještě jednou spust te příkaz View Graph Time/Frequency... a nastavte parametry Graph Title a Start Address také pro výstupní signál, který je v paměti ukládán od adresy out buffer. Opět přerovnejte okna v hlavní části prostředí kliknutím pravým tlačítkem a příkazem Float In Main Window. Ujistěte se, že máte stále nastavený breakpoint a probe na řádku s příkazem puts... Spust te chod aplikace příkazem Debug Animate Alt+F5. Tento příkaz má podobnou funkci jako Debug Run F5, tj. zastaví výkon programu na pozici breakpointu, ale po aktualizaci všech hodnot a proměnných, automaticky pokračuje ve výkonu programu dále. Výkon programu pozastavte příkazem Debug Halt Shift+F5. V záložce Watch 1 změňte hodnotu proměnné gain a program opětovně spust te Debug Animate Alt+F5. Tímto způsobem je možné velmi účelně ladit zdrojový kód vyvíjené aplikace, jak napovídá obrázek 9.2. Pozn.: Všechny breakpointy je možné vypnout tlačítkem Remove all breakpoints a všechny přístupové body tlačítkem Remove all Probe Points.

51 50 Mikroprocesorová technika a embedded systémy Obrázek 9.2: Vývojové prostředí Code Composer Studio firmy Texas Instruments. Bod 2. Vytvořte nový projekt a v jazyce C naprogramujte aplikaci realizující výpočet skalárního součinu vektorů. Do projektu si vložte konfigurační soubor simulator cmd.cmd z předešlého úkolu. Zdrojový soubor.c si vytvořte nový název souboru může být libovolný a jeho struktura může být dle 9.1. (Nezapomeňte vytvořený zdrojový soubor rovněž vložit do projektu.) Necht je velikost obou vektorů N = 2 n, kde n si zvolíte. Hodnoty vektorů si nadefinujte již při deklaraci obou proměnných. (Typ proměnné zvolte float.) Hlavní funkce dále obsahuje cyklus pro výpočet skalárního součinu a funkce pro výpis informací do konzoly Stdout v dolní části vývojového prostředí. Pro zobrazení hodnoty proměnné používejte funkci printf() (řádek 11), která je definována v knihovně stdio.h (řádek 2). Aplikace musí být korektně zakončena. Aplikaci přeložte, odstraňte případné chyby či upozornění a přeložený kód nahrajte do procesoru. Otevřete si okno pro sledování hodnot proměnných (View Watch Window) a krokováním ověřte správný chod vaší aplikace. Bod 3. Vytvořte nový projekt v prostředí Code Composer Studio, vložte do něj konfigurační soubor, řídicí linkování celého projektu (tj. soubor simulator cmd.cmd). Dále vytvořte nový zdrojový soubor.c, který nezapomeňte rovněž přidat do projektu. Naprogramujte funkci tzv. kruhové paměti (anglicky: Circular Buffer). Kruhová pamět představuje jednorozměrné pole, do kterého se postupně zapisují nová data (např. vzorky z A/D převodníku). Jakmile se zapíše vzorek na poslední pozici v kruhové paměti, následující vzorek je uložen již od první pozice. Dojde tak k přepsání nejstaršího vzorku. Pozici v paměti pro následující vzorek je možné specifikovat lokální proměnnou ve funkci uka-

52 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 51 Zdrojový kód 9.1: Výpočet skalárního součinu vektorů pro TMS320C #define N... // z v o l t e s i v e l i k o s t vstupních vektorů 2 #include <s t d i o. h> // standardní I /O knihovna 3 4 void main ( void ) { 5... // doplňte d e k l a r a c i vstupních vektorů 6... ii ; // doplňte typ sumačního indexu 7 8 for ( ii =0; ii<n ; ii++ ) { 9... // t ě l o cyklu pro výpočet s k a l á r n í h o součinu 10 } 11 // výpis výsledku do konzoly 12 printf ( Výsledek =... \ n,... ) ; // doplňte ukončení a p l i k a c e 14 } zatele. Princip pohybování se v kruhové paměti je naznačen v tabulce 9.1. Tabulka 9.1: Princip využití kruhové paměti o velikosti M + 1. Pozice v paměti Vstupní data Označení vzorku 0 x(n px) 1 x(n px + 1).. px 1 x(n 1) předešlý vzorek px x(n) aktuální vzorek px + 1 x(n M) nejstarší vzorek. M 1 x(n px 2) M x(n px 1). Zvolte si počet prvků ve vaší paměti a nejprve naprogramujte cyklus pro ukládání libovolných dat. Správnou funkci ověřte krokováním v simulátoru. Následně doprogramujte také výčet všech dat v paměti od předešlého vzorku až po nejstarší dle tabulky 9.1 (viz kód 9.2). Správnou funkci opět ověřte pomocí simulátoru. Kruhová pamět bude využita v počítačovém cvičení 10, proto je nutné tento bod zadání dokončit! 9.4 Náměty pro další aplikace Realizace kruhové paměti prostřednictvím adresování modulo v katalogovém listu signálového procesoru zjistěte nastavení příslušných řídicích registrů. 9.5 Shrnutí Počítačové cvičení umožnilo studentům seznámit se s vývojovým prostředím Code Composer Studio firmy Texas Instruments, které slouží k vývoji a testování aplikací pro

53 52 Mikroprocesorová technika a embedded systémy Zdrojový kód 9.2: Realizace kruhové paměti pro TMS320C #define M... // z v o l t e s i řád f i l t r u 2 #include <s t d i o. h> // standardní I /O knihovna 3... // prototypy použitých f u n k c í 4 5 void main ( void ) { 6... // d e k l a r a c e proměnných 7 while ( 1 ) { // nekonečná smyčka 8 9 // v l o ž e n í jednoho vzorku value do kruhové paměti 10 store_one_sample ( value ) ; // vypsání všech prvků kruhové paměti 13 print_all_samples ( ) ; 14 } 15 } číslicové systémy této firmy. Přestože zmíněné prostředí umožňuje také vývoj aplikací v nižších jazycích, bylo toto cvičení zaměřeno pouze na programování aplikací v jazyce C. Studenti by měli být schopni vytvořit nový projekt, provést jeho kompilaci a odladění pomocí interních nástrojů prostředí CCS. 9.6 Kontrolní otázky Otázka 9.1 Jakým způsobem je v CCS možné sledovat obsah všech proměnných uvnitř libovolné funkce? Otázka 9.2 Jak lze naprogramovat ukončení reálné aplikace na DSP? Otázka 9.3 Nakreslete vývojový diagram popisující práci s kruhovou pamětí (ukládání jednoho vzorku, výčet všech uložených).

54 Fakulta elektrotechniky a komunikačních technologií VUT v Brně Filtrace signálů, implementace FIR filtru Test předchozích znalostí 1. Co označují zkratky FIR a IIR? 2. Jakým způsobem probíhá adresování modulo u signálových procesorů? 3. Matematicky popište funkci číslicového filtru v časové a frekvenční oblasti. 4. Co je to doplňkový kód (dvojkový doplněk)? Cíle počítačového cvičení Cílem tohoto počítačového cvičení je získat zkušenosti s implementací jednoduchých algoritmů na reálný signálový procesor. Konkrétně je cílem vytvořit FIR filtr a prakticky ověřit jeho správnou funkci Zadání 1. Ověřte funkci programu Scope, který umožňuje generování, zobrazení a frekvenční analýzu signálů prostřednictvím zvukové karty počítače. 2. Pomocí vývojové desky TMS320C6713 DSK realizujte FIR filtr Teoretické poznatky Mezi základní algoritmy pro číslicové zpracování signálů patří bezesporu filtrace. Číslicové filtry se dělí na filtry s konečným počtem vzorků impulzní odezvy (FIR Finite Impulse Response) a s nekonečným počtem (IIR Infinite Impulse Response) [Jan01]. V tomto počítačovém cvičení se budeme zabývat pouze typem FIR. Výstupní signál FIR filtru y( ) je dán konvolucí vzorků vstupního signálu s vzorky impulzní odezvy samotného filtru, dle následujícího vztahu y(n) = M h(m) x(n m) m=0 = h(0) x(n) + h(1) x(n 1) h(m) x(n M), (10.1) kde x( ) představuje vstupní vzorky filtrovaného signálu, h( ) jsou koeficienty filtru (vzorky impulzní odezvy) a M je řád filtru Pokyny k zadání Bod 1. Cílem úkolu je seznámit se s implementací aplikací na reálný signálový procesor a využití funkcí pro načítání a ukládání reálných dat z/do analogového kanálu vývojové desky TMS320C6713 DSP Starter Kit (DSK). Tato deska obsahuje 32bitový signálový procesor s plovoucí řádovou čárkou TMS320C6713 firmy Texs Instruments. Jádro procesoru je tvořeno VLIW (Very Long Instruction Word) architekturou a řízeno hodinovým

55 54 Mikroprocesorová technika a embedded systémy signálem o frekvenci 225 MHz. Analogová data jsou přístupná prostřednictvím 32bitového stereo kodeku TVL320AIC23 (AIC23) [Aic23], který umožňuje A/D a D/A převod. Podporované vzorkovací frekvence jsou 8, 16, 24, 32, 44,1, 48, a 96 khz, které lze softwarově volit. Kodek zajišt uje propojení mezi 3,5 mm audio jackem a TMS320C6713 DSP dvojicí sériových kanálů McBSP (Multi-channel Buffered Serial Port). Kanál McBSP0 je využíván jako jednosměrný pro posílání 16bitových příkazů pro kodek, zatímco McBSP1 slouží jako obousměrný kanál pro příjem a vysílání stereo signálů. Hodnoty obou kanálů jsou reprezentovány 16bitovými čísly ve dvojkového doplňku. Kodek AIC23 je ovládán funkcemi z knihovny aic23 c.c, která je dostupná na internetových stránkách předmětu a obsahuje funkce AIC23 init(), AIC23 read() a AIC23 write(). Pro snadnější použití byly vzorky stereo signálu převedeny do formátu s plovoucí řádovou čárkou. Spust te konfigurační aplikaci Setup CCStudio 3.1. Tlačítkem Remove All odstraňte případné nastavení simulátoru a v záložce Factory Boards vyberte C6713 DSK. Tlačítkem << Add jej potvrd te a aplikaci ukončete tlačítkem Save & Quit. Současně můžete přímo spustit aplikaci Code Composer Studio. Vytvořte nový projekt a do jeho adresáře nakopírujte soubory dsk cmd.cmd, aic23 c.c, aic23 h.h a copy main c.c (dostupné na internetových stránkách předmětu). Konfigurační soubor.cmd obsahuje nastavení překladače pro vývojovou desku a zdrojový kód copy main c.c obsahuje zdrojový kód aplikace, která přijímá stereo signál prostřednictvím AIC23 kodeku a vzorky přeposílá zpět do PC. Do projektu vložte soubory.cmd a.c. Projděte si obsah souboru copy main c.c a ujasněte si činnost všech příkazů. Navažte komunikaci s vývojovou deskou: Debug Connect Alt+C. Příkazem Project Build Option... je nutné nastavit parametry překladu celé aplikace. Na záložce Compiler, v kategorii Basic nastavte Target Version na C671x (-mv6710) a v kategorii Preprocessor přidejte cestu Include Search Path (-i) k adresáři $(Install dir)\c6000\dsk6713\include. Rovněž změňte Pre-Defined Symbol (-d) na CHIP Nastavování ukončete a projekt uložte. Spust te překlad celé aplikace a přeložený kód nahrajte do paměti signálového procesoru a spust te ho (viz postup ze cvičení 9). Analogové vstupy a výstupy vývojové desky jsou propojeny se zvukovou kartou počítače, pomocí které budete generovat a analyzovat analogová data. Spust te program Soundcard Scope [Sco09] umíst ený na ploše. Pomocí generátoru, osciloskopu, příp. frekvenční analýzy si ověřte správnou funkci aplikace v DSP. Seznamte se s možnostmi tohoto programu. Bod 2. Cílem úkolu je implementace FIR filtru typu dolní propust s využitím kruhové paměti z počítačového cvičení 9. Prvním krokem je generace impulzní odezvy takového filtru. Využijeme k tomu interních funkcí programu MATLAB. Program obsahuje celou řadu funkcí pro návrh a testování filtrace signálů. Pro generování koeficientů FIR filtru typu dolní propust s využitím Hammingova okna, je možné využít funkci fir1( M, fmez ), kde M určuje řád filtru a f mez udává mezní frekvenci, přičemž platí že f mez 0; 1 a f mez = 1, je-li rovna polovině vzorkovací frekvence. Řád filtru si zvolte. Vygenerované koeficienty (tj. impulzní odezvu filtru), jejichž počet je M + 1 si poznačte. Frekvenční charakteristiku vámi zvoleného filtru si v Matlabu můžete prohlédnout např. pomocí uživatelsky příjemného nástroje fdatool, jak naznačuje obrázek Parametry F s a F c určují vzorkovací frekvenci a mezní frekvenci navrženého filtru. (Vzorkovací frekvence převodníků na vývojové desce TMS320C6713 DSK je nastavena na

56 Fakulta elektrotechniky a komunikačních technologií VUT v Brně khz.) Koeficienty navrhovaného filtru lze získat také tímto nástrojem. Pomocí příkazu File Export... Ctrl+E bude vektor s koeficienty vyexportován do proměnné Num. Obrázek 10.1: Grafický nástroj fdatool v prostředí Matlab pro návrh filtrů. V prostředí CCS vytvořte nový projekt. Do vytvořeného adresáře si nakopírujte soubory dsk cmd.cmd a knihovnu pro komunikaci s obvodem AIC23: aic23 c.c, aic23 h.h. Do projektu stačí vložit soubory.cmd a.c. Vytvořte nový zdrojový soubor.c, jehož kostra může být dle 10.1 a rovněž jej vložte do projektu. Jak je patrné ze zdrojového kódu, přenos dat z/do stereo kanálu obsahuje vždy dvě volání funkce AIC23 read() a AIC23 write(). Pořadí, který z přečtených/zapsaných vzorků je z levého, nebo pravého kanálu, zde není důležité. Podstatou filtračního algoritmu je konvoluce mezi vzorky impulzní odezvy FIR filtru a načtenými datovými vzorky dle vztahu (10.1) uvnitř funkce processing() na řádku 24, jejíž tělo máte naprogramovat. Pro ukládání vzorků využijte kruhovou pamět z počítačového cvičení 9. Filtrujte pouze signál z jednoho vstupního kanálu. Výstupní kanály necht pak obsahují původní signál a signál filtrovaný. Aplikaci přeložte, nahrajte do DSP a spust te. Správnou funkci navrženého filtru ověřte filtrací obdélníkového signálu z generátoru (viz obrázek 10.2). Jakou frekvenci obdélníkového signálu zvolíte? 10.4 Náměty pro další aplikace S využitím knihoven pro TMS320C6713 DSK naprogramujte jednoduchou aplikaci ovládající LED diody a přepínače. Vytvořte nový projekt v CCS a naprogramujte jednoduchou aplikaci, ovládající LED diody D7 až D10, příp. přepínače SW1, které jsou umístěny na vývojové desce DSK. Do projektu vložte konfigurační soubor dsk cmd.cmd. Knihovny pro DSK jsou součástí prostředí CCS. Kostra aplikace, včetně potřebných knihoven, může být dle 10.2.

57 56 Mikroprocesorová technika a embedded systémy Obrázek 10.2: Aplikace Soundcard Scope pro generování a analýzu signálů prostřednictvím zvukové karty [Sco09]. Ve vložených knihovnách jsou definovány některé funkce, které můžete využít (viz výpis 10.3). Proměnné lednum a dipnum identifikují LED diodu, resp. přepínač a nabývají hodnot 0 až 3. Funkce DSK6713 DIP get() vrací stav přepínače (0 nebo 1) a proměnná delay udává dobu zpoždění v mikrosekundách Shrnutí Počítačové cvičení umožnilo studentům vytvořit reálnou aplikaci FIR filtru, otestovat jeho správnou funkci na generovaných signálech a prakticky si tak ověřit závěry z teorie signálů. Ke generování a analýze analogových signálů byla použita aplikace Soundcard Scope Kontrolní otázky Otázka 10.1 Jak souvisí řád FIR filtru s dobou výkonu filtračního algoritmu a s velikostí alokované datové paměti? Otázka 10.2 Jaké jsou hlavní rozdíly mezi analogovými a číslicovými filtry? Otázka 10.3 Co musí platit pro vzorkovací frekvenci stereo kodeku AIC23 a dobu výkonu funkce processing() z bodu 2, aby bylo dosaženo zpracování signálů v reálném čase?

58 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 57 Zdrojový kód 10.1: Realizace číslicového filtru typu FIR pomocí vývojové desky TMS320C6713 DSK. 1 #define M... // z v o l t e s i řád f i l t r u 2 #include a i c 2 3 h. h // knihovna pro komun. s AIC23 a deskou DSK 3 4 void main ( void ) { // h l a v n í funkce 5 float sample_in ; // vstupní vzorek 6 float sample_out ; // výstupní vzorek 7 float fir ; // f i l t r o v a n ý vzorek 8 float x [ M+1] = {0} ; // vzorky vstupního s i g n á l u 9 float h [ M+1] = {... } ; // doplňte impulzní odezvu vašeho FIR f i l t r u // případné d a l š í d e k l a r a c e DSK6713_init ( ) ; // i n i c i a l i z a c e vývojové desky 13 AIC23_init ( ) ; // i n i c i a l i z a c e obvodu AIC while ( 1 ) { // nekonečná smyčka // n a č t e n í vzorku z levého kanálu AIC23 18 sample_in = AIC23_read ( ) ; // záloha načteného vzorku 21 sample_out = sample_in ; // naprogramujte f u n k c i FIR f i l t r u 24 fir = processing ( ) ; // zapsání f i l t r o v a n é h o vzorku na levý kanál AIC23 27 AIC23_write ( fir ) ; // n a č t e n í jednoho vzorku z pravého kanálu 30 // vzorek j e zahozen FIR f i l t r pracuje pouze s pravým kanálem 31 sample_in = AIC23_read ( ) ; // zapsání jednoho vzorku na pravý výstupní kanál AIC23 34 // do pravého s t e r e o kanálu j e zapsán původní, vstupní vzorek 35 AIC23_write ( sample_out ) ; 36 } 37 }

59 58 Mikroprocesorová technika a embedded systémy Zdrojový kód 10.2: Ovládání LED diod a přepínačů na vývojové desce TMS320C6713 DSK. 1 #include dsk6713. h // knihovna pro TMS320C6713 DSK 2 #include dsk6713 led. h // knihovna pro LED diody 3 #include dsk6713 dip. h // knihovna pro přepínače 4 5 void main ( ) { // h l a v n í funkce 6 DSK6713_init ( ) ; // i n i c i a l i z a c e vývojové desky 7 DSK6713_LED_init ( ) ; // i n i c i a l i z a c e LED diod 8 DSK6713_DIP_init ( ) ; // i n i c i a l i z a c e přepínačů 9 10 while ( 1 ) { // nekonečná smyčka // doplňte váš kód 12 } 13 } Zdrojový kód 10.3: Funkce pro ovládání LED diod a přepínačů na vývojové desce TMS320C6713 DSK. 1 void DSK6713_LED_on ( Uint32 lednum ) ; // r o z s v í c e n í LED diody 2 void DSK6713_LED_off ( Uint32 lednum ) ; // z hasnutí LED 3 void DSK6713_LED_toggle ( Uint32 lednum ) ; // negování stavu LED 4 Uint32 DSK6713_DIP_get ( Uint32 dipnum ) ; // n a č t e n í stavu přepínače 5 void DSK6713_waitusec ( Uint32 delay ) ; // zpoždění v us

60 Fakulta elektrotechniky a komunikačních technologií VUT v Brně Diskrétní Fourierova transformace Test předchozích znalostí 1. Jaký je rozdíl mezi DFT a FFT? 2. Co je to bitově reverzní pořadí a kde se používá? 3. Jak lze v jazyce C předávat informaci o adrese jednorozměrného pole mezi funkcemi. Cíle počítačového cvičení Cílem tohoto počítačového cvičení je detailní seznámení s převodem signálů z časové do frekvenční oblasti, prostřednictvím diskrétní Fourierovy transformace a rychlého výpočtu pomocí FFT. Dále je cílem osvojení si nástrojů pro evaluaci náročnosti jednotlivých částí zdrojového kódu v prostředí Code Composer Studio Zadání 1. Naprogramujte algoritmus diskrétní Fourierovy transformace a ověřte jej v simulátoru signálového procesoru TMS320C Pomocí interního nástroje prostředí Code Composer Studio, zjistěte početní náročnost DFT. 3. Naprogramujte algoritmus pro rychlý výpočet Fourierovy transformace (FFT) v jazyce C a porovnejte jeho početní náročnost s DFT Teoretické poznatky Diskrétní Fourierova transformace (DFT Discrete Fouriere Transform) vstupní sekvence x(n) o délce N je definována následujícím způsobem [Cha05] X(k) = N 1 n=0 x(n) W nk, (11.1) kde W nk je označována jako twiddle konstanta a je definována vztahem W nk = e j2πnk/n. (11.2) Index k = 0, 1,..., N 1. S využitím rovnosti e j = cos( ) + j sin( ) může být definiční vztah DFT rozdělen na reálnou a imaginární část dle rovnic (11.3). R {X(k)} = I {X(k)} = N 1 n=0 x(n) cos(2πnk/n) (11.3) N 1 x(n) sin( 2πnk/N). n=0

61 60 Mikroprocesorová technika a embedded systémy Proces výpočtu diskrétní Fourierovy transformace je optimalizován pomocí rychlého algoritmu (FFT Fast Fourier Transform). Existuje několik verzí tohoto algoritmu. Základní dělení je podle počtu prvků: pro tzv. radix 2 platí, že N = 2 n, pro radix 4 platí N = 4 n. V obou případech je výpočet frekvenčních koeficientů postupný. Výpočet N bodů DFT je postupně rozdělen na dvě DFT pro N/2 bodů, následně na čtyři DFT pro N/4 bodů, atd. Celková početní náročnost se tak značně sníží. Podle pozice, kdy dochází k rozdělení DFT mluvíme o tzv. decimaci v časové (DIT Decimation in Time), nebo ve frekvenční (DIF Decimation in Frequency) oblasti. Postup výpočtu osmi frekvenčních koeficientů pomocí DIF je znázorněn na obrázku Spojení dvou šipek představuje součet hodnot. Je-li u šipky hodnota 1, je realizován rozdíl dvou hodnot. Konstantami W n komplexně násobíme příslušné hodnoty. x(0) Fáze 1 Fáze 2 Fáze 3 x (0) x (0) X(0) x(1) x (1) x (1) W 0 X(4) 1 x(2) W 0 X(2) 1 x(3) W 2 W 0 X(6) x(4) W X(1) 1 x(5) W 1 W 0 X(5) x(6) 1 W 2 W 0 1 X(3) x(7) 1 1 W 3 W 2 W 0 X(7) Obrázek 11.1: Výpočet 8bodové FFT s využitím DIF (Decimation in Frequency). Jak je z obrázku patrné, výpočet frekvenčních koeficientů se provádí ve třech postupných fázích. Výpočet první fáze lze zapsat pomocí rovnic (11.4), druhá fáze je pak vyjádřena rovnicemi (11.5). Komplexní twiddle konstanty W n lze vyčíslit pomocí vztahu W n = e j2πn/n. Tj. R{W 0 } = 1, I{W 0 } = 0, R{W 1 } = 0,7071, I{W 1 } = -0,7071, atd. x(0) + x(4) x (0) (11.4) x(1) + x(5) x (1) x(2) + x(6) x (2) x(3) + x(7) x (3) [x(0) x(4)] W 0 x (4) [x(1) x(5)] W 1 x (5) [x(2) x(6)] W 2 x (6) [x(3) x(7)] W 3 x (7)

62 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 61 x (0) + x (2) x (0) (11.5) x (1) + x (3) x (1) [ ] x (0) x (2) W 0 x (2) [ ] x (1) x (3) W 2 x (3) x (4) + x (6) x (4) x (5) + x (7) x (5) [ ] x (4) x (6) W 0 x (6) [ ] x (5) x (7) W 2 x (7) 11.3 Pokyny k zadání Bod 1. Nakonfigurujte vývojové prostředí Code Composer Studio pro práci se simulátorem TMS320C6713 (viz počítačové cvičení 9). Vytvořte nový projekt, vložte do něj konfigurační soubor, řídicí linkování celého projektu (soubor simulator cmd.cmd, dostupný na internetových stránkách předmětu [Fry01]). Dále vytvořte nový zdrojový soubor.c, který nezapomeňte rovněž přidat do projektu (Project Add Files to Project...). Kostra zdrojového souboru je zobrazena ve výpise Zdrojový kód 11.1: Implementace DFT na signálový procesor TMS320C #define N... // z v o l t e s i počet prvků DFT 2 #include <math. h> // knihovna matematických f u n k c í ( goniom. f c e ) 3 4 float pi = ; // PI 5 float x [ N ] = {... } ; // z v o l t e s i t e s t o v a c í vzorky vstupního s i g n á l u 6 float y_re [ N ] ; // r e á l n á č á s t DFT k o e f i c i e n t ů 7 float y_im [ N ] ; // imaginární č á s t DFT k o e f i c i e n t ů 8 9 // prototyp funkce pro výpočet DFT 10 // px u k a z a t e l na vstupní data 11 // pre u k a z a t e l na r e á l n é č á s t i f r e k v e n č n í c h k o e f i c i e n t ů 12 // pim u k a z a t e l na imaginární č á s t i f r e k v e n č n í c h k o e f i c i e n t ů 13 void dft ( f loat px, f loat pre, float pim ) ; void main ( void ) { // h l a v n í funkce // výpočet Nbodové DFT 18 dft ( &x [ 0 ], &y_re [ 0 ], &y_im [ 0 ] ) ; while ( 1 ) ; // nekonečná smyčka 21 } void dft ( f loat px, f loat pre, float pim ) { // naprogramujte výpočet Nbodové DFT d l e (11.3) 25 }

63 62 Mikroprocesorová technika a embedded systémy Zvolte si počet prvků transformace DFT (řádek 1). Knihovna matematických funkcí (řádek 2) obsahuje výpočet goniometrických funkcí sinus a kosinus. S ohledem na velikost N si naplňte také vektor testovacích vzorků vstupního signálu (řádek 5). Vašim úkolem bude naprogramovat algoritmus DFT dle vztahů (11.3) a výsledky uložit do proměnných y re a y im. Adresy prvních prvků těchto proměnných, společně s adresou prvního prvku testovacích dat jsou předávány do funkce dft(), viz řádek 18. Aplikaci přeložte (Project Rebuild All), nahrajte do simulátoru (File Load Program... Ctrl+L) a spust te ji (Debug Run F5 ). Hodnoty koeficientů si zobrazte pomoci příkazu View Memory... V dialogovém okně nastavte adresu, od které jsou uloženy reálné části frekvenčních koeficientů Address: y re a formát zobrazení hodnot změňte na plovoucí řádovou čárku 32-Bit Floating Point. Spust te program MATLAB a pomocí funkce fft a vašeho testovacího vektoru vstupních dat z řádku 5 si ověřte vámi dosažené výsledky. Bod 2. Zjistěte početní náročnost funkce pro výpočet DFT. Využijte k tomu interní nástroj prostředí CCS. Přeložte celý projekt. Spust te nastavení profilovacího nástroje Profile Setup. Samotné profilování se povoluje ikonou stopek (Enable/Disable Profiling). Přepněte se do druhé záložky Ranges a rozbalte seznam všech dostupných funkcí (Functions). Funkce, které chcete profilovat stačí myší přetáhnout z položky Disabled do Enabled. Výsledky profilování se zobrazují v okně Profiler Viewer na záložce Profiler. Na chvíli spust te výkon aplikace a zase ji zastavte. Přibližný počet strojových cyklů, potřebných pro výkon vybraných funkcí je zobrazen ve sloupci cycle. Total: Incl. Total, počet opakování funkcí ve sloupci Access Count (viz obrázek 11.2). Bod 3. Z obrázku 11.1 si vyjádřete rovnice pro výpočet konečné fáze algoritmu FFT, které doplní vztahy (11.4) a (11.5). Vypočtěte komplexní hodnoty twiddle konstant W 0 až W 3. V prostředí CCS naprogramujte v jazyce C funkci, která bude obsahovat postupně všechny rovnice pro výpočet 8mi bodové FFT prostřednictvím DIF a aplikujte ji na testovací data z bodu 1. Rovnice pro početní operace s komplexními čísly byly uvedeny v počítačovém cvičení 1. Dosažené výsledky porovnejte s hodnotami získanými prostřednictvím DFT. Liší se tyto hodnoty? Zjistěte početní náročnost tohoto algoritmu Náměty pro další aplikace Naprogramování rychlého algoritmu Fourierovy transformace pro N = 16, příp. 32 vzorků Shrnutí Počítačové cvičení umožnilo studentům praktické seznámení s výpočtem Fourierovy transformace. Konkrétně byly srovnány algoritmy diskrétní Fourierovy transformace a rychlý výpočet pomocí FFT. V rámci počítačového cvičení byla také představena metoda zjišt ování početní náročnosti jednotlivých funkcí.

64 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 63 Obrázek 11.2: Interní nástroj CCS pro hodnocení početní náročnosti algoritmů Kontrolní otázky Otázka 11.1 Jaký vztah platí pro nárůst početní náročnosti DFT při zvyšování počtu bodů N? Otázka 11.2 Jakým způsobem lze rozšířit výpočet 8mi bodové FFT pro N = 16? Otázka 11.3 Uved te základy práce s ukazateli v jazyce C.

65 64 Mikroprocesorová technika a embedded systémy 12 Kombinace programování v jazyce C a v lineárním jazyce symbolických adres Test předchozích znalostí 1. Jakým způsobem lze předávat parametry mezi zdrojovým kódem v jazyce C a jazykem symbolických adres? 2. V čem se liší programování signálových procesorů v JSA a v lineárním jazyce symbolických adres? 3. Jakým způsobem se ve vývojovém prostředí CCS zobrazí obsah paměti, či hodnota proměnné? Cíle počítačového cvičení Cílem tohoto počítačového cvičení je osvojit si vývoj aplikací pro signálové procesory pomocí tzv. lineárního jazyka symbolických adres (LJSA) a především prakticky si ověřit výhody a nevýhody tohoto způsobu programování Zadání 1. Seznamte se s vývojem aplikací pro signálové procesory TMS320C6000 pomocí lineárního jazyka symbolických adres a ověřte početní náročnost funkcí v jazyce C a LJSA. 2. Seznamte se s optimalizačními nástroji vývojového prostředí CCS. 3. Realizujte algoritmus Fourierovy transformace pomocí vývojové desky TMS320C DSK Teoretické poznatky Vývoj aplikací v tzv. lineárním jazyce symbolických adres (LJSA) představuje mezikrok mezi programováním ve vyšším jazyce C a přímo v jazyce symbolických adres (JSA). Oproti JSA, obsahuje LJSA některá zjednodušení. Především není potřeba specifikovat konkrétní funkční jednotky. Dále se programátor nemusí starat o korektní časování výkonu jednotlivých instrukcí a především není nutné používat konkrétní pracovní registry, a to ani při předávání parametrů mezi funkcemi v jazyce C a v LJSA. Zdrojový kód v LJSA je přímo tvořen instrukcemi vybraného signálového procesoru a makry, které řídí překlad celého kódu. Vybrané instrukce pro signálový procesor TMS320C6713 jsou uvedeny v tabulce Kompletní popis všech instrukcí lze nalézt v manuálu instrukční sady [Tex07] Pokyny k zadání Bod 1. V prostředí Code Composer Studio vytvořte v jazyce C aplikaci, která volá jednoduchou funkci, naprogramovanou v lineárním jazyce symbolických adres. Zdrojové soubory si stáhněte z internetových stránek předmětu [Fry01]. Tento úkol bude testován pouze v simulátoru, proto do projektu vložte příslušný řídicí soubor.cmd. Do projektu

66 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 65 Tabulka 12.1: Vybrané instrukce signálového procesoru TMS320C6713. Instrukce Popis instrukce Cykly ADD src1,src2,dst Součet znaménkových čísel. 1 ADDSP src1,src2,dst Součet Single-Precision hodnot. 3 B label Skok na návěští. 6 LDB src,dst Načtení 1 bytu z paměti. 5 LDH src,dst Načtení 2 bytů z paměti. 5 LDW src,dst Načtení 4 bytů z paměti. 5 MPY src1,src2,dst Násobení 16bitových znaménkových hodnot. 2 MPYSP src1,src2,dst Násobení Single-Precision hodnot. 4 MV src,dst Přesun dat mezi registry. 1 STB src,dst Uložení 1 bytu do paměti. 4 STH src,dst Uložení 2 bytů do paměti. 4 STW src,dst Uložení 4 bytů do paměti. 4 SUB src1,src2,dst Rozdíl znaménkových čísel. 1 SUBSP src1,src2,dst Rozdíl Single-Precision hodnot. 5 ZERO dst Nulování hodnoty v registru. 1 vložte také zdrojový soubor v jazyce C.c a zdrojový soubor v LJSA.sa. Zdrojový soubor.c obsahuje deklaraci (prototyp) funkce sop sa(), která je naprogramována pomocí LJSA. Kód v LJSA obsahuje opakované načtení dvou operandů z paměti, jejich součin s akumulací a následné vrácení výsledné hodnoty do hlavní funkce v jazyce C. Součástí zdrojového kódu je ukázka cyklu a podmíněného skoku. Projděte si zdrojové kódy a ujasněte si funkci každé instrukce. Zdrojový kód 12.1: Výpočet skalárního součinu (Sum of Product) v lineárním jazyce symbolických adres signálového procesoru TMS320C def _sop_sa 2 _sop_sa :. cproc pa, pb, n ; začátek funkce, dekl. vst. proměnných 3. reg v1, v2, prod, sum ; dekl. pomocných proměnných ( r e g i s t r ů ) 4 ZERO sum ; sum = 0 5 loop : LDW pa++,v1 ; n a č t e n í jednoho prvku 1. vektoru 6 LDW pb++,v2 ; n a č t e n í jednoho prvku 2. vektoru 7 MPYSP v1, v2, prod ; prod = v1 x v2 8 ADDSP prod, sum, sum ; sum = prod + sum 9 SUB n, 1, n ; n = n 1 10 [ n ] B loop ; skoč na loop pokud n!= return sum ; funkce v r a c í hodnotu SoP 12. endproc ; konec funkce v l i n e á r n í m JSA Projekt přeložte a odkrokujte pomocí simulátoru. Všimněte si odsazení všech řádků s makry a instrukcemi pomocí tabulátoru. V tomto případě, to není pouze známkou přehledného programování, ale také nutnou podmínkou správné interpretace překladačem.

67 66 Mikroprocesorová technika a embedded systémy V LJSA totiž mohou být od začátku řádků uvedena pouze návěští, či podmínky pro větvení programu. Kód, vytvořený překladačem je možné zobrazit příkazem View Mixed Source/ASM. Informace o použitých instrukcích lze pak zobrazit kliknutím na požadovanou instrukci a stiskem klávesy F1. Vypnutí kombinovaného zobrazení lze provést opětovnou volbou příkazu View Mixed Source/ASM. Doprogramujte funkci pro výpočet skalárního součinu vektorů dle rovnice (12.1) také v jazyce C. y = N 1 n=0 a(n) b(n). (12.1) V simulátoru ověřte správnou funkci celé aplikace. Zjistěte a porovnejte početní náročnost obou vytvořených funkcí (postup viz počítačové cvičení 11). Bod 2. V tomto úkolu budou využity interní nástroje prostředí CCS pro optimalizaci zdrojových kódů. Konkrétně budeme optimalizovat pouze kód v LJSA. V inspektoru projektu (záložka File View v levé části aplikace) klikněte pravým tlačítkem na název souboru.sa a v kontextovém menu vyberte položku File Specific Options... Zobrazí se dialogové okno, známé z nastavování parametrů překladu celé aplikace. Zde se zvolené nastavení týká pouze souboru.sa. Optimalizace se zadává v Category: Basic. Volbou Opt Speed vs Size: Speed Most Critical (no -ms) nastavte optimalizaci s ohledem na výslednou rychlost programu. Úroveň, na které se bude optimalizace provádět Opt Level: nastavte na nejvyšší, tj. File (-o3). Přeložte znovu celou aplikaci a zjistěte početní náročnost takto optimalizované aplikace. Kód si prohlédněte příkazem View Mixed Source/ASM. V čem se vytvořený kód liší? Bod 3. Připojte napájení k vývojové desce. Spust te CCS pro práci s TMS320C6713 DSK. S využitím zdrojových kódů z počítačového cvičení 11, realizujte na vývojové desce TMS320C6713 DSK výpočet Fourierovy transformace reálného signálu, generovaném pomocí programu Soundcard Scope [Sco09]. Generátorem signálu vytvořte v jednom kanále harmonický signál o frekvenci 1 až 7 khz (vzorkovací frekvence převodníků je 16 khz). Tento signál je přiveden do analogového vstupu na vývojové desce, následně zpracován audio kodekem TLV320AIC23 [Aic23] a předán signálovému procesoru TMS320C6713. Vaším úkolem bude na tento signál aplikovat algoritmus rychlé Fourierovy transformace a moduly výsledných koeficientů poslat prostřednictvím jednoho kanálu sluchátkového výstupu vývojové desky. Druhý kanál necht tvoří původní signál z PC. Budete tak moct v aplikaci Soundcard Scope současně pozorovat signál v časové i frekvenční oblasti. Kostra zdrojového kódu je zobrazena ve výpise Potřebné funkce pro komunikaci s vývojovou deskou TMS320C6713 DSK, včetně obvodu audio kodeku AIC23 obsahuje knihovna aic23 h.h (řádek 3). Zdrojový kód dále obsahuje deklaraci vektoru vstupních vzorků (řádek 7), reálné a imaginární části výstupních frekvenčních koeficientů (řádky 8 a 9) a vektor komplexních hodnot twiddle koeficientů (řádky 12 a 13). Nekonečná smyčka aplikace opakovaně načítá vzorky vstupního signálu prostřednictvím obvodu AIC23. Opět je potřeba načíst dva vzorky levý a pravý kanál stereo

68 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 67 vstupu (řádek 26). Na výstupní dva kanály zapisujte vždy jeden přijatý vzorek a modul vypočteného frekvenčního koeficientu (řádek 33). Ty se vypočtou a uloží do příslušných vektorů každých 8 vzorků (podmínka na řádku 42). Pro výpočet 8 frekvenčních koeficientů využijte již hotovou funkci z počítačového cvičení 11. Aby bylo možné v programu Soundcard Scope identifikovat pozici koeficientu reprezentující stejnosměrnou složku, je tento koeficient záměrně změněn (viz řádek 51). Pozn.: Použitá funkce pro výpočet modulu frekvenčních koeficientů ukládá výsledky do vektoru y re[ ]. Překlad projektu nastavte příkazem Project Build Options... takto: Category: Basic, Target Version: C671x (-mv6710) Category: Preprocessor, Include Search Path (-i): $(Install dir)\c6000\dsk6713\include Category: Preprocessor, Pre-Define Symbol (-d): CHIP 6713 Projekt přeložte a otestujte na vývojové desce. Odpovídá výstupní signál vašim předpokladům? Jaký vliv má počet frekvenčních koeficientů Fourierovy transformace na rozlišovací schopnost frekvenční analýzy? 12.4 Náměty pro další aplikace Vytvoření matematických funkcí, pracujících s komplexními čísly v LJSA. Přeprogramování funkce pro výpočet 8bodové FFT z jazyka C pomocí lineárního jazyka symbolických adres. Aplikace více-bodové FFT pro N = 16, 32, Shrnutí Počítačové cvičení umožnilo studentům srovnání dvou přístupů při vývoji aplikací pro signálový procesor. Prvním přístupem byl vývoj ve vyšším programovacím jazyce C. Druhým pak využití tzv. lineárního jazyka symbolických adres. Kromě složitosti vývoje samotné aplikace, mohli studenti porovnat také efektivitu výsledného kódu Kontrolní otázky Otázka 12.1 Jaké frekvence reprezentují Fourierovy koeficienty X(0) a X(N 1)? Otázka 12.2 Liší je početní náročnost instrukcí pracujících v pevné a plovoucí řádové čárce? Otázka 12.3 Vytvořte vývojový diagram aplikace z bodu 3.

69 68 Mikroprocesorová technika a embedded systémy Zdrojový kód 12.2: Implementace FFT na signálový procesor TMS320C #define N 8 // počet prvků FFT 2 #include <math. h> // knihovna matematických f u n k c í ( goniom. f c e ) 3 #include a i c 2 3 h. h // knihovna pro komun. s AIC23 a deskou DSK 4... // doplňte prototypy v a š i c h f u n k c í 5 6 float pi = ; // PI 7 float x [ N ] = { 0 } ; // vzorky vstupního s i g n á l u 8 float y_re [ N ] = { 0 } ; // r e á l n á č á s t FFT k o e f i c i e n t ů 9 float y_im [ N ] = { 0 } ; // imaginární č á s t FFT k o e f i c i e n t ů // r e á l n á a imaginární č á s t twiddle k o e f i c i e n t ů 12 float w_re [ N / 2 ] = {1, , 0, 0.707} ; 13 float w_im [ N / 2 ] = {0, 0.707, 1, 0.707} ; void main ( void ) { // h l a v n í funkce 16 short px = 0 ; // u k a z a t e l pro ukládání vstup. dat 17 float sample_in ; // pomocný u k a z a t e l pro ukládání vstupních dat DSK6713_init ( ) ; // i n i c i a l i z a c e vývojové desky 20 AIC23_init ( ) ; // i n i c i a l i z a c e obvodu AIC while ( 1 ) { // nekonečná smyčka // n a č t e n í vstupních dat 25 // n a č t e n í jednoho vzorku z levého kanálu 26 sample_in = AIC23_read ( ) ; // n a č t e n í jednoho vzorku z pravého kanálu 29 sample_in = AIC23_read ( ) ; // v y s l á n í dat 32 // zapsání jednoho k o e f i c i e n t u na první kanál 33 AIC23_write ( y_re [ px ] ) ; // p ř e k o p í r o v á n í vstupního vzorku na druhý kanál 36 AIC23_write ( sample_in ) ; // u l o ž e n í vzorku do kruhové paměti 39 x [ px++] = sample_in ; // každých N vstupních vzorků 42 i f ( px == N ) { // v o l á n í funkce pro výpočet 8bodové FFT // doplňte výpočet modulu 8bodové FFT // pomocná značka stejnosměrné s l o ž k y 51 y_re [ 0 ] = ; // nulování u k a z a t e l e vstupních dat 54 px = 0 ; 55 } 56 } 57 }

70 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 69 Literatura [Aic23] Texas Instruments Incorporated. TLV320AIC23. Low-Power Stereo CODEC with HP Amplifier [online] [cit. 29. listopadu 2009]. Dostupné na www: [Ans99] Open Standards. International standard ISO/IEC 9899:1999 [online] [cit. 3. října 2011]. Dostupné na www: wg14/www/docs/n1124.pdf. [Ans1x] Open Standards. International standard ISO/IEC 9899:201x [online] [cit. 3. října 2011]. Dostupné na www: WG14/www/docs/n1539.pdf. [Atm01] Atmel Corporation. Oficiální stránka firmy Atmel [online] [cit. 3. října 2011]. Dostupné na www: [Atm02] Atmel Corporation. 8-bit AVR Instruction Set [online] [cit. 3. října 2011]. Dostupné na www: doc0856.pdf. [Atm03] Atmel Corporation. STK500 [online] [cit. 3. října 2011]. Dostupné na www: [Atm04] Atmel Corporation. AVRISP mkii In-System Programmer [online] [cit. 3. října 2011]. Dostupné na www: tools_card.asp?tool_id=3808. [Atm05] Atmel Corporation. AVR Studio 4 [online] [cit. 3. října 2011]. Dostupné na www: [Atm06] Atmel Corporation. AVR STK500 User Guide [online] [cit. 6. listopadu 2009]. Dostupné na www: doc1925.pdf. [Atm16] Atmel Corporation. 8-bit Microcontroller ATmega16 [online] [cit. 3. října 2011]. Dostupné na www: documents/doc2466.pdf. [Bar03] BARNETT, R., O CULL, L., COX, S. Embedded C Programming and the Atmel AVR. 1st ed. New York (USA): Thomson Learning, Inc., [Dan05] DANDAMUDI, S.P. Guide to RICS Processors for Programmers and Engineers. 1st ed. New York (USA): Springer, [Dov07] Doveda Boys. Znakové LCD displeje [online] [cit. 3. října 2011]. Dostupné na www: [Fed01] FEDRA, Z. Výsledné projekty předmětu MMIA [online] [cit. 3. října 2011]. Dostupné na www:

71 70 Mikroprocesorová technika a embedded systémy [Fle06] [Fly66] [Fry01] FLEURY, P. LCD Library for HD44870 based LCD s [online] [cit. 3. října 2011]. Dostupné na www: avr-software.html. FLYNN, M. J. Very High-Speed Computing Systems. Proceedings of the IEEE. 1966, vol. 54, no. 12, p FRÝZA, T. Tomas Fryza Homepage [online] [cit. 3. října 2011]. Dostupné na www: [Gad01] GADRE, D.V. Programming and Customizing the AVR Microcontroller. New York (USA): McGraw-Hill, [Gcc09] GNU Project. GCC, the GNU Compiler Collection [online] [cit. 3. října 2011]. Dostupné na www: [Hit08] Hitachi, Ltd. Oficiální stránky firmy Hitachi [online] [cit. 3. října 2011]. Dostupné na www: [Cha05] CHASSAING, R. Digital Signal Processing and Applications with the C6713 and C6416 DSK. 1st ed. New Jersey (USA): John Wiley & Sons, [Int01] [Jan01] Intel 4004 Microprocessor [online] [cit. 21. září 2011]. Dostupné na www: JAN, J. Číslicová filtrace, analýza a restaurace signálů. 2. vydání. Brno: FEKT VUT v Brně, [Koc05] KOCHAN, S. G. Programming in C. A Complete Introduction to the C Programming Language. 3rd ed. Indianapolis (USA): Sams Publishing, [Lib09] [Mil97] C library for use with GCC on AVR. AVR Libc Home Page [online] [cit. 21. září 2011]. Dostupné na www: MILLER, L. H., QUILICI, A. E. The Joy of C. 3rd ed. New Jersey (USA): John Wiley & Sons Inc., [Nuv10] Nuvoton. ISD1700 Datasheet [online] [cit. 9. prosince 2010]. Dostupné na www: consumerelectronicsic/isdvoiceic/isdchipcorder/documents/isd1700. pdf. [Pra05] PRATA, S. C Primer Plus. 5th ed. Indianapolis (USA): Sams Publishing, [Qur05] [Rtc97] QURESHI, S. Embedded Image Processing on the TMS320C6000 DSP. Examples in Code Composer Studio and MATLAB. 1st ed. New York (USA): Springer, Philips Semiconductors. PCF8583. Clock/calender with bit RAM [online] [cit. 12. listopadu 2009]. Dostupné na www: net/elec/pcf8583.pdf.

72 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 71 [Sco09] [Sev08] [Ter09] [Tex01] [Tex02] [Tex03] [Tex04] [Tex05] ZEITNITZ, Ch. Soundcard Oscilloscope [online] [cit. 29. listopadu 2009]. Dostupné na www: php?sel=scope_en. ŠEVČÍK, R. Pomocný nástroj pro programování mikrokontrolérů AVR v jazyce C. Diplomová práce. Brno: FEKT VUT v Brně, HW server. Program Terminal pro komunikaci přes RS-232 [online] [cit. 12. listopadu 2009]. Dostupné na www: Texas Instruments Incorporated. Code Composer Studio Tutorial. Developing a Simple Program. Tutoriál dostupný ve vývojovém prostředí Code Composer Studio 3.1. Texas Instruments Incorporated. Floating-Point Digital Signal Processor TMS- 320C6713 [online] [cit. 19. listopadu 2009]. Dostupné na www: http: //focus.ti.com/docs/prod/folders/print/tms320c6713.html. Texas Instruments Incorporated. Code Composer Studio Integrated Development Environment (IDE) v4.x [online] [cit. 19. listopadu 2009]. Dostupné na www: Texas Instruments Incorporated. TMS320C67x DSP Library [online] [cit. 3. října 2011]. Dostupné na www: Texas Instruments Incorporated. TMS320C6713 DSP Starter Kit (DSK) [online] [cit. 3. října 2011]. Dostupné na www: tmdsdsk6713. [Tex06] Texas Instruments Incorporated. Multicore Digital Signal Processor TMS320C6474 [online] [cit. 3. října 2011]. Dostupné na www: [Tex07] [Toc03] [Tre08] [Van03] Texas Instruments Incorporated. TMS320C67x/C67x+ DSP CPU and Instruction Set Refernce Guide [online] [cit. 6. října 2011]. Dostupné na www: TOCCI, R.J., AMBROSIO, F.J. Microprocessors and Microcomputers. Hardware and Software. 6th ed. New Jersey (USA): Prentice Hall, TRETTER, S.A. Communication System Design Using DSP Algorithms. With Laboratory Experiments for the TMS320C6713 DSK. 1st ed. New York (USA): Springer, VÁŇA, V. Mikrokontroléry Atmel AVR, popis procesorů a instrukční soubor. Praha: Ben, technická literatura, [Win08] WinAVR. WinAVR home page [online] [cit. 3. října 2011]. Dostupné na www:

73 72 Mikroprocesorová technika a embedded systémy A Manuál vývojového prostředí AVR Studio A.1 Nový projekt a simulátor Vývojové prostředí AVR Studio je volný nástroj, který je dostupný na internetových stránkách firmy Atmel Corporation [Atm01] a slouží k vývoji a testování aplikací pro mikrokontroléry AVR. V rámci počítačových cvičení budeme používat verzi 4.18 (build 700). Program lze spustit kliknutím na ikonu berušky na pracovní ploše, příp. přes Start Programs Atmel AVR Tools AVR Studio 4. Pro každou aplikaci je nutné vytvořit projekt, který obsahuje informace o souborech se zdrojovými kódy i o konkrétním mikrokontroléru, pro který je aplikace určena. Nový projekt lze vytvořit v menu Project New Project. V následujícím dialogovém okně je potřeba zvolit v jakém programovacím jazyce bude celá aplikace napsána. Možné jsou dvě varianty: v jazyce symbolických adres (JSA): Atmel AVR Assembler, nebo ve vyšším programovacím jazyce C (v laboratoři je dostupný volný překladač GCC): AVR GCC. Dále je nutné napsat název celého projektu Project name a především uvést umístění na pevném disku Location, kam má být nově vytvořený projekt uložen. Všechny projekty dočasně ukládejte do adresáře D:\Dokumenty\vase jmeno\. V názvech projektů, příp. podadresářů používejte pouze znaky anglické abecedy, číslice a znaky a -. Zatržením voleb Create initial file a Create folder zajistíte vytvoření podadresáře (jméno bude totožné s názvem projektu) a vytvoření prázdného zdrojového souboru s názvem např. prvni asm (viz obrázek A.1). Volby potvrd te tlačítkem Next. Obrázek A.1: Vytvoření nového projektu v prostředí AVR Studio s názvem prvni asm a výběr programovacího jazyka. Tvorba projektu pokračuje výběrem platformy pro ladění projektu a cílového mikrokontroléru. Vyberte ladění aplikace pomocí interního simulátoru AVR Simulator a mikrokontrolér ATmega16 (viz obrázek A.2). Po stisknutí tlačítka Finish se nový projekt vytvoří a otevře se v samotném vývojovém prostředí, jak lze vidět na obrázku A.3. Prostředí je rozděleno do pěti částí: (1) inspektor projektu (v programovacím módu) a vnitřní uspořádání mikrokontroléru (v ladicím módu), (2) textový editor pro tvorbu zdrojových kódů, (3) informační panel o průběhu překladu aplikace, (4) nastavení všech interních periférií zvoleného mikrokontroléru a (5) menu a ovládací prvky. Zdrojový kód lze do strojového jazyka přeložit příkazem Build Build, příp. stisknutím klávesy F7, nebo kliknutím na ikonu na liště (5). Tímto příkazem dojde nejprve k syn-

74 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 73 Obrázek A.2: Výběr ladícího nástroje a cílového mikrokontroléru. Obrázek A.3: Vývojové prostředí AVR Studio s vytvořeným projektem. taktické kontrole zdrojového kódu a následně k překladu do strojového kódu. Informace o průběhu a výsledcích překladu jsou zobrazeny v informačním panelu (3). Úspěšný překlad je indikován konstatováním Assembly complete, 0 errors. 0 warnings. Eventuální chyby i upozornění je potřeba odstranit. Úspěšný překlad je také doprovázen informací o velikosti výsledného kódu a jeho rozložení do programové paměti Flash (.cseg), datové paměti SRAM (.dseg) a do paměti EEPROM (.eseg) (viz obrázek A.4).

75 74 Mikroprocesorová technika a embedded systémy Do ladícího režimu se přepíná příkazem Debug Start Debugging, stisknutím klávesové zkratky Ctrl+Shift+Alt+F5, nebo kliknutím na ikonu. V prostředí simulátoru jsou zpřístupněna tlačítka v příkazové liště, ovládající běh a krokování programu (např. klávesou F11 ), nastavování breakpointů, či zobrazující obsah paměti, registrů a zvolených proměnných. V inspektoru projektů na levé straně (1) došlo automaticky k přepnutí na záložku Processor, obsahující hodnoty registrů jak znázorňuje obrázek A.4. Obrázek A.4: Ladící prostředí AVR Studia a zobrazení obsazenosti pamět ového prostoru. Ukončení režimu ladění lze provést příkazem Debug Stop Debugging, klávesovou zkratkou Ctrl+Shift+F5, nebo tlačítkem. A.2 Programování cílového mikrokontroléru pomocí ISP Při zakládání projektu zadejte jeho jméno a v okně Select debug platform and device nastavte AVR Simulator a ATmega16. ISP systém neumožňuje ladění aplikace přímo v systému, k tomuto účelu slouží jiné, finančně nákladnější prostředky (využívající např. JTAG rozhraní), viz přednášky. Ladění můžete provádět v simulátoru v AVR Studiu. Po sestavení a odladění aplikace lze přistoupit k fyzickému naprogramování mikrokontroléru na vývojové desce. ISP programování v AVR Studiu aktivujeme v menu Tools Program AVR, kde jsou k dispozici dva způsoby navázání komunikace AVR Studia s ISP programátorem: Connect a Auto Connect. V našem případě je výhodnější položka Auto Connect, po kliknutí na

76 Fakulta elektrotechniky a komunikačních technologií VUT v Brně 75 ni se vyhledá dostupný programátor připojený k počítači a otevře dialogové okno pro fyzické naprogramování mikrokontroléru. Auto Connect lze aktivovat také kliknutím na ikonku v horní liště nástrojů. Pro úplnost, položka Connect umožňuje ruční nastavení programátoru. Vyberte programátor STK500 or AVRISP. Okno pro nastavení programování pomocí ISP programátoru je znázorněno na obrázku A.5. Obsahuje několik záložek. Nejdůležitější je pro nás záložka Program. Okamžité smazání celé programové paměti mikrokontroléru lze provést tlačítkem Erase Device. Pro spolehlivé naprogramování mikrokontroléru je vhodné mít zaškrtnuty položky mazání paměti před programováním a verifikace obsahu po naprogramování. Pak bude pamět mazána vždy před novým naplněním a po naplnění bude zkontrolován její obsah. Následuje blok komponent v rámci programové paměti Flash. Pomocí malého tlačítka vedle editačního řádku otevřeme dialogové okno pro načtení souboru, kterým chceme mikrokontrolér naprogramovat. Příslušný soubor najdeme ve složce vytvořeného projektu, má jméno projektu s příponou *.hex. (Tento soubor byl vytvořen po úspěšném překladu aplikace.) Jakmile určíme soubor, můžeme jej stiskem tlačítka Program naprogramovat do programové paměti mikrokontroléru. Tlačítkem Verify provádíme případnou kontrolu naprogramovaného obsahu paměti. Tlačítko Read je určeno pro načtení kódu z programové paměti mikrokontroléru (pokud je to umožněno) do souboru v počítači. Pokud je požadována práce s interní pamětí EEPROM mikrokontroléru, lze její obsah naplnit, verifikovat nebo číst pomocí bloku komponent v rámci EEPROM. Všechny operace, výsledky a chyby, které nastanou při programování mikrokontroléru, jsou přehledně zobrazovány ve spodním rámu. Obrázek A.5: Dialogové okno pro programování mikrokontroléru ATmega16. Další záložky v okně rozšiřují možnosti pro konfiguraci vlastního mikrokontroléru i programátoru. Těmito záložkami se nebudeme zabývat.

Mikroprocesorová technika

Mikroprocesorová technika Mikroprocesorová technika Laboratorní cvičení Ing. Tomáš Frýza, Ph.D. Ing. Zbyněk Fedra, Ph.D. Ing. Jiří Šebesta, Ph.D. ÚSTAV RADIOELEKTRONIKY Fakulta elektrotechniky a komunikačních technologií VUT v

Více

Mikrokontroléry. Doplňující text pro POS K. D. 2001

Mikrokontroléry. Doplňující text pro POS K. D. 2001 Mikrokontroléry Doplňující text pro POS K. D. 2001 Úvod Mikrokontroléry, jinak též označované jako jednočipové mikropočítače, obsahují v jediném pouzdře všechny podstatné části mikropočítače: Řadič a aritmetickou

Více

8. Laboratoř: Aritmetika a řídicí struktury programu

8. Laboratoř: Aritmetika a řídicí struktury programu 8. Laboratoř: Aritmetika a řídicí struktury programu Programy v JSA aritmetika, posuvy, využití příznaků Navrhněte a simulujte v AVR studiu prográmky pro 24 bitovou (32 bitovou) aritmetiku: sčítání, odčítání,

Více

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus Činnost CPU Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus Hodinový cyklus CPU je synchronní obvod nutné hodiny (f CLK ) Instrukční cyklus IF = doba potřebná

Více

Přerušovací systém s prioritním řetězem

Přerušovací systém s prioritním řetězem Přerušovací systém s prioritním řetězem Doplňující text pro přednášky z POT Úvod Přerušovací systém mikropočítače může být koncipován několika způsoby. Jednou z možností je přerušovací systém s prioritním

Více

ČEMU ROZUMÍ MIKROPROCESOR?

ČEMU ROZUMÍ MIKROPROCESOR? ČEMU ROZUMÍ MIKROPROCESOR? Čemu rozumí mikroprocesor? Číslo DUM v digitálním archivu školy VY_32_INOVACE_10_01_01 Materiál poskytuje pohled na mikroprocesor, jako na číslicový obvod. Seznamuje se základními

Více

Profilová část maturitní zkoušky 2015/2016

Profilová část maturitní zkoušky 2015/2016 Střední průmyslová škola, Přerov, Havlíčkova 2 751 52 Přerov Profilová část maturitní zkoušky 2015/2016 TEMATICKÉ OKRUHY A HODNOTÍCÍ KRITÉRIA Studijní obor: 26-41-M/01 Elektrotechnika Zaměření: technika

Více

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ 2013 1.3 2/14

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ 2013 1.3 2/14 ZÁKLADY PROGRAMOVÁNÍ Mgr. Vladislav BEDNÁŘ 2013 1.3 2/14 Co je vhodné vědět, než si vybereme programovací jazyk a začneme programovat roboty. 1 / 14 0:40 1.3. Vliv hardware počítače na programování Vliv

Více

Princip funkce počítače

Princip funkce počítače Princip funkce počítače Princip funkce počítače prvotní úlohou počítačů bylo zrychlit provádění matematických výpočtů první počítače kopírovaly obvyklý postup manuálního provádění výpočtů pokyny pro zpracování

Více

Profilová část maturitní zkoušky 2014/2015

Profilová část maturitní zkoušky 2014/2015 Střední průmyslová škola, Přerov, Havlíčkova 2 751 52 Přerov Profilová část maturitní zkoušky 2014/2015 TEMATICKÉ OKRUHY A HODNOTÍCÍ KRITÉRIA Studijní obor: 26-41-M/01 Elektrotechnika Zaměření: technika

Více

Rozšiřující desce s dalšími paralelními porty Rozšiřující desce s motorkem Elektrickém zapojení Principu činnosti Způsobu programování

Rozšiřující desce s dalšími paralelními porty Rozšiřující desce s motorkem Elektrickém zapojení Principu činnosti Způsobu programování 8. Rozšiřující deska Evb_IO a Evb_Motor Čas ke studiu: 2-3 hodiny Cíl Po prostudování tohoto odstavce budete něco vědět o Výklad Rozšiřující desce s dalšími paralelními porty Rozšiřující desce s motorkem

Více

Pohled do nitra mikroprocesoru Josef Horálek

Pohled do nitra mikroprocesoru Josef Horálek Pohled do nitra mikroprocesoru Josef Horálek Z čeho vycházíme = Vycházíme z Von Neumannovy architektury = Celý počítač se tak skládá z pěti koncepčních bloků: = Operační paměť = Programový řadič = Aritmeticko-logická

Více

MSP 430F1611. Jiří Kašpar. Charakteristika

MSP 430F1611. Jiří Kašpar. Charakteristika MSP 430F1611 Charakteristika Mikroprocesor MSP430F1611 je 16 bitový, RISC struktura s von-neumannovou architekturou. Na mikroprocesor má neuvěřitelně velkou RAM paměť 10KB, 48KB + 256B FLASH paměť. Takže

Více

Principy komunikace s adaptéry periferních zařízení (PZ)

Principy komunikace s adaptéry periferních zařízení (PZ) Principy komunikace s adaptéry periferních zařízení (PZ) Několik možností kategorizace principů komunikace s externími adaptéry, např.: 1. Podle způsobu adresace registrů, které jsou součástí adaptérů.

Více

Struktura a architektura počítačů (BI-SAP) 7

Struktura a architektura počítačů (BI-SAP) 7 Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Struktura a architektura počítačů (BI-SAP) 7 doc. Ing. Hana Kubátová, CSc. Katedra číslicového návrhu Fakulta informačních technologii

Více

Úvod do mobilní robotiky AIL028

Úvod do mobilní robotiky AIL028 md at robotika.cz http://robotika.cz/guide/umor07/cs 11. října 2007 1 Definice Historie Charakteristiky 2 MCU (microcontroller unit) ATmega8 Programování Blikání LEDkou 3 Kdo s kým Seriový port (UART)

Více

Ústav radioelektroniky

Ústav radioelektroniky Ústav radioelektroniky Vysoké učení technické v Brně Programování mikrokontrolérů Mikroprocesorová technika, přednáška č. 5 Ing. Frýza Tomáš, Ph.D. 23. října 2007 Obsah přednášky Typy adresování Registrové,

Více

Návrh konstrukce odchovny 2. dil

Návrh konstrukce odchovny 2. dil 1 Portál pre odborné publikovanie ISSN 1338-0087 Návrh konstrukce odchovny 2. dil Pikner Michal Elektrotechnika 19.01.2011 V minulem dile jsme si popsali návrh konstrukce odchovny. senzamili jsme se s

Více

Přednáška - Čítače. 2013, kat. měření, ČVUT - FEL, Praha J. Fischer. A3B38MMP, 2013, J.Fischer, ČVUT - FEL, kat. měření 1

Přednáška - Čítače. 2013, kat. měření, ČVUT - FEL, Praha J. Fischer. A3B38MMP, 2013, J.Fischer, ČVUT - FEL, kat. měření 1 Přednáška - Čítače 2013, kat. měření, ČVUT - FEL, Praha J. Fischer A3B38MMP, 2013, J.Fischer, ČVUT - FEL, kat. měření 1 Náplň přednášky Čítače v MCU forma, principy činnosti A3B38MMP, 2013, J.Fischer,

Více

Ústav radioelektroniky. Mikroprocesorová technika a embedded systémy. doc. Ing. Tomáš Frýza, Ph.D.

Ústav radioelektroniky. Mikroprocesorová technika a embedded systémy. doc. Ing. Tomáš Frýza, Ph.D. Ústav radioelektroniky Vysoké učení technické v Brně Programování mikrokontrolérů Mikroprocesorová technika a embedded systémy Přednáška 3 doc. Ing. Tomáš Frýza, Ph.D. říjen 2012 Obsah přednášky Typy adresování

Více

APLIKACE MIKROKONTROLÉRŮ PIC32MX

APLIKACE MIKROKONTROLÉRŮ PIC32MX David Matoušek APLIKACE MIKROKONTROLÉRÙ PIC32MX Praha 2014 David Matoušek Aplikace mikrokontrolérù PIC32MX Recenzent Bohumil Brtník Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli

Více

IMTEE Přednáška č. 8. interrupt vector table CPU při vzniku přerušení skáče na pevně dané místo v paměti (obvykle začátek CODE seg.

IMTEE Přednáška č. 8. interrupt vector table CPU při vzniku přerušení skáče na pevně dané místo v paměti (obvykle začátek CODE seg. Přerušení Důvod obsluha asynchronních událostí (CPU mnohem rychlejší než pomalé periferie má klávesnice nějaké znaky? ) Zdroje přerušení interrupt source o HW periferie (UART, Disk, časovače apod.) o SW

Více

Jízda po čáře pro reklamní robot

Jízda po čáře pro reklamní robot Jízda po čáře pro reklamní robot Předmět: BROB Vypracoval: Michal Bílek ID:125369 Datum: 25.4.2012 Zadání: Implementujte modul do podvozku robotu, který umožňuje jízdu robotu po předem definované trase.

Více

Strojový kód. Instrukce počítače

Strojový kód. Instrukce počítače Strojový kód Strojový kód (Machine code) je program vyjádřený v počítači jako posloupnost instrukcí procesoru (posloupnost bajtů, resp. bitů). Z hlediska uživatele je strojový kód nesrozumitelný, z hlediska

Více

Ústav radioelektroniky

Ústav radioelektroniky Ústav radioelektroniky Vysoké učení technické v Brně Programování mikrokontrolérů Mikroprocesorová technika, přednáška č. 4 Ing. Frýza Tomáš, Ph.D. 14. října 2008 Obsah přednášky Typy adresování Registrové,

Více

1. MIKROPROCESOR ATMEGA A/D PŘEVODNÍK MÓDY PŘEVODNÍKU Single Conversion Mode Auto Triggering Start...

1. MIKROPROCESOR ATMEGA A/D PŘEVODNÍK MÓDY PŘEVODNÍKU Single Conversion Mode Auto Triggering Start... 1. MIKROPROCESOR ATMEGA 8535... 2 1.1 A/D PŘEVODNÍK... 2 1.2 MÓDY PŘEVODNÍKU... 3 1.2.1 Single Conversion Mode... 3 1.2.2 Auto Triggering Start... 4 1.2.3 Free Running Mode... 4 1.3 VÝBĚR MĚŘENÉHO KANÁLU...

Více

5. A/Č převodník s postupnou aproximací

5. A/Č převodník s postupnou aproximací 5. A/Č převodník s postupnou aproximací Otázky k úloze domácí příprava a) Máte sebou USB flash-disc? b) Z jakých obvodů se v principu skládá převodník s postupnou aproximací? c) Proč je v zapojení použit

Více

FVZ K13138-TACR-V004-G-TRIGGER_BOX

FVZ K13138-TACR-V004-G-TRIGGER_BOX TriggerBox Souhrn hlavních funkcí Synchronizace přes Ethernetový protokol IEEE 1588 v2 PTP Automatické určení možnosti, zda SyncCore zastává roli PTP master nebo PTP slave dle mechanizmů standardu PTP

Více

Maturitní témata - PRT 4M

Maturitní témata - PRT 4M Maturitní témata - PRT 4M ústní zkouška profilové části Maturita - školní rok 2015/2016 1. Architektura mikrořadičů a PC 2. Popis mikrořadičů řady 51 3. Zobrazovací jednotky 4. Řadiče Atmel 5. Hradlová

Více

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Speciální obvody a jejich programování v C 2. díl

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Speciální obvody a jejich programování v C 2. díl MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY Speciální obvody a jejich programování v C 2. díl České vysoké učení technické Fakulta elektrotechnická Ver.1.10 J. Zděnek, 2017 Compare Unit jiné řešení Následující

Více

Laboratorní cvičení z předmětu Elektrická měření 2. ročník KMT

Laboratorní cvičení z předmětu Elektrická měření 2. ročník KMT MĚŘENÍ S LOGICKÝM ANALYZÁTOREM Jména: Jiří Paar, Zdeněk Nepraš Datum: 2. 1. 2008 Pracovní skupina: 4 Úkol: 1. Seznamte se s ovládáním logického analyzátoru M611 2. Dle postupu měření zapojte pracoviště

Více

Přednáška A3B38MMP. Bloky mikropočítače vestavné aplikace, dohlížecí obvody. 2015, kat. měření, ČVUT - FEL, Praha J. Fischer

Přednáška A3B38MMP. Bloky mikropočítače vestavné aplikace, dohlížecí obvody. 2015, kat. měření, ČVUT - FEL, Praha J. Fischer Přednáška A3B38MMP Bloky mikropočítače vestavné aplikace, dohlížecí obvody 2015, kat. měření, ČVUT - FEL, Praha J. Fischer A3B38MMP, 2015, J.Fischer, kat. měření, ČVUT - FEL Praha 1 Hlavní bloky procesoru

Více

Zadání semestrálního projektu PAM

Zadání semestrálního projektu PAM P ř evaděč RS485 Navrhněte s procesorem AT89C2051 převaděč komunikační sběrnice RS485 s automatickým obracením směru převodníku po přenosu bytu. Převaděč vybavte manuálním nastavením přenosové rychlosti

Více

Metody připojování periferií BI-MPP Přednáška 2

Metody připojování periferií BI-MPP Přednáška 2 Metody připojování periferií BI-MPP Přednáška 2 Ing. Miroslav Skrbek, Ph.D. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze Miroslav Skrbek 2010,2011

Více

Manuál přípravku FPGA University Board (FUB)

Manuál přípravku FPGA University Board (FUB) Manuál přípravku FPGA University Board (FUB) Rozmístění prvků na přípravku Obr. 1: Rozmístění prvků na přípravku Na obrázku (Obr. 1) je osazený přípravek s FPGA obvodem Altera Cyclone III EP3C5E144C8 a

Více

SEKVENČNÍ LOGICKÉ OBVODY

SEKVENČNÍ LOGICKÉ OBVODY Sekvenční logický obvod je elektronický obvod složený z logických členů. Sekvenční obvod se skládá ze dvou částí kombinační a paměťové. Abychom mohli určit hodnotu výstupní proměnné, je potřeba u sekvenčních

Více

Základní uspořádání pamětí MCU

Základní uspořádání pamětí MCU Základní uspořádání pamětí MCU Harwardská architektura. Oddělený adresní prostor kódové a datové. Používané u malých MCU a signálových procesorů. Von Neumannova architektura (Princetonská). Kódová i jsou

Více

Použití programovatelného čítače 8253

Použití programovatelného čítače 8253 Použití programovatelného čítače 8253 Zadání 1) Připojte obvod programovatelný čítač- časovač 8253 k mikropočítači 89C52. Pro čtení bude obvod mapován do prostoru vnější programové (CODE) i datové (XDATA)

Více

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2 Základy informatiky 2. Přednáška HW Lenka Carr Motyčková February 22, 2011 Základy informatiky 1 February 22, 2011 Základy informatiky 2 February 22, 2011 Základy informatiky 3 February 22, 2011 Základy

Více

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC Informační systémy 2 Obsah: Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC ROM RAM Paměti typu CACHE IS2-4 1 Dnešní info: Informační systémy 2 03 Informační systémy

Více

Vysoké učení technické v Brně Fakulta informačních technologií ITP Technika personálních počítačů Služby ROM BIOS a BootROM

Vysoké učení technické v Brně Fakulta informačních technologií ITP Technika personálních počítačů Služby ROM BIOS a BootROM Vysoké učení technické v Brně Fakulta informačních technologií ITP Technika personálních počítačů Služby ROM BIOS a BootROM Úloha č.: 5. Zadání: 1. Seznamte se s konstrukcí cvičné zásuvné adaptérové desky

Více

VISUAL BASIC. Přehled témat

VISUAL BASIC. Přehled témat VISUAL BASIC Přehled témat 1 ÚVOD DO PROGRAMOVÁNÍ Co je to program? Kuchařský předpis, scénář k filmu,... Program posloupnost instrukcí Běh programu: postupné plnění instrukcí zpracovávání vstupních dat

Více

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051

Seznámení s mikropočítačem. Architektura mikropočítače. Instrukce. Paměť. Čítače. Porovnání s AT89C2051 051 Seznámení s mikropočítačem Architektura mikropočítače Instrukce Paměť Čítače Porovnání s AT89C2051 Seznámení s mikropočítačem řady 8051 Mikroprocesor řady 8051 pochází z roku 1980 a je vytvořené firmou

Více

Architektury počítačů a procesorů

Architektury počítačů a procesorů Kapitola 3 Architektury počítačů a procesorů 3.1 Von Neumannova (a harvardská) architektura Von Neumann 1. počítač se skládá z funkčních jednotek - paměť, řadič, aritmetická jednotka, vstupní a výstupní

Více

RISC a CISC architektura

RISC a CISC architektura RISC a CISC architektura = dva rozdílné přístupy ke konstrukci CPU CISC (Complex Instruction Set Computer) vývojově starší přístup: pomoci konstrukci překladače z VPP co nejpodobnějšími instrukcemi s příkazy

Více

Mikropočítačová vstupně/výstupní jednotka pro řízení tepelných modelů. Zdeněk Oborný

Mikropočítačová vstupně/výstupní jednotka pro řízení tepelných modelů. Zdeněk Oborný Mikropočítačová vstupně/výstupní jednotka pro řízení tepelných modelů Zdeněk Oborný Freescale 2013 1. Obecné vlastnosti Cílem bylo vytvořit zařízení, které by sloužilo jako modernizovaná náhrada stávající

Více

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Vzorový příklad pro práci v prostředí MPLAB Zadání: Vytvořte program, který v intervalu 200ms točí doleva obsah registru reg, a který při stisku tlačítka RB0 nastaví bit 0 v registru reg na hodnotu 1.

Více

Mikrokontrolery. Úvod do obvodů Atmega 328 a PIC16F88

Mikrokontrolery. Úvod do obvodů Atmega 328 a PIC16F88 Mikrokontrolery Úvod do obvodů Atmega 328 a PIC16F88 Texty sestavili Petr Nejedlý a Lukáš Čížek, 4EA, 2013 Vlastnosti a funkce: Atmega 328 Flash 32Kbyte Max. Frequence 20Mhz SRAM 2Kbyte EEPROM 1024 byte

Více

Nejčastěji pokládané dotazy

Nejčastěji pokládané dotazy Nejčastěji pokládané dotazy www.snailinstruments.com www.hobbyrobot.cz Co je kontrolér PICAXE? Kontrolér PICAXE je mikroprocesor z rodiny PIC, vyráběné firmou Microchip, který byl při výrobě naprogramován

Více

Cvičení 2. Obsah a cíle cvičení. Obsah. A5MPL Programování mikropočítačů Digitální vstupy a výstupy - LED a tlačítka.

Cvičení 2. Obsah a cíle cvičení. Obsah. A5MPL Programování mikropočítačů Digitální vstupy a výstupy - LED a tlačítka. Cvičení 2 Digitální vstupy a výstupy - LED a tlačítka Obsah a cíle cvičení Toto cvičení: 1. Vysvětlí, co jsou digitální vstupy a výstupy mikropočítače. 2. Vysvětlí, jak k mikropočítači připojit LED a tlačítka

Více

Programovatelné relé Easy (Moeller), Logo (Siemens)

Programovatelné relé Easy (Moeller), Logo (Siemens) Programovatelné Easy (Moeller), Logo (Siemens) Základní způsob programování LOGO Programovaní pomocí P - propojení P s automatem sériovou komunikační linkou - program vytvářen v tzv ovém schématu /ladder

Více

Řízení IO přenosů DMA řadičem

Řízení IO přenosů DMA řadičem Řízení IO přenosů DMA řadičem Doplňující text pro POT K. D. 2001 DMA řadič Při přímém řízení IO operací procesorem i při použití přerušovacího systému je rychlost přenosu dat mezi IO řadičem a pamětí limitována

Více

PŘÍLOHY. PRESTO USB programátor

PŘÍLOHY. PRESTO USB programátor PŘÍLOHY PRESTO USB programátor 1. Příručka PRESTO USB programátor Popis indikátorů a ovládacích prvků Zelená LED (ON-LINE) - PRESTO úspěšně komunikuje s PC Žlutá LED (ACTIVE) - právě se komunikuje s uživatelskou

Více

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové

Více

Architekura mikroprocesoru AVR ATMega ( Pokročilé architektury počítačů )

Architekura mikroprocesoru AVR ATMega ( Pokročilé architektury počítačů ) Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Architekura mikroprocesoru AVR ATMega ( Pokročilé architektury počítačů ) Führer Ondřej, FUH002 1. AVR procesory obecně

Více

Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor:

Akademický rok: 2004/05 Datum: Příjmení: Křestní jméno: Osobní číslo: Obor: Západočeská univerzita v Plzni Písemná zkouška z předmětu: Zkoušející: Katedra informatiky a výpočetní techniky Počítačová technika KIV/POT Dr. Ing. Karel Dudáček Akademický rok: 2004/05 Datum: Příjmení:

Více

A0M38SPP - Signálové procesory v praxi - přednáška 10 2

A0M38SPP - Signálové procesory v praxi - přednáška 10 2 GPIO (konfigurace vstupu, výstupu, alt. funkce) GP timers Core timers Watchdog timer Rotary counter Real time clock Keypad interface SD HOST (MMC, SD interface) ATAPI (IDE) A0M38SPP - Signálové procesory

Více

PK Design. MB-ATmega16/32 v2.0. Uživatelský manuál. Základová deska modulárního vývojového systému MVS. Verze dokumentu 1.0 (21.12.

PK Design. MB-ATmega16/32 v2.0. Uživatelský manuál. Základová deska modulárního vývojového systému MVS. Verze dokumentu 1.0 (21.12. MB-ATmega16/32 v2.0 Základová deska modulárního vývojového systému MVS Uživatelský manuál Verze dokumentu 1.0 (21.12.2004) Obsah 1 Upozornění... 3 2 Úvod... 4 2.1 Vlastnosti základové desky...4 2.2 Vlastnosti

Více

VÝVOJ ŘÍDICÍCH ALGORITMŮ HYDRAULICKÝCH POHONŮ S VYUŽITÍM SIGNÁLOVÉHO PROCESORU DSPACE

VÝVOJ ŘÍDICÍCH ALGORITMŮ HYDRAULICKÝCH POHONŮ S VYUŽITÍM SIGNÁLOVÉHO PROCESORU DSPACE VÝVOJ ŘÍDICÍCH ALGORITMŮ HYDRAULICKÝCH POHONŮ S VYUŽITÍM SIGNÁLOVÉHO PROCESORU DSPACE Přednáška na semináři CAHP v Praze 4.9.2013 Prof. Ing. Petr Noskievič, CSc. Ing. Miroslav Mahdal, Ph.D. Katedra automatizační

Více

Microchip. PICmicro Microcontrollers

Microchip. PICmicro Microcontrollers Microchip PICmicro Microcontrollers 8-bit 16-bit dspic Digital Signal Controllers Analog & Interface Products Serial EEPROMS Battery Management Radio Frequency Device KEELOQ Authentication Products Návrh

Více

Funkce jednotlivých tlačítek se mohou měnit podle toho, na jaké úrovni menu se právě nacházíte; vysvětlení viz následující tabulka.

Funkce jednotlivých tlačítek se mohou měnit podle toho, na jaké úrovni menu se právě nacházíte; vysvětlení viz následující tabulka. 5. Přehled použití Snímač a vysílač průtoku FlowX3 F9.02 je jako všechny ostatní přístroje řady X3 vybaven digitálním displejem a klávesnicí s pěti tlačítky, které slouží k nastavení, kalibraci a ovládání

Více

Semestrální práce z předmětu Speciální číslicové systémy X31SCS

Semestrální práce z předmětu Speciální číslicové systémy X31SCS Semestrální práce z předmětu Speciální číslicové systémy X31SCS Katedra obvodů DSP16411 ZPRACOVAL: Roman Holubec Školní rok: 2006/2007 Úvod DSP16411 patří do rodiny DSP16411 rozšiřuje DSP16410 o vyšší

Více

FILIP SCHWANK. Katedra měření, listopad 2017

FILIP SCHWANK. Katedra měření, listopad 2017 FILIP SCHWANK Katedra měření, listopad 2017 CO JE TO MBED Knihovna pro programování mikrokontrolérů Jazyk C++ Jednoduché funkce dělají složité věci Od řidiče auta až po jeho mechanika JAK NA TO Registrovat

Více

Témata profilové maturitní zkoušky

Témata profilové maturitní zkoušky Střední průmyslová škola elektrotechniky, informatiky a řemesel, Frenštát pod Radhoštěm, příspěvková organizace Témata profilové maturitní zkoušky Obor: Elektrotechnika Třída: E4A Školní rok: 2010/2011

Více

MIKROKONTROLERY PIC16F84

MIKROKONTROLERY PIC16F84 Střední odborná škola a Střední odborné učiliště informatiky a spojů, Brno, Čichnova 23 Pracovní sešit MIKROKONTROLERY PIC16F84 Určeno pro obory Mechanik elektronik, Digitální telekomunikační technika

Více

Ústav radioelektroniky

Ústav radioelektroniky Ústav radioelektroniky Vysoké učení technické v Brně Komunikace zařízení po sběrnici Mikroprocesorová technika, přednáška č. 3 Ing. Frýza Tomáš, Ph.D. 10. října 2007 Obsah přednášky Základní pojmy a terminologie

Více

Praktické úlohy- 2.oblast zaměření

Praktické úlohy- 2.oblast zaměření Praktické úlohy- 2.oblast zaměření Realizace praktických úloh zaměřených na dovednosti v oblastech: Měření specializovanými přístroji, jejich obsluha a parametrizace; Diagnostika a specifikace závad, měření

Více

PCKIT LPT MODUL SBĚRNICE IOBUS PRO PC LPT. Příručka uživatele. Střešovická 49, Praha 6, s o f c o s o f c o n.

PCKIT LPT MODUL SBĚRNICE IOBUS PRO PC LPT. Příručka uživatele. Střešovická 49, Praha 6,   s o f c o s o f c o n. PCKIT LPT MODUL SBĚRNICE IOBUS PRO PC LPT Příručka uživatele Střešovická 49, 162 00 Praha 6, e-mail: s o f c o n @ s o f c o n. c z tel./fax : (02) 20 61 03 48 / (02) 20 18 04 54, http :// w w w. s o f

Více

Procesor z pohledu programátora

Procesor z pohledu programátora Procesor z pohledu programátora Terminologie Procesor (CPU) = řadič + ALU. Mikroprocesor = procesor vyrobený monolitickou technologií na čipu. Mikropočítač = počítač postavený na bázi mikroprocesoru. Mikrokontrolér

Více

Témata profilové maturitní zkoušky

Témata profilové maturitní zkoušky Obor: 18-20-M/01 Informační technologie Předmět: Databázové systémy Forma: praktická 1. Datový model. 2. Dotazovací jazyk SQL. 3. Aplikační logika v PL/SQL. 4. Webová aplikace. Obor vzdělání: 18-20-M/01

Více

setup() { I = 0; } loop() { I = I + 1; }

setup() { I = 0; } loop() { I = I + 1; } PŘERUŠENÍ Procesor pracuje tak, že načítá z paměti jednotlivé instrukce a ty následně zpracovává. Instrukce se zpracovávají v pořadí v jakém jsou uloženy v paměti. Vezměme jednoduchý program, který v nekonečném

Více

Zadání semestrálního projektu

Zadání semestrálního projektu Č tyř místný č ítač Navrhněte s procesorem AT89C2051 a kaskádou čítačů mající na vstupu hradlovací obvod AND čtyřmístný čítač do 20MHz. Veškerou řídící a generující činnost, včetně automatického přepínání

Více

Typy a použití klopných obvodů

Typy a použití klopných obvodů Typy a použití klopných obvodů Klopné obvody s hodinovým vstupem mění svůj stav, pokud hodinový vstup má hodnotu =. Přidáním invertoru před hodinový vstup je lze upravit tak, že budou měnit svůj stav tehdy,

Více

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC

Sběrnicová struktura PC Procesory PC funkce, vlastnosti Interní počítačové paměti PC Informatika 2 Technické prostředky počítačové techniky - 2 Přednáší: doc. Ing. Jan Skrbek, Dr. - KIN Přednášky: středa 14 20 15 55 Spojení: e-mail: jan.skrbek@tul.cz 16 10 17 45 tel.: 48 535 2442 Obsah:

Více

Architektura počítače

Architektura počítače Architektura počítače Výpočetní systém HIERARCHICKÁ STRUKTURA Úroveň aplikačních programů Úroveň obecných funkčních programů Úroveň vyšších programovacích jazyků a prostředí Úroveň základních programovacích

Více

Základní zapojení MCU do el. obvodu. Zdroje taktovacího kmitočtu. IMTEE Přednáška č. 7. reset, oscilátor, blokování napájení

Základní zapojení MCU do el. obvodu. Zdroje taktovacího kmitočtu. IMTEE Přednáška č. 7. reset, oscilátor, blokování napájení Základní zapojení MCU do el. obvodu reset, oscilátor, blokování napájení Zdroje taktovacího kmitočtu externí krystal externí nízkofrekvenční krystal (32,768 khz) externí RC oscilátor interní kalibrovaný

Více

LabView jako programovací jazyk II

LabView jako programovací jazyk II LabView jako programovací jazyk II - Popis jednotlivých funkcí palety Function I.část - Expresní funkce, struktury, Ing. Martin Bušek, Ph.D. Paleta Functions Základní prvky pro tvorbu programu blokového

Více

Jednočipové mikropočítače (mikrokontroléry)

Jednočipové mikropočítače (mikrokontroléry) Počítačové systémy Jednočipové mikropočítače (mikrokontroléry) Miroslav Flídr Počítačové systémy LS 2006-1/17- Západočeská univerzita v Plzni Co je mikrokontrolér integrovaný obvod, který je často součástí

Více

MIKROPROCESOROVÁ TECHNIKA

MIKROPROCESOROVÁ TECHNIKA MODERNIZACE VÝUKOVÝCH MATERIÁLŮ A DIDAKTICKÝCH METOD - CZ.1.07/2.2.00/15.0463 MIKROPROCESOROVÁ TECHNIKA LEKCE 1 Ing. Daniel Zuth, Ph.D. 2012 ÚVODNÍ HODINA DO PŘEDMĚTU MIKROPROCESOROVÁ TECHNIKA OBSAH Úvod

Více

Arduino Martin Friedl

Arduino Martin Friedl Arduino Martin Friedl 1 Obsah Materiály Vlastnosti Programování Aplikace 2 Co je to Arduino? Arduino je otevřená elektronická platforma, založená na uživatelsky jednoduchém hardware a software. Arduino

Více

Profilová část maturitní zkoušky 2017/2018

Profilová část maturitní zkoušky 2017/2018 Střední průmyslová škola, Přerov, Havlíčkova 2 751 52 Přerov Profilová část maturitní zkoušky 2017/2018 TEMATICKÉ OKRUHY A HODNOTÍCÍ KRITÉRIA Studijní obor: 78-42-M/01 Technické lyceum Předmět: TECHNIKA

Více

Obsluha periferních operací, přerušení a jeho obsluha, vybavení systémových sběrnic

Obsluha periferních operací, přerušení a jeho obsluha, vybavení systémových sběrnic Obsluha periferních operací, přerušení a jeho obsluha, vybavení systémových sběrnic 1 Cíl přednášky Zabývat se principy využití principů přerušení. Popsat, jak se tyto principy odrazily v konstrukci systémových

Více

Jednočipové mikropočítače

Jednočipové mikropočítače Jednočipové mikropočítače Atmel AVR 90S8515 činnost procesoru si budeme demonstrovat na jednočipovém mikropočítači AVR 90S8515 firmy Atmel jednočipové mikropočítače mikropočítače, obsahující na jednom

Více

Profilová část maturitní zkoušky 2013/2014

Profilová část maturitní zkoušky 2013/2014 Střední průmyslová škola, Přerov, Havlíčkova 2 751 52 Přerov Profilová část maturitní zkoušky 2013/2014 TEMATICKÉ OKRUHY A HODNOTÍCÍ KRITÉRIA Studijní obor: 78-42-M/01 Technické lyceum Předmět: TECHNIKA

Více

Program "Světla" pro mikropočítač PMI-80

Program Světla pro mikropočítač PMI-80 Program "Světla" pro mikropočítač PMI-80 Dokument věnovaný mikropočítači PMI-80, jeho programování a praktickým ukázkám. Verze dokumentu:. Autor: Blackhead Datum: rok 1997, 4.3.004 1 Úvod Tento program

Více

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT

Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram. III / 2 = Inovace a zkvalitnění výuky prostřednictvím ICT Škola Číslo projektu Číslo a název šablony klíčové aktivity Tematická oblast Název sady Téma Anotace Autor Střední průmyslová škola a Vyšší odborná škola, Hrabákova 271, Příbram CZ.1.07/1.5.00/34.0556

Více

UC485P. Převodník RS232 na RS485 nebo RS422. Průmyslové provedení s krytím

UC485P. Převodník RS232 na RS485 nebo RS422. Průmyslové provedení s krytím Převodník RS232 na RS485 nebo RS422 Průmyslové provedení s krytím. UC485P Katalogový list Vytvořen: 21.1.2005 Poslední aktualizace: 5.5 2008 12:30 Počet stran: 16 2008 Strana 2 UC485P OBSAH Základní informace...

Více

Vestavné systémy BI-VES Přednáška 5

Vestavné systémy BI-VES Přednáška 5 Vestavné systémy BI-VES Přednáška 5 Ing. Miroslav Skrbek, Ph.D. Katedra počítačových systémů Fakulta informačních technologií České vysoké učení technické v Praze Miroslav Skrbek 2010,2011 ZS2010/11 Evropský

Více

Systém řízení sběrnice

Systém řízení sběrnice Systém řízení sběrnice Sběrnice je komunikační cesta, která spojuje dvě či více zařízení. V určitý okamžik je možné aby pouze jedno z připojených zařízení vložilo na sběrnici data. Vložená data pak mohou

Více

Architektura procesoru ARM

Architektura procesoru ARM Architektura procesoru ARM Bc. Jan Grygerek GRY095 Obsah ARM...3 Historie...3 Charakteristika procesoru ARM...4 Architektura procesoru ARM...5 Specifikace procesoru...6 Instrukční soubor procesoru...6

Více

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010 Přednášky o výpočetní technice Hardware teoreticky Adam Dominec 2010 Rozvržení Historie Procesor Paměť Základní deska přednášky o výpočetní technice Počítací stroje Mechanické počítačky se rozvíjely už

Více

Vývojové kity Mega48,

Vývojové kity Mega48, Vývojové kity Mega48, Mega48 Mega48X a Mega328 Ucelená řada ada vývojových kitů s obvody ATmega48 a ATmega328 je vhodná jak pro výukové účely ely a seznámení se s funkcemi mikrokontrolér mikrokontrolérů,

Více

IPZ laboratoře. Analýza komunikace na sběrnici USB L305. Cvičící: Straka Martin, Šimek Václav, Kaštil Jan. Cvičení 2

IPZ laboratoře. Analýza komunikace na sběrnici USB L305. Cvičící: Straka Martin, Šimek Václav, Kaštil Jan. Cvičení 2 IPZ laboratoře Analýza komunikace na sběrnici USB L305 Cvičení 2 2008 Cvičící: Straka Martin, Šimek Václav, Kaštil Jan Obsah cvičení Fyzická struktura sběrnice USB Rozhraní, konektory, topologie, základní

Více

V PRAZE Fakulta elektrotechnická Katedra teorie obvodů. Úvod do mikrokontrolérů ATMEL AVR Konkrétn. ATmega. Martin Pokorný 31SCS 2004

V PRAZE Fakulta elektrotechnická Katedra teorie obvodů. Úvod do mikrokontrolérů ATMEL AVR Konkrétn. ATmega. Martin Pokorný 31SCS 2004 ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Katedra teorie obvodů Úvod do mikrokontrolérů ATMEL AVR Konkrétn tně klonů řady ATmega Martin Pokorný 31SCS 2004 ÚVOD Rodina mikrokontrolérů

Více

Témata profilové maturitní zkoušky

Témata profilové maturitní zkoušky Obor vzdělání: 26-41-M/01 elektrotechnika Předmět: technika počítačů 1. Kombinační logické obvody a. kombinační logický obvod b. analýza log. obvodu 2. Čítače a. sekvenční logické obvody b. čítače 3. Registry

Více

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr. Model procesoru Jedná se o blokové schéma složené z registrů, paměti RAM, programového čítače, instrukčního registru, sčítačky a řídicí jednotky, které jsou propojeny sběrnicemi. Tento model má dva stavy:

Více

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta informačních technologií

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta informačních technologií VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Fakulta informačních technologií Autor: Tomáš Válek, xvalek02@stud.fit.vutbr.cz Login: xvalek02 Datum: 21.listopadu 2012 Obsah 1 Úvod do rozhraní I 2 C (IIC) 1 2 Popis funkčnosti

Více

Bloková struktura mikrokontrolérů Mikroprocesorová technika a embedded systémy

Bloková struktura mikrokontrolérů Mikroprocesorová technika a embedded systémy Ústav radioelektroniky Vysoké učení technické v Brně Bloková struktura mikrokontrolérů Mikroprocesorová technika a embedded systémy Přednáška 1 doc. Ing. Tomáš Frýza, Ph.D. Obsah přednášky Popis a použití

Více

Úloha č. 4. Připojení 7-segmentového zobrazovače LED s posuvným registrem, připojení tlačítek

Úloha č. 4. Připojení 7-segmentového zobrazovače LED s posuvným registrem, připojení tlačítek Úloha č. 4. Připojení 7-segmentového zobrazovače LED s posuvným registrem, připojení tlačítek Úkol: K STM32F100 připojte pomocí sério-paralelního posuvného registru 7-segmetový zobrazovač s LED a dále

Více