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