Você está na página 1de 8

PIC MICRO CONTROLADOR 16f628A

TIPOS DE OSCILADORES
Um microcontrolador precisa de um sinal de clock para funcionar e o responsvel por gerar este sinal e o oscilador. Nos PICs 16F84 e 16F628 os pinos que correspondem ao oscilador so os pinos 15 e 16. O pino 15 normalmente a sada e o pino 16 a entrada. Mas, antes de continuarmos com isto, eu pergunto: O que vem a ser Clock? Na prtica um clock um sinal de onda quadrada que serve para fazer um circuito lgico funcionar ou para sincronizar diversos dispositivos ou circuitos. Quando voc v a configurao de um microcomputador e ele tem um processador. P4 de 2,8GHz Quer dizer que o clock do processador tem uma freqncia de 2,8 GHertz ou 2.800 MHz. O nvel alto do clock deve corresponder tenso de alimentao do PIC (+Vcc) e o nvel baixo deve corresponder ao terra. O perodo alto (+Vcc) chamado de Ton e o perodo baixo de Toff. interessante que estes dois perodos sejam iguais. A soma dos dois perodos resulta em T que o perodo total da onda quadrada e pelo qual podemos definir qual a freqncia ou vice-versa. T = Ton + ToFF T = 1 ou F = 1 F T 11 Ao usarmos um cristal de 4MHz teremos uma freqncia de 4MHz e o perodo de: T = 1 = 1 = 250ns ou 250 nano segundos F 4.000,000 Ou 0,000. 000.25 segundos. Agora que j conhecemos o clock, vamos falar sobre ciclo de mquina. 7.1. Ciclo de Mquina: O microcontrolador PIC pega o sinal de clock e o divide internamente por 4. Disto resultam quatro perodos que recebero o nome de: Q1, Q2, Q3 e Q4, cada perodo destes Qs ser igual ao perodo do clock externo, ou seja, 250ns. Podemos tambm dizer que o clock de 4MHz igual freqncia de 1 MHz. Veja: Clock interno = Clock externo = 4MHz = 1MHz 44 O perodo do clock interno ser: T=1=1 F 1MHz T = 1s ou 1 micro segundo ou 0,000. 001 segundos. Para executarmos uma instruo, o PIC precisa passar por Q1, Q2, Q3 e Q4, portanto, uma instruo demora para ser executada, estes 4 tempos somados: Q1 + Q2 + Q3 + Q4 = 250ns + 250ns + 250ns + 250ns = 1s

Vemos, ento que cada instruo demora 1s para ser executada. A forma mais fcil de sabermos o tempo que uma instruo leva para ser executada pegar a freqncia do cristal ou oscilador externo, dividir por 4 e calcular seu perodo. Freqncia da instruo = freqncia do xtal 4 Freqncia da instruo = 4MHz = 1MHz 4 Tempo ou perodo para executar a instruo = 1 = 1s 1MHz O PIC usa um recurso chamado de Pipeline, que faz com que em um ciclo mquina ele busque a instruo e em outro ele a execute. Resumindo, o ciclo de mquina o nome das 4 fases Q1, Q2, Q3 e Q4, e cada instruo executada em um ciclo, pois, enquanto uma executada outra ao mesmo tempo buscada na memria. Isto uma caracterstica da estrutura Harvard que permite o pipeline de uma forma fcil. 12 Voc pode estar pensando que todas as instrues, usando um cristal de 4MHz, demoraro 1s para serem executados, mas, instrues que geram saltos dentro do programa gostam mais de 1s, pois precisam de dois ciclos de mquina. Gastaro, ento, 2s. Voc tambm pode estar pensando que 1s um tempo muito pequeno, mas, se voc for construir, por exemplo, um gerador de barras para monitor ou TV, com um ciclo de mquina de 1s poder ter problemas. O que fazer ento? Usar um PIC 16F628-20, por exemplo. Com um cristal de 20 MHz teremos o perodo de execuo de cada instruo. Freqncia da instruo = 20MHz = 5MHz 4 Perodo para executar a instruo = 1 = 200ns 5MHz ou 200 nano segundos ou 0,000. 000.2 segundos. Desta forma ficou muito mais rpido. Voc no acha? Agora que j vimos osciladores, clocks e ciclos de mquinas vamos ver os tipos de osciladores que estes PICs aceitam. XT cristal ou ressonador com freqncia maior do que 200 kHz e que v at 4MHz. HS cristal ou ressonador com freqncia acima de 4Mhz. Neste caso a freqncia mxima ser definida pelo PIC. LS cristal ou ressonador com freqncia abaixo de 200 khz. Pausa: voc sabia que existem cristais que oscilam em 15 khz? RC_CLKOUT oscilador RC externo que deve estar ligado no pino 16. No pino 15 teremos este sinal dividido por 4. RC_I/O Oscilador externo mais que usa o pino 15 como I/O. Neste caso no teremos no pino 15

Fo 4, pois ou ele faz uma coisa ou outra. Isto s vlido para o PIC 16F28 (*relativo ao PICs que estamos estudando neste livro). INTOSC_I/O oscilador interno com o pino 15 operando como I/O (*s vlido para o 16F28). EC_I/O usado com clock externo e pino 15 funcionando como I/O (*vlido para 16F628). RC usando um circuito RC externo (# vlido para 16F84). LP usando cristal de freqncia abaixo de 200 kHz (# vlido para 16F84). Estes tipos de osciladores recebem estes nomes, pois, com eles que vamos trabalhar ao fazermos nosso software ou ao configurarmos o MPLAB para a gravao. Observe que algumas opes servem para os dois PIC estudados e outra apenas para alguns deles. Para facilitar vemos: * = vlido para PIC 16F628 no nosso estudo. # = vlido para PIC 16F84 no nosso estudo. Reescrever: PIC 16F84 osciladores: XT 13 LP HS RC PIC 16F628 osciladores: XT LS HS RC_CLKOUT RC_I/O INTOSC_I/O INTOSC_CLKOUT EC_I/O Normalmente eu uso na prtica ou no hardware, como queiram, cristais de 4 MHz com capacitores de 15pF. Caso voc use capacitores acima de 33pF com um cristal de 4 MHz o oscilador poder no funcionar adequadamente (o valor da XC ser muito baixo e atenuar muito as oscilaes do cristal). Com cristais de 20 MHz eu uso capacitores de 15pF e nunca tive problemas. Na hora de comprar os capacitores opte por capacitores de disco cermicos ou capacitores plate. No v fazer um software e um hardware que use um cristal de 20 MHz e na hora de gravar o PIC usar opo XT que para cristais de at 4 MHz. Se voc fizer isto, no aparecer erro na gravao, mas, o seu circuito hora funciona, hora no. Eu sei disto na prtica pois tambm erro. Nunca confunda a hardware com o software, quando falamos no componente cristal de 4 MHz ou de 20 MHz no capacitor cermico ou plate, estamos nos referindo ao hardware, a placa de circuito, ao cheiro da solda, a bancada. Quando nos referimos a XT, LP, RC_I/O, entre outros, estamos nos referindo ao software. Mas,

especificamente ao comando ou diretriz que devemos incluir no software para que o projeto funcione. Na prtica, se usarmos no nosso hardware, um componente chamado de cristal, com frequncia de 4 MHz, feito de cristal, envolto por metal e com dois terminais, devemos usar XT no nosso software.

Interrupes
Interrupo de TIMER 0, essa interrupo acontece sempre que um contador de tempo interno, denominado TMR0 (Timer 0), estoura, ou seja, como ele um contador de 8 bits, sempre que passar de 0xFF para 0x00. Ela utilizada normalmente para a contagem de tempo. Como pode acontecer a qualquer momento, a contagem de tempo fica precisa, no dependendo de anlises constantes durante o programa para garantir que o tempo seja contado. Como veremos em exemplos, o TMR0 pode tanto ser incrementado internamente pelo clock da mquina, como tambm por um sinal externo. Neste caso, ele passa a ser um contador de pulsos, podendo ser utilizado para outras finalidades. Interrupo externa (RB0/INT), essa interrupo gerada por um sinal externo ligado a uma porta especfica do PIC, que no caso a porta RB0, caso ela esteja configurada como entrada. Desta maneira, podemos identificar e processar imediatamente um sinal externo. Ela utilizada para diversas finalidades, como, por exemplo, a comunicao entre micros, garantindo o sincronismo, o reconhecimento de boto ou outro sinal do sistema que necessite de uma ao imediata. Essa interrupo acontece ou na borda de subida ou na borda de descida conforme a configurao da mesma. Interrupco por mudana de estado (RB4 a RB7), essa interrupo acontece em ambos os casos, na borda de subida ou na borda de descida, basta haver mudana de estado. Esse tipo de interrupo pode ser utilizado, por exemplo, para criar um sincronismo com a rede de 60 Hz, para o controle de um triac ou outro sistema semelhante. Interrupo de fim de escrita na EEPROM, essa interrupo serve para detectarmos o final de uma rotina de escrita na EEPROM do PIC. A utilizao da interrupo no obrigatria para que a escrita funcione, mas como a EEPROM lenta na hora de escrever, em alguns sistemas a sua utilizao pode ser necessria para evitar uma parada durante a escrita na EEPROM. A interrupo de qualquer um destes eventos pode ser conseguida agindo sobre os bits do registrador INTCON, podemos habilitar ou desabitar esses bits independentemente uns dos outros. A Figura abaixo mostra os bits do INTCON.

Figura 1 - Interrupes do PIC16F628 Registrador INTCON: GIE EEIE T0IE INTE RBIE T0IF INTF RBIF INTE (bit 4) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre a linha RB0 T0IE (bit 5) se este bit estiver em 1 habilitar a interrupo de final de contagem do registrador TMR0 RBIE (bit 3) se este bit estiver em 1 habilitar a interrupo de troca de estado sobre uma das linhas de RB4 a RB7 EEIE (bit 6) se este bit estiver em 1 habilitar a interrupo de final de escrita sobre um endereo da EEPROM GIE (bit 7) bit de habilitao geral de interrupo. Esse bit deve ser setado em 1 antes dos demais. Vetor de Interrupo e Controle de Interrupo (Interrupt vector e Interrupt handler), qualquer que seja o evento habilitado, ao se manifestar, o PIC interrompe a execuo do programa em andamento, memoriza automaticamente no STACK o valor corrente do PROGRAM COUNTER (PC) e pula para a instruo presente no endereo de memria 0004H denominada Interrupt vector (vetor de interrupo). Deste ponto em diante devemos colocar a nossa subrotina de controle denominada Interrupt Handler (controle de interrupo). Pode-se habilitar mais interrupes e, a primeira providncia da interrupt handler a de verificar qual o evento habilitado que gerou a interrupo e a execuo da parte do programa relativo. Este controle pode ser efetuado utilizando a Interrupt flag. Interrupt flag (sinalizador de interrupo), dado que qualquer interrupo gera uma chamada do endereo 04H, no registrador INTCON est presente o flag que indica qual o evento que gerou a interrupo vejamos:

T0IF (bit 2), se for 1 porque ocorreu uma interrupo de TMR0. RBIF (bit 0), se for 1 porque ocorreu uma interrupo de troca de estado de uma das linhas de RB4 a RB7. Como se pode ver a interrupo de final de escrita na EEPROM no tem previsto nenhum flag de sinalizao para que a interrupt handler deva considerar que a interrupo um estado gerado deste evento quando todos os trs flags supra citados iro a 0. Importante: Uma vez conhecido qual o flag que est ativo, a interrupt handler deve zer-lo, ou ento no mais gerar interrupo correspondente. Retorno de uma interrupt handler, quando for gerada uma interrupo o PIC desabilitada automaticamente o bit GIE (global Interrupt Enable) do registrador INTCON de modo a desabilitar todas as interrupes restantes. Para poder retornar ao programa principal e reinicializar em 1 este bit deve-se utilizar a instruo: RETFIE

Exemplo de sistema:
PROJETO : Pisca - Dois Leds DATA : 22/11/2008 ;-----------------------------------------------------------------------------; AUTOR : Maurcio Madeira Oliveira ;-----------------------------------------------------------------------------list p=16F628A ;para qual processador o cdigo ser gerado radix dec ;padro decimal para valores sem identificao include <p16F628A.inc> ;anexa arquivo def.16F628A __CONFIG _CP_OFF & _PWRTE_OFF & _BODEN_OFF & _MCLRE_ON & _INTRC_OSC_NOCLKOUT & _LVP_OFF ;-----------------------------------------------------------------------------; TABELA DE DEFINIES DE RAM E CONSTANTES (defino nomes associados a valores) ;-----------------------------------------------------------------------------x equ 20h ; define varivel auxiliar x no end.20h da RAM (hexadecimal) y equ 21h ; define varivel auxiliar y no end.21h da RAM(hexadecimal) m equ 22h ; define varivel auxiliar m no end.22h da RAM (hexadecimal) ;-----------------------------------------------------------------------------;-----------------------------------------------------------------------------; MEMRIA DE PROGRAMA ;-----------------------------------------------------------------------------org 0 ; define inicio do programa a partir do end. 0h goto incio ; desvia o progrma para o label (rtulo) incio ;-----------------------------------------------------------------------------; INCIO DA ROTINA DE INTERRUPO ;-----------------------------------------------------------------------------org 4 ; sempre inicia no end.4h as interrup.no PIC

; rotinas ............................... retfie ; comando de retorno de interrupo ;-----------------------------------------------------------------------------; INCIO DO PROGRAMA - inicializao do uC ;-----------------------------------------------------------------------------incio: movlw 0 ; registrador w=0 (decimal) movwf INTCON ; registrador INTCON=B'00000000', desabilito todas as interrupoes bcf STATUS, IRP ; clear no bit irp do reg.status, pr-seleciono banco 0 e 1 bcf STATUS, RP1 ; clear no bit RP1 (RP1=0) bsf STATUS, RP0 ; set bit RP0 (RP0=1) com estas duas linhas seleciono o banco 1, onde est o TRISB e TRISA movwf TRISB ; registrador TRISB=0 (B'00000000') , OU SEJA, PINOS DO PORTB CONFIGURADOS COMO SADAS movlw 0FFH ; w=B'11111111' movwf TRISA ; TRISA=B'11111111'pinos configurados como entradas movlw 24 ; w=B'00011000' movwf OPTION_REG ; registrador OPTION_REG=B'00011000', verificar nos livros esta config.c/ estes valores bcf STATUS, RP0 ; clear bit RP0, seleciono banco 0 movlw 0 movwf PORTB ; zero as sadas do PORTB ;-------------------------------------------------------------------------------; programa principal - aplicao ;-------------------------------------------------------------------------------volta: bsf PORTB,0 ; set pino PB0 do PORTB bcf PORTB,1 ; clear pino PB1 call tempo bcf PORTB,0 ; clear PB0 do PORTB bsf PORTB,1 ; set pino PB1 call tempo goto volta ;--------------------------------------------------------------------------------; Rotinas de tempo ;--------------------------------------------------------------------------------tempo: ; incio da rotina de tempo (s/uso dos timers),label de chamada para a funo call ou outra movlw 2 ; onde t1 um valor numrico, base numrica (1uS) ; em uso (decimal, hexa, binrio etc.) movwf x ; varivel x, onde ficara c/ o valor x=t1 (1uS) tempo1: movlw 250 ; onde t2 um valor numrico (1uS) y=250 movwf y ; varvel y, onde y=t2 (1uS) tempo2:

movlw 248 ; onde t3 um valor numrico (1uS) m=248 movwf m ; varvel m, onde m=248 (1uS) tempo3: nop ; queima 1Us,para o clock de 4MHz (1uS) decfsz m ; decrem.z e se m=0 salta prxima instruo (1uS ou 2uS) ; (2uS se saltar ou 1US se no saltar) goto tempo3 ; ir pra o label tempo3 (2uS) decfsz y ; decrem.y e se y=0 salta prxima instruo (1uS ou 2uS) goto tempo2 ; ir pra o label tempo2 (2uS) decfsz x ; decrem.x e se x=0 salta prxima instruo (1uS ou 2uS) goto tempo1 ; ir pra o label tempo1 (2uS) return ; funo de retorno de subrotina ou desvio (2uS) end Bibliografia: http://www.seguidorsolar.com.br/obras/Microcontrolador4.pdf http://www.luizbertini.net/microcontroladores/apostila_pic_16f84_16f628.pdf http://www.ebah.com.br/content/ABAAAAJngAA/apostila-sobre-microcontrolador-pic16f628-prof-eider-lucio-cefet-go?part=6

Você também pode gostar