SlideShare uma empresa Scribd logo
1TM 1
Programação C para
Arduino
INSTITUTO FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE ELETRÔNICA
Prof. Charles Borges de Lima.
Maio/2013
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ódigo
Eficiente
Gravação do Firmware
Conclusões
Referências
Bibliográficas
3TM 3
INTRODUÇÃO
A IDE do Arduino não é destinada ao desenvolvimento profissional.
Arduino é uma plataforma eletrônica de
prototipagem baseada em hardware livre e
software, fáceis de usar e flexíveis.
Possui um IDE que permite a programação de
forma fácil de um microcontrolador AVR. Todavia,
não é eficiente e não permite o desenvolvimento
profissional de projetos.
Para um projeto profissional é necessário o uso
de ferramentas adequadas de programação e do
conhecimento técnico do microcontrolador
empregado.
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
5TM 5
O ATmega328
O microcontrolador do Arduino Uno é o ATmega328 (AVR).
6TM 6
PINOS DO ATmega328 NO ARDUINO
Informações fundamentais para a programação.
7TM 7
PROGRAMAÇÃO ASSEMBLY
Assembly é a linguagem da CPU do microcontrolador.
Todo microcontrolador possui um conjunto próprio de instruções
representadas por mnemônicos (assembly) que após o
desenvolvimento do programa são convertidos nos zeros e uns
lógicos interpretáveis pelo microprocessador.
O assembly é uma linguagem de baixo nível e permite obter o
máximo desempenho de um microcontrolador, gerando o menor
número 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 esforço de programação.
Assembly
8TM 8
EXEMPLO
9TM 9
EXEMPLO
Piscando um LED ligado ao pino PB5 (pino 13 no Arduino).
30 Bytes
15 instruções
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), o
assembly foi quase que totalmente substituído pela
linguagem 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
11TM 11
O problema de desenvolver o código em C é que o
mesmo pode consumir muita memória e reduzir a
velocidade de processamento. Os compiladores tentam
traduzir da melhor forma o código para o assembly
(antes de se tornarem código de máquina), mas esse
processo não consegue o mesmo desempenho de um
código escrito exclusivamente em assembly.
Como os compiladores C são eficientes para a
arquitetura do AVR, a programação dos
microcontroladores ATmega é feita em C. Só existe a
necessidade de se programar puramente em assembly
em casos críticos.
PROGRAMAÇÃO C
12TM 12
EXEMPLO
216 Bytes
Otimização -Os
Usando cpl_bit(PORTB,LED) resultam 202 bytes.
13TM 13
IDE DO ARDUINO (Wiring)
Linguagem própria baseada em C e C++.
30 bytes Assembly
216 bytes C
1084 bytes IDE Arduino
14TM 14
REGISTRADORES DO ATmega328
Os registradores de I/O são o painel de controle do
microcontrolador, pois todas as configurações de trabalho,
incluindo acesso às entradas e saídas, se encontram
nessa parte da memória.
Total de 87 Registradores
Painel de Controle.
15TM 15
REGISTRADORES DOS PORTs
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
17TM 17
TRABALHO COM BITS
O trabalho com bits é fundamental para a programação de um
microcontrolador. Assim, compreender como podem ser
realizadas operações com bits é primordial para uma
programação eficiente.
Exemplo:
18TM 18
Ativa Bit
Exemplo:
19TM 19
Limpa Bit
Exemplo:
20TM 20
Complementa Bit
Exemplo:
21TM 21
Testa Bit
Exemplo:
22TM 22
Exemplo
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.
24TM 24Evitar o uso de Ponto Flutuante.
Exemplo – sem ponto flutuante
unsigned int (16 bits)
25TM 25
GRAVAÇÃO DO FIRMWARE
avrdude.exe - GUI
Gravador
USBtiny/USBasp
ou diretamente
pelo Arduino
(conversor
serial/USB com
um µcontrolador
com Bootloader).
26TM 26
GRAVAÇÃO DO FIRMWARE
avrdude.exe – AVR8 Burn-O-Mat
27TM 27
CONCLUSÃO
O Arduino e seus Shields permitem um prototipação rápida, dado
o conjunto de funções e bibliotecas disponíveis. É fácil de
programar.
Todavia, a IDE do Arduino é muito limitada e inadequada ao
desenvolvimento profissional. O código não é otimizado e não
existem ferramentas de depuração.
O desenvolvimento profissional exige o conhecimento do
microcontrolador 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 microcontrolador
para desenvolver os melhores programas.
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!
29TM 29
MUITO OBRIGADO
PELA ATENÇÃO!
borgescorp@gmail.com
Mars Robot Curiosity is Powered by Arduino ...

Mais conteúdo relacionado

Mais procurados

Componentes Eletrônicos.pdf
Componentes Eletrônicos.pdfComponentes Eletrônicos.pdf
Componentes Eletrônicos.pdf
clientedaescola
 
Montagem de computadores aula 1
Montagem de computadores   aula 1Montagem de computadores   aula 1
Montagem de computadores aula 1
Michel Chagas
 
Aula 01 - História da Computação
Aula 01 - História da ComputaçãoAula 01 - História da Computação
Aula 01 - História da Computação
Suzana Viana Mota
 
Apostila para Programar Arduino
Apostila para Programar ArduinoApostila para Programar Arduino
Apostila para Programar Arduino
Isvaldo Souza
 
Aula 08 - Placa Mãe
Aula 08 - Placa MãeAula 08 - Placa Mãe
Aula 08 - Placa Mãe
Suzana Viana Mota
 
Lógica binária, potas lógicas e circuitos lógicos
Lógica binária, potas lógicas e circuitos lógicosLógica binária, potas lógicas e circuitos lógicos
Lógica binária, potas lógicas e circuitos lógicos
Mauro Pereira
 
Arquitetura de Computadores: Conceitos básicos
Arquitetura de Computadores: Conceitos básicosArquitetura de Computadores: Conceitos básicos
Arquitetura de Computadores: Conceitos básicos
Alex Camargo
 
Introdução à estrutura e funcionamento de um sistema informático
Introdução à estrutura e funcionamento de um sistema informáticoIntrodução à estrutura e funcionamento de um sistema informático
Introdução à estrutura e funcionamento de um sistema informático
Ricardo Santos
 
Placa-Mãe
Placa-Mãe Placa-Mãe
Placa-Mãe
Evandro Júnior
 
Caderno de exercícios Sistemas digitais - Portas lógicas
Caderno de exercícios  Sistemas digitais - Portas lógicasCaderno de exercícios  Sistemas digitais - Portas lógicas
Caderno de exercícios Sistemas digitais - Portas lógicas
Carlos Pereira
 
Aula - CLP & Linguagem Ladder
Aula - CLP & Linguagem LadderAula - CLP & Linguagem Ladder
Aula - CLP & Linguagem Ladder
Anderson Pontes
 
Sistemas Digitais - Aula 02 - Componentes Elétricos
Sistemas Digitais - Aula 02 - Componentes ElétricosSistemas Digitais - Aula 02 - Componentes Elétricos
Sistemas Digitais - Aula 02 - Componentes Elétricos
Suzana Viana Mota
 
Informática 1-conceitos e componentes
Informática  1-conceitos e componentesInformática  1-conceitos e componentes
Informática 1-conceitos e componentes
Mauro Pereira
 
Técnicas de Deteção de Avarias
Técnicas de Deteção de AvariasTécnicas de Deteção de Avarias
Técnicas de Deteção de Avarias
Baguiasri
 
Aula 05 - Como funciona o Computador
Aula 05 - Como funciona o ComputadorAula 05 - Como funciona o Computador
Aula 05 - Como funciona o Computador
Suzana Viana Mota
 
Introdução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresIntrodução à Arquitetura de Computadores
Introdução à Arquitetura de Computadores
Mauro Pereira
 
A Internet das Coisas
A Internet das CoisasA Internet das Coisas
A Internet das Coisas
Luiz Avila
 
Fonte de alimentação
Fonte de alimentaçãoFonte de alimentação
Fonte de alimentação
Carlos Pereira
 
Aula 07 - Fontes
Aula 07 - FontesAula 07 - Fontes
Aula 07 - Fontes
Suzana Viana Mota
 
Endereçamento IP
Endereçamento IPEndereçamento IP
Endereçamento IP
Pjpilin
 

Mais procurados (20)

Componentes Eletrônicos.pdf
Componentes Eletrônicos.pdfComponentes Eletrônicos.pdf
Componentes Eletrônicos.pdf
 
Montagem de computadores aula 1
Montagem de computadores   aula 1Montagem de computadores   aula 1
Montagem de computadores aula 1
 
Aula 01 - História da Computação
Aula 01 - História da ComputaçãoAula 01 - História da Computação
Aula 01 - História da Computação
 
Apostila para Programar Arduino
Apostila para Programar ArduinoApostila para Programar Arduino
Apostila para Programar Arduino
 
Aula 08 - Placa Mãe
Aula 08 - Placa MãeAula 08 - Placa Mãe
Aula 08 - Placa Mãe
 
Lógica binária, potas lógicas e circuitos lógicos
Lógica binária, potas lógicas e circuitos lógicosLógica binária, potas lógicas e circuitos lógicos
Lógica binária, potas lógicas e circuitos lógicos
 
Arquitetura de Computadores: Conceitos básicos
Arquitetura de Computadores: Conceitos básicosArquitetura de Computadores: Conceitos básicos
Arquitetura de Computadores: Conceitos básicos
 
Introdução à estrutura e funcionamento de um sistema informático
Introdução à estrutura e funcionamento de um sistema informáticoIntrodução à estrutura e funcionamento de um sistema informático
Introdução à estrutura e funcionamento de um sistema informático
 
Placa-Mãe
Placa-Mãe Placa-Mãe
Placa-Mãe
 
Caderno de exercícios Sistemas digitais - Portas lógicas
Caderno de exercícios  Sistemas digitais - Portas lógicasCaderno de exercícios  Sistemas digitais - Portas lógicas
Caderno de exercícios Sistemas digitais - Portas lógicas
 
Aula - CLP & Linguagem Ladder
Aula - CLP & Linguagem LadderAula - CLP & Linguagem Ladder
Aula - CLP & Linguagem Ladder
 
Sistemas Digitais - Aula 02 - Componentes Elétricos
Sistemas Digitais - Aula 02 - Componentes ElétricosSistemas Digitais - Aula 02 - Componentes Elétricos
Sistemas Digitais - Aula 02 - Componentes Elétricos
 
Informática 1-conceitos e componentes
Informática  1-conceitos e componentesInformática  1-conceitos e componentes
Informática 1-conceitos e componentes
 
Técnicas de Deteção de Avarias
Técnicas de Deteção de AvariasTécnicas de Deteção de Avarias
Técnicas de Deteção de Avarias
 
Aula 05 - Como funciona o Computador
Aula 05 - Como funciona o ComputadorAula 05 - Como funciona o Computador
Aula 05 - Como funciona o Computador
 
Introdução à Arquitetura de Computadores
Introdução à Arquitetura de ComputadoresIntrodução à Arquitetura de Computadores
Introdução à Arquitetura de Computadores
 
A Internet das Coisas
A Internet das CoisasA Internet das Coisas
A Internet das Coisas
 
Fonte de alimentação
Fonte de alimentaçãoFonte de alimentação
Fonte de alimentação
 
Aula 07 - Fontes
Aula 07 - FontesAula 07 - Fontes
Aula 07 - Fontes
 
Endereçamento IP
Endereçamento IPEndereçamento IP
Endereçamento IP
 

Semelhante a Programação em C para Arduino

UFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxUFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptx
centroclinicosalus
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduino
Samir Siqueira
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
fmtpereira
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladores
Alyson Cavalcante
 
Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12
Douglas Esteves
 
Introdução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdfIntrodução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdf
CliverRaimundo2
 
Robótica e Sistemas interativos utilizando Arduino
Robótica e Sistemas interativos utilizando ArduinoRobótica e Sistemas interativos utilizando Arduino
Robótica e Sistemas interativos utilizando Arduino
DomingosRodrigues16
 
Apostila cpic
Apostila cpicApostila cpic
Apostila cpic
Wantuil Oliveira
 
Apresentando o Arduino - UESPI
Apresentando o Arduino - UESPIApresentando o Arduino - UESPI
Apresentando o Arduino - UESPI
Geraldo A Sarmento Nt
 
Arduino na engenharia
Arduino na engenhariaArduino na engenharia
Arduino na engenharia
Lucas_Fonseca
 
Slide - Introdução ao Arduino e Sensores.pdf
Slide - Introdução ao Arduino e Sensores.pdfSlide - Introdução ao Arduino e Sensores.pdf
Slide - Introdução ao Arduino e Sensores.pdf
Henrique Alves
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDF
engelrfs
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduino
Rui Alves
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
elliando dias
 
Corpo relatorio
Corpo relatorioCorpo relatorio
Corpo relatorio
Eduardo Greffner
 
Introdução ao arduino palestra
Introdução ao arduino palestraIntrodução ao arduino palestra
Introdução ao arduino palestra
Vitor Ferreira
 
201728 22259 manual_picgenios
201728 22259 manual_picgenios201728 22259 manual_picgenios
201728 22259 manual_picgenios
Bárbara Gama
 
Workshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - FarruscoWorkshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - Farrusco
Articacc, Lda
 
Pic18xx
Pic18xxPic18xx
Pic18xx
moschen
 
18. arduino
18. arduino18. arduino
18. arduino
Eugenio Caetano
 

Semelhante a Programação em C para Arduino (20)

UFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptxUFCD-6072-Microcontroladores-Registos.pptx
UFCD-6072-Microcontroladores-Registos.pptx
 
V2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduinoV2 - Microcontroladores: a revolucao do arduino
V2 - Microcontroladores: a revolucao do arduino
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
10 apostila microcontroladores
10  apostila microcontroladores10  apostila microcontroladores
10 apostila microcontroladores
 
Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12Oficina de IoT conhecendo ESP8266 #CPBR12
Oficina de IoT conhecendo ESP8266 #CPBR12
 
Introdução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdfIntrodução-à-Programação-Embarcada-com-Arduino.pdf
Introdução-à-Programação-Embarcada-com-Arduino.pdf
 
Robótica e Sistemas interativos utilizando Arduino
Robótica e Sistemas interativos utilizando ArduinoRobótica e Sistemas interativos utilizando Arduino
Robótica e Sistemas interativos utilizando Arduino
 
Apostila cpic
Apostila cpicApostila cpic
Apostila cpic
 
Apresentando o Arduino - UESPI
Apresentando o Arduino - UESPIApresentando o Arduino - UESPI
Apresentando o Arduino - UESPI
 
Arduino na engenharia
Arduino na engenhariaArduino na engenharia
Arduino na engenharia
 
Slide - Introdução ao Arduino e Sensores.pdf
Slide - Introdução ao Arduino e Sensores.pdfSlide - Introdução ao Arduino e Sensores.pdf
Slide - Introdução ao Arduino e Sensores.pdf
 
Apostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDFApostila - Tutorial Arduino (Básico).PDF
Apostila - Tutorial Arduino (Básico).PDF
 
38698469 slides-arduino
38698469 slides-arduino38698469 slides-arduino
38698469 slides-arduino
 
Introdução ao Arduino
Introdução ao ArduinoIntrodução ao Arduino
Introdução ao Arduino
 
Corpo relatorio
Corpo relatorioCorpo relatorio
Corpo relatorio
 
Introdução ao arduino palestra
Introdução ao arduino palestraIntrodução ao arduino palestra
Introdução ao arduino palestra
 
201728 22259 manual_picgenios
201728 22259 manual_picgenios201728 22259 manual_picgenios
201728 22259 manual_picgenios
 
Workshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - FarruscoWorkshop iniciação à robótica - Farrusco
Workshop iniciação à robótica - Farrusco
 
Pic18xx
Pic18xxPic18xx
Pic18xx
 
18. arduino
18. arduino18. arduino
18. arduino
 

Programação em C para Arduino

  • 1. 1TM 1 Programação C para Arduino INSTITUTO FEDERAL DE SANTA CATARINA DEPARTAMENTO DE ELETRÔNICA Prof. Charles Borges de Lima. Maio/2013
  • 2. 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ódigo Eficiente Gravação do Firmware Conclusões Referências Bibliográficas
  • 3. 3TM 3 INTRODUÇÃO A IDE do Arduino não é destinada ao desenvolvimento profissional. Arduino é uma plataforma eletrônica de prototipagem baseada em hardware livre e software, fáceis de usar e flexíveis. Possui um IDE que permite a programação de forma fácil de um microcontrolador AVR. Todavia, não é eficiente e não permite o desenvolvimento profissional de projetos. Para um projeto profissional é necessário o uso de ferramentas adequadas de programação e do conhecimento técnico do microcontrolador empregado.
  • 4. 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
  • 5. 5TM 5 O ATmega328 O microcontrolador do Arduino Uno é o ATmega328 (AVR).
  • 6. 6TM 6 PINOS DO ATmega328 NO ARDUINO Informações fundamentais para a programação.
  • 7. 7TM 7 PROGRAMAÇÃO ASSEMBLY Assembly é a linguagem da CPU do microcontrolador. Todo microcontrolador possui um conjunto próprio de instruções representadas por mnemônicos (assembly) que após o desenvolvimento do programa são convertidos nos zeros e uns lógicos interpretáveis pelo microprocessador. O assembly é uma linguagem de baixo nível e permite obter o máximo desempenho de um microcontrolador, gerando o menor número 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 esforço de programação. Assembly
  • 9. 9TM 9 EXEMPLO Piscando um LED ligado ao pino PB5 (pino 13 no Arduino). 30 Bytes 15 instruções
  • 10. 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), o assembly foi quase que totalmente substituído pela linguagem 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
  • 11. 11TM 11 O problema de desenvolver o código em C é que o mesmo pode consumir muita memória e reduzir a velocidade de processamento. Os compiladores tentam traduzir da melhor forma o código para o assembly (antes de se tornarem código de máquina), mas esse processo não consegue o mesmo desempenho de um código escrito exclusivamente em assembly. Como os compiladores C são eficientes para a arquitetura do AVR, a programação dos microcontroladores ATmega é feita em C. Só existe a necessidade de se programar puramente em assembly em casos críticos. PROGRAMAÇÃO C
  • 12. 12TM 12 EXEMPLO 216 Bytes Otimização -Os Usando cpl_bit(PORTB,LED) resultam 202 bytes.
  • 13. 13TM 13 IDE DO ARDUINO (Wiring) Linguagem própria baseada em C e C++. 30 bytes Assembly 216 bytes C 1084 bytes IDE Arduino
  • 14. 14TM 14 REGISTRADORES DO ATmega328 Os registradores de I/O são o painel de controle do microcontrolador, pois todas as configurações de trabalho, incluindo acesso às entradas e saídas, se encontram nessa parte da memória. Total de 87 Registradores Painel de Controle.
  • 16. 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
  • 17. 17TM 17 TRABALHO COM BITS O trabalho com bits é fundamental para a programação de um microcontrolador. Assim, compreender como podem ser realizadas operações com bits é primordial para uma programação eficiente. Exemplo:
  • 23. 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.
  • 24. 24TM 24Evitar o uso de Ponto Flutuante. Exemplo – sem ponto flutuante unsigned int (16 bits)
  • 25. 25TM 25 GRAVAÇÃO DO FIRMWARE avrdude.exe - GUI Gravador USBtiny/USBasp ou diretamente pelo Arduino (conversor serial/USB com um µcontrolador com Bootloader).
  • 26. 26TM 26 GRAVAÇÃO DO FIRMWARE avrdude.exe – AVR8 Burn-O-Mat
  • 27. 27TM 27 CONCLUSÃO O Arduino e seus Shields permitem um prototipação rápida, dado o conjunto de funções e bibliotecas disponíveis. É fácil de programar. Todavia, a IDE do Arduino é muito limitada e inadequada ao desenvolvimento profissional. O código não é otimizado e não existem ferramentas de depuração. O desenvolvimento profissional exige o conhecimento do microcontrolador 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 microcontrolador para desenvolver os melhores programas.
  • 28. 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!
  • 29. 29TM 29 MUITO OBRIGADO PELA ATENÇÃO! borgescorp@gmail.com Mars Robot Curiosity is Powered by Arduino ...