Ciência da Computação Sistemas Microcontrolados Introdução aos Microcontroladores PIC Prof. Sergio F. Ribeiro Microprocessadores Os microprocessadores são circuitos integrados compostos por diversas portas lógicas que realizam operações matemáticas e lógicas diversas. Os sistemas microprocessados são compostos de dispositivos separados: microprocessador, memória, interface de entrada e saída (compostas por transistores, acopladores ópticos, etc). Mas por que não incluir todos estes dispositivos em um encapsulamento? 2
Microcontroladores A união das memórias com os microprocessadores possibilitou o advento dos microcontroladores. Um microcontrolador é um chip que contém praticamente um pequeno computador embutido, de baixo custo, com: núcleo de processamento memórias RAM, ROM e Flash periféricos de E/S conversores de sinais gerador de clock, entre outros. Os microcontroladores devem possuir uma interface com o ambiente externo para que o desenvolvedor de hardware possa realizar operações diversas, como ligar um relé, acender um LED, ler um sensor, etc. 3 Microcontroladores Microcontroladores são dispositivos voltados a sistemas embarcados e aplicações específicas, ao contrário dos μps, destinados a PCs e aplicações de uso geral. Principais razões da integração das memórias aos μcs: redução do número de pinos do encapsulamento. redução dos custos com componentes externos. diminuição das dimensões da montagem. simplificação do circuito de aplicação. Porém, tal integração tem como desvantagem: limitação da complexidade do programa embarcado, devido ao tamanho reduzido da memória nos μcs. 4
Microcontroladores O microcontrolador é programável toda a lógica de operação é estruturada na forma de um programa e gravada dentro do componente. Os µcs não possuem, geralmente, um sistema operacional. Os programas rodam diretamente no chip. O software que roda no µc é chamado de firmware. O software é programado em linguagens C ou Assembly na maior parte dos casos. A programação é feita com o uso de ferramentas instaladas em um PC (IDE). Um compilador é usado para compilar programas em C, e são conhecidos como cross-compiler (PC µc). 5 Microcontroladores O microcontrolador é provido internamente de memória de programa, memória de dados, portas de I/O, timers, contadores, comunicação serial, PWMs, conversores analógico-digitais, etc. Toda vez que o microcontrolador for alimentado, o programa interno (firmware) será executado. Atualmente, muitos equipamentos de nosso uso diário (eletrodomésticos, vídeo-players, alarmes, celulares, brinquedos, etc.) utilizam microcontroladores para execução de suas funções básicas. 6
Arquitetura Básica de um Microcontrolador 7 Aplicações Típicas Tipicamente, μcs são usados no controle de: periféricos de informática eletrônicos de consumo sistemas de supervisão instrumentação automação robótica 8
Marcas de Microcontroladores Algumas marcas e modelos: ATMEL: ATMEGA, AT91, AT90; Microchip INTEL: MCS51 ou 8051 (vários fabricantes fabricam este modelo, mas a Intel foi a primeira a produzi-lo, em 1977); Microchip: PIC, DSPIC. Freescale (Motorola): 68HC, MPC. Texas Instruments: MSP430, TMS370 9 Os Microcontroladores PIC Os PIC, ou PICmicro, são microcontroladores fabricados pela empresa americana Microchip Technologies. Atualmente, a Microchip é uma das maiores fabricantes mundiais de microcontroladores de 8 bits. Em 2016, a Microchip adquiriu a Atmel (produz µc Atmega do Arduino) por cerca de 4 bilhões de dólares. PIC é uma sigla para Programmable Interface Controller e origina-se no início dos anos 80, quando foi concebido para operar como interface controladora de periféricos. Núcleo composto por uma máquina RISC: as versões mais simples tem apenas 33 instruções. memória segue a arquitetura Havard. 10
Arquitetura Havard x Arquitetura Von Neumann Os microcontroladores PIC apresentam uma estrutura interna do tipo Havard, enquanto muitos µc tradicionais (ex: 8051, ATMega) possuem arquitetura de Von-Neumann. A diferença está na forma como os dados e o programa são processados pelo microcontrolador. Arquitetura Von-Neumann existe apenas um barramento interno por onde passam as instruções e os dados. Arquitetura Havard existem dois barramentos internos (um de dados e outro de instruções). Nos µc PIC, o barramento de dados é sempre de 8 bits, e o de instruções pode ser de 12, 14, 16 ou 32 bits, dependendo do modelo do PIC. 11 Arquitetura Havard x Arquitetura Von Neumann Arquitetura Von-Neumann: Arquitetura Havard: 12
Os Microcontroladores PIC Família de Microcontroladores PIC: 13 Os Microcontroladores PIC Os Microcontroladores PIC de 8 bits São mais de 300 ucs, reunindo desde os mais simples e pequenos (6 pinos) a dispositivos de alta gama, com maior poder de processamento, periféricos e interfaces, chegando a 100 pinos. Dividem-se em 4 categorias, de acordo com a complexidade da aplicação a que se destinam: Baseline Mid-Range Enhanced Mid-Range PIC18 14
Os Microcontroladores PIC PIC 8-bits: Memória de Programa vs N de Pinos 15 Estrutura Interna PIC16F628A ULA diretamente ligada ao registrador W. Memória de programa. Memória de dados (RAM). Portas com todos os seus pinos de I/O. Os periféricos, tais como: EEPROM, timers, comparador interno, módulo CCP e a porta serial. O registrador de status. O contador de programa (PC). Circuitos internos de reset, osciladores, Watchdog Timer (WDT), Power-up e Brown-out internos. 16
Pinagem do PIC16F628A O PIC16F628A possui 18 pinos divididos em terminais de alimentação, de reset, de conexão com o oscilador e os terminais de portas e periféricos. Como o µc possui diversas características e um pequeno número de terminais, muitos terminais possuem mais de uma função. 17 Funções dos Pinos 18
Funções dos Pinos 19 Funções dos Pinos 20
O PIC16F628A O PIC16F628A apresenta as seguintes características: 18 pinos no total, sendo 16 de I/O frequência máxima de operação: 20MHz memória de programa: 2k words (2048 x 14) memória de dados: 224 bytes (224 x 8) memória EEPROM: 128 bytes (128 x 8) comunicação serial: USART 10 fontes de interrupção 3 timers (2 x 8 bits, 1 x 16 bits) 2 comparadores analógicos 1 módulo CCP (capture, compare, PWM) 35 instruções de máquina 21 Ciclos de Máquina Nos µc PIC, o sinal de clock é internamente dividido por 4. Para um clock externo de 4MHz, temos um ciclo interno de 1 MHz e, portanto, cada ciclo de máquina dura 1 µs. A divisão do clock por 4 forma as fases Q1, Q2, Q3 e Q4. Basicamente Q1 envolve a busca de instrução, Q2 a decodificação de instrução, Q3 a execução de instrução e Q4 a escrita do resultado. Esse processamento por fases é conhecido como execução em pipeline. Isso permite que todas as instruções sejam executadas em apenas um ciclo (gasta 1us para um clock de 4MHz) e torna o sistema muito mais rápido. 22
Ciclos de Máquina O diagrama seguinte foi retirado do datasheet do µc, e demonstra, claramente, as divisões dos ciclos nas quatro fases (Q1 a Q4) e o conceito de pipeline. 23 Osciladores Os microcontroladores PIC possuem alguns modos de osciladores disponíveis para operação. Tipos de osciladores: RC RC externo (uso de resistor e capacitor) INTOSC RC interno EC fonte de clock externa HS cristal/ressonador de alta frequência (acima de 4MHz) XT cristal/ressonador de média frequência LP cristal/ressonador de baixa frequência (32kHz) 24
Osciladores RC Externo 25 Osciladores Cristal 26
Organização de Memória São divididas em três tipos: ROM Memória de Programa RAM Memória de Dados EEPROM Memória de Armazenamento Por ser um microcontrolador de arquitetura Havard, o PIC16F628A tem suas memórias de programa e de dados mapeadas separadamente. Este microcontrolador possui ainda uma terceira memória: a memória não-volátil EEPROM. EEPROM são memórias não-voláteis, ou seja, não apagam seu conteúdo quando retira-se a alimentação. 27 Memória de Programa A memória de programa presente no PIC16F628A é do tipo FLASH (sufixo F ) que permite ser gravada/apagada mais de 1000 vezes. No PIC16F628A há o registrador PC (Program Counter) de 13 bits capaz de endereçar um espaço de memória de programa de 2k x 14. Vetor de reset corresponde ao primeiro endereço da memória de programa que será executado quando o PIC começar a rodar. Geralmente o reset aponta para o endereço 0x0000. Vetor de interrupção as rotinas de interrupção serão armazenadas na área de programação. Há um endereço reservado para o início das RTIs (0x0004). 28
Memória de Programa 29 Memória de Dados É uma memória do tipo RAM usada para armazenar todas as variáveis e registradores de forma temporária durante a execução do programa. Essa memória armazena dados de 8 bits e é volátil, ou seja, quando o PIC é desligado, ela é automaticamente perdida. No PIC16F628A, essa memória é de 224 bytes. A memória de dados pode ser lida/escrita em tempo de execução do programa através de diversas instruções. A memória de dados é dividida em quatro bancos contendo os registradores de propósito geral (GPRs, em inglês) e os registradores de função específica (SFRs, em inglês). 30
Memória de Dados 31 Obs: posteriormente voltaremos a estudar memória de dados, mais particularmente sobre os SFRs (registradores de função específica). E veremos como ativar/desativar certas funções do µc alterando os valores dos SFRs (fazer configuração via software). 32
Memória EEPROM A EEPROM é uma memória não-volátil que consegue manter as informações mesmo sem alimentação. É usada para armazenar valores que não podem ser perdidos. É escrita e apagada eletricamente. Se necessário, pode ser usada uma EEPROM externa. No PIC16F628A, a EEPROM tem o tamanho de 128 bytes. 33 Configurações do PIC Alguns recursos do PIC podem ser configurados para aplicações específicas. Dependendo do compilador usado para programar o PIC, estas configurações podem ser feitas direto no programa ou podem ser feitas em uma janela Settings do próprio compilador. Algumas destas configurações são: master clear(mclr) watchdog timer brown out detect power up timer low voltage program código de proteção 34
Master Clear (MCLR) Trata-se de um reset externo. É ativo em nível baixo, ou seja, quando aplicado um nível baixo no pino, ocorre o reinício do programa. No PIC16F628A, o MCLR pode ser ativo, ou não, via software. No PIC16F628A, o MCLR está no RA5 (pino 4). resistor de pull-up 35 Watchdog Timer Watchdog significa cão de guarda. Watchdog Timer é um contador de 8 bits utilizado para verificar se o programa travou. Sua função é reiniciar (reset) o microcontrolador quando ocorre overflow da contagem. Uma vez o WDT ativado, o programa deve estar preparado para limpar o contador do WDT periodicamente. caso contrário, o programa será resetado toda vez que esse contador estourar. 36
Brown Out Detect É um sistema de detecção automática de baixa tensão de alimentação. Tensões configuráveis: 4V ou 2.1V. Caso a tensão de alimentação caia abaixo do valor configurado por mais de 100µs, ocorrerá um reset no software (sistema será reiniciado). 37 Power Up Timer Circuito interno que retarda o início da execução do programa. Garante estabilização da tensão de alimentação. Esta opção irá fazer com que o PIC só comece a operar cerca de 72ms após o pino MCLR ser colocado em nível alto. 38
Low Voltage Program Trata-se do sistema de programação do PIC (gravação de memória de programa) em baixa tensão: 5V. Normalmente, essa programação é habilitada por uma alta tensão (13V) no pino MCLR. Com isso, por meio de baixa tensão, é possível criarmos sistemas onde um PIC possa gravar o programa de outro PIC. 39 Código de Proteção Para a gravação em série, é muito importante que essa opção esteja ativada, pois isso impedirá que qualquer pessoa consiga ler o programa gravado dentro do PIC. Essa é a única proteção que você terá para que ninguém possa copiar o seu sistema. Essa opção impedirá que você leia a memória mas não impedirá que você grave outro programa por cima. 40
Interrupções Uma interrupção serve para interromper o programa imediatamente. As interrupções são ações tratadas diretamente pelo hardware, o que as torna muito rápidas e disponíveis em qualquer ponto do sistema. Quando uma interrupção acontece: o programa é paralisado. o programa guarda, na pilha, o endereço da próxima instrução. ocorre o desvio para um endereço fixo da memória de programa. neste endereço (0x04 no PIC16F628A) uma função específica (definida pelo programador) é executada. e depois o programa continua a ser executado no mesmo ponto em que estava. 41 Interrupções no PIC Existem modelos de PIC que nem possuem interrupções (ex: 12C50X, 16C54). Mas na maioria dos modelos de PIC, as interrupções estão presentes (em maior ou menor número). O PIC16F628A possui 10 tipos de interrupções: 3 relacionadas a timers externa mudança de estado fim de escrita na EEPROM de USART (2) de Comparador e de CCP Veremos agora detalhes de algumas destas interrupções. 42
Interrupções pelos Timers Os timers são registradores que atuam como contadores ou temporizadores. Há três timers no PIC16F628A: timer 0, timer 1 e timer 2. As interrupções pelo timer acontecem sempre que um dos contadores de tempo interno, denominados TMR0 (Timer 0), TMR1 (Timer 1) e TMR2 (Timer 2), estouram. No caso do TMR0, como ele é um registrador de 8 bits, o estouro ocorre sempre que ele passar de 0xFF para 0x00. No caso do TMR1 (registrador de 16 bits), o estouro ocorre sempre que ele passar de 0xFFFF para 0x0000. 43 Interrupções pelos Timers Já para o TMR2, que é também um registrador de 8 bits, a interrupção não acontece necessariamente quando ele estoura o limite de 0xFF, e sim quando ele atinge um valor especificado em outro registrador especial chamado PR2. A interrupção pelo timer é utilizada normalmente para a contagem de tempo. O TMR0 e TMR1 podem ser incrementados internamente tanto pelo clock da máquina como também por um sinal externo. ao usar um sinal externo, os timers passam a ser contadores de pulsos, podendo ser utilizados para outras finalidades. 44
Interrupções pelos Timers Tempo de estouro do timer corresponde ao tempo que o processador leva para ativar uma interrupção pelo timer. Cálculo do tempo de estouro: para o Timer0: TE = (2 8 TMR0) * Prescale * ciclo_de_maquina para o Timer1: TE = (2 16 (TMR1H:TMR1L)) * Prescale * ciclo_maquina para o Timer2: TE = PR2 * Prescale * Postscale * ciclo_de_maquina Obs: TMR0, TMR1H, TMR1L e PR2 são registradores de 8 bits. 45 Interrupção Externa Essa interrupção é gerada por um sinal externo ligado a uma porta específica do PIC, que no caso é o bit RB0 (pino 6), desde que esteja configurada como entrada. A interrupção externa é utilizada para diversas finalidades: comunicação entre microcontroladores, garantindo o sincronismo. reconhecimento de um botão ou outro sinal do sistema que necessite de uma ação imediata. A interrupção externa pode ser configurada para ocorrer na borda de subida ou na borda de descida do pulso. Flag de sinalização da interrupção externa: INTF. Controle de habilitação: INTE. Estas duas flags são encontradas no registrador INTCON. 46
Interrupção por Mudança de Estado Diferentemente da interrupção externa, a interrupção por mudança de estado ocorre tanto na borda de descida como na borda de subida. Essa interrupção, por sua vez, está ligada ao nibble mais significativo da porta B, ou seja, RB4, RB5, RB6 e RB7 simultaneamente. Por isso, se esses pinos forem configurados como entrada, a mudança de estado em qualquer um deles irá gerar a interrupção. Esse tipo de interrupção pode ser utilizado para verificação de uma rede de sensores conectada a esses pinos. Flag sinalizador desta interrupção: RBIF. Habilitação: RBIE. 47 Interrupção de Fim de Escrita na EEPROM Como foi visto anteriormente, alguns PICs possuem uma memória EEPROM interna. Essa interrupção serve para detectarmos o final de uma rotina de escrita nessa memória. A utilização da interrupção não é obrigatória para que a escrita funcione, mas, como a EEPROM é lenta na hora de escrever, em alguns sistemas sua utilização pode ser necessária para evitar uma parada durante a escrita na EEPROM. 48
Interrupção de Comparador Uma vez que o PIC16F628A possui dois comparadores internos, estes poderão ser utilizados de forma totalmente independente do programa, ou de forma mista. No último caso, o resultado da comparação poderá ser analisado pelo programa para a tomada de decisões. Para facilitar ainda mais esta função, a interrupção do comparador pode ser utilizada para avisar o sistema sempre que houve uma mudança de estado na resposta da comparação. 49 Interrupções de USART USART significa Universal Synchronous Asynchronous Receiver Transmitter. O PIC16F628A possui um sistema completo (via hardware) para comunicação serial do tipo USART, por meio do protocolo RS-232. Este sistema facilita todo o processamento para entrada e saída de dados seriais. Este sistema possui duas interrupções para informar o programa quando um dado foi recebido e quando a transmissão de outro dado já foi terminada. 50
Interrupção de CCP O módulo CCP (Capture, Compare e PWM) possui uma interrupção para informar ao programa uma das duas situações possíveis: fim da captura (Capture) fim da comparação (Compare) O modo Capture pode ser utilizado para contar o tempo (TMR1) entre duas mudanças de estado de uma entrada específica (T1CKI). com isso podemos implementar, por exemplo, um periodímetro. Já como Compare, podemos comparar o valor de TMR1 com o especificado em outro registrador especial (CCPR1). desta forma podemos monitorar a quantidade de pulsos na entrada relacionada ao TMR1 (T1CKI). 51