Programação – Daniel Corteletti – Aula 2 Página 1/6 Conhecendo o PIC16F877 Microcontrolador de 8 bits da Microchip Co. O microcontrolador PIC16F877 pode ser encontrado em diversos encapsulamentos: PDIP, QFP, PLCC Este modelo (16F877) possui 40 pinos (veja imagem ao lado para o encapsulamento PDIP), sendo que destes 40 pinos, 7 pinos são usados para alimentação e controle do mesmo. PINO 1: Suporta 3 níveis de tensão. Quando este pino estiver recebendo 5V, o microcontrolador estará em condições de executar o programa. Quando este pino receber 0V (GND), o PIC será “resetado”. Quando este pino receber tensão de 13,4V, o PIC irá entrar em modo gravação. PINOS 11 e 32: Alimentação (máximo 5V) PINOS 12 e 31: Referência (GND) PINOS 13 e 14 : Onde estará ligado o resonador externo (cristal de clock). Os demais pinos são conhecidos por I/Os (lê-se Aiôus, e vem do inglês Inputs/Outputs, que significa entradas/saídas). Estas I/Os são agrupadas em PORTs (portos), de no máximo 8 pinos cada (limitação pois o componente possui um núcleo de 8 bits). Há um total de 33 I/Os disponíveis, que podem ser configuradas como entradas ou saídas em tempo de execução. Quando um pino é configurado como ENTRADA, ele pode ser conectado a algum sensor para detectar sinais digitais através de variação da tensão de 0 e 5V. Quando um pino é configurado como saída, o programa poderá acioná-lo, e com isso gerar uma corrente baixa (max. 20 mA) com os níveis de tensão de 0V ou 5V. Alguns pinos, porém, possuem outras funções além de serem entradas ou saídas digitais. Por exemplo, no diagrama ao lado podemos observar que os pinos 2 a 10 (exceto o pino 6) são entradas analógicas, e podem ser usados para detectar uma variação de tensão entre 0V e 5V, transformando esta variação em uma informação binária de 10 bits. Os pinos 39 e 40 também são pinos usados na gravação do microcontrolador, e os pinos 25 e 26 são usados para comunicação SERIAL padrão RS232. Os pinos 16 e 17 são pinos geradores de pulso (PWM), que é similar a uma saída analógica. Muito útil para controle de velocidade de motores, por exemplo. O pino 6 é um pino usado para contagem rápida. Programação – Daniel Corteletti – Aula 2 Página 2/6 Tradicionalmente conhecemos os pinos do microcontrolador NÃO PELO SEU NÚMERO, mas sim pela sua IDENTIFICAÇÃO DE I/0. Os pinos são agrupados em PORTs, sendo: PORTa (com 6 I/Os disponíveis) PORTc (com 8 I/Os disponíveis) PORTe (com 3 I/Os disponíveis) PORTb (com 8 I/Os disponíveis) PORTd (com 8 I/Os disponíveis) EXERCITANDO: Identifique os seguintes recursos no microcontrolador PIC16f877a (qual o número do pino no encapsulamento PDIP correspondente) PINO A3: _________________ PINO E0: _________________ PINO B7: _________________ PINO D6: _________________ PINO C2: _________________ PINO D2: _________________ Observações importantes: A letra F (PIC16F877) identifica que o microcontrolador em questão utiliza a tecnologia FLASH, ou seja, pode ser regravado. Alguns modelos (que utilizam a letra C no nome, como o PIC16C877) só podem ser gravados uma única vez e são mais baratos. Outros modelos da família 16 (como o PIC16F870, PIC16F628, PIC16F84, ....) possuem variações em termos de recursos (com mais ou com menos pinos de I/Os, entradas analógicas, memória ROM, memória RAM, etc...), mas todos podem ser programados com a mesma linguagem. Modelos da família 18 são mais rápidos e um pouco mais caros, continuando a ser de 8 bits. Modelos da família 24 são de 16 bits, e indicados para aplicações que exijam mais poder de processamento. Os microcontroladores PIC são indicados para aplicações mais simples, que não necessitem de grande volume de dados manipulados, e que não necessitem processamento em tempo real de alta performance. Quando transferimos um programa para o microcontrolador, este deve estar em linguagem de máquina (ARQUIVO HEX), e será armazenado na memória ROM do microcontrolador. Esta memória não será apagada até que outro programa seja enviado, mesmo que a alimentação de energia elétrica seja desativada. Exercitando (Responda) 1) 2) 3) 4) 5) Quem fabrica o microcontrolador PIC ? Quantos pinos de I/O o modelo PIC16F877 possui ? O modelo PIC16F877 só é oferecido na versão PDIP ? Posso gravar e regravar um PIC quantas vezes eu quiser ? Para onde um programa é enviado quando programamos um microcontrolador PIC ? 6) Um pino do microcontrolador pode acionar diretamente um motor elétrico que consome 100mA ? Por que ? Programação – Daniel Corteletti – Aula 2 Descrição detalhada do PIC16F877 Página 3/6 Desenvolvido pela MICROCHIP (www.microchip.com) CPU RISC de alta performance, baseado em uma arquitetura Haward modificada. Suas características mais significativas são: • Opera com somente 35 instruções (ASSEMBLY) • Operações com duração de um único ciclo, exceto pelas instruções de desvio que consomem dois ciclos de máquina. Cada ciclo equivale a 4 pulsos do circuito oscilador (clock) • Operação em até 20 MHz (20 milhões de pulsos de clock por segundo = 5 milhões de ciclos de máquina por segundo = 200 ns por ciclo) • 8 KWords de FlashROM (Word com 14 bits), suportando mais de 8 mil instruções em um programa. • 368 Bytes de memória RAM • 256 Bytes de memória EEPROM (regravável via software e não volátil) • Capacitado para interrupções com 14 fontes diferentes (timer, contagem, pulso externo, serial, etc...) • Pilha física com 8 níveis de profundidade • Endereçamento direto, indireto e relativo • Power-on Reset, power-on tiimer, oscillator start-up timer • Watch-dog Timer baseado em oscilador RC interno para tratar um possível travamento de software • Opção para proteção de código executável (Ativando-a, não é mais possível se ler a memória, evitando a duplicação do código em outro microcontrolador) • Modo SLEEP para poupar energia • Opções diferentes para circuito oscilador • Tecnologia CMOS FLASH/EEPROM de baixo consumo e alta velocidade, permitindo armazenamento não volátil na memória EEPROM interna em tempo de execução. • Programação ICSP (recurso embutido de gravação) através de dois pinos, facilitando a gravação do microcontrolador. • Capacidade opcional de gravação com tensão de 5V (LVP) • Opção de depuração in-circuit através de dois pinos • Tensão de trabalho de 2 a 5.5V • Baixo consumo de energia (abaixo de 1mA) • 3 timers (2 de 8 bits e 1 de 16 bits) • 2 pinos para captura, comparação e módulos PWM • 8 canais analógicos para um AD de 10 bits • Porta serial sincrona com SPI (master) e I2C(mater/slave) • Porta serial universal (RS232 ou RS485) com buffer via hardware (2 bytes) • Porta paralela escrava de 8 bits • Detector Brown-out • 33 pinos de entrada/saída configuráveis Programação – Daniel Corteletti – Aula 2 Página 4/6 Descrição dos pinos (muitos pinos possuem várias funções, não significando que as funções possam ser exercidas ao mesmo tempo): 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. MCLR : Master Clear – Quando em nível baixo (0V), define situação de RESET. Quando em nível alto (5V), determina programa em execução. VPP : Tensão de programação – Quando este pino estiver em 13.4V, o microcontrolador entra em modo gravação, permitindo a transferência de um programa via ICSP RA0 – Entrada / saída digital. AN0 – Entrada analógica canal 0 para o ADC interno. RA1 – Entrada / saída digital. AN1 – Entrada analógica canal 1 para o ADC interno. RA2 – Entrada / saída digital. AN2 – Entrada analógica canal 2 para o ADC interno. Vref- - Uso do pino para definir a referência negativa para o conversor AD. RA3 – Entrada / saída digital. AN3 – Entrada analógica canal 3 para o ADC interno. Vref+ - Uso do pino para definir a referência positiva para o conversor AD. RA4 – Entrada / saída digital. TOCKI – Contador rápido RA5 – Entrada / saída digital. AN4 – Entrada analógica canal 4. SS – Slave Select para porta serial síncrona RE0 – Entrada / saída digital. RD – Entrada de controle de leitura para porta paralela escrava. AN5 – Entrada analógica canal 5. RE1 – Entrada / saída digital. WR – Entrada de controle de gravação para porta paralela escrava. AN6 - Entrada analógica canal 6. RE2 – Entrada / saída digital. CS – “Chip Select” para porta paralela escrava. AN7 – Entrada analógica canal 7. VDD – Alimentação (preferência 3V a 5V) VSS – Referência (0V / GND) OSC1/CLKIN – Pino para ligação do circuito oscilador externo (entrada). Usado em conjunto com o pino OSC/CLKOUT. Recomendado usar cristal de 4 a 20 MHz OSC2/CLKOUT – Pino para ligação do circuito oscilador externo (saída). RC0 – Entrada / saída digital. T1OSO – Saída do oscilador do TIMER1. T1CKI – Entrada de clock para TIMER1. RC1 – Entrada / saída digital. T1OSI – Entrada do oscilador do TIMER1. CCP2 – Entrada de captura 2, saída de comparador 2 ou PWM 2. 17. RC2 – Entrada / saída digital. CCP1 – Entrada de captura 1, saída de comparador 1 ou PWM 1. 18. RC3 – Entrada / saída digital. SCK/SCL – Entrada ou saída de sinal de clock serial síncrono para SPI e I2C. 19. RD0 – Entrada / saída digital. PSP0 – Pino 0 da porta paralela escrava. 20. RD1 – Entrada / saída digital. PSP1 – Pino 1 da porta paralela escrava. 21. RD2 – Entrada / saída digital. PSP2 – Pino 2 da porta paralela escrava. 22. RD3 – Entrada / saída digital. PSP3 – Pino 3 da porta paralela escrava. 23. RC4 – Entrada / saída digital. SDI – Entrada de dados em SPI. DAS – Entrada/saída de dados em modo I2C. 24. RC5 – Entrada / saída digital. SD0 – Saída de dados SPI. 25. RC6 – Entrada / saída digital. TX – Pino para transmissão serial assíncrona. CK – Clock para transmissão síncrona. 26. RC7 – Entrada / saída digital. RX – Pino para recepção serial assíncrona. DT – Dados da serial síncrona. 27. RD4 – Entrada / saída digital. PSP4 – Pino 4 da porta paralela escrava. 28. RD5 – Entrada / saída digital. PSP5 – Pino 5 da porta paralela escrava. 29. RD6 – Entrada / saída digital. PSP6 – Pino 6 da porta paralela escrava. 30. RD7 – Entrada / saída digital. PSP7 – Pino 7 da porta paralela escrava. 31. VSS - Referência (0V / GND) 32. VDD – Tensão de alimentação (mesma que pino 11) 33. RB0 – Entrada / saída digital. INT – Entrada de sinal de interrupção via hardware. 34. RB1 – Entrada / saída digital. 35. RB2 - Entrada / saída digital. 36. RB3 – Entrada / saída digital. PGM – Entrada de sinal para gravação em baixa tensão (5V) 37. RB4 – Entrada / saída digital. 38. RB5 – Entrada / saída digital. 39. RB6 – Entrada / saída digital. PGC – Clock para programação ICSP ou pino para depuração. 40. RB7 – Entrada / saída digital. PGD – Dados para programação ICSP ou pino para depuração. Glossário de termos relacionados ao microcontrolador PIC16F877 PORT : Agrupamento de pinos. Ex : PORT A : Pinos RA0 a RA5. PORT B : Pinos RB0 a RB7. PWM : Modulação por largura de pulso. Permite simular uma saída analógica através de pulsos digitais rápidos e de tamanho regulável. ADC : Conversor digital / analógico. ICSP : Recurso de programação serial embutida, permitindo que um gravador seja construído com custo relativamente baixo. RAM : Memória de acesso aleatório, volátil e de alta velocidade de acesso. ROM : Memória de programa, gravada quando se transfere o programa para o microcontrolador. EEPROM : Memória fixa que pode ser gravada e apagada em tempo de execução. SERIAL : Dispositivo de comunicação onde um bit é enviado de cada vez. I2C : Padrão de comunicação serial desenvolvido pela PHILIPS. SPI : Serial Peripheral Interface – Interface periférica serial : Padrão de comunicação serial que usa 4 fios. Programação – Daniel Corteletti – Aula 2 Página 5/6 Diagrama de programação: Passo 1 : Extração de requisitos – Levantar as necessidades da automação junto ao cliente, aos usuários do equipamento e as demais pessoas envolvidas no processo de automação. Passo 2 : Modelo de software – É a “planta baixa” do programa. Define quais serão as estratégias de programação que serão utilizadas. Para programas mais simples, recomenda-se a construção de um fluxograma ou de um modelo gráfico do programa. Para situações mais complexas, o modelo deve prever a “quebra” do problema em situações ou camadas mais simples, que podem ser implementadas separadamente. Passo 3 : Implementação – É a escrita do programa na linguagem de programação desejada (no caso, linguagem C). Deve ser observado o compilador a ser utilizado, bem como as variações na sintaxe da linguagem de programação para a ferramenta escolhida. Passo 4 : Compilação – Ocorre a tradução da linguagem de programação para a linguagem nativa do microcontrolador. Nesta etapa, parte dos erros (principalmente os erros de sintaxe) são detectados. Os erros de sintaxe são os erros causados por erros de digitação ou uso incorreto de comandos. Passo 5 : Transferência – Através de um programa específico, os dados contidos no arquivo HEX gerado pelo compilador são transferidos para a memória ROM do microcontrolador. Passo 6 : Testes – Aqui são descobertos os erros de lógica que podem ser gerados por um erro de digitação (pontuação incorreta, comando inadequado, esquecimento de linhas, etc...). Esta etapa realimenta o processo, até que os testes efetuados garantam a qualidade do programa criado. Programas recomendados : AMBIENTE ASSEMBLY : MPLAB / COMPILADOR C: CCS (PCW.EXE) / PROGRAMADOR : EPIC (EPICWIN.EXE) Programação – Daniel Corteletti – Aula 2 PARTES MAIS IMPORTANTES DO MICROCONTROLADOR PIC família 16 1) ACUMULADOR Também conhecido por WORK REGISTER. É uma área de 8 bits onde as informações são afetadas por um conjunto de instruções. É onde o processamento ocorre na maioria dos casos. 2) REGISTRADORES (FILE REGISTERS) São áreas de memória RAM que estão ligadas ao funcionamento dos recursos e periféricos do microcontrolador No PIC16F877 a memória ROM é dividida em 4 bancos de memória com 128 posições cada, conforme tabela ao lado (extraída do datasheet do microcontrolador em questão). As áreas de memória marcadas como GENERAL PURPOSE REGISTER são áreas de uso geral (memória RAM livre). Cada uma das demais posições possuem uma função específica. Por exemplo, se gravarmos informações na posição de memória 07h, na tabela identificada como PORTC, estaremos acionando ou desligando bits ligados aos pinos do PORTC. Os registradores PORTA, PORTB, PORTC, PORTD, PORTE (presentes no bank0) são usados para acionar ou ler estados dos pinos. Os registradores TRISA, TRISB, TRISC, TRISD e TRISE (bank1) são usados para definir se os pinos são de entrada ou saída digital de dados. O registrador ADCON1 é utilizado para configurar quantos e quais pinos serão entradas analógicas. O registrador STATUS possue alguns bits que permitem modificar o BANK que pode ser acessado pelas próximas instruções. RESUMINDO O processador do PIC é bastante simples em termos de instruções, e cabe ao software agregar complexidade usando estas instruções existentes. O núcleo do microcontrolador pode mover dados entre os registradores (F) e o registrador principal (W), entre a ROM e o registrador principal. Pode também acionar e desativar bits em quaisquer uma das posições de memória. Devido a sua simplicidade, somente uma operação pode ser executada por vez (ciclo de máquina). Em condições normais de operação, cada ciclo de máquina equivale a 4 ciclos de clock. É possível também, através de registradores especiais, se configurar, disparar, parar e controlar os recursos periféricos do PIC, como PWM, Conversor AD, contadores, timers, comunicação serial, etc... Para conhecer mais sobre os procedimentos de configuração e uso dos recursos do microcontrolador em questão, utilize o DATASHEET do mesmo, ou ainda algum livro sugerido na bibliografia básica da disciplina. Página 6/6