ARP
Obsah
- 1 Úvod k mikropočítačům
- 2 Mikroprocesor Atmel AVR ATMega32
- 3 Překladač AVR GCC
- 4 Výukový AVR KIT
- 5 Práce s knihovnou OpenCV
- 6 Cvičení
- 7 První cvičení - práce LED
- 8 Druhé cvičení - práce se segmentovým displayem
- 9 Třetí cvičení - sběrnice I2C
- 10 Čtvrté cvičení - Práce s vlákny
- 11 Páté cvičení - Seznámení se s CUDA programováním
- 12 Šesté cvičení - CUDA programováním
Úvod k mikropočítačům
V oblasti mikroprocesorové techniky je dnes ve světě několik hlavních hráčů. Stejně jako u procesorů pro osobní počítače jsou hlavními světovými výrobci firmy AMD a Intel, tak v oblasti mikropočítačů se nejčastěji setkáme s mikropočítači PIC firma Mikrochip a mikropočítači firmy Atmel. Samozřejmě že je možné setkat i s mikropočítači jiných výrobců, jako například Freescale (bývalá morotola) nebo Zilog. První dva výrobci jsou v našich krajích nejvíce využívaní a s jejich mikropočítači je možné se setkat v mnoha profesionálních i amatérských konstrukcí.
V první části cvičení z předmětu ARP budeme pracovat s mikropočítačem firmy Atmel ATmega128. Mikropočítač je součástka, která v sobě sdružuje jednak samotnou výpočetní jednotku CPU, paměťi RAM, FLASH a EEPROM, několik vstupně výstupních bran (pinů) a několik dalších periférií.
ATmega je celá řada mikropočítačů firmy Atmel s procesorovým jádrem AVR, která vývojově navazuje na předešlé řady procesorů 8051. Mikropočítače AVR byly již od začátku navrhovány tak, aby pro ně bylo možné jednoduše vyvíjet programy v programovacím jazyku C. Což je dnes dominantní způsob, jakým se pro mikrokontroléry vyvíjí software.
Pro vývoj software je na webových stránkách firmy Atmel volně k dispozici program AVR studio, který je určen pro OS Windows. S tímto plnohodnotným vývojovým prostředím je možné vyvíjet programy pro všechny procesory řady AVR. Program AVR studio využívá pro překlad volně šířený překladač pro mikroprocesory AVR avr-gcc. Je to obdoba volně šířeného překladače gcc určená pro mikroprocesory Atmel. Tento překladač je k dispozici ne jen pro OS Windows ale i pro OS Linux.
Mikroprocesor Atmel AVR ATMega32
Podrobné informace o tomto procesoru je možné najít na stránce výrobce http://www.atmel.com
Pro práci ve cvičeních potřebujete vědět jen minimum informací. Procesor samotný obsahuje řadu periférií, jako jsou časovače, čítače, řadiče různých rozhraní, analogově digitální převodníky a podobně. Pro práci ve cvičeních budete potřebovat pouze ovládat vstupně výstupní porty procesoru. Použitý procesor ATmega32 je vybaven čtyřmi vstupně výstupními porty. Jsou označeny PA, PB, PC a PD.
Každá periférie kterou procesor využívá, tedy i vstupně výstupní porty, je konfigurována pomocí registrů. Registr je místo v paměti procesoru. Každý registr má svou pevně definovanou adresu v adresním prostoru.
Každý ze čtyř portů procesoru se konfiguruje pomocí tří registrů. PORTx,DDRx,PINx kde x označuje konkrétní port A,B,C nebo D.
- DDRx - při zápisu log.1 na konkrétní bit tohoto registru určíme že daný pin bude výstupní a opačně při log.0 bude vstupní.
- PORTx - Když je pin definovaný jako vstupní a v registru PORDx je pro tento pin definována log.1 je tento pin udržován v klidovém stavu logické hodnotě 1. To je zařízeno připojením vnitřního tzv. pull-up rezistoru. Při log.0 zapsané do registru PORTx je pull-up rezistor deaktivován. Když je pin definován jako výstupní určuje registr PORTx logickou hodnotu na konkrétním pinu.
- PINx - Zapsáním log.1 na pin tohoto registru nastaví log.1 na konkrétním pinu nezávisle na registru DDRx. Pokud je port nastaven jako vstupní lze pomocí registru PINx zjistit aktuální stav na portu.
Pro práci ve cvičeních potřebuje znát pouze tyto registry.
Překladač AVR GCC
Překladač AVR GCC varianta volně šířeného překladače jazyka C. Tento překladač využívá volně šířené knihovny jazyka C AVR Libc. Jedná se o plnohodnotný překladač jazyka C a při psaní programů můžete využívat všechny programátorské techniky jazyka C. Tento překladač je standardně používaný překladač ve volně šířeném vývojovém prostředí AVR Studio.
Datová typy
V programech můžete používat následující datový typy.
- signed char −128 ⋯ 127
- signed short, signed int −32768 ⋯ 32767
- signed long −2147483648 ⋯ 2147483647
- signed long long −9223372036854775808 ⋯ 9223372036854775807
- unsigned char 0 ⋯ 255
- unsigned short, unsigned int 0 ⋯ 65535
- unsigned long 0 ⋯ 4294967295
- unsigned long long 0 ⋯ 18446744073709551615
Neuvedete-li u datového typu zdali je znaménkový či neznaménkový bere se standardně jako znaménkový.
Zápis čísel
Je možné použít následující zápisy čísel
Dekadický
int i = 10578; char ch = -10; float f = 13.54;
Hexadecimální
int i = 0x12B7; char ch = 0xF1;
Bitový
int i = 0b1101001010010110; char ch = 0b10001101;
Uvědomte si že 0xA = 10 = 0b1010. Jedná se o zápis jednoho čísla v různých číselných soustavách.
Aritmetické, logické a bitové operátory jazyka C
- Aritmetické +, -, *, /, %
První čtyři operátory viz základní škola. Operátor modulo % vrací zbytek po celočíselném dělení. Tedy 11 % 2 = 1, 11 % 5 = 1, 11 % 11 = 0
Zkrácený zápis aritmetických operátorů v jazyce C
x++, ++x x = x + 1 x--, --x x = x - 1 x += y x = x + y x -= y x = x - y x *= y x = x * y x /= y x = x / y x %= y x = x % y
- Logické &&, ||, !
Logický součin Logický součet Logická negace lež && lež => lež lež || lež => lež !lež => pravda lež && pravda => lež lež || pravda => pravda !pravda => lež pravda && lež => lež pravda || lež => pravda pravda && pravda => pravda pravda || pravda => pravda
Kde pravda je číslo nenulové a lež je číslo nula.
- Bitové &, |, ~, ^, <<, >>
Bitový součin Bitový součet Bitový exclusive or Bitová negace 0 & 0 => 0 0 | 0 => 0 0 ^ 0 => 0 ~1 => 0 0 & 1 => 0 0 | 1 => 1 0 ^ 1 => 1 ~0 => 1 1 & 0 => 0 1 | 0 => 1 1 ^ 0 => 1 1 & 1 => 1 1 | 1 => 1 1 ^ 1 => 0
Příklad: 5 & 3 = 1 protože 0b101 & 0b011 = 0b001 Příklad: 5 | 3 = 7 protože 0b101 | 0b011 = 0b111 Příklad: 5 ^ 3 = 6 protože 0b101 ^ 0b011 = 0b110 Příklad: ~5 = protože ~0b101 = 0b11111010, pokud je 5 osmi bitové číslo
Bitový posun 0b01 << 1 => 0b10 0b10 >> 1 => 0b01
Příklad: 5 << 3 = 40 protože 0b101 << 3 = 0b101000 Příklad: 5 >> 3 = 0 protože 0b101 >> 3 = 0b000000
Zkrácený zápis logických operátorů v jazyce C
x >>= y x = x >> y x <<= y x = x << y x &= y x = x & y x |= y x = x | y x ^= y x = x ^ y
Často dochází k záměně logických a bitových operátorů log. součtu a součinu
Příklad časté zámeny:
char x = 5; char y = 2; if(x && y) {...} //PRAVDA if(x & y) {...} //LEŽ
Knihovna avr/io.h
V programech se vkládá jako hlavičkový soubor #include <avr/io.h> . Tento hlavičkový soubor umožňuje použití všech registrů použitého procesoru jako proměnných. Při překladu projektu se překladači uvede procesor pro který je program překládán a překladač dál definuje který konkrétní hlavičkový soubor pro konkrétní procesor se má do projektu vložit.
Příklad programu, který nastaví port A jako výstupní a všechny piny nastaví na log.1
#include <avr/io.h>
int main () {
DDRA = 0xff;
PORTA = 0xff;
}
Knihovna util/delay.h
Díky této knihovně je možné využívat funkce pro časové zpoždění. Toto zpoždění je generováno na základě informace o frekvenci použitého krystalu, která musí být definována ještě před použitím této knihovny.
- define F_CPU 1000000UL. Je možné použít následující funkce:
void _delay_ms( double __ms ); //zpoždění v milisekundách void _delay_us( double __ms ); //zpoždění v mikrosekundách
Příklad pro použití knihovny delay.h s krystalem 1MHz.
#include <avr/io.h>
#define F_CPU 1000000UL #include <util/delay.h>
int main () {
DDRA = 0xff;
PORTA = 0xff;
while(1){
_delay_ms(1000);
PORTA = ~PORTA;
}
}
Výukový AVR KIT
Programy které budete ve cvičeních vyvíjet, budou spouštěny na procesoru ATmega32, který je součástí výukového AVR KITu. Výukový KIT je deska plošných spojů, která je osazena samotným procesorem, dvěma paticema ZIF, čtyřmi tlačítky které jsou připojeny na PORTD procesortu, dvěma LED diodama taktéž připojenýma na PORTD procesoru a tlačítkem reset. Další součástky umístěné na desce plošných spojů jsou pomocné obvody, určené ke komunikaci s PC a programování procesoru ATmega32.
V každém ze cvičení budete mít k AVR KITu připojen modul, kterým se ke vstupně výstupním branám, připojí vždy jiné periférie. Bude se jednat o LED diody, Segmentový LED display, teploměr a expandér pro sběrnici I2C, případně ještě další moduly. Konkrétní zapojení modulů ke vstupně výstupním portům procesoru je uvedeno v popisu každé úlohy.
Knihovna avrkit.h
Tato knihovna obsahuje tří základní funkce potřebné pro vývoj programů na AVR kitu. Jedná se o následující funkce:
void avrkit_init(void); //povinná inicializace AVR kitu, funkci je nutné volat na začátku programu void delay_ms( int __ms ); //zpoždění v milisekundách void delay_01ms( int __ms ); //zpoždění v desetinách milisekund
Příklad jednoduchého programu s použitím knihovny avrkit.h:
#include <avrkit.h> #include <avr/io.h> int main () { avrkit_init(); DDRA = 0xff; PORTA = 0xff; while(1){ delay_ms(1000); PORTA = ~PORTA; } }
Programování AVR Kitu
Pro programování výukového AVR Kitu je určen program avrkit.exe. Program avrkit.exe je možné spustit s následujícími parametry:
avrkit.exe -h Usage: AVRKIT [options] [file.hex] -h show this help -d serial port device (def: 'COM1') -e erase AVR flash only -l list available COM ports -n no terminal mode after programming -s show AVR flash only -t terminal mode only -v verify AVR flash memory only -x show HEX file only Without options this program upload HEX file to AVR flash.
- Program očekává jako parametr HEX soubor. Což je obdoba *.exe souboru v klasickém počítači. HEX soubor je seznam instrukcí pro mikroprocesor, tedy program který má mikroprocesor vykonávat.
- AVT Kit se v operačním systému jeví jako sériový port. Program avrkit.exe zadaný bez parametru posílí data na COM1. Jeví-li se AVR kit jako jiný sériový port je možné ho definovat pomocí parametru -d.
- Dostupné sériové porty lze vylistovat pomocí parametru -l.
Příklad:
Pro nahrání testovacího programu demoleds.hex, za předpokladu že AVR kit se v systému jeví jako COM3 je nutné spustit program následovně: avrkit.exe -d COM3 demoleds.hex
Procedůra při programování procesoru
- Před započetím programování je nutné procesor uvést do stavu kdy je ochoten přijímat nový program. Toho se docílí stlačením tlačítka PIND4, poté stlačením a uvolněním tlačítka RESET. Procesor se poté uvede do modu kdy očekává data z PC a tato data začne interpretovat jako program a zapisuje si je do programové paměti FLASH. To že je procesor v tomto módu se signalizuje rozsvícenou LED diodou připojenou na PIND2. Poté co se program nahraje je nutné opět procesor restartovat stlačením a uvolněním tlačítka RESET. Poté již procesor začne vykonávat nahraný program.
- Po ukončení programování procesoru programem avrkit.exe zůstane program připojený na sériový port a je připraven vypisovat zpráva které bude procesor zapisovat na sériový port pomocí funkce printf. Nechcete-li tuto funkci programu avrkit.exe využívat je jí možné vypnou parametrem -n.
Pro vyznavače nekomerčních operačních systémů je k dispozici i program avrkit_lin pro OS Linux.
Vývojové prostředí AVR Studio
V současnosti je k dispozici AVR Studio 5. Jedná se o volně šířené komplexní vývojové prostředí pro mikroprocesory Atmel s jádrem AVR. Od AVR Studia můžete očekávat všechny pokročilé vlastnosti na které jste zvyklí z obdobných vývojových prostředí. AVR Studio je založeno na stejných základech jako MS Visual C++.
Pro práci ve cvičeních je pro vás připravena skupina projektů, která se v AVR Studiu označuje jako "Solution". Po rozbalení souboru avr-kit.zip je vy vytvořené složce soubor avr-kit.avrsln. Což je skupina projektů urřená pro naše cvičení. Je možné ji otevřít pomocí menu File > Open > Projects/Solution, nebo kliknutím na ikonu.
Po otevření skupiny projektů se v okně "Solution Explorer" objeví dvě složky (dva projekty), leds a i2c. Bude se zde taky vyskytovat soubor avrkit.c, což je soubor s funkcemi knihovny avrkit.h které byly popsány výše. tento soubor prosím nijak neupravujte. K vaší práci jsou určeny soubory leds, pro první a druhé cvičení a soubor i2c pro třetí cvičení.
Projekt lze přeložit pomocí Build > Build Solution, případně klávesou F7. Poté se ve složce Debug nebo Release daného projektu objeví HEX soubor, který je určený pro program avrkit.exe. To jestli jste v režimu Debug nebo Release se dá ovlivnit pomocí záložky v hlavní liště AVR Studia.
Obsah souboru avr_kit.zip
http://poli.cs.vsb.cz/edu/apps/lab/avr-kit.zip
http://poli.cs.vsb.cz/edu/apps/lab/SI4735-PG.pdf
./avrkit.exe -> Program pro programování AVR Kitu ./avr-kit.avrsln -> Skupina projektů pro AVR Studio5 ./avrkit -> Zdrojový kod a hlavičkový soubor knihovny avrkit ./i2c -> Složka s projektem pro cvičení se sběrnicí i2c ./leds -> Složka s projektem pro cvičení s LED diodama
Složka avrkit:
./avrkit.c -> Zdrojový kód knihovny avrkit ./avrkit.h -> Hlavičkový soubor knihovny avrkit
Složka i2c
./i2c.avrgccproj -> Projekt AVR Studia ./i2c.c -> Zdrojový kód programu i2c ./Debug -> Zde bude HEX soubor po přeložení v Debug modu ./Release -> Zde bude HEX soubor po přeložení v Release modu
Složka leds
./leds.avrgccproj -> Projekt AVR Studia ./leds.c -> Zdrojový kód programu i2c ./Debug -> Zde bude HEX soubor po přeložení v Debug modu ./Release -> Zde bude HEX soubor po přeložení v Release modu
Složka Demo
./demoi2c.hex -> Demo program pro cvičení se sběrnicí i2c ./demo8x8.hex -> Demo program pro cvičení se segmentovými led displayi ./demoleds.hex -> Demo program pro samotný vývojový kit
Práce s knihovnou OpenCV
Knihovna OpenCV je určená pro práci s obrázky v jazyce C/C++. Přesto že knihovna podporuje mnoho složitých funkcí v základu je její použití velmi jednoduché.
Na internetu je možné o této knihovně nalézt mnoho informací. Projekt samotný je k dispozici na stránkách http://opencv.org/ .
Pro správnou funkci OpenCV je nutné vložit následující hlavičkové soubory:
#include "opencv2\opencv.hpp"
V programu je nutné vytvořit instanci třídy Mat, která reprezentuje obrázek. Tento obrázek je poté možné buď načíst nebo vytvořit.
Mat bgr_img = imread( arg[ 1 ], CV_LOAD_IMAGE_COLOR ); //načtení obrázku ze souboru Mat img( SIZEY, SIZEX, CV_8UC3 ); //vytvoření obrázku
Z objektu reprezentující obrázek lze vyčíst různé parametry obrázku. Jako například výšku a šířku.
Size bgr_img_size = bgr_img.size(); int sizex = bgr_img_size.width; int sizey = bgr_img_size.height
Vlastnosti jednotlivých pixelů, tedy hodnoty složek R,G a B je možné zístat z vektoru Vec3b následovně:
Vec3b v3 = bgr_img.at<Vec3b>( pozice_y, pozice_x ); printf("B=%f, G=%f, R=%f\n",v3[0],v3[1],v3[2]);
Opačný postup, tedy nastavení hodnot pixelu lze provést následovně:
Vec3b v3 = { 10, 20, 30 }; //hodnoty R,G a B bw_img.at<Vec3b>( pozice_y, pozice_x ) = v3;
Vytvořený obrázek je možné zobrazit pomocí funkce imshow("Název okna",image1). Funkce waitKey(delay) ponechá vykreslené okno do stisku klávesy případně po definovanou dobu, v případě že bude doba rovna 0, bude se čekat jen na stisk klávesy.
imshow( "Obrazek", img ); waitKey( 0 );
Cvičení
Základ všech cvičení je vytvořit zdrojový kod. Mě jako cvičícímu je úplně jednou jak se k výslednému kódu dostanete. Spolupracujte s kolegy, stáhněte si příklad z internetu, pošlete si to mejlem, je to úplně jedno. PODSTATNÉ je aby jste vašemu zdrojovému kódu rozuměli!!! Je to Váš kód, Vaše práce a Vy jí budete muset obhájit. Budete-li mi odevzdávat funkční program a nebudete rozumět zdrojovému kódu byť jen jednomu řádku budu program hodnotit za 0 bodů. Pokud bude Váš kód obsahovat podmínku, rád se zeptám kdy bude podmínka splněna, bude-li kód obsahovat vzorec rád Vám něco do něj doplním a budu očekávat, že budete vědět výsledek.
První cvičení - práce LED
- Zadání A
- 1bod - Otestujte AVR Kit nahráním demo programu pro LED diody
- 2body - Rozsviťte první LED diodu a po jedné sekundě vždy rozsviťte následující a zhasněte předchozí LED. (Efekt světelného hada).
*ooooooo o*oooooo oo*ooooo ooo*oooo oooo*ooo ooooo*oo oooooo*o ooooooo*
- 3body - Vyberte si jednu červenou LED a nechte jí blikat frekvencí 1Hz přičemž jiná LED bude svítit
- 7bodů - Vyvořte program, který bude blikat všemi červenými LED diodami najednou. Každá LED dioda bude mít přesně určenouo svou frekvenci blikání přičemž střída bude nastavena na 50% (půl času svítí, půl času je zhasnutá). Nastavení frekvence jednotlivých diod bude statické a bude ho možné měnit pouze změnou ve zdrojovém kodu.
- Zadání B
- 1bod - Otestujte AVR Kit nahráním demo programu pro LED diody
- 2body - Rozsviťte všechny LED až na první LED. Poté postupně po 1s vypínejte vždy následující LED až do doby kdy budou vypnuty všechny LED.
O******* OO****** OOO***** OOOO**** OOOOO*** OOOOOO** OOOOOOO* OOOOOOOO
- 3body - Vyberte si jednu červenou LED a měňte její jas změnou střídy přičemž jinou LED nechte rozsvícenou.
- 7bodů - Vyvořte program, který nastaví jas všech LED diod najednou. Každá LED dioda bude mít přesně urřený svůj jas. Nastavení úrovně jasu jednotlivých diod bude statické a bude ho možné měnit pouze změnou ve zdrojovém kodu.
- Zadání C
- 1bod - Otestujte AVR Kit nahráním demo programu pro LED diody
- 2body - Rozsviťte vždy stejné barvy na obou RGB diodách a po 1s je střídejte.
RGB RGB RGB RGB RGB RGB
- 3body - Napište program který na jedné RGB led rozsvítí všechny barvy a na druhé RGB LED postupně po 1s vystřídá všechny barevné kombinace, tedy celkem 8 barev.
- 7bodů - Vyvořte program, kterým bude možné nastavit jas každé barvy u obou RGB LED diod v úrovni 0 až 255.
Druhé cvičení - práce se segmentovým displayem
- Zadání A
- 1bod - Vytvořte funkci která bude mít jako vstupní hodnotu datový typ unsigned char. Návratová hodnota této funkce bude také unsigned char. Tato funkce vrátí takovou hodnotu, která bude reprezentovat zobrazení zadaného čísla na segmentovém displayi. Správnost funkce demonstrujte na programu.
unsigned char BCD(unsigned char vstup){ .... if(vstup == 8) return 0xff; //příklad pro číslo 8 .... }
- 3body - Na displayi zobrazte číslo svého loginu, pomocí multiplexního zobrazení.
- 5bodů - Nechte číslo svého loginu přejít na displayi z levé strany na pravou. Posun vždy po 1s.
- 7bodů - Nechte číslo svého loginu přejít na displayi z levé strany na pravou a poté z pravé na levou. Posun vždy po 1s.
- Zadání B
- 1bod - Vytvořte funkci která bude mít jako vstupní hodnotu datový typ unsigned char. Návratová hodnota této funkce bude také unsigned char. Tato funkce vrátí takovou hodnotu, která bude reprezentovat zobrazení zadaného čísla na segmentovém displayi. Správnost funkce demonstrujte na programu.
unsigned char BCD(unsigned char vstup){ .... if(vstup == 8) return 0xff; //příklad pro číslo 8 .... }
- 3body - Na displayi zobrazte dvojmístné číslo. Tedy číslo mezi 0 a 99.
- 5bodů - Vytvořte čítač, který bude na displayi inkrementovat hodnotu vždy po 1s od hodnoty 0 až po hodnotu 99.
- 7bodů - Vytvořte hodiny, které budou zobrazovat sekundy, minuty a hodiny.
- Zadání C
- 1bod - Vytvořte funkci která bude mít jako vstupní hodnotu datový typ unsigned char. Návratová hodnota této funkce bude také unsigned char. Tato funkce vrátí takovou hodnotu, která bude reprezentovat zobrazení zadaného čísla na segmentovém displayi. Správnost funkce demonstrujte na programu.
unsigned char BCD(unsigned char vstup){ .... if(vstup == 8) return 0xff; //příklad pro číslo 8 .... }
- 3body - Na displayi zobrazte dvojmístné číslo. Tedy číslo mezi 0 a 99.
- 5bodů - Vytvořte čítač, který bude na displayi dekrementovat hodnotu vždy po 1s od hodnoty 99 až po hodnotu 0.
- 7bodů - Vytvořte stopky, které budou zobrazovat sekundy a minuty a odpočítají 1:30min do 0:00 a pak se zastaví.
Třetí cvičení - sběrnice I2C
Je velmi důležité přečíst si dokumentaci ke cvičením a dokumentaci k obvodům PCF8574 a DS1621
Dnešní cvičení je velmi komplikované. Bez toho aby jste si přečetli návody do cvičení a dokumentaci k obvodům bude velmi obtížné získat větší množství bodů. Úkoly za 1 a 2 doby by měli být jednodušší. U úkolu za 3 body se nespokojím s tím že "to" bude fungovat. Opět bude velmi důsledně dbát na to ať kódu rozumíte. Úkoly za 4 a více bodů vyžadují znalost a pochopení chování obvodu DS1621.
U všech zadání budu vyžadovat ať kontrolujete správnost komunikace na sběrnici. Tedy potvrzení každého odeslaného byte pomocí bitu Acknowladge.
- Zadání A
- 1bod Zaadresujte obvod PCF8574 pro čtení. ( START > ODESLANI ADRESY > STOP ). Adresaci by jste měli být schopni provést pro libovolnou nastavenou adresu.
- 2body Rozsviťte led diody připojené k expandéru PCF8574, tak aby jste vytvořili efekt běžícího světla.
- 3body Implementujte funkci pro čtení dat ze sběrnice I2C a otestujte jeho chování na zápisu a opětovném přečtení dat na expandér PCF8574.
- 4body Nastavte teploměr DS1621 pro kontinuální čtení dat.
- 5bodů Čtěte teplotu s přesností na 1°C.
- 6bodů Čtěte teplotu s přesností na 0.5°C.
- 7bodů Nastavte termostat tak, ať je spínán při teplotě o 1°C větší než teplota změřená v úkolu za 6 bodů.
- Zadání B
- 1bod Zaadresujte obvod DS1621 pro čtení. ( START > ODESLANI ADRESY > STOP ). Adresaci by jste měli být schopni provést pro libovolnou nastavenou adresu.
- 2body Rozsviťte led diody připojené k expandéru PCF8574. Nejdříve všechny LED a poté postupně zhasínejte.
- 3body Implementujte funkci pro čtení dat ze sběrnice I2C a otestujte jeho chování na zápisu a opětovném přečtení dat na expandér PCF8574.
- 4body Nastavte teploměr DS1621 pro kontinuální čtení dat.
- 5bodů Čtěte teplotu s přesností na 1°C.
- 6bodů Čtěte teplotu s přesností na 0.5°C.
- 7bodů Nastavte termostat tak, ať je spínán při teplotě o 1°C větší než teplota změřená v úkolu za 6 bodů.
- Zadání C
- 1bod Vytvořte program který postupně vyšle všechny možné adresy na sběrnici I2C a tak zjistí, které obvody jsou na sběrnici přítomné.
- 2body Rozsviťte led diody připojené k expandéru PCF8574. Nejdříve všechny LED zhasněte a poté postupně rozsvěcujte.
- 3body Implementujte funkci pro čtení dat ze sběrnice I2C a otestujte jeho chování na zápisu a opětovném přečtení dat na expandér PCF8574.
- 4body Nastavte teploměr DS1621 pro kontinuální čtení dat.
- 5bodů Čtěte teplotu s přesností na 1°C.
- 6bodů Čtěte teplotu s přesností na 0.5°C.
- 7bodů Nastavte termostat tak, ať je spínán při teplotě o 1°C větší než teplota změřená v úkolu za 6 bodů.
Čtvrté cvičení - Práce s vlákny
Ve cvičení již budeme pracovat s vlákny na klasickém procesoru v PC. Každému z Vás budu zadání mírně modifikovat. Základ vždy zůstane stejný, ale v algoritmu budu chtít nějakou drobnou změnu. Opět upozorňuji že budu vyžadovat porozumění kódu. Tedy jak tomu jak funguje třídící algoritmus tak tomu jak fungují vlákna.
- 1bod V Microsoft Visual Studiu vytvořte konzolovou aplikaci, která vygeneruje 10 náhodných čísel v daném rozmezí a vypíše je na obrazovku.
- 2body Vygenerujte pole 100 prvků a naplňte je náhodnými hodnotami. Napište program který naplní v jednom vlákně horní část pole a ve druhém vlákně spodní část pole.
- 3body Naprogramujte třídící algoritmus (A) Přímý výběr, (B) Přímé třídění, (C) Bubble sort a demonstrujte jeho správnou funkci při setřídění dat vygenerovaných v druhé části.
- 5body Upravte program tak, ať třídění trvá citelně delší dobu a tuto dobu změřte.
- 6body Vstupní pole rozdělte na dvě části a proveďte třídění dvou částí po sobě. Opět změřte potřebný čas.
- 7bodů Po provedení obou vláken spojte obě setřízená pole dohromady. Správnou funkci nejdříve demonstrujte na poli malých rozměrů a poté na poli rozměrnějším.
- 8bodů Oba algoritmy třídění spusťte v samostatných vláknech.
Páté cvičení - Seznámení se s CUDA programováním
- 4body Úkolem bude vytvořit obrázek definovaných rozměrů. Každý dostane jiný vzor, který bude program vytvářet. Například kruh, šachovnici, úhlopříčku a podobně. Program vytvoří nový obrázek, předá řešení GPU kde bude každý pixel řešit jedeno vlákno. Vlákno na základě své pozice bude vykreslovat požadovaný pixel.
- 6bodů Úkol je stejný jako v předchozím úkolu, pouze daný vzor budete realizovat přes obrázek, který si načtete.
Šesté cvičení - CUDA programováním
Cvičení bude hodnoceno maximálně deseti body. Podle toho kolik budete chtít získat bodů budeme vymýšlet zadání společně na místě. Například pro zisk deseti bodů, bych mohl chtít napsat program, který načte obrázek ze souboru a zdeformuje ho (zkosí, vytvoří efekt vlny a podobně). Pro zisk pěti bodů bych mohl požadovat vytvoření programu, který načte dva obrázky ze souboru a zobrazí je v jednom okně přes sebe (jako karty hozené na stůl). Za zisk dvou až tří bodů bych mohl chtít vytvoření dvou až tří geometrických tvarů, které se zobrazí v jednom okně a budou barevně promíchané nebo si naopak budou stínit.
Jsou to ale jen příklady zadání. Konkrétní zadání se může značně lišit.