INSTITUTO FEDERAL DE SANTA CATARINA
DEPARTAMENTO DE ELETRÔNICA
ATMEGA328P
Arduino
Softwares
Pisca LED
Prof. Charles Borges de Lima. 1-47
SUMÁRIO
Arduino
Atmega328
Programação – Ferramentas
Pisca LED
Conclusão
2
ARDUINO
Arduino é uma plataforma eletrônica de
prototipagem com código fonte aberto baseada em
hardware e software flexíveis e fáceis de usar.
É baseada em um sistema microcontrolado
(ATMEGA328P) que pode ser programado através do
computador e pode executar as mais variadas funções.
O Arduino pode ler sensores, controlar motores,
relés, LEDs, etc. Ao processar informação permite
controlar dispositivos ou o ambiente.
O que é Arduino? Plataforma de prototipação microcontrolada. 3
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).
20 Pinos de I/O
Existem variações no layout da placa conforme o modelo. 4
TIPOS DE ARDUINO
Existem vários modelos de
Arduino Pró
LilyPad
Mega
Mini
Arduinos com microcontroladores de 8 bits. 5
Acessórios/Shields
WIFI Driver p/ Motor LCD TFT-Touch
Ethernet
GPS/GPRS LCD 5110
6
Acessórios/Shields
Teclado LCD 16x2
Bluetooth
capacitivo
DHT11
Sonar
Microfone
Câmera
Sensor Corrente VGA
AC
Sensor Gás
Sensor
Pressão
7
Acessórios/Shields
Matriz de Receptor
Joystick
Contatos Infravermelho
Buzzer
Display 7 segmentos
Teclado
Sensor de SD card
corrente DC
8
Acessórios/Shields
LCD I2C
Motor DC ?
Conectores
p/ sensores
Relés
Potenciômetro
9
Outras Plataformas (32 bits)
Arduino Due (Cortex-M3) Mbed Maple (Cortex-M3)
(Cortex-M3)
Galileo (Pentium) Uno32 (PIC32)
Arduino Zero (Cortex-M0+)
A maioria compatível com os shields para Arduino. 10
O ATmega328
O microcontrolador do Arduino Uno é o ATmega328 (AVR). 11
PINOS DO ATmega328 NO ARDUINO
Informações fundamentais para a programação. 12
Principais Características
• Microcontrolador de 8 bits com arquitetura Harvard - 131 instruções (RISC estendido)
• 32 registradores de propósito geral
• Máx. freq. de operação 20 MHz.
• Multiplicação por hardware em 2 ciclos de clock.
• 32 kbytes de memória de programa flash - 1 kbytes de EEPROM - 2 kbytes de SRAM.
• Seção opcional para código de boot para programação In-System por boot loader.
• 23 pino de I/O com pull-up e interrupções externas. Saída de clock em um pino de I/O.
• 2 Temporizadores/Contadores de 8 bits (com um cristal externo de 32,768 kHz conta
precisamente 1 s) - 1 Temporizador/Contador de 16 bits
• 6 canais PWM.
• 8 canais AD (com resolução de 10 bits) na versão SMD e 6 canais na versão PTH
• Comunicação serial: (TWI – I2C)), USART e SPI
• Watchdog Timer
• 1 comparador analógico.
• Oscilador interno RC
• Vários modos para economia de energia e de reset
• Medição de temperatura do encapsulamento.
• Tensão de operação: 1,8 - 5,5 V.
13
Memórias
Programa - Flash Dados - SRAM
A E2PROM é uma memória separada e com acesso diferenciado.
Ver pg. 13. 14
Painel de Controle
Possui todas as configurações/informações para trabalho da CPU, dos pinos de IO e periféricos.
Total de 87 registradores. 15
Clock para CPU
Para o trabalho da CPU é necessário um sinal de relógio. Esse pode ser
fornecido com o uso de um cristal externo (até 20 MHz), com o uso de um
sinal externo, ou simplesmente habilitando o oscilador interno (máximo de
8MHz). Os pinos para uso de um cristal externo também podem ser
empregados com um cristal específico somente para uso do TC2 (contagem
precisa de 1 s).
O Arduino Uno usa
um cristal de 16MHz
Se o oscilador interno for utilizado, os pinos XTAL1 e XTAL2 podem ser empregados para IO. 16
Reset
O ATmega possui 4 fontes de reset:
Power-on Reset: ocorre na
energização enquanto a fonte de
alimentação estiver abaixo da tensão
limiar de power-on reset (VPOT).
Reset externo: ocorre quando o
pino de reset é aterrado (0 V) por um
determinado período de tempo.
Watchdog Reset: ocorre quando o
watchdog está habilitado e o seu
contador atinge o valor limite.
Brown-out Reset: ocorre quando a
tensão de alimentação cair abaixo do
valor definido para o brown-out reset O tempo de inicialização pode ser
(VBOT) e o seu detector estiver configurado para uma maior estabilidade
habilitado. na energização.
17
Descrição dos Pinos
Regs. trabalho
DDRx – reg. direção
PORTx – reg. escrita
PINx – reg. leitura
18
A geração do Código de Máquina
19
A geração do Código de Máquina
Quando existe mais de um arquivo de programa, eles precisam ser
ligados em etapa posterior a compilação e montagem.
20
Cadeia de Ferramentas
n files (*.c)
n files (*.asm)
n files (*.o) m files (*.o) from library archive (*.a)
1 file
21
Gravação
O processo mais simples de gravação do Arduino UNO é
através da sua USB de gravação (COM virtual no PC),
empregando um bootloader no Atmega.
GNU toolchain.
22
Programação
IDE Arduino
for dummies
Sem suporte a depuração e otimização.
IDE da Atmel
para
profissionais
Suporte a depuração e otimização.
Softwares de desenvolvimento gratuitos. Existem outros pagos (Keil, IAR, ...). 23
A IDE do Arduino
A Interface de
Desenvolvimento Integrada
– IDE do Arduino é simples
e fácil de usar. Possui uma Verificar
linguagem própria de
programação baseada em
C/C++. Também dispõe de
um amplo conjunto de
bibliotecas que facilitam
bastante a prototipação e o
uso das funcionalidades da
plataforma Arduino.
Muito fácil de usar e com um grande conjunto de funções for dummies. 24
Configurando a IDE
1 – Instalar o driver do Hardware 2 – Na IDE selecionar o tipo de Arduino empregado
3 – Definir qual a porta COM utilizada pelo Arduino
25
Exemplo de Programação
ACIONANDO UM LED (Blink)
Programa para ligar e desligar o LED ligado ao pino 13 do Arduino.
/* Blink
Turns on an LED on for one second, then off for one second,
repeatedly.
This example code is in the public domain.
*/
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}
Menu <File><Examples><Basics><Blink> 26
Funções Empregadas
setup( ) - as inicializações do Arduino são feitas na função setup( ), tal como a
definição dos pinos de I/O e outras configurações de trabalho.
pinMode(pino, entrada ou saída) - a função pinMode define os pinos de
entrada e saída, e recebe a definição do pino: um rótulo de 0 a 13, ou A0 a A5,
como aparece no layout do Arduino. A definição se o pino será entrada ou saída é
determinada pelas palavras INPUT ou OUTPUT, respectivamente.
loop( ) - a função loop( )corresponde ao laço infinito da programação em C. Nela
é colocado o código que deve ser continuamente executado.
digitalWrite(pino, estado lógico) - a definição de qual estado lógico deve
ser escrito no pino é feita com a função digitalWrite(). Basta indicar qual pino será
acionado e qual será o seu estado lógico: HIGH para 5 V e LOW para 0 V.
delay(milissegundos) - o valor definido nessa função corresponde a quantos
milissegundos o programa irá gastar até executar a próxima instrução do código.
Exercício: Grave o programa Blink no Arduino e altere o tempo para piscar o LED. 27
Exemplo de Programação
LENDO UM BOTÃO (Button)
Programa para ligar e desligar o LED do pino 13 do Arduino, quando um
botão é pressionado.
/* Button
Turns on and off a light emitting diode(LED) connected to digital
pin 13, when pressing a pushbutton attached to pin 2.
*/
//constants won't change. They're used here to set pin numbers
const int buttonPin = 2; //the number of the pushbutton pin
const int ledPin = 13; //the number of the LED pin
// variables will change
int buttonState = 0; //variable for reading the pushbutton status
void setup() {
pinMode(ledPin, OUTPUT); //init. the LED pin as an output
pinMode(buttonPin, INPUT); //init. the pushbutton pin as an input
}
Menu <File><Examples><Digital><Button> 28
Exemplo de Programação
void loop(){
//read the state of the pushbutton value
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH); //turn LED on
}
else {
digitalWrite(ledPin, LOW); //turn LED off
}
}
digitalRead(pino) - O estado lógico de um pino é lido com o uso desta
função. É importante notar que o pino deve estar habilitado como entrada. A
função deve passar o estado lógico do botão para uma variável.
Lendo um botão no Arduino. 29
Referência para a Programação
Estruturas, variáveis e funções disponíveis para a programação. 30
Referência para a Programação
Estruturas, variáveis e funções disponíveis para a programação. 31
Referência para a Programação
Estruturas e funções disponíveis para a programação. 32
O Atmel Studio
1 – Criar um
novo projeto
2 – Selecionar
programação C
3 – Nome
desejado
4 – Escolher
diretório para
salvamento
Deixar selecionado 33
1 - Digitar e/ou selecionar
ATmega328P
Build Solution
(F7)
Janela com os
arquivos do
Código do projeto
programa
Informações
sobrea a
compilação e
montagem.
34
Gravação do Firmware
para a gravação
Seleção do Atmega
Indica onde está o
arquivo de gravação
(*.hex) – Estará na
pasta Release dentro
da pasta criada no
Projeto pelo Atmel
Studio.
configuração
Fusíveis de
Arquivo para
inicialização da
memória
E2PROM.
de gravação
sobre a operação
Mensagens
AVRDUDESS
avrdude.exe
35
Simulação no PROTEUS - ISIS
1 - Novo Projeto
Nome do projeto
Diretório para
salvamento (pode
ser o mesmo da
programação).
36
1 – Criando um
arquivo esquemático
2 – Não será criado
uma PCI.
3 – Não será criado
um programa.
37
Resumo do
novo projeto.
Pegando e
escolhendo os
componentes
38
Escolha dos Componentes
Acessando a
biblioteca de
componentes
39
Desenhando o Circuito
GND
POWER
Fio de
conexão
RES
LED-YELLOW
40
Configurando o 1 – Duplo clique sobre o ATmega para abrir a janela de configuração
ATmega328P
Localização do
arquivo de
programa *.hex
Sem divisão do
clock.
Emprego de cristal
externo para o clock
(não precisa estar no
esquemático)
Definição da
frequência do clock
(16 MHz para simular
o Arduino UNO).
Canto Inferior Esq. da Janela Principal
PLAY e STOP para a simulação.
41
Ligando um LED
O “hello word ” na programação de um µControlador!
Para ligar um pino no ATmega primeiro se deve configurar
o pino como saída e ativa-lo (coloca-lo em 1 lógico, que é a
tensão de alimentação do µControlador). O pino também
pode ser limpo (colocado em 0 lógico, ou 0V).
Um pino habilitado com saída pode tanto
drenar como fornecer corrente.
42
Ligando um LED
Como o microcontrolador trabalha de acordo com um programa,
por mais simples que pareça ligar um LED, existe uma infinidade de
possibilidades: o LED pode ser piscado, a frequência pode ser
alterada, o número de
vezes que se liga e desliga
pode ser ajustada, bem
como o tempo de
acionamento.
Teste usando as ferramentas de programação e simulação. 43
Fluxograma
44
Programa em C
45
Ex. 5.8. Fazer um sequencial
de LEDs.
Ligando um LED
46
BIBLIOGRAFIA
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://borgescorporation.blogspot.com.br/
47