Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Micro Controlador, Notas de estudo de Automação

Avr Automação

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 20/06/2009

elvis-dos-santos-nunes-7
elvis-dos-santos-nunes-7 🇧🇷

21 documentos

1 / 14

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Clube da eletrônica Microcontroladores
Microcontroladores AVR – Autor: Clodoaldo Silva - Versão: 25Fev2009 1
O microcontrolador
Breve introdução
O surgimento da microeletrônica no início da década de 70 possibilitou a criação de processadores em uma
única pastilha ou chip. Porém, só era possível processar as informações com o auxílio de periféricos, ou
seja, dispositivos de entrada e saída (I/O) e memórias. Surge o computador.
A crescente integração e a necessidade logo permitiu encapsular um microprocessador, memórias e
periféricos de entrada e saída em um único chip, surgindo assim o microcontrolador e uma nova era para
eletrônica a dos microcontroladores.
O microcontrolador AVR
Nosso curso terá início com o microcontrolador AT90S2313 ou Attiny2313 (versão melhorada) e com o
tempo será substituído por outros de maior porte como o ATmega 8 e o ATmega16.
AT90S2313 ATtiny2313
Descrição e conexão de alguns pinos:
VCC Alimentação positiva 5,0 VDC
Lembre-se: o microcontrolador é um componente que trabalha com grandezas digitais (1 e 0). Por
isso não ultrapasse os valores determinados, se não poderá danificar o componente.
GND Terra ou referência
RESET Em nível lógico baixo, o micro controlador para de executar as instruções em nível alto
ele continua. Lembrando: Baixo = 0 VDC e Alto = 5,0 VDC
Importante: Para efetuar o reset o pino deve estar em nível 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 informações.
Os valores dos capacitores C1 e C2 estão entre 17pF e 33pF. Lembrar que estes capacitores são
cerâmicos.
Descrever todos os pinos seria uma tarefa cansativa, tanto para o leitor como para o leitor, então eles serão
descritos à medida que estiverem sendo usados.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe

Pré-visualização parcial do texto

Baixe Micro Controlador e outras Notas de estudo em PDF para Automação, somente na Docsity!

O microcontrolador

Breve introdução

O surgimento da microeletrônica no início da década de 70 possibilitou a criação de processadores em uma única pastilha ou chip. Porém, só era possível processar as informações com o auxílio de periféricos, ou seja, dispositivos de entrada e saída (I/O) e memórias. Surge o computador.

A crescente integração e a necessidade logo permitiu encapsular um microprocessador, memórias e periféricos de entrada e saída em um único chip, surgindo assim o microcontrolador e uma nova era para eletrônica a dos microcontroladores.

O microcontrolador AVR

Nosso curso terá início com o microcontrolador AT90S2313 ou Attiny2313 (versão melhorada) e com o tempo será substituído por outros de maior porte como o ATmega 8 e o ATmega16.

AT90S2313 ATtiny

Descrição e conexão de alguns pinos:

‰ VCC ⇒ Alimentação positiva 5,0 VDC

Lembre-se: o microcontrolador é um componente que trabalha com grandezas digitais (1 e 0). Por isso não ultrapasse os valores determinados, se não poderá danificar o componente.

‰ GND ⇒ Terra ou referência

‰ RESET ⇒ Em nível lógico baixo, o micro controlador para de executar as instruções em nível alto ele continua. Lembrando: Baixo = 0 VDC e Alto = 5,0 VDC

Importante: Para efetuar o reset o pino deve estar em nível 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 informações.

Os valores dos capacitores C1 e C2 estão entre 17pF e 33pF. Lembrar que estes capacitores são cerâmicos.

Descrever todos os pinos seria uma tarefa cansativa, tanto para o leitor como para o leitor, então eles serão descritos à medida que estiverem sendo usados.

Conectando a alimentação, o clock e o reset do microcontrolador.

Explorando os I/O dos microcontroladores AVR

Os microcontroladores possuem portas ou “PORTS” que são pinos bidirecionais, ou seja, podem ser podem ser configuradas, via software, como entrada ou saída. O AT90S2313 tem dois conjuntos de portas que são:

PORTB ⇒ Corresponde a oito pinos que vão do PB0 ao PB

Três registros de oito bits são responsáveis pelo controle e configuração destas portas e estão associados a cada pino do PORTB. Estes registros são:

PORTB - Data register (Registro de dados)

Comanda os pinos configurados como saída, ou seja, envia “0” ou “1”.

BIT 7 6 5 4 3 2 1 0 $18 ($38) PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB Read/write R/W R/W R/W R/W R/W R/W R/W R/W Initial value 0 0 0 0 0 0 0 0

DDRB Data Direction Register (Registro de direção de dados)

Configura a porta se “0” será entrada, se “1” será saída.

BIT 7 6 5 4 3 2 1 0 $17 ($37) DDRB7 DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB Read/write R/W R/W R/W R/W R/W R/W R/W R/W Initial value 0 0 0 0 0 0 0 0

PINB Input Pins Adress (Registro de entrada de endereço)

Comanda os pinos configurados como entrada, ou seja, recebe “0” ou “1”.

BIT 7 6 5 4 3 2 1 0 $16 ($36) PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB Read/write R R R R R R R R Initial value N/A N/A N/A N/A N/A N/A N/A N/A

#include <90S2313.h> // chama biblioteca do microcontrolador utilizado.

void main (void) { DDRB=0b11111111; // configura todo o PORTB como saída. PORTB=0b00000000; // envia “0” para todo o PORTB ascendendo os LEDs }

Se o projetista desejar ascender somente o LED conectado ao PORTB.4 (pino 16) b asta modificar o código. Vejamos:

#include <90S2313.h> // chama biblioteca do microcontrolador utilizado.

void main (void) { DDRB=0b11111111; // configura todo o PORTB como saída. PORTB=0b11101111; // envia “0” somente para o PORTB.4 ascendendo somente este LED }

PORTD ⇒ Corresponde a oito pinos que vão do PD0 ao PD

Três registros de oito bits são responsáveis pelo controle e configuração destas portas e estão associados a cada pino do PORTD. Estes registros são:

PORTD - Data register (Registro de dados)

Comanda os pinos configurados como saída, ou seja, envia “0” ou “1”.

BIT 7 6 5 4 3 2 1 0 $12 ($32) ---^ PORTD6^ PORTD5^ PORTD4^ PORTD3^ PORTD2^ PORTB1^ PORTD Read/write --- R/W R/W R/W R/W R/W R/W R/W Initial value --- 0 0 0 0 0 0 0

DDRD Data Direction Register (Registro de direção de dados)

Configura a porta se “0” será entrada, se “1” será saída.

BIT 7 6 5 4 3 2 1 0 $11 ($31) --- DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB Read/write --- R/W R/W R/W R/W R/W R/W R/W Initial value --- 0 0 0 0 0 0 0

PIND Input Pins Adress (Registro de entrada de endereço)

Comanda os pinos configurados como entrada, ou seja, recebe “0” ou “1”.

BIT 7 6 5 4 3 2 1 0 $10 ($30) --- PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB Read/write --- R R R R R R R Initial value --- N/A N/A N/A N/A N/A N/A N/A

Lembrando que o bit 7 desses registros não tem valor relevante algum, pois o controle e configurações são do bit 0 ao bit 6.

Uma explicação mais prática.

Reforçando que só é possível programar conhecendo a placa de desenvolvimento ou aplicação, uma vez que já adicionamos LEDs ao PORTB adicionaremos agora quatro botões push buttons normalmente abertos ao PORTD.

Os botões são entradas de informações, ou seja, os pinos onde elas estão conectadas devem ser entradas, neste caso do PORTD.2 ao PORTD.5 devem ser configurados, via software, como entrada.

As chaves estão conectadas à terra do microcontrolador e a alguns pinos do PORTD, ou seja, se pressionarmos, por exemplo, o botão conectado ao PORTD.5 este recebe um sinal de terra ou “0”. Porém, se o botão estiver em sua condição, normalmente aberto, o PORTD.5 não recebe nem “0” (terra) nem “1” 5VCC. Assim, devemos programa-lo no estado inicial “1” e se receber “0” executará uma função.

Programa exemplo 02:

Pressionado o botão conectado ao PORTD.2 ascende o LED conectado ao PORTB.7.

Antes de iniciarmos os programa devemos recapitular alguns comandos básicos de linguagem C.

O comando if – else ⇒ O comando if é utilizado deve-se optar entre dois caminhos, ou quando se deseja

executar um comando sujeito ao resultado de um teste.

Estrutura:

if (condição) comando A else comando B

Descrição:

Se a condição proposta for verdadeira o comando A será executado, senão o comando B será executado.

PINA Input Pins Adress (Registro de entrada de endereço)

Comanda os pinos configurados como entrada, ou seja, recebe “0” ou “1”.

BIT 7 6 5 4 3 2 1 0 ---- ---- ---- ---- ---- PINA2 PINA1 PINA Read/write ---- ---- ---- ---- ---- R/W R/W R/W Initial value ---- ---- ---- ---- ---- N/A N/A N/A

Outros microcontroladores estudados neste curso, como o Atmega16 chegam ter 32 portas de I/O o que sem dúvida auxilia na elaboração de projetos de maior complexbilidade.

Reforçando conceitos sobre o hardware

Como já foi dito, só é possível o projetista programar um microcontrolador se ele conhecer o hardware de aplicação ou desenvolvimento. Pensando nisso, o hardware e o microcontrolador serão mudados, a fim de reforçar o conjunto software hardware.

A Idéia

Usaremos agora o attiny2313 para controlar o sentido de um motor DC, ou seja, se o botão horário for pressionado ele gira no sentido horário se o botão anti-horário for pressionado ele gira no sentido anti- horário.

A nova placa de aplicação

Notem que, somente as saídas PB0 e PB7 do Attiny2313 foram utilizadas e nelas estão conectados transistores NPN (necessitam receber “1” para chaveamento). As entradas estão ligadas diretamente a um resistor e a fonte VCC, ou seja, já estão recebendo “1” os botões se pressionados enviarão “0”.

Agora, vamos ao programa:

#include <tiny2313.h> // chama biblioteca do microcontrolador utilizado.

void main (void)

{

// configurando os pinos

DDRD. 4=0; // configura o PORTD.4 como entrada. DDRD. 5=0; // configura o PORTD.5 como entrada.

DDRB. 0=1; // configura o PORTB.0 como saída DDRB. 7=1; // configura o PORTB.7 como saída

// fim das configurações

While (1) // loop infinito.

// Programa principal.

{ if (PIND.4==0) // Se o PIND.4 for igual a “0” ( botão pressionado). PORTB.7=1; // O PORTB.7 será “1” e o sentido anti-horário. else // senão PORTB.7=0; // o PORTB.7 será “0” motor parado.

if (PIND.5==0) // Se o PIND.5 for igual a “0” ( botão pressionado). PORTB.0=1; // O PORTB.5 será “1” e o sentido horário. else // senão PORTB.0=0; // o PORTB.7 será “1” motor parado. }

}

Mais conceitos sobre linguagem C

A função delay () ⇒ Permite ao programador inserir uma pausa entre uma execução e outra, porém para que a função seja reconhecida devemos inserir a biblioteca delay.h. Vejamos um exemplo.

Gerando Clock com o Attiny2313 (Pisca-Pisca)

#include <tiny2313.h> // chama biblioteca do microcontrolador utilizado. #include <delay.h> // chama biblioteca delay.

void main (void) {

// Configurações iniciais

DDRB=0b11111111; // configura todo o PORTB como saída. PORTB=0b11111111; // garante que os leds estejam inicialmente todos desligados.

// 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);

PORTB=0b10111111; // envia “0” para o PORTB.6 e o LED7 acende. Delay_ms(100);

PORTB=0b01111111; // envia “0” para o PORTB.7 e o LED8 acende. Delay_ms(100); } }

Um seqüencial de 8 LEDs com Attiny

Agora que já conhecemos mais uma função da linguagem C podemos montar um circuito seqüencial, porém, utilizaremos botões, assim, se o Botão A for pressionado a seqüência será do LED1 ao LED8 e se o Botão A não for pressionado os LEDs deverão permanecer todos apagados.

Solução:

Agora será necessário o comando if-else e a função delay. Vejamos o programa:

#include<tiny2313.h> #include<delay.h>

void main (void)

{ // configurando os pinos

DDRB=0b11111111; //configura todo o PORTB como saída PORTB=0b11111111; //garante que a saída seja inicialmente 1 (apagados)

DDRD.2=0; DDRD.3=0;

while(1)

if(PIND.2==0) // se o PIND.2 for "0" executa que esta entre as chaves { 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);

PORTB=0b10111111; delay_ms(100);

PORTB=0b01111111; delay_ms(100); } else // senão todo o PORTB vai a zero PORTB=0b00000000; }

O comando for ⇒ É um comendo de looping (repetição) sua estrutura é bastante semelhante à utilizada

em outras linguagens.

Estrutura:

for ( Início da variável; Termino desejado para variável; Incremento ou decremento da variável ); Comando;

Descrição:

Uma variável de controle, geralmente um contador, recebe um valor inicial. O trecho de programa que pertence ao laço é executado e ao final a variável de controle é incrementada ou decrementada e comparada com o valor final que ela deve alcançar. Caso a condição de término tenha sido atingida o laço é interrompido.

#include<attiny2313.h>

void main (void)

{ // Declarando as variáveis

unsigned int tempo; //declara uma variável de 16 bit chamada tempo

// Configurando as portas

DDRB=0b11111111; // configura todo o PORTB como saída PORTB=0b00000000; // comanda o PORTB para que seja inicialmente "0"

// Inicio do programa

while(1) // looping infinito

{

for(tempo=0; tempo<=60000; tempo++); // Para o tempo entre 0 e 15ms a saída será 1 PORTB=0b00100001; // Vermelho 2 e Verde 1

for(tempo=0; tempo<=60000; tempo++); // Para o tempo entre 0 e 15ms a saída será 0 PORTB=0b00100010; // Vermelho 2 e Amarelo 1

for(tempo=0; tempo<=60000; tempo++); // Para o tempo entre 0 e 15ms a saída será 0 PORTB=0b10000100; // Verde 2 e Vermelho

for(tempo=0; tempo<=60000; tempo++); // Para o tempo entre 0 e 15ms a saída será 0 PORTB=0b01000100; // Amarelo 2 e Vermelho } }

Mais sobre C - Operadores

Os operadores indicam ao compilador a necessidade de se fazer manipulações matemáticas ou lógicas.

Aritméticos ⇒ São usados para calcular expressões matemáticas. Sendo classificados em duas categorias: os binários ou unários. Os operadores unários atuam na inversão de valores. Veja a tabela abaixo.

Operadores Descrição = Atribuição

  • Soma
  • Subtração / Divisão % Modulo (obtém o resto da divisão)

Operador unário Ação

  • 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 pós-fixados conforme mostra a tabela abaixo:

Operadores Ação ++ Incremento de 1 à variável -- Decremento de 1 da variável

Relacionais ⇒ São responsáveis pelas comparações de expressões nos programas. A lista completa se encontra abaixo:

Operadores Descrição

Maior = Maior igual < Menor <= Menor igual == Igualdade != Diferente

Lógicos ⇒ Os operados lógicos servem para interligar mais de uma operação relacional. E assim como os relacionais retornam zero para falso e um para verdadeiro.

Operadores Descrição && Lógica AND || Lógica OR ! Lógica NOT

Continua ...