. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
Mega128A – ADC, UART, LED
24. října 2011 - 1:00 | Pandatron | Mega128A – ADC, UART, LED | Komentářů: 6  

Mega128A – ADC, UART, LED

ADC, UART, LED, ale i tlačítka, LED displej a timer, to jsou témata knihoven, popsaných v tomto článku. Zároveň si krátce přiblížíme strukturu publikovaných knihoven a první použití.

Bohatě vybavený vývojový kit Mega128A nabízí využití nejen při výuce a prvních krocích s mikrokontroléry řady AVR, ale své uplatnění nalezne i při vývoji prototypových zařízení, ověřovacích aplikací apod.


Obr. 1: Vývojový kit Mega128A, dostupný prostřednictvím našeho eShopu

Základem vývojového kitu Mega128A je oblíbený 8-bitový mikrokontrolér ATmega128A od společnosti Atmel, vybavený 128 kB programové paměti a celou řadou integrovaných periferií. Kromě základních prvků, zajišťujících bezproblémový chod procesoru, jsou k dispozici například čtyři 8- a 16- bitové čítače/časovače, 6x PWM výstup, 8-kanálový 10-bitový A/D převodník, dvě sériová rozhraní SPI a I2C, 2x UART, programovatelný WatchDog, analogový komparátor a řada dalších.

Na vývojové desce Mega128A je pak vývojářům k dispozici velké množství ovládacích a zobrazovacích prvků, obvod reálného času, externí I2C paměť či například i vysokonapěťový budič krokových motorů a další. Rovněž kit nabízí přímé použití jak standardních znakových, tak i moderní grafických LCD displejů, ale o tom až později.



Obr. 2: Schéma vývojového kitu Mega128A

Více informací o vývojovém kitu je dostupných v našem článku Vývojový kit Mega128A.

Ukázkové aplikace a knihovny
Součástí každého balení vývojového kitu Mega128 je kromě RS232 a USB kabelu také CD s technickou dokumentací a základními vývojovými nástroji. Dále je součástí CD také 25 dobře komentovaných příkladů použití dostupných periferií, viz. následující tabulka.

24CX LED3 USART0(8MHz)
BUZZER LED4 USART1(8MHz)
INT0 and INT1 SEG1 adc_1602
LCD12864-ok SEG2 ds1302-seg
LCD1602_1 Timer0_smg ds18b20 + ds1302 + lcd1602
LCD1602_2 Timer1_smg eeprom
LED1 Timer2_smg key
LED2 Timer3_smg stmotor
Tab. 1: Příklady a ukázkové aplikace na dodávaném CD

Dalo by se tedy říci, že okamžitému použití vývojového kitu již nestojí nic v cestě. Bohužel, všechny uvedené příklady a aplikace, které jsou na dodávaném CD, jsou psané v anglickém jazyce a navíc vzhledem k jejich rozložení je problémem i jejich snadné použití jako knihoven. Z toho důvodu jsme se pro desku rozhodli vytvořit sadu vlastních příkladů, které budou komentované výhradně v českém jazyce (přesto že se v aplikacích z důvodu jejich použití dalšími lidmi po celém světě doporučuje používat výhradně anglický jazyk) a rozvržené tak, aby každé integrovaná či externí periferie měla vlastní zdrojový soubor. Tím je možné každý nový projekt složit jednoduše z těchto základních knihoven a rychle přejít k vývoji vlastní aplikace.


Obr. 3: Jednotné nastavení konfiguračních bitů, platné pro všechny příklady

První použití
Součástí každého balíku jsou vždy příslušné soubory se zdrojovými kódy (tedy .c a .h) a komentáři, Makefile, zkompilovaný soubor HEX připravený k naprogramování i projektový soubor Presto.ppr pro software UP s uloženými konfiguračními bity. Zdrojové kódy jsou vyvíjeny s použitím nejrozšířenějšího GCC WinAVR překladače, ale při jejich zápisu dodržujeme nařízení ANSI C, takže jsou přímo použitelné i s dalšími překladači jazyka C.


Obr. 4: Univerzální programátor MiniProg, dostupný prostřednictvím našeho eShopu

Smyslem tohoto článku není krok za krokem seznámení a výuka programování aplikací pro mikrokontroléry. K tomuto účelu je na internetu dostupná celá řada jiných seriálů. Přesto, pro ty z vás, kteří již mají nějaké zkušenosti s programováním, ale potřebují postrčit k procesorům AVR, je zde alespoň základní přehled operací:

1) Z následujícího webu si stáhněte WinAVR - AVR-GCC pro Windows
2) Nainstalujte ho podle instrukcí. Z důvodu případné pozdější aktualizace doporučuji instalovat do C:\WinAVR\
3) Nainstalujte si příslušný programátor: z ověřených je to buď PRESTO a software UP, nebo MiniProg z naší nabídky
4) Stáhněte si a rozbalte příslušný archiv příkladu
5) Naprogramujte přiložený HEX, nebo zkompilujte vlastní podle instrukcí od bodu 6 dále
6) Přejděte Příkazovým řádkem (otevřete) adresář s rozbaleným archivem příkladu
7) Kompilaci spusťte příkazem: make
8) Pokračujte bodem 6


Obr. 5: Rozmístění pinů na procesoru ATmega128A

Nyní již k samotným příkladům a knihovnám.

ADC
Integrovaný 8-kanálový, 10-bitový převodník je jednou z hlavních periferií, které obvodu umožňují spojení s okolním (obvykle analogovým) světem. Kromě základního měření a jednorázového převodu analogových hodnot na digitální je k dispozici řada speciálních funkcí, jako je například provoz s redukcí šumu či periodické měření. Dále jsou k dispozici tři stupně zesílení (1x, 10x, 200x), sedm rozdílových vstupů, volitelná interní reference a samozřejmě možnost vyvolání přerušení po dokončení převodu. Maximální rychlost snímání je 76,9 kS/s (až 15 kS/s při plném rozlišení) s konfigurovatelnou délkou převodu v rozmezí od 13 do 260 us.

Soubor adc.c:

  void adc_init (void); Slouží k inicializaci A/D převodníku a základní konfiguraci.
  unsigned int adc_read (unsigned char channel); Čtení a převod hodnoty z daného kanálu a její návrat.

Vlastní příklad v archivu pak pracuje tak, že pravidelně vyčítá hodnotu z A/D převodníku na kanálu CH0 a podle její velikosti rozsvěcí 0 – 8 LED na desce. Pro nastavení analogové hodnoty převodníku je na desce osazen odporový trimr ADC0 a příslušný Jumper. Příklad stahujte zde.

ADC to Display
Další varianta na předchozí příklad. Pouze s tím rozdílem, že analogová hodnota je čtena z obou kanálů CH0 i CH1 a získané dvě 10-bitové hodnoty v rozsahu 0 – 1023 se zobrazuje na LED displeji. Příklad stahujte zde.

Button
Demonstruje použití tlačítek KEY 1 až KEY 8 na desce Mega128. Tlačítka se spínají proti společné zemi a o klidovou úroveň na pinech se starají integrované pull-up rezistory.

Soubor button.c:

  void button_port_init (void); Slouží k inicializaci portu (PORTB) tlačítek a povolení interních pull-up rezistorů.

V souboru button.h jsou pak uvedené definice jednotlivých pinů tlačítek, takže pro čtení jejich hodnoty již není potřeba další funkce.


Obr. 6: Osm spínačů KEY1 až KEY8

Uvedený příklad hlídá stav tlačítek KEY 1 až KEY 8 a rozsvěcuje podle nich diody LED 1 až LED 8. Příklad stahujte zde.

LED
Umožňuje využití osmi LED na desce Mega128. Kromě funkce inicializace portu jsou k dispozici funkce pro rozsvícení i zhasnutí LED.

Soubor led.c:

  void led_port_init (void); Inicializace portu s LED.
  void led_port_set (unsigned char value); Rozsvícení daných LED. Např. hodnota 0x01 pouze rozsvítí LED 1.
  void led_port_clear (unsigned char value); Zhasnutí daných LED. Např. hodnota 0x01 pouze zhasne LED 1.
  void led_port_output (unsigned char value); Přímý zápis hodnoty do portu LED. Např. hodnota 0x01 rozsvítí LED 1 a LED 2 – 8 zhasne.


Obr. 7: Osm kruhově uspořádaných LED

Příklad bliká s LED v intervalu 200 ms. Funkce _delay_ms(); je deklarována v souboru util/delay.h, který je součástí WinAVR a využívá konstanty frekvence krystalu F_CPU (7372800 MHz) ze souboru global.h. Příklad stahujte zde.

Display
Funkce pro použití LED displeje na desce Mega128A. K dispozici jsou funkce jak pro zápis jednotlivých znaků, tak i převod číselné hodnoty (UINT16) na znaky a její zobrazení na displeji od určené pozice se zarovnáním doprava. Hodnota v tom případě může být v rozsahu 0 až 65535 s tím, že prázdné znaky před číslem se nezobrazují.

Soubor display.c:

  void display_port_init (void); Inicializace portu LED displeje.
  void display_write_char (unsigned char value, unsigned char disp); Zápis jednoho znaku (value) na LED displej (pozice disp).
  void display_write_int (unsigned int value, unsigned char offset); Zápis číselné hodnoty (value) na displej od dané pozice (offset) doleva.
  void display_puts (char *str, unsigned char offset); Zápis stringu (str) na displej od dané pozice (offset) doleva.


Obr. 8: Osm sedmisegmentových LED zobrazovačů je řízeno pomocí dekodéru 74LS138 a posuvného registru 74HC595

Uvedený příklad neustále inkrementuje hodnotu integeru a zobrazuje ji na displeji. Příklad stahujte zde.

Timer
Jednoduchý příklad použití integrovaných čítačů/časovačů a přerušení po přetečení.

Soubor timer.c:

  void timer1_init (void); Inicializace čítače Timer 1 a povolení přerušení od přetečení.
  void uart0_transmit (unsigned char data); Odeslání jednoho znaku (data) sériovým rozhraním.
  void uart0_command (const char *data); Odeslání povelu, stringu z data a zakončení povelu CR/LF. Vhodné především pro AT příkazy.
  ISR(USART0_RX_vect); Vektor přerušení po příjmu znaku.

Soubor int.c:

  ISR(TIMER1_OVF_vect); Vektor přerušení od přetečení čítače Timer 1. Po smazání příznaku přerušení zvyšuje hodnotu v proměnné counter.

Příklad v přerušení, vyvolávaném v pravidelných intervalech od čítače Timer 1, posouvá jeden bit v proměnné counter, která se přenáší na LED 1 až LED 8. Příklad stahujte zde.

UART
Základním komunikačním rozhraním je ve většině aplikací tzv. UART nebo také USART, tedy univerzální sériový asynchronní přijímač/vysílač. Mikrokontrolér ATmega128A obsahuje ve svém pouzdře hned dvě tato nezbytná komunikační rozhraní, která jsou navzájem zcela oddělené (včetně časování). Na desce Mega128A jsou oba porty vyvedeny na piny konektoru JP1 RXD0 a TXD0 pro UART 0 a podobně také RXD1 a TXD1 pro UART 1. Po osazení propojkami typu Jumper (které jsou součástí kitu) se k pinům připojí dvojitý RS232/TTL převodník řady MAX232 a sériové porty jsou přímo v RS232 úrovních dostupné na dvou konektorech D-Sub 9 (female).
V příkladu jsou použity dva soubory se zdrojovými kódy pro sériové rozhraní, tedy uart0.c pro UART 0 a uart1.c pro UART 1.

Soubory uart0.c a uart1.c:

  void uart0_init (unsigned int bd); Inicializace UARTu s danou rychlostí (bd) z uart0.h a konfigurací přerušení po příjmutí znaku.
  void uart0_transmit (unsigned char data); Odeslání jednoho znaku (data) sériovým rozhraním.
  void uart0_command (const char *data); Odeslání povelu, stringu z data a zakončení povelu CR/LF. Vhodné především pro AT příkazy.
  ISR(USART0_RX_vect); Vektor přerušení po příjmu znaku.


Obr. 9: Dva sériové porty RS232 jsou dostupné na konektorech typu D-Sub

Uvedený příklad využívá obou sériových rozhraní zároveň, přičemž do obou odesílá v pravidelných intervalech 500 ms text HELLO WORLD… Zároveň také z obou rozhraní přijímá v přerušeních znaky, které opět posílá zpět (jako funkce ECHO). Příklad stahujte zde.

Reakce na příjem znaku a jeho opětovné odeslání je vlivem přerušení velmi rychlá.


Obr. 10: Odeslání přijatého znaku je velmi rychlé

Závěr:
Tolik k první sadě příkladů a jednoduchých knihoven. Všechny příklady jsou volně dostupné k libovolnému dalšímu použití. Jak již bylo uvedeno, součástí všech souborů se zdrojovými kódy jsou komentáře, psané speciálně v českém jazyce, takže kdo má již alespoň základní zkušenosti s programováním, nebude pro něho použití a modifikace příkladů ve svých projektech žádným problémem.

Odkazy & Download:
Vývojový kit MEGA128A v našem eShopu
MiniProg – Univerzální programátor AVR
Síťový napáječ 12V/500mA

Informace o obvodu ATmega128A
WinAVR - AVR-GCC pro Windows
USBasp - USB programmer for Atmel AVR controllers
eXtreme Burner – AVR

Uvedené příklady:
ADC
ADC na displej
Button
LED
Displej
Timer
UART







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (6):

Zobrazit starší 30 dnů (6)...

host
6. Dne 01. 11. 2011 v 02:18 zaslal host
Bez titulku
Jen si nemysli. 128kB není tak moc a když ještě třeba použiješ FAT32 a podobně, tak je hned velká část pryč.


Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
PSDR - SDR přijímač, modul
Modul digitálního (SDR) přijímače pro krátkovlnná pásma s výměnným krystalem. Dodáván s krystalem pro pásmo 80m (3,5 MHz)
Skladem od 529 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007