Professional Documents
Culture Documents
Microcontroladores
ATtiny2313
GND
Terra ou referncia
RESET
Em nvel lgico baixo, o micro controlador para de executar as instrues em nvel alto
ele continua. Lembrando: Baixo = 0 VDC e Alto = 5,0 VDC
Importante: Para efetuar o reset o pino deve estar em nvel 0 em pelo menos 50 ns ou
mais.
XTAL1 e 2
Nestes pinos deve ser conectado um cristal oscilador que dar a base de tempo para o
processamento das informaes.
Os valores dos capacitores C1 e C2 esto entre 17pF e 33pF. Lembrar que estes
capacitores so cermicos.
Descrever todos os pinos seria uma tarefa cansativa, tanto para o leitor como para o leitor, ento eles sero
descritos medida que estiverem sendo usados.
Clube da eletrnica
Microcontroladores
7
PORTB7
R/W
0
6
PORTB6
R/W
0
5
PORTB5
R/W
0
4
PORTB4
R/W
0
3
PORTB3
R/W
0
2
PORTB2
R/W
0
1
PORTB1
R/W
0
0
PORTB0
R/W
0
2
DDRB2
R/W
0
1
DDRB1
R/W
0
0
DDRB0
R/W
0
2
PINB2
R
N/A
1
PINB1
R
N/A
0
PINB0
R
N/A
7
DDRB7
R/W
0
6
DDRB6
R/W
0
5
DDRB5
R/W
0
4
DDRB4
R/W
0
3
DDRB3
R/W
0
7
PINB7
R
N/A
6
PINB6
R
N/A
5
PINB5
R
N/A
4
PINB4
R
N/A
3
PINB3
R
N/A
Clube da eletrnica
Microcontroladores
Os LEDs, por razes bvias, so sadas. Logo, todo o PORTB deve ser configurado como sada.
Notem a polaridade dos LEDs e observe que j existe uma tenso de 5VDC no anodo de cada um deles, ou
seja, para acende-los deveremos enviar 0 para este PORT. Assim, se o projetista deseja acender todos os
LEDs dever enviar 0 para todo o PORTB.
Se desejar acender somente o LED conectado ao pino 12 (PORTB. 0) somente este PORT dever estar em
0.
Clube da eletrnica
Microcontroladores
Se o projetista desejar acender somente o LED conectado ao PORTB.4 (pino 16) basta modificar o cdigo.
Vejamos:
#include <90S2313.h>
void main (void)
{
DDRB=0b11111111;
PORTB=0b11101111;
}
Praticando ...
1- Elabore um programa que acenda os LEDs somente os PORT pares.
2- Elabore um programa que aciona o PORTB.6
PORTD Corresponde a oito pinos que vo do PD0 ao PD6
Trs registros de oito bits so responsveis pelo controle e configurao destas portas e esto associados a
cada pino do PORTD. Estes registros so:
PORTD - Data register (Registro de dados)
Comanda os pinos configurados como sada, ou seja, envia 0 ou 1.
BIT
$12 ($32)
Read/write
Initial value
7
-------
6
PORTD6
R/W
0
5
PORTD5
R/W
0
4
PORTD4
R/W
0
3
PORTD3
R/W
0
2
PORTD2
R/W
0
1
PORTB1
R/W
0
0
PORTD0
R/W
0
2
DDRB2
R/W
0
1
DDRB1
R/W
0
0
DDRB0
R/W
0
7
-------
6
DDRB6
R/W
0
5
DDRB5
R/W
0
4
DDRB4
R/W
0
3
DDRB3
R/W
0
Clube da eletrnica
Microcontroladores
7
-------
6
PINB6
R
N/A
5
PINB5
R
N/A
4
PINB4
R
N/A
3
PINB3
R
N/A
2
PINB2
R
N/A
1
PINB1
R
N/A
0
PINB0
R
N/A
Lembrando que o bit 7 desses registros no tem valor relevante algum, pois o controle e configuraes so
do bit 0 ao bit 6.
Os botes so entradas de informaes, ou seja, os pinos onde elas esto conectadas devem ser entradas,
neste caso do PORTD.2 ao PORTD.5 devem ser configurados, via software, como entrada.
As chaves esto conectadas ao (GND) terra do microcontrolador e a alguns pinos do PORTD, ou seja, se
pressionarmos, por exemplo, o boto conectado ao PORTD.5 este recebe um sinal de terra ou 0. Porm,
se o boto estiver em sua condio, normalmente aberto, o PORTD.5 no recebe nem 0 (terra) nem 1
5VCC. Assim, devemos programa-lo no estado inicial 1 e se receber 0 executar uma funo.
Clube da eletrnica
Microcontroladores
O comando if else O comando if utilizado quando se deve optar entre dois caminhos, ou quando
se deseja executar um comando sujeito ao resultado de um teste.
Estrutura:
if (condio)
comando A
else
comando B
Descrio:
Se a condio proposta for verdadeira o comando A ser executado, seno o
comando B ser executado.
DDRB. 7=1;
PORTB. 7=1;
// loop infinito.
// Programa principal.
{
if (PIND.2==0)
PORTB.7=0;
else
PORTB.7=1;
}
}
Praticando ...
3- Elabore um programa que pressionando o boto 3 acende o LED 7.
4- Elabore um programa que pressionando o boto 2 acende todos os Leds.
Clube da eletrnica
Microcontroladores
7
----------
6
----------
5
----------
4
----------
3
----------
2
PORTA2
R/W
0
1
PORTA1
R/W
0
0
PORTA0
R/W
0
2
DDA2
R/W
0
1
DDA1
R/W
0
0
DDA0
R/W
0
2
PINA2
R/W
N/A
1
PINA1
R/W
N/A
0
PINA0
R/W
N/A
7
----------
6
----------
5
----------
4
----------
3
----------
7
----------
6
----------
5
----------
4
----------
3
----------
Outros microcontroladores estudados neste curso, como o Atmega16 chegam ter 32 portas de I/O o que
sem dvida auxilia na elaborao de projetos de maior complexbilidade.
Reforando conceitos sobre o hardware
Como j foi dito, s possvel o projetista programar um microcontrolador se ele conhecer o hardware de
aplicao ou desenvolvimento. Pensando nisso, o hardware e o microcontrolador sero mudados, a fim de
reforar o conjunto software hardware.
A Idia
Usaremos agora o attiny2313 para controlar o sentido de um motor DC, ou seja, se o boto horrio for
pressionado ele gira no sentido horrio se o boto anti-horrio for pressionado ele gira no sentido antihorrio.
Clube da eletrnica
Microcontroladores
Notem que, somente as sadas PB0 e PB7 do Attiny2313 foram utilizadas e nelas esto conectados
transistores NPN (necessitam receber 1 para chaveamento). As entradas esto ligadas diretamente a um
resistor e a fonte VCC, ou seja, j esto recebendo 1 os botes se pressionados enviaro 0.
Agora, vamos ao programa:
#include <tiny2313.h>
DDRB. 0=1;
DDRB. 7=1;
// loop infinito.
// Programa principal.
{
if (PIND.4==0)
PORTB.7=1;
else
PORTB.7=0;
if (PIND.5==0)
PORTB.0=1;
else
PORTB.0=0;
}
}
Microcontroladores AVR Autor: Clodoaldo Silva - Verso: 25Fev2009
Clube da eletrnica
Microcontroladores
#include <tiny2313.h>
#include <delay.h>
// Programa principal.
While (1)
// loop infinito.
{
PORTB.0=1;
Delay_ms(200);
PORTB.0=0;
Delay_ms(200);
}
}
Praticando ...
5- Elabore um pisca-pisca em que todos os LEDs ficam piscando num intervalo de 400ms.
6- Elabore um programa que os LEDs fiquem alternando entre pares e impares num intervalo de
100ms.
Clube da eletrnica
Microcontroladores
#include <tiny2313.h>
#include <delay.h>
// programa principal
While (1)
// loop infinito.
{
PORTB=0b11111110; // envia 0 para o PORTB.0 e o LED1 acende .
Delay_ms(100);
PORTB=0b11111101; // envia 0 para o PORTB.1 e o LED2 acende .
Delay_ms(100);
PORTB=0b11111011; // envia 0 para o PORTB.2 e o LED3 acende .
Delay_ms(100);
PORTB=0b11110111; // envia 0 para o PORTB.3 e o LED4 acende .
Delay_ms(100);
PORTB=0b11101111; // envia 0 para o PORTB.4 e o LED5 acende .
Delay_ms(100);
PORTB=0b11011111; // envia 0 para o PORTB.5 e o LED6 acende .
Delay_ms(100);
Microcontroladores AVR Autor: Clodoaldo Silva - Verso: 25Fev2009
10
Clube da eletrnica
Microcontroladores
DDRD.2=0;
DDRD.3=0;
// configurando os pinos
While(1)
if(PIND.2==0)
{
PORTB=0b11111110;
delay_ms(100);
PORTB=0b11111101;
delay_ms(100);
PORTB=0b11111011;
delay_ms(100);
PORTB=0b11110111;
delay_ms(100);
PORTB=0b11101111;
delay_ms(100);
PORTB=0b11011111;
delay_ms(100);
Microcontroladores AVR Autor: Clodoaldo Silva - Verso: 25Fev2009
11
Clube da eletrnica
Microcontroladores
PORTB=0b10111111;
delay_ms(100);
PORTB=0b01111111;
delay_ms(100);
}
else
PORTB=0b00000000;
}
Praticando ...
9- Elabore um programa que:
a) Pressionando o boto 1, o seguinte cdigo ser executado: (PORTB.0 ao PORTB.3)
0001, 0010, 0100 e 1000.
b) Pressionando o boto 2, o seguinte cdigo ser executado: (PORTB.4 ao PORTB.7)
1000, 0100, 0010 e 0001.
c) Pressionando o boto 3, o seguinte cdigo ser executado: (PORTB.0 ao PORTB.7)
1000 0001, 0100 0010, 0010 0100 e 0001 1000.
d) Pressionando o boto 4, o seguinte cdigo ser executado: (PORTB.0 ao PORTB.7)
0001 1000, 0010 0100, 0100 0010 e 1000 0001.
O comando for um comando de looping (repetio) sua estrutura bastante semelhante utilizada
em outras linguagens.
Estrutura:
Descrio:
for (
Incio da varivel;
Termino desejado para varivel;
Incremento ou decremento da varivel
);
Comando;
Pisca utilizando e o Attiny e comando for
#include<tiny2313.h>
void main (void)
{
// Declarando as variveis
unsigned int tempo;
// Configurando as portas
DDRB=0b11111111;
PORTB=0b00000000;
//looping infinito
12
Clube da eletrnica
Microcontroladores
{
for (tempo=0; tempo<=60000; tempo++); //Para o tempo entre 0 e 15ms a sada ser 1
PORTB.1=1;
//entre 0 e 60000 (15ms) o PORTB.0 ser 1
for (tempo=0; tempo<=60000; tempo++); //Para o tempo entre 0 e 15ms a sada ser 0
PORTB.1=0;
//entre 0 e 60000 (15ms) o PORTB.0 ser 0
}
}
Um semforo utilizando o Attiny 2313 e comando for
Acima o hardware para desenvolvimento e teste com o Attiny 2313, observem a polarizao dos LEDs,
neste caso, eles esto com seus catodos ligados terra (0), ou seja, para acende-los devemos mandar via
software 5V (1) para o PORT correspondente.
#include<attiny2313.h>
void main (void)
{
// Declarando as variveis
unsigned int tempo;
// Configurando as portas
DDRB=0b11111111;
PORTB=0b00000000;
// Inicio do programa
while(1)
// looping infinito
{
Microcontroladores AVR Autor: Clodoaldo Silva - Verso: 25Fev2009
13
Clube da eletrnica
Microcontroladores
Descrio
Atribuio
Soma
Subtrao
Diviso
Modulo (obtm o resto da diviso)
Operador unitrio
+
Ao
Sinal negativo
Sinal positivo
Incremento e decremento O operador de incremento (++) soma um ao seu operando enquanto que o
de decremento (--) subtrai um. Eles podem ser pr-fixados ou ps-fixados conforme mostra a tabela abaixo:
Operadores
++
--
Ao
Incremento de 1 varivel
Decremento de 1 da varivel
14
Clube da eletrnica
Microcontroladores
DDRD.4=0;
DDRD.5=0;
// Programa principal
While(1)
If((PIND.4==0)&& (PIND.5==0))
PORTB.0=1;
else
PORTB.0=0;
15
Clube da eletrnica
Microcontroladores
Praticando ...
12 Elabore um programa que execute a funo ou exclusivo.
13 Elabore um programa que execute a funo ou coincidncia.
Projeto prtico 01 Controle de trafego (resolvido)
Deseja-se implementar um controle de trafego para um tnel que s permite a passagem de um carro por
vez. Veja ilustrao:
Critrios de projeto
SPVA
SPVB
OFF
OFF
OFF
ON
Se o sensor detectar carro na via B, esta ser liberada (sinal verde) e a Via A
bloqueada (sinal vermelho).
ON
OFF
Se o sensor detectar carro na via A, esta ser liberada (sinal verde) e a Via B
bloqueada (sinal vermelho).
ON
ON
Se ambos os sensores detectarem carros, a via A dever ser liberada (sinal verde) e
a via B bloqueada (sinal vermelho).
SPVA
0
0
1
1
SPVB
0
1
0
1
VMA
1
1
0
0
VDA
0
0
1
1
VMB
0
0
1
1
VDB
1
1
0
0
16
Clube da eletrnica
Microcontroladores
/*********************************************************************************/
/*
www.clubedaeletrnica.com.br - Microcontroladores AVR */
/*
Projeto: controle de trafego - Autor: Clodoaldo Silva
*/
/*
Reviso: 15/04/2009
*/
/*********************************************************************************/
#include<mega8.h>
#include<delay.h>
void main (void)
{
//CONFIGURAES INICIAIS
DDRB=0b11111111;
PORTB=0b00000000;
DDRD=0b00000000;
PORTD=0b00000000;
// DEFININDO VARIVEIS
// entradas
#define SPVA PIND.2
#define SPVB PIND.3
//sadas
#define VMA PORTB.5
#define VDA PORTB.4
#define VMB PORTB.2
#define VDB PORTB.1
// INICIO DO PROGRAMA
while(1)
{
if(((SPVA==0)&&(SPVB==0))||((SPVA==0)&&(SPVB==1)))
{
VMA=1;
// vermelho 1 aceso
VDA=0;
// verde 1 apagado
Microcontroladores AVR Autor: Clodoaldo Silva - Verso: 25Fev2009
17
Clube da eletrnica
VMB=0;
VDB=1;
}
Microcontroladores
// vermelho 2 apagado
// verde 2 aceso
if(((SPVA==1)&&(SPVB==0))||((SPVA==1)&&(SPVB==1)))
{
VMA=0;
// vermelho 1 apagado
VDA=1;
// verde 1 aceso
VMB=1;
// vermelho 2 aceso
VDB=0;
// verde 2 apagado
}
}
}
Praticando...
15- Elabore o hardware para o controle de trafego, utilizando o Atmega8 e Leds.
18
Clube da eletrnica
Microcontroladores
Descrio de funcionamento:
O reservatrio deve estar sempre cheio, ou seja, H=1;
Se H=0, a bomba dever ser acionada;
Se a bomba no atender a demanda e o reservatrio esvaziar, ou seja, L=0, um alarme dever ser
acionado.
1- Construa o hardware e elabore o software seguindo as etapas.
a. Defina as entradas e sadas
Entradas
Sadas
Expresses booleanas
A
B=
A=
c. Extraia a expresso lgica
d. Elabore o programa
e. Construa o circuito utilizando o attiny2313
19
Clube da eletrnica
Microcontroladores
Sadas
SNB
STP
BP
BS
IR
Expresses lgicas
BP =
BS =
IR =
20
Clube da eletrnica
Microcontroladores
Sadas
21
Clube da eletrnica
Microcontroladores
b.
c.
g.
d.
D
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
Sadas
V
0
0
0
0
1
1
1
1
0
0
0
0
1
1
1
1
S
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
T
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
22
Clube da eletrnica
Microcontroladores
por vez,
seguintes
1- Televiso
2- Computador
3- Rdio.
b.
c.
h.
d.
Sadas
23
Clube da eletrnica
Microcontroladores
Descrio do funcionamento
Sempre que o sensor de nvel alto do reservatrio (SNAR) estiver desacionado (0), a bomba do rio (BR)
deve ser ligada (1) para encher o reservatrio at o sensor de nvel alto (SNAR) ser acionado (1).
A industria esta em uma regio de baixo ndice pluviomtrico e o rio, as vezes, fica baixo no sendo
possvel captar a gua. Ento o sensor de nvel crtico do rio (SNCR) estiver desacionado (0), um alarme
(AS) dever ser ligado (1) para avisar o operador que a bomba do rio (BR) deve ficar desligada (0).
Ao mesmo tempo a caixa dgua da industria deve ficar com seu nvel sobre o sensor da caixa (SC), ou
seja, SC = 1.
Se o nvel da caixa dgua ficar abaixo de SC, ou seja, SC = 0 a bomba da caixa (BC) deve ser ligada (1),
mas somente se SNBR = 1.
Construa o hardware e elabore o software seguindo as etapas.
a.
b.
c.
d.
e.
24
Clube da eletrnica
SNAR SNBR
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
1
0
1
0
1
0
1
0
1
1
1
1
1
1
1
1
SC
0
0
1
1
0
0
1
1
0
0
1
1
0
0
1
1
Microcontroladores
SNCR
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
BR
BC
AS
Continua ...
25