Você está na página 1de 47

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

Você também pode gostar