Sumário - EngControleAutomacaoUniabc

Propaganda
Universidade do Grande ABC
Evandro Ferreira Barbosa
Jackeline Lopes Alvarenga
Paulo Eduardo dos Santos
Renato Vicente Ferreira
Sócrates José da Costa
ATPS – Atividades Práticas Supervisionadas
Engenharia de Controle e Automação
Microprocessadores e Microcontroladores
Santo André
Maio de 2012
2
Autores:
Evandro Ferreira Barbosa – RA 29291216
Jackeline Lopes Alvarenga – RA 29296044
Paulo Eduardo dos Santos – RA 30000082
Renato Vicente Ferreira – RA 29291273
Sócrates José da Costa – RA 30000060
ATPS – Atividades Práticas Supervisionadas
Trabalho apresentado pelos alunos do curso de
Engenharia de Controle e Automação – EEC / 7NA,
para
a
disciplina
de
Microcontroladores
e
Microprocessadores.
Professor orientador Vlamir Belfante.
Santo André
Maio de 2012
3
Índice
1 - Introdução - Descrição do Trabalho ..........................................................................
5
2 – Algoritmo ...................................................................................................................
6
3 - Fluxograma .................................................................................................................
7
4 - Linguagem de Programação .......................................................................................
8
5 - Processador .................................................................................................................
8
6 - Editor e Compilador ...................................................................................................
9
7 - Versões para Otimização ............................................................................................
9
8 - Programa / Software ...................................................................................................
9
9 - Hardware ..................................................................................................................... 17
9.1 - Diagrama em Blocos ................................................................................................ 17
9.2 - Fotografias ...............................................................................................................
19
10 - Anexos ......................................................................................................................
26
10.1 - Set Instruções ......................................................................................................... 26
10.2 -Programa Exemplo................................................................................................
31
11 - Bibliografia................................................................................................................
33
4
1 - Introdução - Descrição do Trabalho
A atividade prática supervisionada elaborada para o curso de Engenharia de Controle e
Automação, com relação à disciplina Microcontroladores e Microprocessadores propõem que
desenvolvamos um programa para controle de acesso com senha. Para tanto devemos utilizar
um microcontrolador para, mediante um uso correto de uma senha, liberar esse acesso; de
maneira mais prática, podemos compreender esse controle de acesso como os utilizados em
catracas, portas e acessos que exigem que o usuário digite a senha correta para ter o acesso
liberado.
Foram definidos alguns parâmetros para a execução deste trabalho:
- A senha deve ter no mínimo três dígitos e no máximo seis;
- O sistema terá apenas uma senha válida, não lê código de barras ou sensor biométrico e
armazena apenas uma senha na memória.
Desenvolvemos um programa que simula este controle de acesso onde, uma vez pressionado
os botões corretos o microcontrolador aciona alguns leds simulando a abertura de uma porta.
Aprimoramos este programa ao longo das aulas para melhorar a interface entre usuário e
programa. Além de utilizarmos os leds para simular a liberação do controle de acesso,
utilizamos o display disponível no kit para fazer essa interface. Por exemplo, para solicitar a
senha ao usuário a mensagem "Uni ABC - SENHA?" fica ativa até que usuário digite sua
senha. E, após a digitação dos quatro dígitos, o microcontrolador faz a comparação com a
senha previamente definida e exibe as seguintes informações para o usuário:
"SENHA INCORRETA" caso os quatro dígitos digitados não sejam idênticos aos da senha
previamente armazenada ou,
"SENHA CORRETA" caso os quatro dígitos digitados sejam iguais ao da senha previamente
armazenada. Neste caso os leds também acendem simulando a liberação do acesso.
5
2 - Algoritmo
Um algoritmo é uma sequência infinita de instruções bem definidas e não ambíguas, cada uma
das quais pode ser executada mecanicamente num período de tempo finito e com uma
quantidade de esforço finita.
O conceito de algoritmo é frequentemente ilustrado pelo exemplo de uma receita culinária,
embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações)
ou necessitar de decisões (tais como comparações ou lógica) até que a tarefa seja completada.
Um algoritmo corretamente executado não irá resolver um problema se estiver implementado
incorretamente ou se não for apropriado ao problema.
Um algoritmo não representa, necessariamente, um programa de computador, e sim os passos
necessários para realizar uma tarefa. Sua implementação pode ser feita por um computador,
por outro tipo de autômato ou mesmo por um ser humano. Diferentes algoritmos podem
realizar a mesma tarefa usando um conjunto diferenciado de instruções em mais ou menos
tempo, espaço ou esforço do que outros. Tal diferença pode ser reflexo da complexidade
computacional aplicada, que depende de estruturas de dados adequadas ao algoritmo. Por
exemplo, um algoritmo para se vestir pode especificar que você vista primeiro as meias e os
sapatos antes de vestir a calça enquanto outro algoritmo especifica que você deve primeiro
vestir a calça e depois as meias e os sapatos. Fica claro que o primeiro algoritmo é mais difícil
de executar que o segundo apesar de ambos levarem ao mesmo resultado.
Abaixo segue um algoritmo de exemplo para que seja realizada a soma de dois números
inteiros inseridos pelo usuário.
Algoritmo "SomaDeDoisValores";
Variável:
SOMA,A,B: inteiro;
Ìnicio
Escreva("Digite um numero");
Leia(A);
6
Escreva("digite outro numero");
Leia(B);
SOMA ← A + B;
Escreva(SOMA);
Fim
3 – Fluxograma
7
4 - Linguagem de Programação
Foram apresentadas as seguintes linguagens de programação para que executássemos este
trabalho: linguagem C e Assembly.
Fizemos a opção de trabalhar em linguagem C. uma vez que já tivemos a oportunidade de
trabalhar com essa linguagem nas disciplinas de ‘Programação de Computadores’ e ‘Lógica
de Programação e Algoritmos’. Também fizemos essa escolha, por apresentar uma linguagem
mais fácil em comparação com o Assembly, que possui uma quantidade maior de comandos
que, por sua vez, exige que os conheçamos para elaborarmos o programa.
5 - Processador
Vamos utilizar o processador PIC16F628A neste trabalho.
Este é um microprocessador fabricado pela Microchip Technology com as seguintes
características:
- composto de 18 pinos;
- possui somente 35 instruções no seu microcódigo;
- sinal de clock de frequência até 20 MHz;
- memória de programa do tipo Flash de 2048 words (1word=32 bits);
- 224 bytes de memória RAM para dados;
- 128 bytes de memória EEPROM para dados;
- instruções de 14 bits com 200ns de tempo de execução;
- dados de 8 bits por endereço de memória;
8
- 15 registradores especiais;
- pinos os quais podem ser configurados como entrada e/ou saída;
- outras características especiais como programação in-circuit serial, proteção por código,
watchdog timer (temporizador cão de guarda), módulo CCP, comparador interno, USART,
entre outras.
6 - Editor e Compilador
Utilizaremos o Mikro C for PIC como editor, conforme necessidade do processador em
questão. Também se faz necessário o uso do compilador MPLAB para trabalhar com o
processador 16F682A.
7 - Versões para Otimização
Conforme orientação do professor, alteramos a nomenclatura de alguns comandos
inicialmente em inglês para o português. É uma medida para facilitar a compreensão e assim
otimizar a programação.
8 - Programa / Software
/*
Engenharia de Controle e Automação 7NA - UniABC
Programa para a ATPS de Microcontroladores.
*/
9
// Declaração dos terminais do display LCD16x2
sbit LCD_RS at P3_6_bit;
sbit LCD_EN at P3_7_bit;
sbit LCD_D4 at P1_4_bit;
sbit LCD_D5 at P1_5_bit;
sbit LCD_D6 at P1_6_bit;
sbit LCD_D7 at P1_7_bit;
// Declaração das variáveis
char txt1[] = "Uni ABC - SENHA?";
char txt2[] = "SENHA INCORRETA";
char txt3[] = "SENHA CORRETA";
char txt4[] = "*";
int tempo=0;
// Declaração da senha de usuário
// Senha do Usuário 1
int A1=1;
int A2=2;
10
int A3=3;
int A4=4;
// Declaração das variáveis de comparação
int C1=0;
int C2=0;
int C3=0;
int C4=0;
// Limpar display LCD e variáveis de comparação
void limpar()
{
Lcd_Cmd(_LCD_CLEAR); // Limpa o display LCD
Lcd_Out(1,1,txt1); // Escreve o texto Uni ABC - Senha?
C1=0; C2=0; C3=0; C4=0; // Limpa variáveis de comparação
tempo=0;
P2=0xFF; // Apaga Leds
}
// Rotina principal
11
voidmain(){
P2=0xFF; // Apaga Leds ao iniciar a MCU
C1=0;C2=0;C3=0;C4=0;
Lcd_Init(); // Inicializa o display Lcd
Lcd_Cmd(_LCD_CLEAR); // Limpa o display LCD
//Lcd_Cmd(_LCD_CURSOR_OFF); // Desliga o Cursor do display LCD
Lcd_Out(1,1,txt1); // Escreve o texto Uni Abc - Senha?
while (1)
{
for (tempo=0; tempo<=1000; tempo++) // Tempo para digitar a senha
{
// Armazena o primeiro digito
//Delay_ms(5);
if
((P0!=0xFF)&&(P0!=0x7F)&&(P0!=0xBF)&&(C1==0)&&(C2==0)&&(C3==0)&&(C4==0)
)
{
if (P0==0xFE){ C1=1; }
if (P0==0xFD){ C1=2; }
if (P0==0xFB){ C1=3; }
12
if (P0==0xF7){ C1=4; }
if (P0==0xEF){ C1=5; }
if (P0==0xDF){ C1=6; }
Lcd_Out(2,7,txt4); // Escreve o caracter *
while (P0!=0xFF){ }
Delay_ms(5);
}
// Armazena o segundo dígito
//Delay_ms(5);
if
((P0!=0xFF)&&(P0!=0x7F)&&(P0!=0xBF)&&(C1!=0)&&(C2==0)&&(C3==0)&&(C4==0)
)
{
if (P0==0xFE){ C2=1; }
if (P0==0xFD){ C2=2; }
if (P0==0xFB){ C2=3; }
if (P0==0xF7){ C2=4; }
if (P0==0xEF){ C2=5; }
if (P0==0xDF){ C2=6; }
Lcd_Out(2,8,txt4); // Escreve o caracter *
13
while (P0!=0xFF){}
Delay_ms(5);
}
// Armazena o terceiro digito
//Delay_ms(5);
if
((P0!=0xFF)&&(P0!=0x7F)&&(P0!=0xBF)&&(C1!=0)&&(C2!=0)&&(C3==0)&&(C4==0))
{
if (P0==0xFE){ C3=1; }
if (P0==0xFD){ C3=2; }
if (P0==0xFB){ C3=3; }
if (P0==0xF7){ C3=4; }
if (P0==0xEF){ C3=5; }
if (P0==0xDF){ C3=6; }
Lcd_Out(2,9,txt4); // Escreve o caracter "*"
while (P0!=0xFF){}
Delay_ms(5);
}
// Armazena o quarto digito
14
//Delay_ms(5);
if
((P0!=0xFF)&&(P0!=0x7F)&&(P0!=0xBF)&&(C1!=0)&&(C2!=0)&&(C3!=0)&&(C4==0))
{
if (P0==0xFE){ C4=1; }
if (P0==0xFD){ C4=2; }
if (P0==0xFB){ C4=3; }
if (P0==0xF7){ C4=4; }
if (P0==0xEF){ C4=5; }
if (P0==0xDF){ C4=6; }
Lcd_Out(2,10,txt4); // Escreve o caracter "*"
while (P0!=0xFF){}
Delay_ms(5);
}
// Tecla ENTER pressionada
// Verifica se a senha esta correta
if ((P0!=0xFF)&&(P0==0xBF)&&(A1==C1)&&(A2==C2)&&(A3==C3)&&(A4==C4))
{
Lcd_Out(2,3,txt3); // Escreve o texto senha correta
for (tempo=0; tempo<=24; tempo++)
15
{
P2=~P2;
Delay_ms(250);
}
limpar();
}
// Verifica se a senha esta incorreta
if ((P0!=0xFF)&&(P0==0xBF)&&((A1!=C1)||(A2!=C2)||(A3!=C3)||(A4!=C4)))
{
Lcd_Out(2,1,txt2); // Escreve o texto senha incorreta
Delay_ms(3000);
limpar();
}
// Tecla CLEAR pressionada
if ((P0!=0xFF)&&(P0==0x7F))
{
limpar();
}
16
Delay_ms(10); // Delay x o tempo do for = tempo p/ digitar
}
limpar();
}
}
9 – Hardware
Segue abaixo o diagrama de blocos e imagens do circuito utilizado neste trabalho.
9.1 - Diagrama em Blocos
17
18
9.2 - Fotografias
9.2.1 Descrição da Placa Smartlab
9.2.1.1 Resistores de Pull-Down
Usados para garantir nível lógico zero nas entradas do PIC quando as chaves estiverem
abertas.
São resistores usados no projeto de circuitos lógicos eletrônicos para garantir que entradas
para sistemas lógicos se ajustem em níveis lógicos esperados se dispositivos externos são
desconectados.
9.2.1.2 Relê
19
Usado para acionamento de cargas externas.
Um relé é um interruptor acionado eletricamente. A movimentação física deste "interruptor"
ocorre quando a corrente elétrica percorre as espiras da bobina do relé, criando assim
um campo magnético que por sua vez atrai a alavanca responsável pela mudança do estado
dos contatos. O relé é um dispositivo eletromecânico ou não, com inúmeras aplicações
possíveis em comutação de contatos elétricos. Servindo para ligar ou desligar dispositivos. É
normal o relé estar ligado a dois circuitos elétricos. No caso do Relé eletromecânico, a
comutação é realizada alimentando-se a bobina do mesmo. Quando uma corrente originada no
primeiro circuito passa pela bobina, um campo eletromagnético é gerado, acionando o relé e
possibilitando o funcionamento do segundo circuito. Sendo assim, uma das aplicabilidades do
relé é utilizar-se de baixas correntes para o comando no primeiro circuito, protegendo o
operador das possíveis altas correntes que irão circular no segundo circuito (contatos).
A mudança de estado dos contatos de um relé ocorre apenas quando há presença de tensão na
bobina que leva os contatos a movimentarem-se para a posição normal fechado (NF) ou
normal abertos (NA) quando esta tensão é retirada - este princípio aplica-se para relés tudo ou
nada.
9.2.1.3 Soquetes
Entrada de sinais analógicos.
9.2.1.4 Leds
20
Também usados para visualização de saídas acionadas.
O diodo emissor de luz também é conhecido pela sigla LED (Light Emitting Diode). Sua
funcionalidade básica é a emissão de luz em locais e instrumentos onde se torna mais
conveniente a sua utilização no lugar de uma lâmpada. Especialmente utilizado em produtos
de microeletrônica como sinalizador de avisos, também pode ser encontrado em tamanho
maior, como em alguns modelos de semáforos. Também é muito utilizado em painéis de led,
cortinas de led e pistas de led.
9.2.1.5 Display de 7 segmentos
Permite a visualização de mensagens.
Um display de sete segmentos, é um tipo de display (mostrador) barato usado como
alternativa a displays de matriz de pontos mais complexos e dispendiosos. Displays de sete
segmentos são comumente usados em eletrônica como forma de exibir uma informação
alfanumérica (binário, octadecimal, decimal ou hexadecimal) que possa ser prontamente
compreendida pelo usuário sobre as operações internas de um dispositivo. Seu uso é
corriqueiro por se tratar de uma opção barata, funcional e de fácil configuração.
9.2.1.6 Controlador Pic16 F 628A
21
Este componente faz todo o controle da placa.
9.2.1.7 Transistores
Servem para fazer o chaveamento dos displays. O Pic aciona um display de cada vez através
do PORTB usado como barramento de dados. Como a freqüência de chaveamento é alta, nos
parece que estão sendo acionados ao mesmo tempo. No caso do nosso programa, usamos um
tempo de 10 milissegundos para esse chaveamento.
O transistor é um componente eletrônico que começou a popularizar-se na década de 1950,
tendo sido o principal responsável pela revolução da eletrônica na década de 1960. São
utilizados principalmente como amplificadores e interruptores de sinais elétricos. O termo
vem de transfer resistor (resistor/resistência de transferência), como era conhecido pelos seus
inventores.
O processo de transferência de resistência, no caso de um circuito analógico, significa que
a impedância característica do componente varia para cima ou para baixo da polarização préestabelecida. Graças a esta função, a corrente elétrica que passa entre coletor e emissor do
transistor varia dentro de determinados parâmetros pré-estabelecidos pelo projetista
do circuito eletrônico. Esta variação é feita através da variação de corrente num dos terminais
chamados base, o que, consequentemente, ocasiona o processo de amplificação de sinal.
22
Entende-se por "amplificar" o procedimento de tornar um sinal elétrico mais fraco num mais
forte. Um sinal elétrico de baixa intensidade, como os sinais gerados por um microfone, é
injetado num circuito eletrônico (transistorizado por exemplo), cuja função principal é
transformar este sinal fraco gerado pelo microfone em sinais elétricos com as mesmas
características, mas com potência suficiente para excitar os alto-falantes. A este processo todo
dá-se o nome de ganho de sinal.
9.2.1.8 Buzzer
Usado para geração de sinais sonoros.
O buzzer é um componente composto de duas camadas de metal e uma camada interna de
cristal piezoeléctrico. Ao ser alimentado com uma fonte de sinal, vibra na mesma frequência
recebida, funcionando como uma sirene ou alto-falante.Existem várias versões e tamanhos.
Sua vantagem em relação a alto-falantes comuns é que consome pouca energia em relação à
potência sonora, sendo facilmente alimentado com pequenas baterias.
9.2.1.9 Chaves Normais Abertas
Principais entradas para o Pic.
9.2.1.10 Jumper
23
Para seleção de Leds ou displays.
Jumper é uma ligação móvel entre dois pontos de um circuito eletrônico. É, geralmente, uma
pequena peça plástica isolante que contém uma peça metálica em seu interior, responsável
pela condução de eletricidade. Em circuitos impressos (PCB em inglês) são responsáveis por
desviar, ligar ou desligar o fluxo elétrico permitindo configurações específicas por meio físico
do hardware em questão. Em discos rígidos (HD) eles configuram o modo como a placamãe reconhece o disco rígido no sistema. Podendo configurá-los como "master" ou "slave",
ou mesmo pode limitá-los a 32GiB de capacidade.
Também denomina-se "Jumper" a um segmento de fio condutor soldado diretamente às ilhas
de uma placa de circuito impresso com a função de interligar dois pontos do circuito.
9.2.1.11 Resistores
Para controle da corrente dos Leds
Um resistor é um dispositivo elétrico muito utilizado em eletrônica, ora com a finalidade de
transformar energia elétrica em energia térmica por meio do efeito joule, ora com a finalidade
de limitar a corrente elétrica em um circuito.
Resistores são componentes que têm por finalidade oferecer uma oposição à passagem
de corrente elétrica, através de seu material. A essa oposição damos o nome de resistência
elétrica, que possui como unidade o ohm. Causam uma queda de tensão em alguma parte de
um circuito elétrico, porém jamais causam quedas de corrente elétrica. Isso significa que a
corrente elétrica que entra em um terminal do resistor será exatamente a mesma que sai pelo
outro terminal, porém há uma queda de tensão. Utilizando-se disso, é possível usar os
resistores para controlar a corrente elétrica sobre os componentes desejados.
24
Um resistor ideal é um componente com uma resistência elétrica que permanece constante
independentemente da tensão ou corrente elétrica que circular pelo dispositivo.
Os
resistores
podem
ser
fixos
ou
variáveis.
Neste
caso
são
chamados
de potenciômetros ou reostatos. O valor nominal é alterado ao girar um eixo ou deslizar uma
alavanca.
O valor de um resistor de carbono pode ser facilmente identificado de acordo com as cores
que apresenta na cápsula que envolve o material resistivo, ou então usando um ohmímetro.
Alguns resistores são longos e finos, com o material resistivo colocado ao centro, e um
terminal de metal ligado em cada extremidade. Este tipo de encapsulamento é chamado de
encapsulamento axial. A fotografia a direita mostra os resistores em uma tira geralmente
usados para a pré-formatação dos terminais. Resistores usados em computadores e outros
dispositivos são tipicamente muito menores, freqüentemente são utilizadas tecnologia de
montagem superficial (Surface-mounttechnology), ou SMT, esse tipo de resistor não tem
"perna" de metal (terminal). Resistores de maiores potências são produzidos mais robustos
para dissipar calor de maneira mais eficiente, mas eles seguem basicamente a mesma
estrutura.
9.2.1.12 Interface para gravação do Pic
25
Conectado a um computador através de cabo USB, permite a transferência e gravação de
programas para a memória do controlador.
9.2.1.13 Cristal e capacitores cerâmicos
Usados para geração de clock para o controlador de gravação.
Capacitor é um componente que armazena energia num campo elétrico, acumulando um
desequilíbrio interno de carga elétrica.
9.2.1.14 Controlador
26
Usado para efetuar a gravação do Pic.
10 - Anexos
10.1 - Set Instruções
Cada instrução do PIC16F628A tem o tamanho de 14 bits, onde alguns destes bits são usados
para especificar o OPCODE (nome dado ao "comando" assembly), e de zero até dois
operandos. Por conveniência, a ultima categoria foi dividida em literal e controle.
O formato das instruções pode variar de acordo com o tipo, abaixo o formato da instrução do
PIC para cada tipo. A figura abaixo mostra os formatos de instrução do PIC16F628A.
27
As tabelas seguintes apresentam todas as instruções do PIC16F628A, com os seus respectivos
operandos.
Orientadas a bit
28
Orientadas a byte
29
De controle (quando efetuam desvios gastam 2 ciclos)
30
Operações com literais
31
Legenda:
X = não importa o valor do bit
k = o bit pertence a um literal
f = O bit pertence a um endereço de registrador
d = onde o resultado será armazenado W(d=0) ou F(d=1)
10.2 - Programa Exemplo
32
Este programa foi inicialmente desenvolvido e serviu de modelo para o programa
aperfeiçoado neste trabalho no item 8 – Programa / Software.
/*Programa para a ATPS de Microcontroladores.
Este programa simula um controlador de acesso, onde ao se pressionar os botões corretos, o
microcontrolador aciona leds simulando a abertura de uma porta.*/
voidmain()
{
CMCON=0x07; // CONFIGURA I/Os DIGITAIS
TRISA=0xFF; // CONFIGURA TODO O PORT A COMO ENTRADA
TRISB=0x00; // CONFIGURA TODO O PORT B COMO SAÍDA
PORTB=0; // INICIA O PORT B DESLIGADO
while(1)
{
if(PORTA.RA4&&PORTA.RA1==1) // TESTA A SENHA
{
PORTB.RB6=1; // ACENDE O LED VERDE 3
PORTB.RB0=1; // ACENDE O LED VERDE 8
PORTB.RB7=0; // APAGA O LED VERMELHO 1
PORTB.RB2=0; // APAGA O LED VERMELHO 6
} // FECHA A INSTRUÇÃO if
33
else
{
PORTB.RB7=1; // ACENDE O LED VERMELHO 1
PORTB.RB2=1; // ACENDE O LED VERMELHO 6
PORTB.RB0=0; // APAGA O LED VERDE 8
PORTB.RB6=0; // APAGA O LED VERDE 3
} // FECHA A INSTRUÇÃO else
} // FECHA A INSTRUÇÃO while
} // FECHA INSTRUÇÃO voidmain
11. Bibliografia
http://pt.wikipedia.org/wiki/Rel%C3%A9
http://www.trajanocamargo.com.br/arquivos/eletroeletronica/apostila_Microcontroladores_PI
C16F84_PIC16F6288.pdf
http://www.cp.utfpr.edu.br/chiesse/Sistemas_Digitais/PIC16f628a.pdf
http://pt.wikipedia.org/wiki/Resistores_pull-up
http://pt.wikipedia.org/wiki/Diodo_emissor_de_luz
http://www.arnerobotics.com.br/eletronica/Microcontrolador_PIC_teoria_2.htm
http://pt.wikipedia.org/wiki/Display_de_sete_segmentos
http://pt.wikipedia.org/wiki/Trans%C3%ADstor
http://en.wikipedia.org/wiki/Buzzer
34
http://pt.wikipedia.org/wiki/Jumper
http://pt.wikipedia.org/wiki/Capacitor
35
Download