INSTITUTO FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE ELETRNICA
Programao C para
Arduino
Prof. Charles Borges de Lima.
Maio/2013 TM
1 1
SUMRIO
Introduo Trabalho com Bits
O Arduino Uno Produzindo um Cdigo
- O ATmega328 Eficiente
Programao Gravao do Firmware
- Assembly Concluses
- Linguagem C Referncias
Bibliogrficas
- IDE do Arduino
Registradores do
ATmega328
TM
2 2
INTRODUO
Arduino uma plataforma eletrnica de
prototipagem baseada em hardware livre e
software, fceis de usar e flexveis.
Possui um IDE que permite a programao de
forma fcil de um microcontrolador AVR. Todavia,
no eficiente e no permite o desenvolvimento
profissional de projetos.
Para um projeto profissional necessrio o uso
de ferramentas adequadas de programao e do
conhecimento tcnico do microcontrolador
empregado.
A IDE do Arduino no destinada ao desenvolvimento profissional.
TM
3 3
O ARDUINO UNO
Como estruturado o Hardware:
0-5 (azul) - pinos de entradas analgicas.
Entradas para o ADC, podem ser usados como I/O
digital.
0-13 (verde) - pinos de I/O digitais . Pinos 0 e 1
tambm so utilizados para a comunicao serial.
AREF(laranja) - referncia analgica do ADC.
S1 (azul) - boto de inicializao.
ICSP (ciano) - conector de gravao In-Circuit.
USB (amarelo) - usado para gravar o Arduino ou
energiz-lo.
X1 (rosa) - fonte de alimentao externa
(9-12VDC, aps diodo estar tambm em Vin).
20 Pinos de I/O
Existem variaes no layout da placa conforme o modelo.
TM
4 4
O ATmega328
O microcontrolador do Arduino Uno o ATmega328 (AVR).
TM
5 5
PINOS DO ATmega328 NO ARDUINO
Informaes fundamentais para a programao. TM
6 6
PROGRAMAO ASSEMBLY
Assembly
Todo microcontrolador possui um conjunto prprio de instrues
representadas por mnemnicos (assembly) que aps o
desenvolvimento do programa so convertidos nos zeros e uns
lgicos interpretveis pelo microprocessador.
O assembly uma linguagem de baixo nvel e permite obter o
mximo desempenho de um microcontrolador, gerando o menor
nmero de bytes de programa combinados a uma maior velocidade
de processamento.
Todavia, o assembly s ser eficiente se o programa estiver bem
estruturado e empregar algoritmos adequados.
Programar em assembly exige muito esforo de programao.
Assembly a linguagem da CPU do microcontrolador. TM
7 7
EXEMPLO
TM
8 8
EXEMPLO
30 Bytes
15 instrues
Piscando um LED ligado ao pino PB5 (pino 13 no Arduino).
TM
9 9
PROGRAMAO C
Linguagem C
Com a evoluo tecnolgica (compiladores), o
assembly foi quase que totalmente substitudo pela
linguagem C.
As vantagens do uso do C so numerosas:
Reduo do tempo de desenvolvimento.
O reuso do cdigo facilitado.
Facilidade de manuteno.
Portabilidade.
Os compiladores convertem o C para o Assembly antes da gerao do cdigo de mquina.10
TM 10
PROGRAMAO C
O problema de desenvolver o cdigo em C que o
mesmo pode consumir muita memria e reduzir a
velocidade de processamento. Os compiladores tentam
traduzir da melhor forma o cdigo para o assembly
(antes de se tornarem cdigo de mquina), mas esse
processo no consegue o mesmo desempenho de um
cdigo escrito exclusivamente em assembly.
Como os compiladores C so eficientes para a
arquitetura do AVR, a programao dos
microcontroladores ATmega feita em C. S existe a
necessidade de se programar puramente em assembly
em casos crticos.
TM
11 11
EXEMPLO
216 Bytes
Otimizao -Os
Usando cpl_bit(PORTB,LED) resultam 202 bytes. TM
12 12
IDE DO ARDUINO (Wiring)
30 bytes Assembly
216 bytes C
1084 bytes IDE Arduino
Linguagem prpria baseada em C e C++. TM
13 13
REGISTRADORES DO ATmega328
Os registradores de I/O so o painel de controle do
microcontrolador, pois todas as configuraes de trabalho,
incluindo acesso s entradas e sadas, se encontram
nessa parte da memria.
Total de 87 Registradores
Painel de Controle. TM
14 14
REGISTRADORES DOS PORTs
TM
15 15
Exemplo
DDRD = 0b00000100;
DDRD | = 1<< PC2;
PORTD = 0b11111011;
set_bit(PORTD, 2);
clr_bit(PORTD, 2);
tst_bit(PIND, 7);
UCSR0B = 0x00; //desabilita RXD e TXD TM
16 16
TRABALHO COM BITS
O trabalho com bits fundamental para a programao de um
microcontrolador. Assim, compreender como podem ser
realizadas operaes com bits primordial para uma
programao eficiente.
Exemplo:
TM
17 17
Ativa Bit
Exemplo:
TM
18 18
Limpa Bit
Exemplo:
TM
19 19
Complementa Bit
Exemplo:
TM
20 20
Testa Bit
Exemplo:
TM
21 21
Exemplo
TM
22 22
PRODUZINDO UM CDIGO EFICIENTE
Compile com a mxima otimizao.
Use variveis locais sempre que possvel.
Use o menor tipo de dado possvel (8 bits), unsigned se aplicvel.
Use do{ } while(expresso) se aplicvel.
Use laos com contadores decrescentes e pr-decrementados, se
possvel.
Use macros ao invs de funes para tarefas menores que 2-3 linhas
de cdigo em assembly.
Evite chamar funes dentro de interrupes.
Se possvel junte vrias funes em um mdulo (biblioteca), para
aumentar o reuso do cdigo.
Todas as constantes e literais devem ser colocados na memria flash.
Alterar compilar, alterar compilar, comparar. TM
23 23
Exemplo sem ponto flutuante
unsigned int (16 bits)
Evitar o uso de Ponto Flutuante. TM
24 24
GRAVAO DO FIRMWARE
Gravador
USBtiny/USBasp
ou diretamente
pelo Arduino
(conversor
serial/USB com
um controlador
com Bootloader).
avrdude.exe - GUI TM
25 25
GRAVAO DO FIRMWARE
avrdude.exe AVR8 Burn-O-Mat TM
26 26
CONCLUSO
O Arduino e seus Shields permitem um prototipao rpida, dado
o conjunto de funes e bibliotecas disponveis. fcil de
programar.
Todavia, a IDE do Arduino muito limitada e inadequada ao
desenvolvimento profissional. O cdigo no otimizado e no
existem ferramentas de depurao.
O desenvolvimento profissional exige o conhecimento do
microcontrolador e da programao C.
Cdigos eficientes so resultantes de bons algoritmos,
produzindo maior densidade de cdigo (funcionalidade/bytes).
fundamental conhecer a arquitetura interna do microcontrolador
para desenvolver os melhores programas.
TM
27 27
REFERNCIAS BIBLIOGRAFICAS
LIMA, C. B.; VILLAA, M.V. M. AVR e Arduino: Tcnicas de Projeto.
2. ed. Edio dos Autores, Florianpolis, 2012.
GANSSLE, Jack. The Firmware Handbook. 1 ed. Elsevier, United
Kingdom, 2004.
ATmega48/88/168/328/A/PA/P: Microcontroladores AVR (Manual do
fabricante).
Atmel AVR4027: Tips and Tricks to Optimize Your C Code for 8-bit
AVR Microcontrollers (Application Note).
http://atmel.com/
http://www.avrfreaks.net/
http://arduino.cc/
http://fritzing.org/
http://borgescorporation.blogspot.com.br/
A vida dura pra quem mole! TM
28 28
MUITO OBRIGADO
PELA ATENO!
[email protected]
Mars Robot Curiosity is Powered by Arduino ... TM
29 29