ATP
Cvičení z předmětu Automatizace technologických procesů
Obsah
Ú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
./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