Baixe o app para aproveitar ainda mais
Prévia do material em texto
Microcontroladores e redes 2.1 CAPÍTULO 2 – INTRODUÇÃO A MICROCONTROLADORES 2.1-) VISÃO GERAL DO MICROCONTROLAROR PIC 16F628A 2.1.1-) DIAGRAMA EM BLOCOS DO MICROCONTROLADOR PIC 16F628A A figura 1 mostra o circuito interno do microcontrolador PIC 16F628A que é constituído por: - memória de programa: onde é armazenado o programa (conjunto de instruções em binário) que será executado pelo microcontrolador. Nos microcontroladores PIC que possuem a letra F no seu nome a memória de programa é do tipo FLASH que, conforme já vimos, pode ser apagada e escrita eletricamente. - memória de dados (ram file): memória onde o microcontrolador lê e escreve dados durante a operação normal. OBS: O pic 16F628 possui uma arquitetura denominada Harvard para acesso aos dados e às instruções de programa, a qual é caracterizada por utilizar um bus (barramento) para comunicação dos dados e outro bus distinto para comunicação com a memória de programa. Esse tipo de arquitetura permite que enquanto uma instrução é executada, outra seja procurada na memória, tornando o processamento mais rápido em comparação com a arquitetura Von-Neumann utilizada em outros microcontroladores. Figura 1 Microcontroladores e redes 2.2 - contador de programa: contém o endereço da memória de programa onde se encontra a próxima instrução que deverá ser executada pelo microcontrolador. - stack (stack pointer = apontador ou indicador de pilha): quando ocorre uma interrupção a execução do programa é desviada para outra parte do programa e, após a interrupção ser atendida, a execução do programa continua normalmente. Para isto o conteúdo do contador de programa deve ser armazenado no registrador “stack”. - instruction decode (decodificador de instruções): as instruções são armazenadas na memória de programa através de um número binário denominado código operacional (opcode). A função do “decodificador de instruções” será então a de receber em suas entradas o código operacional da instrução que vai ser executada, e gerar em sua saída uma palavra de controle (control Word) adequada, que ative as partes corretas do sistema a fim de que a instrução seja executada. - ALU (aritmetic logic unit = unidade lógica aritmética): onde são executadas as operações lógicas (not, and, or, etc) e aritméticas (soma, subtração, multiplicação, etc.) - PORTA e PORTB = dispositivos de entrada/saída (input/output) para comunicação com o mundo externo como teclados, displays, interruptores, sensores, etc. Os demais blocos serão analisados nos próximos capítulos. 2.1.2-) DESCRIÇÃO FUNCIONAL DOS PINOS DO MICROCONTROLADOR 16F628A VDD = Pino de tensão positiva (3 a 5,5 V); VSS = Pino de terra (0 V). Figura 2 Microcontroladores e redes 2.3 - PORTA A: RESUMO: Com exceção do pino 5, todos os outros pinos da porta A podem ser utilizados como entrada/saída bidirecional. O pino 5 só pode ser utilizado como entrada. Os pinos 0 a 3, 6 e 7 apresentam saída CMOS e o pino 4 apresenta saída em dreno aberto. Todos os pinos da porta A apresentam entrada Schmitt Trigger (ver capítulo 3 da apostila de eletrônica digital). Nome Função Tipo de Entrada Tipo de saída Descrição RA0 ST CMOS Porta de entrada/saída bidirecional. RA0/AN0 AN0 AN - Entrada do comparador analógico. RA1 ST CMOS Porta de entrada/saída bidirecional. RA1/AN1 AN1 AN - Entrada do comparador analógico. RA2 ST CMOS Porta de entrada/saída bidirecional. AN2 AN - Entrada do comparador analógico. RA2/AN2/VREF VREF - AN Tensão de referência de saída. RA3 ST CMOS Porta de entrada/saída bidirecional. AN3 AN - Entrada do comparador analógico. RA3/AN3/CMP1 CMP1 - CMOS Saída do comparador 1. RA4 ST OD Porta de entrada/saída bidirecional. T0CKI ST - Entrada de clock do TIMER 0 . RA4/T0CKI/CMP2 CMP2 - OD Saída do comparador 2. RA5 ST - Porta de entrada. MCLR ST - Master Clear. RA5/ MCLR /VPP VPP - - Entrada de tensão de programação. Quando configurado como master clear esse pino é um RESET ativo quando baixo. A tensão no master clear não pode exceder VDD RA6 ST CMOS Porta de entrada/saída bidirecional OSC2 XTAL - Entrada para oscilador a cristal RA6/OSC2/CLKOUT CLKOUT - CMOS No modo ER/INTRC esse pino fornece sinal de clock com ¼ da freqüência de OSC1. RA7 ST CMOS Porta de entrada/saída bidirecional. OSC1 XTAL - Entrada para oscilador a cristal. RA7/OSC1/CLKIN CLKIN ST - Entrada para fonte de clock externa. Legenda: O = Output (saída) CMOS = CMOS Output (saída CMOS) P = Power — = Não utilizado I = Input (entrada) ST = Schmitt Trigger Input TTL = TTL Input OD = Open Drain Output (saída em dreno aberto) AN = Analog (analógico) XTAL = CRISTAL Microcontroladores e redes 2.4 - PORTA B: RESUMO: Todos os pinos da porta B podem ser utilizados como entrada/saída bidirecional. Apresentam entrada TTL e saída CMOS. Nome Função Tipo de Entrada Tipo de saída Descrição RB0 TTL CMOS Porta de entrada/saída bidirecional. Pode ter Pull-up interno habilitado por software. RB0/INT INT ST - Interrupção externa. RB1 TTL CMOS Porta de entrada/saída bidirecional. Pode ter Pull-up interno habilitado por software. RX ST - Pino receptor de USART (comunicação serial). RB1/RX/DT DT ST CMOS Porta de entrada/saída de dados síncronos (comunicação serial). RB2 TTL CMOS Porta de entrada/saída bidirecional. TX - CMOS Pino transmissor de USART. RB2/TX/CK CK ST CMOS Porta de entrada/saída de clock síncronos (comunicação serial). Pode ter Pull-up interno habilitado por software. RB3 TTL CMOS Porta de entrada/saída bidirecional. Pode ter Pull-up interno habilitado por software. RB3/CCP1 CCP1 ST CMOS Captura/Compara/PWM I/0. RB4 TTL CMOS Porta de entrada/saída bidirecional. Interrupção por mudança no estado do pino. Pode ter Pull-up interno habilitado por software. RB4/PGM PGM ST - Pino de entrada para programação em baixa tensão. RB5 RB5 TTL CMOS Porta de entrada/saída bidirecional. Interrupção por mudança no estado do pino. Pode ter Pull-up interno habilitado por software. RB6 TTL CMOS Porta de entrada/saída bidirecional. Interrupção por mudança no estado do pino. Pode ter Pull-up interno habilitado por software. T1OSO - XTAL Saída do oscilado do TIMER 1. T1CKI ST - Entrada de clock para TIMER 1. RB6/T1OSO/T1CKI/PGC PGC ST - Clock para programação ICSP (In- Circuit Serial Programming = Programação Serial No Circuito). RB7 TTL CMOS Porta de entrada/saída bidirecional. Interrupção por mudança no estado do pino. Pode ter Pull-up interno habilitado por software. T1OSI XTAL - Entrada para oscilador do TIMER 1. RB7/T1OSI/PGD PGD ST CMOS Entrada/saída de dados para programação ICSP (In-Circuit Serial Programming = Programação Serial No Circuito). Legenda: igual porta A Microcontroladores e redes 2.5 2.1.3-) DESCRIÇÕES GERAIS - Freqüência de operação de até 20 MHz; - Oscilador interno de 4MHz / 48 kHz; - Pull-up interno nos pinos do PORTB; - Memória de programa (FLASH): 2k x 14 bits; - Memória de dados (RAM): 224 x 8 bits; - Memória EEPROM interna: 128 x 8 bits; - Módulos de temporização: TIMER 0 (8 bits), TIMER 1 (16 bits) e TIMER 2 (8 bits); - Programação na Placa ICSP (In-Circuit Serial ProgrammingTM) com apenas dois pinos; - Módulo CCP (modos capture, compare e PWM); - 2 comparadores analógicos (referência de tensão interna programável); - 1 canal de comunicação serial - USART; - Watchdog timer; - 10 fontes de interrupção independentes; - Baixo consumo, 100nA no modo Stand-by; - Modo de funcionamento sleep. 2.1.4-) CARACTERÍSTICAS ELÉTRICAS (VALORES MÁXIMOS) - Tensão de alimentação entre 3 e 5.5 VDC; - Tensão máxima no pino RA5/MCLR com relação ao pino VSS = - 0,3 V até + 14 V; - Tensão máxima em todos os outros pinos com relação ao pino VSS = - 0,3 V até VDD + 0,3 V; - Máxima corrente de saída do pino VSS = 300 mA; - Máxima corrente de entrada do pino VDD = 250 mA; - Capacidade de corrente de 25mA por pino de I/O, suficiente para controlar LED´s diretamente; 2.2-) LINGUAGEM DE PROGRAMAÇÃO E COMPILADOR Os primeiros dispositivos programáveis tinham seus programas escritos com códigos chamados “códigos de máquina”, que consistiam em dígitos binários que eram inseridos por meio de um dispositivo de entrada de dados (teclado, leitora de cartões, fitas perfuradas ou discos magnéticos) para então serem executados pela máquina. Por utilizar dígitos binários, a programação em código de máquina era extremamente complexa, o que implicava em um elevado custo, além de muito tempo para o desenvolvimento de um programa. Diante da necessidade crescente de programação de sistemas, surgiu a linguagem Assembly que consiste na representação dos códigos de máquina através de mnemônicos, ou seja, abreviações de termos usuais que descrevem a operação efetuada pelo comando em código de máquina. Ex: Se desejarmos copiar (mover) o valor 0x8C16 para o registrador W, podemos utilizar código de máquinas ou a linguagem Assembly. Vejamos como fica o comando nestas linguagens: Código de máquinas Assembly 00110000100011002 MOVLW 0x8C Obviamente a representação em Assembly da instrução resultou muito mais simples do que aquela utilizando código de máquina, no entanto, a utilização da linguagem Assembly não resolveu todos os problemas pois ela é uma linguagem de baixo nível, ou seja, não possui nenhum comando, instrução ou função além daquelas definidas no conjunto de instruções do processador utilizado. Com a evolução e a utilização dos computadores digitais surgiu a necessidade de uma linguagem mais próxima da forma humana de pensamento chamada de linguagem de alto nível. A primeira linguagem de alto nível foi o FORTRAN (metade da década de 50), em seguida vieram linguagens como COBOL (1959), ALGOL (1960), PASCAL, BASIC e C (1972). Assim como outras linguagens de alto nível, a linguagem C utiliza a filosofia da programação estruturada, ou seja, os programas são divididos em módulos ou estruturas (que em C são chamadas de funções) independentes entre si e com o objetivo de realizar determinada tarefa. Desta forma, a programação estruturada permite a criação de programas de maior complexidade quando comparada a outras linguagens não estruturadas como o BASIC ou o ASSEMBLY. Quando se faz a programação de um computador ou microcontrolador, utilizando uma linguagem diferente da linguagem de máquina, torna-se necessária a utilização de um software que faça a conversão (tradução) do programa da linguagem utilizada para a linguagem de maquina. Este software chama-se “compilador”. Os compiladores também fornecem um conjunto de funções e bibliotecas de programa que simplificam o uso dos microcontroladores e seus módulos, como por exemplo função de atraso de tempo (delay), função para ler ou alterar o estado lógico de um pino, biblioteca LCD (display de cristal líquido), etc. Pode-se programar os microcontroladores PIC utilizando-se qualquer linguagem de programação. No nosso estudo utilizaremos a programação em linguagem C pelas razões expostas anteriormente. Microcontroladores e redes 2.6 Os compiladores C mais utilizados na programação dos microcontroladores PIC são o PCWH da CCS e o mikroC da mikroelektronika. No nosso estudo utilizaremos o mikroC que pode ser baixado gratuitamente na internet no site http://www.mikroe.com/en/download/ . Para isto clique em mikroC PRO for PIC 2009, baixe também os arquivos em PDF que estão abaixo. 2.3-) COMO CRIAR UM NOVO PROJETO NO COMPILADOR mikroC PRO for PIC - C Na área de trabalho clique no ícone para abrir o compilador mikroC. Aparecerá uma tela como mostrada na figura 3. Se a tela não estiver como mostrado na figura 3, clique no ícone ou vá em PROJECT => CLOSE PROJECT para fechar o projeto que está aberto. Clique no ícone ou em PROJECT => NEW PROJECT para criar um novo projeto,. Será apresentada uma janela semelhante a mostrada na figura 4. Clique em NEXT e aparecerá uma janela igual a figura 5. Selecione o microcontrolador PIC 16F628A (Device Name) e clique NEXT. Na janela da figura 6 ajuste o clock do dispositivo (Device Clock) em 4.000000 MHz (quatro MegaHertz) e clique NEXT. Na janela mostrada na figura 7 clique no botão , vá na pasta aluno, que está dentro do drive C, e crie uma pasta com o seu nome. Dentro desta pasta crie uma outra pasta com o nome capítulo 2, dentro desta pasta crie uma outra pasta com o nome exemplo_1 e salve, dentro desta pasta, o projeto com o nome exemplo_1 que é o nome do nosso primeiro programa, clique NEXT (3 vezes) e FINISH. Figura 4 Figura 3 Microcontroladores e redes 2.7 Deverá aparecer a tela mostrada na figura 8. Pelo windows explorer verifique que na pasta exemplo_1 existem apenas dois arquivos, um com extensão .ppc (projeto) e um com extensão .c (texto). Após criar o projeto, clique no ícone ou PROJECT => BUILD Se o projeto foi criado corretamente, será exibida em azul no rodapé da página, a seguinte mensagem: Finished Successfully: data Pelo windows explorer verifique que, agora, na pasta exemplo_1 existem onze arquivos, cada um com uma extensão. Estes arquivos foram criados pelo BUILD PROJECT. Figura 5 Figura 6 Figura 7 figura 8 Microcontroladores e redes 2.8 2.4-) PRIMEIRO PROGRAMA Escreva um programa que faça um LED piscar a uma freqüência de 0,5 Hz (T = 2 s) com tempo em nível 1 (TON) igual ao tempo em nível 0 (TOFF) igual a 1s. O led será ligado no pino 0 da porta B, conforme mostrado na figura 9. - CIRCUITO ELETRÔNICO: - PROGRAMA: /*nome do projeto: exemplo_1 */ void main () { trisb = 0; // cofigura os pinos da porta B como saída while (1) // começo de um loop { portb = 1; // liga o diodo conectado no pino 0 da porta B delay_ms (1000); // espera 1s (1000 ms) portb = 0; // desliga o diodo conectado no pino 0 da porta B delay_ms (1000); // espera 1s } } Após digitar o programa acima, clique no ícone = BUILD PROJECT. Se a digitação estiver correta será exibida no rodapé da página, a seguinte mensagem em letras azuis: Finished Successfully:data Caso contrário, uma ou várias mensagens de erro serão exibidas em vermelho. - SIMULAÇÃO NO MIKROC PRO FOR PIC: Se não apareceu nenhuma mensagem de erro, ou, após todos os erros terem sido consertados, podemos fazer a simulação do programa (debug). Para isto, clique no ícone ou RUN => START DEBUGGER. Será apresentada uma janela como mostrada na figura 10. Clique na barra de rolagem SELECT VARIABLE FROM LIST, uma série de variáveis serão exibidas. Selecione a variável TRISB e clique no ícone (acrescentar) ou no ícone . Repita o procedimento anterior para a variável PORTB. As variáveis selecionadas serão exibidas na janela com os respectivos valores na segunda coluna. Inicialmente estes valores serão nulos. Na última linha é apresentado o tempo real da simulação (time). Clique no ícone = STEP OVER e analise o valor das variáveis TRISB e PORTB, e o tempo transcorrido. Repita este procedimento várias vezes. Você deve ter percebido que a variável PORTB permaneceu em nível 0 durante 1000 ms e em nível 1 durante os 1000 ms seguintes como era esperado. Para parar a simulação clique no ícone STOP DEBUGGER. RB0 PIC 16F628A + 5V VDD VSS 6 14 5 330 Ω Figura 9 MCLR 4 Microcontroladores e redes 2.9 Se a janela da figura 10 não aparecer, clique em VIEW => WINDOW na barra de ferramentas superior do mikroC e aparecerá a janela da figura 11. Nesta janela desloque a barra de rolagem para baixo, selecione a opção WATCH VALUES e dê OK. - ANÁLISE DO PROGRAMA: Vejamos, agora, o significado de cada linha do programa: /*nome do projeto: exemplo_1 */ É chamada de comentário. É escrita para documentar o programa, não é levada em consideração na execução do programa. Os compiladores C, em geral, admitem duas formas de comentário: - Comentário de linha simples: Consta de apenas uma linha iniciada pelos caracteres “//”. - Comentários de múltiplas linhas: São compostos por uma ou mais linhas. Este tipo de comentário utiliza a seqüência de caracteres “/*” para iniciar o comentário e a seqüência “*/” para encerrar o comentário. Na linha seguinte do programa temos: void main () É utilizada para definir a função principal ou o corpo do programa. É a linha de início de um programa em C. { O sinal de abertura de chave “{“ é utilizado para delimitar o início da função e o sinal de fechamento de chave “}” indica o fim da função. trisb = 0; As portas do microcontrolador pic são bidirecionais, ou seja, podem ser usadas como entrada ou como saída (exceto o pino 5 da porta A que só pode ser utilizado como entrada). Através dos comandos TRISA e TRISB informamos ao microcontrolador se os pinos das portas A e B, respectivamente, devem ser consideradas como entrada ou como saída. Se trisa ou trisb = 1, o pino 0 da porta A ou da porta B será usado como entrada ( 1 = i de input = entrada). Se trisa ou trisb = 0, o pino 0 da porta A ou da porta B será usado como saída (0 = O de output = saída). while (1) Este é um comando de controle utilizado na repetição de um determinado bloco de instruções listado entre chaves após o comando while (1). Esse bloco será repetido enquanto a expressão entre parênteses for verdadeira, como não há expressão entre parênteses, há apenas o número 1, esta será sempre verdadeira. Qualquer número diferente de zero colocado dentro do parêntese resulta em uma avaliação verdadeira. O número zero resulta em uma avaliação falsa. portb = 1 ou portb = 0; Figura 11 Figura 10 Microcontroladores e redes 2.10 É uma função interna do compilador. portb =1; seta, ou seja, coloca nível lógico 1 no pino 0 da porta B do microcontrolador, pois 1 = 0b00000001 ou seja, apenas o bit mais à direita, que corresponde ao pino 0, tem nível lógico 1, os outros têm nível lógico 0. portb =0; reseta ou seja, coloca nível lógico 0 em todos os pinos da porta B pois 0 = 0b00000000. delay_ms (1000); Também é uma função interna do compilador. É utilizada para gerar um atraso de 1000 ms, ou seja, a execução do programa fica parada neste comando durante 1000 ms e, depois, segue normalmente. 2.5-) EDIÇÃO DO PROJETO: Para editar o projeto, clique em PROJECT => EDIT PROJECT na barra de ferramentas do mikroC PRO. Será mostrada a janela da figura 12. Os microcontroladores PIC podem operar com oscilador a cristal (XT, LP ou HS), com fonte de clock externo, oscilador com resistor externo ou com oscilador interno de 4 MHz. Nos nossos projetos usaremos o oscilador interno do PIC de 4 MHz. Desta forma liberamos os pinos 6 e 7 da porta A para serem utilizados como entrada ou saída. Na primeira linha da janela da figura 12 temos o bit de configuração do oscilador (OSCILLATOR), clique na barra de rolagem à direita e selecione a opção “INTOSC: I/O on RA6/OSC2/CLKOUT, I/O on RA7/OSC1/CLKIN” que significa “Oscilador Interno com os pinos RA6 e RA7 disponíveis para serem utilizados como entrada/saída”. Selecione o bit de configuração “Master Clear Enable”, na janela da figura 12, clique na barra de rolagem e habilite (enable) esta função. Os outros bits podem permanecer como estão. Para mais informações sobre os bits restantes de configuração, consulte o livro “Programando Microcontroladores PIC”, autor Renato Silva que pode ser acessado no site www.renato.silva.nom.br ou o catálogo (datasheet) do fabricante do microcontrolador que também está disponível na internet. Figura 12 Figura 13 Microcontroladores e redes 2.11 EXERCÍCIOS 1-) Escreva um programa para acionar o led conectado no pino 0 da porta B da figura 9 de acordo com a seguinte lógica: a-) Pisca 4 vezes o led a uma freqüência de 1 Hz, b-) Espera 5 segundos, c-) Pisca 6 vezes o led a uma freqüência de 2 Hz, d-) Espera 3 segundos, e-) Voltar para o item a. OBS: O tempo ligado é igual ao tempo desligado. Comente cada linha do programa. 2-) Faça o desenho de um microcontrolador, alimentado com uma tensão de 5 V, que tem um led ligado no pino 0 da porta B e um led ligado no pino 0 da porta A. Os leds devem ligar quando tiver nível lógico 1 no referido pino. 3-) Escreva um programa para fazer com que os leds do exercício anterior pisquem a uma freqüência de 2 Hz cada um. O tempo que os leds ficam ligados deve ser igual ao tempo que ficam desligados e quando um led estiver ligado o outro deve estar desligado. Comente cada linha do programa. 4-) Escreva um programa para acionar os leds do circuito do exercício 2 de acordo com a seguinte lógica. a-) Pisca 3 vezes o led da porta A a uma freqüência de 1/3 Hz. b-) Espera 1 segundo. c-) Pisca 3 vezes o led da porta B a uma freqüência de 1/3 Hz. d-) Espera 1 segundo. e-) Pisca 5 vezes os dois leds simultaneamente a uma freqüência de 4 Hz. f-) Espera 2 segundos. g-) Volta para o item a. OBS: O tempo ligado é igual ao tempo desligado. Comente cada linha do programa. 5-) Escreva um programa para acionar os leds do circuito do exercício 2 de acordo com a seguinte lógica. a-) Pisca 4 vezes alternadamente os leds das portas A e B (quando um está ligado o outro está desligado) a uma freqüência de 0,2 Hz. b-) Espera 1 segundo. c-) Pisca 3 vezes simultaneamente os leds das portas A e B a uma freqüência de 3 Hz. d-) Espera 3 segundo. e-) Volta para o item a. OBS: O tempo ligado é igual ao tempo desligado. Comente cada linha do programa. 6-) Emcódigo Morse o sinal SOS é produzido através de 3 bips curtos, 3 bips longos e 3 bips curtos novamente. Faça um programa para reproduzir em um “buzzer” conectado no pino 0 da porta B o sinal SOS. O tempo de duração dos bips curtos deve ser de 100 ms e os bips longos 200 ms. O tempo ligado deve ser igual ao tempo desligado. O tempo entre cada sequência de 3 bips deve ser de 400 ms. Entre 1 SOS e outro, esperar 1,5 s. Comente cada linha do programa.
Compartilhar