programação em c para arduino

29
1 TM 1 Programação C para Arduino INSTITUTO FEDERAL DE SANTA CATARINA DEPARTAMENTO DE ELETRÔNICA Prof. Charles Borges de Lima. Maio/2013

Upload: rodrigo-rosa

Post on 18-Jul-2015

177 views

Category:

Technology


19 download

TRANSCRIPT

Page 1: Programação em C para Arduino

1TM 1

Programação C para Arduino

INSTITUTO FEDERAL DE SANTA CATARINADEPARTAMENTO DE ELETRÔNICA

Prof. Charles Borges de Lima.

Maio/2013

Page 2: Programação em C para Arduino

2TM 2

SUMÁRIO

� Introdução

� O Arduino Uno

- O ATmega328

� Programação

- Assembly

- Linguagem C

- IDE do Arduino

� Registradores do ATmega328

� Trabalho com Bits

� Produzindo um CódigoEficiente

� Gravação do Firmware

� Conclusões

� Referências Bibliográficas

Page 3: Programação em C para Arduino

3TM 3

INTRODUÇÃO

A IDE do Arduino não é destinada ao desenvolvimento profissional.

Arduino é uma plataforma eletrônica deprototipagem baseada em hardware livre esoftware, fáceis de usar e flexíveis.

Possui um IDE que permite a programação deforma fácil de um microcontrolador AVR. Todavia,não é eficiente e não permite o desenvolvimentoprofissional de projetos.

Para um projeto profissional é necessário o usode ferramentas adequadas de programação e doconhecimento técnico do microcontroladorempregado.

Page 4: Programação em C para Arduino

4TM 4

O ARDUINO UNO

Como é estruturado o Hardware:

0-5 (azul) - pinos de entradas analógicas. Entradas para o ADC, podem ser usados como I/O digital.

0-13 (verde) - pinos de I/O digitais . Pinos 0 e 1 também são utilizados para a comunicação serial.

AREF(laranja) - referência analógica do ADC.

S1 (azul) - botão de inicialização.

ICSP (ciano) - conector de gravação In-Circuit.

USB (amarelo) - usado para gravar o Arduino ou energizá-lo.

X1 (rosa) - fonte de alimentação externa (9-12VDC, após diodo estará também em Vin).

Existem variações no layout da placa conforme o modelo.

20 Pinos de I/O

Page 5: Programação em C para Arduino

5TM 5

O ATmega328

O microcontrolador do Arduino Uno é o ATmega328 (AVR).

Page 6: Programação em C para Arduino

6TM 6

PINOS DO ATmega328 NO ARDUINO

Informações fundamentais para a programação.

Page 7: Programação em C para Arduino

7TM 7

PROGRAMAÇÃO ASSEMBLY

Assembly é a linguagem da CPU do microcontrolador.

Todo microcontrolador possui um conjunto próprio de instruçõesrepresentadas por mnemônicos (assembly) que após odesenvolvimento do programa são convertidos nos zeros e unslógicos interpretáveis pelo microprocessador.

O assembly é uma linguagem de baixo nível e permite obter omáximo desempenho de um microcontrolador, gerando o menornúmero de bytes de programa combinados a uma maior velocidadede processamento.

Todavia, o assembly só será eficiente se o programa estiver bemestruturado e empregar algoritmos adequados.

Programar em assembly exige muito esforço de programação.

Assembly

Page 8: Programação em C para Arduino

8TM 8

EXEMPLO

Page 9: Programação em C para Arduino

9TM 9

EXEMPLO

Piscando um LED ligado ao pino PB5 (pino 13 no Arduino).

30 Bytes 15 instruções

Page 10: Programação em C para Arduino

10TM 10

PROGRAMAÇÃO C

Os compiladores convertem o C para o Assembly antes da geração do código de máquina.

Com a evolução tecnológica (compiladores), oassembly foi quase que totalmente substituído pelalinguagem C.

As vantagens do uso do C são numerosas:

� Redução do tempo de desenvolvimento.� O reuso do código é facilitado.� Facilidade de manutenção.� Portabilidade.

Linguagem C

Page 11: Programação em C para Arduino

11TM 11

O problema de desenvolver o código em C é que omesmo pode consumir muita memória e reduzir avelocidade de processamento. Os compiladores tentamtraduzir da melhor forma o código para o assembly(antes de se tornarem código de máquina), mas esseprocesso não consegue o mesmo desempenho de umcódigo escrito exclusivamente em assembly.

Como os compiladores C são eficientes para aarquitetura do AVR, a programação dosmicrocontroladores ATmega é feita em C. Só existe anecessidade de se programar puramente em assemblyem casos críticos.

PROGRAMAÇÃO C

Page 12: Programação em C para Arduino

12TM 12

EXEMPLO

216 BytesOtimização -Os

Usando cpl_bit(PORTB,LED) resultam 202 bytes.

Page 13: Programação em C para Arduino

13TM 13

IDE DO ARDUINO (Wiring)

Linguagem própria baseada em C e C++.

30 bytes Assembly216 bytes C

1084 bytes IDE Arduino

Page 14: Programação em C para Arduino

14TM 14

REGISTRADORES DO ATmega328

Os registradores de I/O são o painel de controle domicrocontrolador, pois todas as configurações de trabalho,incluindo acesso às entradas e saídas, se encontramnessa parte da memória.

Total de 87 Registradores

Painel de Controle.

Page 15: Programação em C para Arduino

15TM 15

REGISTRADORES DOS PORTs

Page 16: Programação em C para Arduino

16TM 16

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

Page 17: Programação em C para Arduino

17TM 17

TRABALHO COM BITS

O trabalho com bits é fundamental para a programação de ummicrocontrolador. Assim, compreender como podem serrealizadas operações com bits é primordial para umaprogramação eficiente.

Exemplo:

Page 18: Programação em C para Arduino

18TM 18

Ativa Bit

Exemplo:

Page 19: Programação em C para Arduino

19TM 19

Limpa Bit

Exemplo:

Page 20: Programação em C para Arduino

20TM 20

Complementa Bit

Exemplo:

Page 21: Programação em C para Arduino

21TM 21

Testa Bit

Exemplo:

Page 22: Programação em C para Arduino

22TM 22

Exemplo

Page 23: Programação em C para Arduino

23TM 23

PRODUZINDO UM CÓDIGO EFICIENTE

� Compile com a máxima otimização.

� Use variáveis locais sempre que possível.

� Use o menor tipo de dado possível (8 bits), unsigned se aplicável.

� Use do{ } while(expressão) se aplicável.

� Use laços com contadores decrescentes e pré-decrementados, se possível.

� Use macros ao invés de funções para tarefas menores que 2-3 linhas de código em assembly.

� Evite chamar funções dentro de interrupções.

� Se possível junte várias funções em um módulo (biblioteca), para aumentar o reuso do código.

� Todas as constantes e literais devem ser colocados na memória flash.

Alterar – compilar, alterar – compilar, comparar.

Page 24: Programação em C para Arduino

24TM 24Evitar o uso de Ponto Flutuante.

Exemplo – sem ponto flutuante

unsigned int (16 bits)

Page 25: Programação em C para Arduino

25TM 25

GRAVAÇÃO DO FIRMWARE

avrdude.exe - GUI

GravadorUSBtiny/USBaspou diretamente pelo Arduino(conversor serial/USB com um µcontrolador com Bootloader).

Page 26: Programação em C para Arduino

26TM 26

GRAVAÇÃO DO FIRMWARE

avrdude.exe – AVR8 Burn-O-Mat

Page 27: Programação em C para Arduino

27TM 27

CONCLUSÃO

O Arduino e seus Shields permitem um prototipação rápida, dadoo conjunto de funções e bibliotecas disponíveis. É fácil deprogramar.

Todavia, a IDE do Arduino é muito limitada e inadequada aodesenvolvimento profissional. O código não é otimizado e nãoexistem ferramentas de depuração.

O desenvolvimento profissional exige o conhecimento domicrocontrolador e da programação C.

Códigos eficientes são resultantes de bons algoritmos,produzindo maior densidade de código (funcionalidade/bytes). Éfundamental conhecer a arquitetura interna do microcontroladorpara desenvolver os melhores programas.

Page 28: Programação em C para Arduino

28TM 28

LIMA, C. B.; VILLAÇA, M.V. M. AVR e Arduino: Técnicas de Projeto . 2ª. ed. Edição dos Autores, Florianópolis, 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/

REFERÊNCIAS BIBLIOGRAFICAS

“A vida é dura pra quem é mole!

Page 29: Programação em C para Arduino

29TM 29

MUITO OBRIGADO PELA ATENÇÃO!

[email protected]

Mars Robot Curiosity is Powered by Arduino ...