Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Na velikosti (ne)záleží aneb Úvod do programování jednočipů
Kamil Řezáč © Adastra, 2008
2
Motivační: Od blikající LEDky k meteostanici
3
Motivační II: ukázkové projekty
měření teploty a tlaku spínaný zdroj pro 3x3W LED emulátor klávesnice deska řízení motorů přes RS-485 ovladač pro časosběrnou fotografii
4
Který jednočip je nejlepší?
8051? Encore? ARM? AVR? HC68? PIC? Rabbit? Zilog? !! ten, který umím !!
5
Rodina procesorů Atmel AVR
AtTiny pro méně náročné aplikace menší pouzdro (a tedy méně pinů) v závislosti na typu chybí některé funkční bloky (např. UART…) omezené použití vyšších programovacích jazyků (zásobník) Tiny15, Tiny2313 AtMega velký rozsah typů (pouzdra, velikosti paměti) varianty se specializovaným rozhraním (CAN, USB) slušná podpora pro vyšší programovací jazyky podpora ladění přes JTAG (kromě Mega8) Mega8, Mega128
6
Atmel AVR Mega8: vlastnosti
30Kč oddělená paměť pro kód a data (8kB/4kinstr a 1kB) až 23 využitelných vývodů až 16MHz takt. frekvence vestavěný osc. 1 nebo 8 MHz 3 čítače/časovače EEPROM …. většina instrukcí (kromě skoků) vykonávána v 1 taktu, tedy až 16MIPS
7
Atmel AVR Mega8: vývody
8
Programovací jazyky a vývojová prostředí
assembler AVR Studio avra C/C++ gcc (port pro Win: WinAVR) + editor/IDE (AVR Studio, notepad, vim, Eclipse) + AVRlib IAR ImageCraft Basic Bascom Pascal, Java, Forth, Ada, teoreticky všechny gcc frontendy…
9
Kontrola chování procesoru - registry
chod procesoru lze řídit prostřednictvím kontrolních registrů příklad: UCSRB registr (nastavení sériového portu) chod procesoru lze monitorovat pomocí stavových registrů příklad: STATUS registr (příznaky výsledků aritmetických operací)
10
Odbočka - bitové operace
AND: & = OR: | = XOR: ^ = NOT: ~ = 1 na výstupu tam, kde je na daném bitu 1 v obou bytech 1 na výstupu tam, kde je na daném bitu 1 alespoň v jednom bytu 1 na výstupu tam, kde je na daném bitu 1 právě v jednom bytu (překlopí právě ty bity jednoho bytu, které mají 1 na témže bitu druhého bytu) negace všech bitů
11
Zacházení s bity V následujících ukázkách budeme manipulovat se třetím bitem (PB3) registru PORTB. _BV(x) - byte s nastaveným x-tým bitem: x _BV(x) = 1 << x = ; nahození bitu: PORTB |= _BV(PB3); | (1 << 3) = | = shození bitu: PORTB &= ~_BV(PB3); & ~(1 << 3) = & (~ ) = & = překlopení bitu: PORTB ^= _BV(PB3); ^ (1 << 3) = ^ = ^ (1 << 3) = ^ =
12
I/O operace – cvičíme s piny
piny sdruženy do portů (typicky po osmi) – PORTx[0..7], značíme písmenným suffixem, např. PORTB, jeho jednotlivé bity pak PB0 … PB7 pro každý port existují tři obslužné registry: DDRx (DDRB): směr pinu (0 – vstupní, 1 – výstupní) PORTx (PORTB): výstupní hodnota (0 – 0V, 1 – 5V) PINx (PINB): skutečná hodnota na vstupu (0 – 0V, 1 – 5V)
13
Programátor HW k nahrání programu (firmware) do jednočipu komerční
STK500 AVR Dragon samodomo protokolové (programovací signály generuje čip programátoru) problém slepice X vejce (jak naprogramovat čip do programátoru) avr910biprog bitbang (programovací signály generuje přímo PC na paralelním nebo sériovém portu) PonyProg, dasa… bootloadery sám sobě programátorem
14
Low-cost programátory
15
Zadání – blikající LED dioda
Základní zadání – pevné časování ¼ sekundy svítí ¾ sekundy nesvítí Rozšířené zadání doba svícení je nastavitelná uživatelem
16
Blikající LED – co potřebujeme
nepájivé kontaktní pole programátor AVR Mega8 LED dioda rezistor („odpor“) 1kohm zdroj napětí 4-6V
17
Blikající LED – jak to zapojíme
18
Blikající LED – jak to funguje
Schéma programu nekonečná smyčka Čekání použití časovačů zapouzdřené v knihovních funkcích alternativně lze, stejně jako v asembleru, použít naladěné vnořené cykly
19
Blikající LED – jak to naprogramujeme
ASM SBI DDRB, PB0 start: LDI count0, 128 LDI count1, 71 LDI count2, 2 CBI PORTB, PB0 delay_a1: DEC count0 BRNE delay_a1 delay_b1: DEC count1 BRNE delay_b1 delay_c1: DEC count2 BRNE delay_c1 LDI count0, 137 LDI count1, 212 LDI count2, 4 SBI PORTB, PB0 delay_a2: DEC count0 BRNE delay_a2 delay_b2: DEC count1 BRNE delay_b2 delay_c2: DEC count2 BRNE delay_c2 JMP start C #include <avr/io.h> #include "global.h" #include "timer.h" int main(void) { timerInit(); PORTB |= _BV(PB0); while(1) { PORTB &= ~_BV(PB0); timerPause(250); timerPause(750); }
20
Blikající LED – jak to dostaneme do jednočipu
AVR Studio UISP avrdude avrdude -p m8 -c stk500v2 -P COM1 -U flash:w:blink.hex
21
Přerušení čekání v hlavní smyčce je neefektivní
občas potřebujeme reagovat na události přerušení hlavní smyčky uložení stavu procesoru zavolání příslušné obslužné rutiny obnovení stavu procesoru návrat do hlavní smyčky přerušitelná a nepřerušitelná přerušení riziko „utopení se“ v přerušeních, pokud obsluha trvá déle, než je perioda vyvolávání přerušení
22
Časovače měření uplynulé doby nezávisle na hlavní smyčce
volitelná předdělička přerušení při přetečení dva osmibitové, jeden šestnáctibitový další funkcionalita (input capture, output compare) ukázka
23
A/D převodník měření analogové hodnoty napětí na pinu
6 multiplexovaných kanálů 8bit nebo 10bit výstup rychlost měření versus přesnost napěťová reference: interní (2.5V) / externí / napájení přerušení při ukončení převodu
24
A/D převodník: jak to zapojíme
25
A/D převodník: jak to naprogramujeme
měření pozice potenciometru podle získané hodnoty měníme dobu svitu LED ukázka
26
PWM – pulzně-šířková modulace
generování zvuku přes piezoměnič / řízení motoru regulace potenciometrem ukázka
27
Sériový port echo přijatých znaků (se zvětšením) ukázka
28
Alfanumerický displej
výpis textu na displej ukázka
29
Další zdroje informací
30
Q & A roštěnka
31
CZECH REPUBLIC Adastra, s.r.o. Karolinská 654/2 Praha 8 - Karlín CANADA Adastra Corporation 8500 Leslie St. Markham, Ontario, L3T 7M8 SLOVAK REPUBLIC Adastra, s.r.o. Francisciho 4 Bratislava GERMANY Adastra GmbH Bockenheimer Landstrasse 17/19 60325 Frankfurt am Main
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.