You are on page 1of 57

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof.

Joo Luis Sanches

2 A FAMLIA DOS MICROCONTROLADORES PIC A seguir ser abordada uma discusso relativa aos microcontroladores da famlia PIC 18fxx31, visto que existem vrias famlias de microcontroladores para as mais diversas aplicaes. 2.1 Introduo A famlia de microcontroladores PIC 18fxx31 caracterizada pela alta performance computacional a um custo relativamente baixo comparado a outros projetos utilizando microcontroladores possibilitando ento uma boa relao custo-benefcio no desenvolvimento de um sistema de automao. Dentre seus diversos perifricos podemos ressaltar os seguintes: Mdulo de controle de Modulao por Largura de pulso com insero de tempo de banda morta (Dead Time) programvel. Mdulo de realimentao de movimento com capacidade para medio de posicionamento e velocidade atravs de Encoder incremental, captura de borda para medio de largura de pulso. Conversor Analgico Digital de 10 bits de alta velocidade. Mltiplas opes de fonte de clock. Controle de otimizao de consumo de energia. Canais de comunicao serial. As caractersticas descritas acima possibilitam ao usurio de microcontroladores desenvolver uma infinidade de projetos como, por exemplo, controle de velocidade e posio de eixos, fontes chaveadas, equipamentos de instrumentao e outras aplicaes no segmento de automao industrial. Outras caractersticas importantes desta famlia de microcontroladores so as opes de trabalho em modo de gerenciamento de energia. Esta possibilidade permite que o projetista reduza de maneira bem significativa o consumo de energia do produto favorecendo aplicaes alimentadas por baterias. Outra caracterstica importante dos microcontroladores PIC a conectividade. Os microcontroladores PIC 18fxx31 possuem dois mdulos de comunicao serial, o mdulo SSP ( Synchronous Serial Port ) ou Porta Serial Sncrona que programa um mdulo de comunicao serial sncrona do tipo Mestre Escravo, e existe tambm o mdulo EUSART (Enhanced Universal Synchronous Asynchronous Receiver Transmitter) ou mdulo receptor e transmissor sncrono e assncrono que possibilita o usurio a implementar vrios tipos de comunicao inclusive para leitura de memrias externas como cartes SD e outros dispositivos.

14

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Os microcontroladores PIC podem ser encontrados nos principais tipos de encapsulamentos existentes no mercado, sendo o de aplicao mais comum o encapsulamento DIP.

15

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

2.2 ARQUITETURA DO MICROCONTROLADOR PIC-18FXX431 A figura a seguir ilustra a arquitetura interna dos microcontroladores PIC-18f2x31

Figura 2.1: Diagrama de blocos da arquitetura do microcontrolador PIC 18fXX31

16

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

2.2.1 OSCILADOR Os microcontroladores PIC podem trabalhar basicamente com trs fontes de clock tendo cada uma delas caractersticas prprias de funcionamento. Os blocos osciladores dividemse em osciladores primrios, secundrios e bloco oscilador interno. Os osciladores primrios so aqueles conectados aos pinos OSC1 e OSC2 que podem ser malhas de circuito RC, bloco oscilador interno, cristais e ressonadores. Os osciladores secundrios so aqueles que no so conectados aos pinos OSC1 e OSC2. Estes osciladores podem continuar funcionando mesmo quando o microcontrolador estiver trabalhando em modo de gerenciamento de energia. Os microcontroladores da famlia PIC18fxx31 oferecem apenas o Timer1 como oscilador secundrio. O tipo de oscilador a ser utilizado pode ser programado no registrador de configurao do dispositivo durante o momento de gravao do chip. Neste captulo ser discutido apenas o mdulo oscilador interno do microcontrolador, pois este ser utilizado em todas as nossas aplicaes apenas por uma questo prtica para programarmos os prottipos o que no impede o usurio de utilizar as outras fontes de clock. Deixa-se ento como sugesto um estudo mais aprofundado sobre osciladores, a consulta ao datasheet do microcontrolador. As caractersticas de utilizao e operao do oscilador interno devem ser configuradas no registrador OSCCON como mostra a figura a seguir:
Registrador 2.1 R/W-0 R/W-0
IDLEN bit 7 IRCF2 bit 6

R/W-0
IRCF1 bit 5

R/W-0
IRCF0 bit 4

R(1)
OSTS bit 3

R-0
IOFS bit 2

R/W-0
SCS1 bit 1

R/W-0
SCS0 bit 0

Bit 7 Habilita o modo Idle 1= Modo Idle habilitado. A CPU no recebe sinal de clock quando em modo de gerenciamento de energia. 0= Modo Idle desabilitado. A CPU recebe sinal de clock quando em modo de gerenciamento de energia. Bit 6-4 Bits IRCF2:IRCF0: (Internal Oscillator Frequency Select Bits) Bits de seleo de frequncia do oscilador interno.
1 1 1 1 0 0 0 0 1 1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 8 MHz ( Modo oscilador sem diviso de freqncia (direto)) 4 MHz 2 MHz 1 MHz 500 kHz 250 kHz 125 kHz 31 kHz (Mdulo oscilador RC interno direto)

17

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Bit 3 OSTS: Oscillator Start-up Time-out Status bit (Bit de Status do temporizador de estabilizao do sinal de clock). 1= tempo de estabilizao expirou, oscilador primrio est funcionando. 0= tempo de estabilizao no expirou, oscilador ainda no est pronto. Bit 2 IOFS: INTOSC Frequency Stable Bit Bit de estabilidade de freqncia do modo oscilador RC interno. 1= Freqncia do oscilador interno estvel. 0= Freqncia do oscilador interno no est instvel. Bit 1-0 SCS1:SCS0: System Clock Select bits Bits de seleo do clock do sistema. 1x = Bloco oscilador interno selecionado (Modo RC) 01 = Oscilador do Timer 1 ( Modo Secundrio ) 00 = Oscilador primrio.
Nota 1: Depende do estado do bit IESO no registrador de configurao 1H. Legenda: R: Bit de leitura - n: Valor de RESET W: Bit de escrita 1: Bit setado u: Bit no implementado (lido como 0) 0: Bit zerado x: Valor desconhecido

Para configurarmos o registrador OSCCON em um desejado valor, basta faze-lo no prprio programa de usurio. Quando trabalhando em linguagem C basta escrever a seguinte instruo. ... OSCCON=0x72; ... A instruo acima configura o microcontrolador para trabalhar com o modo oscilador interno na freqncia de 8 MHz. 2.2.1.2 Configurao do oscilador no processo de gravao do microcontrolador. No processo de gravao do microcontrolador devemos tambm indicar no ambiente de desenvolvimento qual o tipo de oscilador utilizado, para realizar este procedimento no MPLAB 7.40 devemos clicar no menu ConfigureConfiguration Bits e aparecer a tela a seguir.

18

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Figura 2.2(a): Tela de configurao da palavra de configurao do microcontrolador

Clicando na coluna Setting em cima da categoria Oscillator, demostrado um conjunto de possibilidades de seleo de osciladores.

Figura 2.2(b): Opes de escolha do oscilador.

Vale lembrar que para nossas aplicaes escolheremos sempre entre a opo IN RC-Port on RA6,Port on RA7 que significa a seleo de oscilador interno com os pinos RA6 e RA7 liberados para funcionar como pinos de Entrada/Sada. 2.2.2 PORTAS DE E/S (ENTRADA/SADA) DIGITAL Como em todos os microcontroladores, com o objetivo de reduzir tamanho e quantidade de pinos em um chip, os microcontroladores da famlia PIC se utilizam do compartilhamento de funes de seus pinos. Sendo assim um mesmo pino pode ser utilizado como entrada analgica ou Entrada/Sada Digital, ou ainda um pino pode ser usado como tenso de referncia de um conversor Analgico Digital ou como pino de Entrada/Sada Digital. Este captulo demonstrar como configurarmos os pinos do microcontrolador como Entrada/Sada Digitais e sua utilizao na resoluo de situaes problema utilizando microcontroladores tendo sempre como base o compilador C18 da Microchip. 2.2.2.1 Caractersticas dos pinos de E/S Dependendo do dispositivo selecionado e as caractersticas disponveis, existem at 5 PORTs disponveis nos microcontroladores da famlia PIC. Alguns pinos de E/S so multiplexados com funes alternativas dependendo dos perifricos disponveis. Em geral, quando um perifrico habilitado, o respectivo pino no deve ser utilizado como E/S de uso geral. Cada PORT possui trs registradores para seu controle. Esses so:

19

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Registrador TRIS (registrador de direo do pino). Registrador PORT (escreve ou l dados na porta). Registrador LAT (latch de sada). A figura 2.3 mostra um esquema simplificado de um pino de PORT de E/S.

Figura 2.3: Estrutura de um circuito dos pinos de Entrada/Sada

Analisando a figura 1.15, podemos observar que dois flip-flops que funcionam como latches controlam o nvel lgico e as funes de entrada ou sada do pino. Quando configuramos o pino como entrada ou sada digital, devemos escrever um dado no registrador TRISx. Uma escrita neste registrador, faz com que o hardware gere um sinal de transio negativa no clock do flip-flop TRIS Latch, este ento copia o valor presente no barramento de dados para a sada do referido flip-flop. Observando a sada do flip-flop descrito, possvel notar que ele habilita ou desabilita a sada do flip-flop de dados DATA Latch. Portanto, se o respectivo bit do registrador TRISx for igual a 1, quando a instruo de escrita em TRISx for executada, o buffer de conexo entre o pino e o latch de dados colocado em alta Impedncia configurando ento o respectivo pino como entrada. Qualquer instruo de leitura no registrador PORTx habilita o terceiro flip-flop e copia o dado presente no pino para o barramento de dados principal do microcontrolador. Caso seja carregado um nvel lgico 0 em um bit do registrador TRISx, este copiado para a sada do flip-flop TRIS Latch e por conseqncia habilita o buffer de conexo entre o Latch de dados e o pino de sada do microcontrolador. Sendo assim, qualquer escrita no registrador PORTx, o hardware habilita o flip-flop DATA Latch que por sua vez copia este dado para o pino atravs do buffer. 20

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

2.2.2.2 Configurao do PORTA, para e/s digital Para configurarmos os pinos do PORTA como E/S digitais, devemos primeiramente configurar o registrador ANSEL0, que determina a opo dos pinos como entradas analgicas ou digitais uma vez que esta porta multiplexada com os mdulos analgicos. Para configurarmos o registrador ANSEL0 para que os pinos do PORTA funcionem como E/S digitais, devemos escrever em seu respectivo bit o nvel lgico 0.
ENTRADA/SAIDA DIGITAL ENTRADA ANALGICA 0 1 S

PINO DO MICROCONTROLADOR

ANSx
Figura 2.4: Estrutura de configurao do PORTA como entrada analgica ou como E/S digital

Exemplo: ANSEL0 Analog Select Register


Registrador 2.2 ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0

ANSEL0 =0x0f; // configura o registrador ANSEL0 de forma que os bits RA4:RA7 funcionem como E/S digital, e os demais funcionem como entrada analgica. ANSEL0bits.ANS0=0; // Configura o pino somente o pino RA0 para funcionar como E/S Digital. Observao: Os pinos RA6 e RA7 podem ser configurados como E/S digitais somente se trabalharem com oscilador interno, pois estes pinos so compartilhados com as entradas de oscilador externo. Uma vez configurado o registrador ANSEL0 devemos configurar o registrador TRISA que define quais pinos funcionaro como entradas e quais funcionaro como sada. O registrador responsvel para configurao do PORTA como Entrada ou Sada o TRISA, cada bit desse registrador, corresponde a um bit do PORTA. Se carregarmos nvel lgico 0 no bit 0 do TRISA0, configuramos o pino RA0 para funcionar como sada digital. E se carregarmos com 1 o referido pino funcionar como entrada Digital. Exemplo:
TRISA=0xC3;//Configura os pinos RA7,RA6,RA1,RA0 como entrada e os pinos RA5,RA4,RA3,RA2 como sada. TRISAbits.TRISA2=1; // Configura somente o pino RA2 como sada digital.

21

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Desta maneira devemos proceder para qualquer configurar qualquer PORT de Entrada / Sada do microcontrolador PIC. 2.2.2.3 Configurao do PORTB, para E/S digital Antes de comentarmos sobre a configurao do PORTB, vamos discutir algumas peculiaridades desta porta de dados. O PORTB possui as seguintes caractersticas: Multiplexao com as sadas em modulao por largura de pulso (PWM). Resistores de PULL-UP internos habilitados por software. Possibilidade de gerao de interrupo por mudana de estado no PORTB. Cada uma das caractersticas especficas descritas ser tratada em detalhes posteriormente. Mas agora trataremos da configurao do PORTB para funcionar como Entrada ou Sada digital. O PORTB uma porta bidirecional de 8 bits. O registrador de direo dos pinos do PORTB o registrador TRISB, colocando novel lgico 1 em um bit do registrador TRISB, este configura o respectivo bit do PORTB para funcionar como entrada, isto , coloca o driver de sada em alta impedncia fazendo com que este pino possa ser ligado a uma fonte de tenso externa para que seu nvel de tenso possa ser lido e posteriormente processado. Exemplo: TRISB=0xAA; // Configura os pinos RB7,RB5,RB3 e RB1 como entrada e os pinos RB6, RB4, RB2 e RB0 //como sada. TRISBbits.TRISB7=0; // Configura apenas o bit RB7 como sada (Configurao por bit). Uma caracterstica importante do PORTB que este possui resistores de PULL-UP internos que podem ser ativos atravs do bit RBPU localizado no bit 7 do registrador INTCON2 sendo este ativo em nvel lgico zero. Uma vez configurado o PORTB como entrada ou sada o acesso a leitura e/ou escrita nos pinos se faz direto pelo registrador PORTB. Veja alguns exemplos a seguir.
... TRISB=0x03; // Configura RB0 e RB1 como entrada e os demais pinos como sada. if (PORTBbits.RB0&&PORTBbits.RB1) // Se os dois pinos estiverem com nvel //lgico igual a 1 { PORTB=0xC0; // Seta somente os pinos RB7 e RB6.

22

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

} else { } ...

// Caso RB0 ou RB1 estejam em nvel lgico zero. PORTB=0x30; //Seta somente os pinos RB5 e RB4.

Observe no trecho de programa acima que embora a instruo escreva o dado nos oito bits de maneira simultnea somente os bits que esto configurados como sada sofrem a alterao de estado em seus pinos, pois os que esto configurados como entrada esto com seus drivers de sada em alta impedncia. 2.2.2.3 Configurao do PORTC, para E/S digital O PORTC no difere das outras portas de E/S no que se refere s configuraes destes como entrada ou sada digital. Para configurarmos seus pinos basta carregar o respectivo contedo em seus registradores TRISC e PORTC. A diferena bsica desta porta de dados est no circuito eletrnico de entrada tendo esta porta entradas do tipo Shmitt Trigger sendo acionado por tenses entre 0,2VDD para tenso mnima e 0,8VDD para a mxima tenso. O diagrama de blocos do PORTC demonstrado na figura a seguir.

Figura 2.5: Diagrama do circuito interno do pino RC0.

Alm desta caracterstica, o PORTC tambm compartilha seus pinos com demais perifricos que sero abordados futuramente.

23

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

2.2.2.4 Configurao do PORTD, para E/S digital Para configurarmos o PORTD como entrada ou sada digital, os registradores que devemos configurar so o TRISD e o PORTD para escrita e/ou leitura e posterior processamento. O PORTD tambm possui funes compartilhadas com outros perifricos em seus pinos, porm as configuraes sero abordadas nas discusses posteriores sobre os perifricos. 2.2.2.5 Configurao do PORTE, para E/S digital O PORTE uma porta de 4 bits sendo que os pinos RE0/AN6, RE1/AN7 e RE2/AN8 so configurados individualmente como entradas analgicas ou Entrada/Sada digital. E seus registradores de configurao so o TRISE, o ANSEL0 bits 6 e 7, e o ANSEL1 bit 0. O pino RE3/Vpp/MCLR s pode ser configurado como entrada digital. Sua configurao est no bit de controle denominado MCLRE no registrador CONFIG3H bit 7 que o bit de habilitao do reset externo. Este pino pode ser configurado durante o processo de gravao utilizando o MPLAB no menu ConfigureConfiguration Bits e altere a opo Mster Clear Enable. 2.2.3 EXERCCIOS RESOLVIDOS

2.2.3.1 Escreva uma linha de cdigo em linguagem C para o compilador C18 que configure um microcontrolador PIC 18F2431 para trabalhar com o oscilador interno na freqncia de 4MHz. Soluo Para resolvermos este problema devemos configurar o registrador OSCCON (Registrador 2.1) O bit 7 do registrador OSCCON s relevante para aplicaes no modo de gerenciamento de energia, portanto para a soluo do exerccios consideramos este como zero j que no estamos trabalhando em modo de gerenciamento de enrgia. Os bits IRCF2:IRCF0 para 4 MHz devem ser preenchido com 110. Os bits 2 e 3 so bits somente de leitura, portanto permanecero com zero. O bit SCS1 deve estar em 1 para habilitar o microcontrolador funcionando com oscilador interno. Portanto configuramos o registrador com o seguinte valor:

24

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

IDLEN

IRCF2

IRCF1

IRCF0

OSTS

IOFS

SCS1

SCS0

A linha de comando pode ser uma das seguintes:


... OSCCON=0b01100010;// Carga do registrador com notao em binrio. ... ou ... OSCCON=0x72; ... ou ... OSCCONbits.IRCF2=1;//Configurao do registrador bit a bit. OSCCONbits.IRCF1=1; OSCCONbits. SCS1=1; ...

2.2.3.2 Elabore uma funo em linguagem C que configure todos os dispositivos de Entrada/Sada digitais necessrios para o correto funcionamento do sistema demonstrado na figura a seguir.
+5VCC

DS2 10 9 8 5 4 2 3 7 a b c d e f g DP Dpy Red-CC A A 1 6 10 9 8 5 4 2 3 7

DS1 a b c d e f g DP Dpy Red-CC A A 1 6 33 34 35 36 37 38 39 40

U1 RB0/PWM0 RB1/PWM1 RB2/PWM2 RB3/PWM3 RB4/KBI0/PWM5 RB5/KBI1/PWM4/PGM RB6/KBI2/PGC RB7/KBI3/PGD RC0/T1OSO/T1CKI RC3/T0CKI/T5CKI/INT0 RC2/CCP1/FLTB RC1/T1OSI/CCP2/FLTA RC4/INT1/SDI/SDA RC5/INT2/SCK/SCL RC6/TX/CK/SS RC7/RX/DT/SDO RD0/T0CKI/T5CKI RD1/SDO RD2/SDI/SDA RD3/SCK/SCL RD4/FLTA RD5/PWM4 RD6/PWM6 RD7/PWM7 RE0/AN6 RE1/AN7 RE2/AN8 MCLR/VPP/RE3 AVDD VDD 15 18 17 16 23 24 25 26 19 20 21 22 27 28 29 30 8 9 10 1 11 32

S0

S1

R2 10K

R3 10K

Q1 BC-548

R6 100K

Q2 BC-548

2 3 4 R7 5 100K 6 7 14 13

GND D1 R4 470 Ohm D2 R1 10K R5 470 Ohm GND

RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CAP1/INDX RA3/AN3/VREF+/CAP2/QEA RA4/AN4/CAP3/QEB RA5/AN5/LVDIN OSC2/CLKO/RA6 OSC1/CLKI/RA7

12 31 GND

AVSS VSS PIC18F4431-I/P

Figura 2.6

Soluo: Para configurarmos o PORTA devemos alterar valores dos registradores ANSEL0 e do registrador TRISA. O registrador ANSEL0 poder ser carregado diretamente com zero visto que no existe nenhuma entrada analgica no circuito proposto. Observamos que apenas os pinos RA0 e RA1 esto sendo utilizados como sadas digitais, portanto os bits TRISA0 e TRISA1 devero ser carregados com nvel lgico zero. Para configurarmos o PORTC devemos observar que os pinos RC0 e RC3 esto sendo utilizados como entrada e os pinos RC4 e RC7 como sada, portanto os bits TRISC4 e 25

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

TRISC7 devero ser carregados com nvel lgico zero e os bits TRISC0 e TRISC3 devero ser carregados com nvel lgico 1. E por fim o PORTB est todo sendo utilizado como sada devendo portanto o registrador TRISB estar com todos os seus bits iguais a zero.
Bit 7 Registrador ANSEL0 X(1) TRISA X TRISB 0 TRISC 0 Nota 1: X = Irrelevante Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0

X X 0 X

X X 0 X

X X 0 0

X X 0 1

X X 0 X

0 0 0 X

0 0 0 1

Portanto a funo pode ser escrita da seguinte maneira:

void Config_ES(void) { ANSEL0bits.ANS0=0; ANSEL0bits.ANS1=0; TRISAbits.TRISA0=0; TRISAbits.TRISA1=0; TRISB=0; TRISCbits.TRISC7=0; TRISCbits.TRISC4=0; TRISCbits.TRISC3=1; TRISCbits.TRISC0=1; }

Observaes: importante lembrar que o valor de reset para os registradores TRISx e ANSx sempre 1. Portanto haveria necessidade de configurar somente os bits que necessitam de nvel lgico 0. 2.2.3.3 Considerando o esquema eltrico da figura 2.6, elabore um programa para que a cada pulso na chave S1, o LED L1 mude seu estado. Soluo: O fluxograma de contexto que representa a situao proposta pode ser modelado da maneira a seguir:

26

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

INICIO

CONFIGURAR PORTAS DE E/S

INICIALIZAR PORTAS DE E/S

N N
INVERTE ESTADO DE L1

S1 PRESSIONA DA?

S
ATRASO DE 250 Ms APROX.

S1 PRESSIONA DA?

S 1

Analisando o fluxograma proposto devemos observar que logo no incio devemos configurar alguns registradores para a correta inicializao do dispositivo, esses registradores so os seguintes: OSCCON Configura o oscilador que o microcontrolador trabalhar. Admitindo uma freqncia de trabalho em 8MHz com oscilador interno, o valor a ser carregado no registrador deve ser 72h. TRISC Configura os pinos de entrada e sada solicitados para funcionar o projeto. Devemos apenas carregar nvel lgico 0 no bit TRISC3 do registrador. Considerando que todos os componentes estejam instalados durante o funcionamento do sistema, importante lembrar que se carregarmos os registradores por byte devemos lembrar que no podemos carregar nvel lgico 0 nos bits do registrador TRISx que possuam dispositivos de entrada conectados em seus pinos. Para gerarmos o atraso para a realizao do debounce da chave S1, utilizaremos a funo Delay10KTCYx ( ) que se localiza no arquivo delays.h da biblioteca de funes do

27

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

compilador C18. Esta funo gera atrasos em mltiplos de 10000 vezes o tempo de um ciclo de instruo. Este tempo depende do valor fornecido como parmetro para a funo que pode ser de 1 at 255. Devemos lembrar que o tempo de um ciclo vale o equivalente a quatro pulsos de clock, trabalhando a 8MHz, este tempo de 0,5s multiplicado por 10000 temos 5ms. Para sabermos o valor a ser inserido como parmetro para a funo basta dividirmos o tempo total de atraso desejado pela base de tempo gerada pela funo.
N= t TOTAL 250[ms ] = N = 50 t base 5[ms ]

Portanto o parmetro de entrada para a funo dever ser 50. O cdigo fonte para a soluo do problema pode ser descrito como segue:
//----------------------------------------------------------------------#include<p18f2431.h> #include<delays.h> void main() { OSCCON=0x72; TRISCbits.TRISC4=0;//Configura RC4 como sada (L1) TRISCbits.TRISC3=1;//Confirma RC3 como entrada PORTCbits.RC4=0;//Inicializa L1 desligado while(1) { while(!PORTCbits.RC3);//Aguarda S1 ser pressionada Delay10KTCYx(50);//Atraso de 250ms if(!PORTCbits.RC3) continue;//Se RC3 for zero volta para o //inicio do lao while(PORTCbits.RC3); PORTCbits.RC4=!PORTCbits.RC4;//Inverte estado de L1 } } //----------------------------------------------------------------------

28

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

2.2.3.4 Dado o circuito da figura 2.7, para que o motor M1 entre em funcionamento quando a tecla S1 for pressionada e desligue quando a tecla S0 for pressionda.

+5VCC U1 11 12 13 24 25 26 27 28 2 3 4 5 6 10 9 8 19 RC0/T1OSO/T1CKI RC1/T1OSI/CCP2/FLTA RC2/CCP1/FLTB RB3/PWM3 RB4/KBI0/PWM5 RB5/KBI1/PWM4/PGM RB6//KBI2/PGC RB7/KBI3/PGD RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CAP1/INDX RA3/AN3/VREF+/CAP2/QEA RA4/AN4/CAP3/QEB OSC2/CLKO/RA6 OSC1/CLKI/RA7 AVSS VSS PIC18F2431-I/SP RB0/PWM0 RB1/PWM1 RB2/PWM2 RC3/T0CKI/T5CKI/INT0 RC4/INT1/SDI/SDA RC5/INT2/SCK/SCL RC6/TX/CK/SS RC7/RX/DT/SDO 21 22 23 14 15 16 17 18

R F1

S F2

T F3 Fusveis

S0

S1

F4

+24VCC

K1
R1 470R Optoisolador GND U2

Contator Tripolar

F4
GND

Rel de Sobrecarga

R3 10K

R4 10K

R5 10K

MCLR/VPP/RE3 AVDD VDD

1 7 20

R2 10K

+5VCC

M3~

GND

Figura 2.7: Sistema de partida de motor controlado por microcontrolador

Soluo: Primeiramente faremos o fluxograma de funcionamento do sistema proposto.


FLUXOGRAMA DE CONTEXTO
INICIO

FLUXOGRAMA TECNOLGICO
INICIO

CONFIGURAR PORTAS DE

TRISB10

INICIALIZAR PORTAS DE

RB10

S0 PRESSIONADA OU F4 ABERTO?

S1 PRESSIONADA E F4 FECHADO?

RC0=0 ou RC2=0?

RC1=1 e RC2=1?

S
RB10

S
RB11

DESLIGA M1.

LIGA M1.

Observaes: Veja que para ligar o motor necessrio que o contator de potncia tenha seus contatos fechados. Estes contatos so fechados atravs da bobina que por sua vez excitada atravs 29

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

da saturao do transistor do fotoacoplador. Analisando o diodo do fotoacoplador possvel observar que este polarizado atravs de um sinal em nvel lgico 1 (TTL) vindo do pino RB1 do microcontrolador. Portanto, para ligarmos o motor basta setar o pino RB1 do microcontrolador. importante observar tambm que o boto S0 do tipo normalmente fechado, e para verificarmos se o mesmo est pressionado, devemos verificar se existe nvel lgico 0 no pino RC0. O cdigo fonte proposto a seguir pode resolver a situao demostrada.
#include<p18f2431.h> void main() { OSCCON=0x72;//Configura osc. interno de 8MHz p/ microcontrolador TRISCbits.TRISC0=1;//Configura pino RC0 como entrada TRISCbits.TRISC1=1;//Configura pino RC1 como entrada TRISBbits.TRISB1=0;//Configura pino RB1 como sada PORTBbits.RB1=0;//Inicializa sada de controle do motor while(1) { if((!PORTCbits.RC0)||(!PORTCbits.RC2)) PORTBbits.RB1=0;// Desliga M1 else { if((PORTCbits.RC1)&&(PORTCbits.RC2)) PORTBbits.RB1=1;//Liga M1 } } }

2.2.3.5 Reescreva o programa do exerccio 2.2.3.4 construindo uma funo com o nome Config_Sys ( ) que contenha todas as instrues de configurao e inicializao do algoritmo.
#include<p18f2431.h> /***********************************************************************/ /* Declarao da funo de configurao e inicializao */ /***********************************************************************/ void Config_Sys(void) { OSCCON=0x72;//Configura osc. interno de 8MHz p/ microcontrolador TRISCbits.TRISC0=1;//Configura pino RC0 como entrada TRISCbits.TRISC1=1;//Configura pino RC1 como entrada TRISBbits.TRISB1=0;//Configura pino RB1 como sada PORTBbits.RB1=0;//Inicializa sada de controle do motor } /***********************************************************************/ /* Funo principal */ /***********************************************************************/ void main() {

30

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Config_Sys();//Chamada para a funo while(1) { if(!PORTCbits.RC0)//Verifica se S0 est sendo pressionado PORTBbits.RB1=0;// Desliga M1 else { if(PORTCbits.RC1) PORTBbits.RB1=1;//Liga M1 } } } /***********************************************************************/ /* FIM DO CDIGO */ /***********************************************************************/

2.2.3.6 Considerando a figura 2.7, elabore um programa em linguagem C para que a cada vez que a chave S1 for pressionada o motor funcione por 3 segundos e depois desligue. Soluo: A esta altura j temos um slido conhecimento nas configuraes dos pinos de Entrada/Sada digital do microcontrolador PIC que utilizamos como base em nossos projetos. Neste exerccio chamamos a ateno do leitor para a utilizao das rotinas de gerao de atraso j que neste exerccio precisamos gerar um atraso aproximadamente de quatro segundos. J sabemos do exerccio 2.2.3.3 que o compilador C18 possui em sua biblioteca padro um conjunto de funes para gerao de atraso. Naquele exerccio gervamos atrasos de 250 milisegundos para um eliminador de bounce. Agora temos que gerar um atraso de 4 segundos. Pois bem, para isso faremos a chamada da funo utilizada no exerccio 2.2.3.3 8, porm agora com parmetro de entrada igual a 100 gerando ento 500 milisegundos de atraso. Chamaremos esta funo 8 vezes atravs de um lao de repetio para conseguirmos obter os 4 segundos desejados. Observe o fluxograma a seguir.

31

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches Delay_4_seg ( )

X 0

Funo em linguagem C
X<8

N S

Delay10KTCYx (100)

X X+1

void Delay_4_seg(void) { int x=0; while(x<8) { Delay10KTCYx(100); x++; } }

FIM

Segue abaixo o fluxograma principal.


INICIO

TRISC1 1 TRISB1 0

RC1=1?

S
RB1 1

Delay_4_seg ( )

RB1 0

32

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Observe que neste fluxograma j existe a chamada para a funo de atraso de 4 segundos (Delay_4_seg ( )). A seguir apresenta-se o cdigo fonte em linguagem C que transcreve o fluxograma proposto.
/**********************************************************************/ #include<p18f2431.h> #include<delays.h> /**********************************************************************/ /* Funo Delay_4_seg( )para gerar atraso de 4 segundos aprox. */ /**********************************************************************/ void Delay_4_seg(void) { int x=0; while(x<8) { Delay10KTCYx(100);//Gera atraso de 500 mS aprox. x++; } } /**********************************************************************/ /* Incio da Funo Principal */ /**********************************************************************/

void main() { OSCCON=0x72; TRISCbits.TRISC1=1; TRISBbits.TRISB1=0; while(1) { if(PORTCbits.RC1==1) { PORTBbits.RB1=1; Delay_4_seg(); PORTBbits.RB1=0; } } } /***********************************************************************/ / FIM DO CDIGO */ /***********************************************************************/

33

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

2.2.3.7 O controle de descida da faca de uma prensa feito atravs dos componentes representados no diagrama de blocos da figura 2.8. Baseado no diagrama pede-se.
RB2 RB3 RB4 S1 S2 RB5 RB6 RB7 VS1 VS2

B1

PIC 18F4431 RB1

B2

B3

Figura 2.8: Sistema Eletro hidrulico

a) Elaborar o diagrama eltrico completo do sistema considerando os dados fornecidos a seguir. Bobinas da vlvula: 12VCC Chaves fim de curso: Contatos Normalmente Abertos. Botoeiras: Contatos Normalmente Abertos. Pedal: Contato Normalmente Aberto. b) Elaborar o fluxograma e o programa em linguagem C para que o sistema funcione obedecendo os critrios descritos a seguir. A faca somente poder descer se o operador estiver com as duas botoeiras (B1 e B2) acionadas e o pedal tambm acionado. Caso o acionamento do pedal seja interrompido e as duas botoeiras permaneam acionadas simultaneamente, a faca dever permanecer parada enquanto o acionamento do pedal estiver interrompido. Caso o operador libere o acionamento de qualquer uma das botoeiras, a faca dever subir at o seu limite superior (fim se curso S1 acionado). Toda vez que a faca descer at o fim de seu curso (fim de curso S2 acionado), esta dever retornar a sua posio de repouso. Soluo: Item a) A figura 2.9 apresenta uma possvel soluo para o problema proposto.

34

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Observe que todos os elementos sensores do circuito so de contato normalmente aberto conectados ao microcontrolador atravs de resistores de PULL DOWN, tal informao importante para a construo do algoritmo pois desta maneira podemos concluir que todos os elementos so ativos em nvel lgico alto. importante observar tambm o circuito de interface para a sada, pois temos fotoacopladores e rels que proporcionam uma melhor proteo do microcontrolador atravs da isolao galvnica entre a bobina do rel e o pino do microcontrolador.

5V

24V

B1

B2

B3

S1

S2 RB3 RB2 RD1 RB7

VDD R6 RB5

D1

D2

VS1 PIC 18F2431 A1

VS2

R7 RB6 RB4

R1

R2

R3

R4

R5

VSS

A2

Figura 2.9: Circuito eletroeletrnico proposto para a soluo do exerccio 2.2.3.7

35

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Item b) O fluxograma a seguir representa o contexto de funcionamento do circuito.

INICIO

CONFIGURAR PORTAS DE E/S

INICIALIZAR SADAS

Botes pressionados

S
PARAR

SUBIR

Pedal pressionado?

S
Totalmente avanado?

Totalmente recuado?

S S
PARAR

N
DESCER

A seguir, o mesmo fluxograma representando os elementos tecnolgicos utilizados.

36

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

INICIO

TRISBCFh

RB40 RB50

RB6 e RB7 =1?

S
RB50

RB50 RB41

RB1=1 ?

S
RB3=1 ?

RB2=1 ?

S S
RB40

N
RB51

O cdigo fonte proposto a seguir pode implementar o modelo lgico proposto segundo o fluxograma.

37

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

/***********************************************************************/ /* CDIGO FONTE DO EXERCCIO 2.2.3.7 */ /***********************************************************************/ #include<p18f2431.h> void main() { OSCCON=0x72; TRISB=0xCF; PORTBbits.RB4=0; PORTBbits.RB5=0; while(1) { if((PORTBbits.RB6==1)&&(PORTBbits.RB7==1)) { if(PORTBbits.RB1==1) { if(PORTBbits.RB3==1)goto SOBE; PORTBbits.RB5=1; } else { PORTBbits.RB5=0; } } else { SOBE: while(PORTBbits.RB2==0) { PORTBbits.RB5=0; PORTBbits.RB4=1; } PORTBbits.RB4=0; } } } /***********************************************************************/ / FIM DO CDIGO */ /***********************************************************************/

Observe que na soluo existe um salto goto para um rtulo denominado de SOBE, isto foi necessrio devido a um desvio imposto pelo fluxograma. 2.2.3.8 Dado o esquema a seguir, elaborar um programa em linguagem C para que faa varredura das teclas do teclado matricial e quando um tecla detectada, seu valor dever ser armazenado em um vetor de dados at que a tecla ENTER seja pressionada. Quando esta for pressionada, o nmero formado pelo teclado dever ser armazenado, a funo dever retornar o nmero digitado.

38

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches
R2 10K 1 2 3 4 21 22 23 24 25 26 27 28 6 7 8 2 3 4 5 6 10 9 8 19 0 , ENTER GND U1 RB0/PWM0 RB1/PWM1 RB2/PWM2 RB3/PWM3 RB4/KBI0/PWM5 RB5/KBI1/PWM4/PGM RB6//KBI2/PGC RB7/KBI3/PGD RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CAP1/INDX RA3/AN3/VREF+/CAP2/QEA RA4/AN4/CAP3/QEB OSC2/CLKO/RA6 OSC1/CLKI/RA7 AVSS VSS PIC18F2431-I/SP RC0/T1OSO/T1CKI RC1/T1OSI/CCP2/FLTA RC2/CCP1/FLTB RC3/T0CKI/T5CKI/INT0 RC4/INT1/SDI/SDA RC5/INT2/SCK/SCL RC6/TX/CK/SS RC7/RX/DT/SDO MCLR/VPP/RE3 11 12 13 14 15 16 17 18 1 R1 1K 7 20 +5VCC

R3 10K 5

R4 10K 9 GND

AVDD VDD

Figura 2.10: Esquema de microcontrolador com teclado matricial.

Analisando o esquema proposto, possvel observar que as colunas devero ser energizadas e as linhas devero ser lidas conforme a tabela de endereos a seguir.
ELEMENTO DA MATRIZ PINO DO MICROCONTROLADOR COLUNA1 RB3 COLUNA2 RB4 COLUNA3 RB5 COLUNA4 RB6 LINHA1 RB0 LINHA2 RB1 LINHA3 RB2 Tabela 2.2: Relao dos elementos da matriz do teclado com os pinos do microcontrolador

2.2.4 TEMPORIZADOR/CONTADOR Os temporizadores /contadores, nada mais so do que contadores binrios de 8 ou 16 bits com fonte de clock parametrizada pelo programador. Os pulsos vindos da fonte de clock incrementam o contador de acordo com sua parametrizao, e ao limite da contagem (overflow) um flag setado e dependendo da configurao pode gerar interrupo para futuro tratamento ou no. Os microcontroladores da famlia PIC podem possuir at quatro tipos de timers para utilizao em diversas aplicaes. 2.2.4.1 O mdulo TIMER0

39

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

O TIMER0 um contador/temporizador que possui as seguintes caractersticas: Mdulo de 8 ou 16 bits selecionvel por software; Fonte de clock interna ou externa, possibilitando a leitura de eventos de temporizao externos. Quando selecionada a fonte de clock interno, a freqncia de entrada igual fOSC/4. Seleo de borda para o clock externo. As figuras 2.10 e 2.11 mostram os diagramas de blocos do TIMER0 com detalhes e seus respectivos bits de controle. O registrador T0CON um registrador de leitura e escrita que controla todas as funes do TIMER0, incluindo prescaler e fonte de clock. T0CON: TIMER0 CONTROL REGISTER (REGISTRADOR DE CONTROLE DO TIMER0)
Registrador 2.3

bit 7: TMR0ON: Bit de controle On/Off do TIMER0 1= Habilita a contagem do TIMER0. 0= Para a contagem. bit 6: T016BIT: Bit de controle do modo de operao com 16 bits 1= O TIMER0 configurado como contador/temporizador de 8 bits. 0= O TIMER0 configurado como contador/temporizador de 16 bits. bit 5: T0CS: Bit de controle da fonte de clock. 1= Habilita fonte de clock Externa (pino T0CKI). 0= Habilita fonte de clock interna fOSC/4 bit 4: T0SE: Bit de controle da borda de transio do sinal de clock externo. Se configurado para funcionar com fonte de clock interna, este bit no possui significado. 1= Incrementa o contador em transio negativa no pino T0CKI. 0= Incrementa o contador em transio positiva no pino T0CKI. bit 3: PSA: Bit de controle do Prescaler do TIMER0. 1= Prescaler desabilitado. 0= Contador operando com prescaler na fonte de clock com valor dependente do nvel lgico dos bits T0PS2,T0PS1 e T0PS0 como mostra a tabela a seguir: bit 2-0 T0PS2:T0PS0: Bits de seleo do prescaler do TIMER0. 0 0 0 = 1:2 0 0 1 = 1:4 0 1 0 = 1:8 0 1 1 = 1:16 1 0 0 = 1:32

40

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

1 0 1 = 1:64 1 1 0 = 1:128 1 1 1 = 1:256 Tabela 2.1

Figura 2.10 Diagrama de blocos do bloco Temporizador / Contador 0

Figura 2.11 Diagrama de blocos do Contador/Temporizador 0 no modo de 16 bits.

Funcionamento do TIMER0 O TIMER0 pode funcionar como contador ou temporizador. Para configurarmos o modo temporizador, devemos colocar nvel lgico 0 no bit T0CS e o timer passa a funcionar como temporizador com fonte de clock de fCLOCK/4. Se um valor inscrito no registrador TMR0, o incremento perdido nos dois prximos ciclos de instruo. O usurio pode contornar este problema escrevendo um valor ajustado ao registrador TMR0.

41

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

O modo contador selecionado colocando-se um nvel lgico alto no bit T0CS. Nessa configurao o registrador TMR0 ter seu contedo incrementado em toda borda de subida ou descida no pino RC3/T0CKI, A borda depende da configurao presente no bit T0SE. Quando a fonte de clock do sistema externa, importante que essa fonte seja sincronizada com o a fase interna do sinal de clock (Tosc). Tambm existe um atraso entre a borda de descida do sinal e o incremento do registrador aps a sincronizao. De qualquer forma todas estas caractersticas, no influem de forma significativa onde o controle de tempo no requer extrema preciso. Prescaler O mdulo temporizador/contador 0 possui ainda um contador de 8 bits funcionando como prescaler. Este contador no pode ser lido ou escrito. Este contador de realizar a diviso da freqncia do sinal de incremento do registrador TMR0 permitindo uma melhor aplicabilidade do mdulo temporizador/contador. Os bits PSA e T0PS2:T0PS0 determinam a utilizao e a taxa de diviso de freqncia do sinal de incremento. Para habilitarmos a utilizao do prescaler, basta colocarmos nvel lgico baixo no bit PSA conforme as figuras (2.10 e 2.11). Quando o prescaler habilitado, a taxa de diviso selecionada conforme a tabela 2.1. Quando qualquer instruo de acesso ao registrador TMR0 for executada, o contador do prescaler automaticamente resetado, porem no ir desabilitar o prescaler. Importante: A habilitao do prescaler feita totalmente por software e pode ser alterada durante a execuo do programa do usurio. Interrupo do TIMER0 A interrrupo do TIMER0 gerada quando ocorre transbordo (overflow) no registrador TMR0. Para o modo de 16 bits a transio ocorre no valor FFFFh para 0000h e no modo de 8 bits ocorre no valor FFh para 00h. Na ocorrncia do transbordo, o bit TMR0IF vai para nvel lgico alto. A interrupo pode ser habilitada ou no atravs do bit TMR0IE. Sempre que ocorrer um flag de transbordo do TIMER0, o bit TMR0IF deve ser setado por software durante o tratamento da interrupo antes de habilitar o timer novamente. Leitura e escrita no modo de 16 bits. O registrador TMR0H no o registrador de byte mais significativo do registrador TMR0 do temporizador/contador TIMER0 (vide fig. 2.2), mas sim um buffer auxiliar para carga do byte mais significativo do registrador TMR0 quando este est no modo de 16 bits. O 42

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

registrador TMR0H sempre atualizado com o byte mais significativo de TMR0 quando uma instruo de leitura no registrador TMR0L realizada. A escrita no byte mais significativo do TMR0 deve sempre passar pela carga do registrador TMR0H. E para efetivamente carregarmos o byte mais significativo do TMR0 com o contedo de TMR0H necessria uma instruo de escrita em TMR0L. Os registradores envolvidos na configurao e no funcionamento do TIMER0 so:
Nome TMR0L TMR0H INTCON T0CON TRISA GIE/GIEH TMR0ON RA7(1) Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor em POR,BOR xxxx xxxx 0000 0000 INT0IF T0PS1 RBIF T0PS0 0000 000x 1111 1111 1111 1111 Valor durante RESET uuuu uuuu 0000 0000 0000 000u 1111 1111 1111 1111 Registrador de byte menos significativo do mdulo TIMER0 Registrador de byte mais significativo do mdulo TIMER0 PEIE/GIEL T016BIT RA6(1) TMR0IE T0CS INT0IE T0SE RBIE PSA TMR0IF T0PS2

Direo da porta de dados

Tabela 2.2 Legenda: x= No reconhecido; u= No alterado. Nota 1: RA6 e RA7 so habilitados como pino de E/S dependendo do modo selecionado para a fonte de clock na palavra de configurao do dispositivo.

Exemplo de aplicao do TIMER0 Tomando como base o circuito a seguir, elaborar um programa que responda de forma que toda vez que a chave S1 for acionada, o led conectado a sada permanea por 1 segundo ligado e em seguida desliga aguardando mais um pulso na chave. Dados: Clock Interno de 8 MHz
+ 5V

+ 5V

VDD + 5V R1 S1 RA4 VSS

R2 RB0

PIC 18f2431

R3

Figura 2.12 Soluo: Primeiramente determina-se o valor de carga do registrador TMR0 (TMR0H E TMR0L) f OSC 4 , onde P.S o fator de diviso do prescaler. f TIMER = P.S 43

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Observao: Se o prescaler no estiver sendo utilizado o valor de P.S um. Utilizando o prescaler fazendo a diviso por 128 temos:

f TIMER

(8 *10 4 )15625[Hz] =
6

128

N (CARGA) = 65536 txf (TIMER ) = 65536 1segx15625 = 65536 15625 = C 2 F 7h

portanto, o valor a ser carregado no registrador TMR0H C2h e o valor a ser carregado no registrador TMR0L F6h. Agora devemos construir um fluxograma de funcionamento da rotina proposta.
INICIO

ANSEL0.4 0 TRISA.4 1 TRISB.0 0 T0CON 0x06 INTCON 0

TMR0H=0xC2; TMR0L=0xF7; RB0 0

RA4=0?

N
RB0 1 TMR0ON 1

TMR0IF=0

N
TMR0IF 0 TMR0ON 0

44

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

De posse do fluxograma, o prximo passo elaborarmos o programa em linguagem C baseado no compilador C18 da Microchip. Cdigo Fonte em C
/***********************************************************************/ /* CDIGO FONTE DO EXERCCIO 2.2.4.6 */ /***********************************************************************/ #include<p18f2431.h> /***********************************************************************/ /*Funo config_SYS() uma fo auxiliar para a configurao do */ /* microcontrolador */ /***********************************************************************/ void config_SYS(void) { OSCCON=0x72;/*Configura o registrador para que o microcontrolador trabalhe com oscilador interno de 8MHz*/ ANSEL0bits.ANS4=0;/*Configura o pino RA4 para trabalhar como E/S digital.*/ TRISAbits.TRISA4=1;/*Configura pino RA4 como entrada digital*/ TRISBbits.TRISB0=0;/*Configura o pino RB0 como sada digital*/ T0CON=0x06;/*Configura timer0 para funcionar em modo 16bits com prescaler 1:128/* INTCON=0;/*Desabilita interrupes e zera o flag do timer0*/ } /***********************************************************************/ /* Incio da funo principal main() */ /***********************************************************************/ void main() { config_SYS();//Chama a rotina funcionamento do sistema. while(1) { TMR0H=0xC2; TMR0L=0xF6; PORTBbits.RB0=1; while(PORTAbits.RA4); PORTBbits.RB0=0; T0CONbits.TMR0ON=1; while(!INTCONbits.TMR0IF); INTCONbits.TMR0IF=0; T0CONbits.TMR0ON=0; } } /***********************************************************************/ /* FIM DO PROGRAMA */ /***********************************************************************/

de

configurao

inicial

de

45

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

2.2.5 EXERCCIOS PROPOSTOS 2.2.5.1 Qual deve ser o valor carregado no registrador T0CON para configurar o TIMER0 no modo de 8 bits funcionando com prescaler 1:128 e fonte de clock interno.? 2.2.5.2 Considerando as configuraes do exerccio anterior e freqncia de clock de 8 MHz, qual deve ser a freqncia do sinal de flag TMR0IF gerado se os valores iniciais de carga do registrador TMR0L forem: a) 0, b) 100, c) 80. 2.2.5.3 Descreva as caractersticas de configurao do TIMER0 se o contedo carregado no registrador T0CON for: a) 0x06, b) 0x78, c) 0x70. 2.2.5.4 Elabore um fluxograma e o seu respectivo programa em linguagem C para que uma forma de onda quadrada com freqncia de 1kHz seja gerada no pino RB1 do microcontrolador PIC 18f4431 durante o momento em que a chave S1 que est conectada atravs de um resistor de pull-down no pino RB0 estiver fechada. Dados: f(OSC)=4MHz, timer0 operando no modo de 16 bits. 2.2.5.5 Elabore o fluxograma e o programa em linguagem C para que os motores mostrados no esquema proposto pela figura 2.4 entrem em funcionamento na seqncia (M1,M2,M3,M4) aps um pulso dado na chave S1 obedecendo um intervalo de 5 segundos para cada motor. Aps um pulso na botoeira S0, os motores devero ser desligados. Dados: f(OSC)=8MHz, timer0 operando no modo de 16 bits.

46

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches
+5V +24V BARRAMENTO TRIFSICO 220V R
7

T F1
DRIVER 1

S0

S1
25 RB4

VDD RB0 21
R1 R2

F2 F3
START/STOP

M1

26
R9 R10

RB5

RB1

22

RB2

23

PIC 18F2431

RB3

24 F4 F5 F6
START/STOP
R3 R4

DRIVER 2

M2

F7 VSS 8
R5 R6

DRIVER 3

F8 F9
START/STOP

M3

F10 F11 F12

DRIVER 4

M4
START/STOP

R7

R8

Figura 2.13 Diagrama do sistema de controle de partidas consecutivas de motores.

47

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

2.2.6 INTERRUPO Interrupo um evento externo ou interno que obriga o microprocessador ou microcontrolador a parar o processamento do programa principal temporariamente para atender uma rotina de maior prioridade. Estes eventos podem ser overflow de temporizadores/contadores, mudanas de estado em algum pino do microcontrolador, e outros eventos que sero descritos a seguir. Na ocorrncia da interrupo o processamento direcionado para um endereo de memria de programa especfico denominado de vetor de interrupo que depende do evento de interrupo que gerado. A partir deste endereo temos a rotina de tratamento de interrupo ou um salto para uma rotina de tratamento de interrupo caso esta esteja em outro endereo da memria de programa. Aps o tratamento da interrupo, uma instruo especfica de retorno de interrupo faz com que o fluxo de execuo do programa retorne para o ponto que estava sendo executado antes da ocorrncia da interrupo. A figura a seguir ilustra o esquema de tratamento de uma interrupo em um sistema microprocessado.
VETOR_DE_INTERRUPO: INCIO_DA_ROTINA_PRINCIPAL: SALTO PARA ROTINA DE TRATAMENTO INSTRUO1; INSTRUO2; ... ... ... . . . OCORRNCIA DO EVENTO DE INTERRUPO ... INSTRUON;

ROT_TRATAMENTO_INTERRUPO: INSTRUO1; INSTRUO2; ... ... ... INSTRUON; RETORNO_DE_INTERRUPO;

Latncia de Interrupo A latncia de interrupo definida como o tempo decorrido entre o evento de interrupo (tempo em que o flag setado), e o incio do tratamento desta (salto para o vetor de interrupo).

48

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Na famlia de microcontroladores PIC 18fXX31, as interrupes sncronas (geralmente internas) so de aproximadamente um ciclo de instruo enquanto que as interrupes assncronas (geralmente externas) podem levar de 2 4 ciclos de instruo Estrutura de interrupes nos microcontroladores PIC 18FXX31 A figura a seguir mostra um diagrama lgico da estrutura de interrupes dos microcontroladores PIC da famlia 18FXX31.

Figura 2.15: Estrutura de interrupes dos microcontroladores PIC 18FXX31

Analisando a estrutura mostrada na figura 2.15 possvel observar que os microcontroladores desta famlia possuem dois nveis de prioridade de interrupo em que o usurio pode configurar atravs dos registradores de interrupo que sero discutidos posteriormente. Para cada nvel de prioridade podemos habilitar interrupo dos seguintes perifricos: TIMER0; PSP (Parallel Slave Port) Porta paralela escrava; Conversor A/D; Recepo de dados da EUSART; 49

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Mudana de estado no PORTB; Pino INT0; Pino INT1; Pino INT2.

Para o esquema proposto de interrupes temos dois vetores que se localizam no endereo 0008h da memria de programa para interrupes de alta prioridade e o endereo 0018h para interrupes de baixa prioridade. Para utilizarmos qualquer interrupo devemos habilitar o bit GIEL ou GIEH dependendo da prioridade desejada. Para cada fonte de interrupo temos 3 bits sendo dois de configurao e um de flag da interrupo. Para configurarmos uma interrupo devemos habilitar a fonte de interrupo e definir a prioridade. Quando ocorre a interrupo o flag desta ativo provocando ento a para da CPU para atendimento do evento de interrupo ocorrido. importante lembrar que aps o tratamento da interrupo o flag deve ser resetado por software atravs do programa de usurio. Registradores Existem treze registradores para controle de interrupo dos microcontroladores PIC 18FXX31. Estes registradores so: RCON INTCON INTCON2 INTCON3 PIR1,PIR2,PIR3 PIE1,PIE2,PIE3 IPR1,IPR2,IPR3 Registrador 2.4 INTCON

Bit 7: GIE/GIEH: Bit de habilitao geral Quando IPEN =0: 1=Habilita todas as interrupes no mascaradas. 0=Desabilita todas as interrupes. Quando IPEN=1: 1= Habilita todas as interrupes em prioridade alta. 0= Desabilita todas as interrupes em prioridade alta.

50

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Bit 6: PEIE/GIEL: Bit de habilitao da interrupo de Perifricos Quando IPEN =0: 1= Habilita todas as interrupes de perifricos no mascaradas. 0= Desabilita todas as interrupes de perifricos. Quando IPEN=1: 1= Habilita todas as interrupes de perifricos em prioridade baixa. 0= Desabilita todas as interrupes de perifricos em prioridade baixa. Bit 5: TMR0IE: Bit de habilitao de interrupo do TIMER 0 1=Habilita a interrupo do TIMER 0. 0=Desabilita a interrupo do TIMER 0. Bit 4: INT0IE: Bit de habilitao da interrupo do pino externo INT0 1= Habilita interrupo externa INT0. 0= Desabilita interrupo externa INT0. Bit 3: RBIE: Bit de habilitao de interrupo por mudana de estado no PORTB 1= Habilita interrupo por mudana de estado no PORTB. 0= Desabilita interrupo por mudana de estado no PORTB. Bit 2: TMR0IF: Flag de estouro do TIMER0 1= Ocorreu overflow no TIMER0. 0= No ocorreu overflow no TIMER0 (operando normalmente). Bit 1: INT0IF: Flag de interrupo externa no pino INT0 1= Interrupo no pino INT0 ocorreu. 0= Interrupo no pino INT0 no ocorreu. Bit 0: RBIF: Flag de interrupo por mudana de estado no PORTB 1= Pelo menos um dos pinos de RB4 a RB7 mudou de estado. 0= No houve mudana de estado nos pinos de RB4 a RB7. Registrador 2.5 INTCON2

Bit 7: RBPU: Bit de habilitao dos resistores de pull-up do PORTB 1= Todos os resistores de pull-up esto desabilitados. 0= Resistores de pull-up esto habilitados. Bit 6: INTEDG0: Bit de seleo da borda de atuao da interrupo INT0 1= Interrupo ocorre na borda de subida. 0= Interrupo ocorre na borda de descida. Bit 5: INTEDG1: Bit de seleo da borda de atuao da interrupo INT1 1= Interrupo ocorre na borda de subida. 51

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

0= Interrupo ocorre na borda de descida. Bit 4: INTDG2 Bit de seleo da borda de atuao da interrupo INT2 1= Interrupo ocorre na borda de subida. 0= Interrupo ocorre na borda de descida. Bit 3: No Implementado (lido como 0) Bit 2: TMR0IP: Bit de seleo de prioridade de interrupo do TIMER0 1= Alta prioridade. 0= Baixa prioridade. Bit 1: No Implementado (lido como 0) Bit 0: RBIP: Bit de seleo de prioridade de interrupo por mudana de estado no PORTB 1= Alta prioridade. 0= Baixa prioridade. Registrador 2.6 INTCON3

Bit 7: INT2IP: Bit de seleo de prioridade de interrupo externa INT2 1= Alta prioridade. 0= Baixa prioridade. Bit 6: INTIP: Bit de seleo de prioridade de interrupo externa INT1 1= Alta prioridade. 0= Baixa prioridade. Bit 5: No Implementado (lido como 0) Bit 4: INT2IE: Bit de habilitao da interrupo externa INT2 1= Habilita interrupo externa INT2. 0= Desabilita interrupo externa INT2. Bit 3: INT1IE: Bit de habilitao da interrupo externa INT1 1= Habilita interrupo externa INT1. 0= Desabilita interrupo externa INT1. Bit 2: No Implementado (lido como 0) Bit 1: INT2IF: Flag de ocorrncia de interrupo no pino INT2 1= Ocorrncia de interrupo no pino INT2. 0= No ocorreu interrupo no pino INT2. Bit 0: INT1IF: Flag de ocorrncia de interrupo no pino INT1 1= Ocorrncia de interrupo no pino INT1. 0= No ocorreu interrupo no pino INT1. 52

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Registrador 2.7 PIR1 (Peripheral Interrupt Request)

Bit 7: No Implementado (lido como 0) Bit 6: ADIF: Flag de ocorrncia de interrupo do conversor A/D 1= Uma converso A/D acaba de ser concluda. 0= Converso A/D no est concluda. Bit 5: RCIF: Flag de ocorrncia de interrupo por presena de dados no buffer de recepo da USART 1= O buffer de recepo da USART RCREG est cheio. 0= O buffer de recepo da USART RCREG est vazio. Bit 4: TXIF: Flag de ocorrncia de interrupo de transmisso de dados atravs da USART 1= O buffer de transmisso da USART TXREG est vazio ( Registrador resetado quando o existe uma escrita no registrador TXREG). 0= O buffer de transmisso da USART TXREG est cheio. Bit 3: SSPIF: Flag de interrupo da porta de comunicao serial sncrona 1= A transmisso e/ou recepo foi completa. 0= Aguardando uma operao de recepo ou transmisso. Bit 2: CCP1IF: Flag de interrupo do mdulo CCP1 Modo de captura: 1= Uma captura no registrador TIMER1 ocorreu. 0= Nenhuma captura no registrador TIMER1 ocorreu. Modo de comparao: 1= O valor de TMR1 se igualou ao valor de CCPR1. 0= O valor de TMR1 est diferente do valor de CCPR1. Mdulo de PWM: No utilizado neste modo. Bit 1: TMR2IF: Flag de estouro do TIMER2 1= Ocorreu overflow no TIMER2. 0= No ocorreu overflow no TIMER2 (operando normalmente). Bit 0: TMR1IF: Flag de estouro do TIMER1 1= Ocorreu overflow no TIMER1. 0= No ocorreu overflow no TIMER1 (operando normalmente).

53

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Registrador 2.8: PIR2

Bit 7: OSFIF: Flag de interrupo por falha no clock do sistema 1= Clock do sistema falhou, entrada de clock foi chaveada para o oscilador interno. 0= Clock do sistema operando normalmente. Bit 5:6: No implementado (lido como 0) Bit 4: EEIF: Flag de interrupo da operao da EEPROM ou Flash. 1= Uma operao de escrita foi concluda. 0= Uma operao de escrita no foi concluda ou ainda no foi iniciada. Bit 3: No implementado (lido como 0) Bit 2: LVDIF: Flag de interrupo por deteco de baixa tenso 1= Tenso da fonte caiu a um nvel de tenso abaixo do especificado. 0= Tenso da fonte superior ao nvel de baixa tenso especificado. Bit 1: No implementado (lido como 0) Bit 0: CCP2IF: Flag de interrupo do mdulo CCP2 Modo de captura: 1= Uma captura no registrador TIMER1 ocorreu. 0= Nenhuma captura no registrador TIMER1 ocorreu. Modo de comparao: 1= O valor de TMR1 se igualou ao valor de CCPR1. 0= O valor de TMR1 est diferente do valor de CCPR1. Mdulo de PWM: No utilizado neste modo. Registrador 2.9: PIR3

Bit 7:5: No implementado (lido como 0) Bit 4: PTIF: Flag de interrupo da base de tempo do temporizador do mdulo PWM 1= O contador de base de tempo do mdulo PWM atingiu o valor do registrador PTPER. Interrupo enviada dependendo dos ajustes do postscaler. 0= O contador de base de tempo do mdulo PWM no atingiu o valor do registrador PTPER.

54

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Bit 3: IC3DRIF: Flag de interrupo por captura de borda ou de mudana de direo do contador POSCNT Mdulo de Captura de borda habilitado (IC1): 1= Valor do registrador TMR5 foi capturado por uma borda na entrada CAP3. 0= Valor do TMR5 no foi capturado. Mdulo de quadratura de encoder habilitado: 1= Direo de rotao foi modificada. 0= Direo de rotao no foi modificada. Bit 2: IC2QEIF: Flag de interrupo do mdulo de captura de borda CCP2 ou por alcance do valor mximo do registrador de posio. Mdulo de Captura de borda habilitado (IC2): 1= Valor do registrador TMR5 foi capturado por uma borda na entrada CAP2. 0= Captura do TIMER5 no foi capturado. Mdulo de quadratura de encoder habilitado: 1= O registrador de posio POSCNT atingiu o valor mximo especificado em MAXCNT. 0= O registrador de posio POSCNT no atingiu o valor mximo especificado em MAXCNT.

Bit 1: IC1IF: Flag de interrupo do mdulo de captura IC1 Mdulo IC1 habilitado: 1= Valor do registrador TMR5 foi capturado por uma borda na entrada CAP1. 0= Valor do TMR5 no foi capturado. Mdulos de quadratura de encoder e medio de velocidade habilitados: 1= Valor do TIMER5 foi capturado atravs de uma borda ativa na entrada de medio de velocidade (terminais QEA e QEB). 0= Valor do TIMER5 no foi capturado. Bit 0: TMR5IF: Flag de interrupo do TIMER5 1= Base de tempo do TIMER5 alcanou o valor de PR5. 0= Base de tempo do TIMER5 no alcanou o valor de PR5. Registrador 2.10 PIE1 (Peripheral Interrupt Enable)

Bit 7: No implementado (lido como 0) Bit 6: ADIE: Bit de habilitao da interrupo do conversor A/D 55

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

1= Habilita interrupo do conversor A/D. 0= Desabilita interrupo do conversor A/D. Bit 5: RCIE: Bit de habilitao da interrupo de recepo do canal serial. 1= Habilita interrupo de recepo serial. 0= Desabilita interrupo de recepo serial. Bit 4: TXIE: Bit de habilitao da interrupo de transmisso do canal serial. 1= Habilita interrupo de transmisso serial. 0= Desabilita interrupo de transmisso serial. Bit 3: SSPIE: Bit de habilitao da interrupo da interface serial sncrona. 1= Habilita interrupo da interface serial sncrona. 0= Desabilita interrupo da interface serial sncrona. Bit 2: CCP1IE: Bit de habilitao da interrupo do mdulo CCP1. 1= Habilita interrupo do mdulo CCP1. 0= Desabilita interrupo do mdulo CCP1. Bit 1: TMR2IE: Bit de habilitao da interrupo do TIMER2. 1= Habilita interrupo do TIMER2. 0= Desabilita interrupo do TIMER2. Bit 0: TMR1IE: Bit de habilitao da interrupo do TIMER1. 1= Habilita interrupo do TIMER1. 0= Desabilita interrupo do TIMER1.

Registrador 2.11 PIE2

Bit 7: OSFIE: Bit de habilitao de interrupo por falha do oscilador. 1= Habilitado. 0= Desabilitado. Bit 6-5:No implementado (lido como 0) Bit 4: EEIE: Bit de habilitao de interrupo de escrita na EEPROM. 1= Habilitado. 0= Desabilitado. Bit 3: No implementado (lido como 0) Bit 2: LVDIE: Bit de habilitao de interrupo de deteco de baixa tenso. 1= Habilitado.

56

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

0= Desabilitado. Bit 1: No implementado (lido como 0) Bit 0: CCP2IE: Bit de habilitao da interrupo do mdulo CCP2. 1= Habilita interrupo do mdulo CCP2. 0= Desabilita interrupo do mdulo CCP2. Registrador 2.12 PIE3

Bit 7-5:No implementado (lido como 0) Bit 4: PTIE: Bit de habilitao de interrupo da base de tempo do mdulo PWM. 1= Habilitado. 0= Desabilitado. Bit 3: IC3DRIE: Bit de habilitao da interrupo por captura de borda ou de mudana de direo do contador POSCNT Mdulo de Captura de borda habilitado (IC1): 1= Habilitado. 0= Desabilitado. Mdulo de quadratura de encoder habilitado: 1= Habilitado. 0= Desabilitado. Bit 2: IC2QEIE: Bit de habilitao da interrupo do mdulo de captura de borda CCP2 ou por alcance do valor mximo do registrador de posio. Mdulo de Captura de borda habilitado (IC2): 1= Habilitado. 0= Desabilitado. Mdulo de quadratura de encoder habilitado: 1= Habilitado. 0= Desabilitado. Bit 1: IC1IE: Bit de habilitao da interrupo do mdulo de captura IC1 1= Interrupo do mdulo IC1 habilitada. 0= Interrupo do mdulo IC1 desabilitada. Bit 0: TMR5IE: Bit de habilitao da interrupo do TIMER5. 1= Habilita interrupo do TIMER5. 0= Desabilita interrupo do TIMER5.

57

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Registrador 2.13 IPR1 (Peripheral Interrupt Priority)

Bit 7: No implementado (lido como 0) Bit 6: ADIP: Bit de habilitao de prioridade de interrupo do conversor A/D. 1= Alta prioridade. 0= Baixa prioridade. Bit 5: RCIP: Bit de habilitao de prioridade de interrupo da recepo serial. 1= Alta prioridade. 0= Baixa prioridade. Bit 4: TXIP: Bit de habilitao de prioridade de interrupo da transmisso serial. 1= Alta prioridade. 0= Baixa prioridade. Bit 3: SSPIP: Bit de habilitao de prioridade de interrupo mdulo SSP. 1= Alta prioridade. 0= Baixa prioridade. Bit 2: CCP1IP: Bit de habilitao de prioridade de interrupo do mdulo CCP1. 1= Alta prioridade. 0= Baixa prioridade. Bit 1: TMR2IP: Bit de habilitao de prioridade de interrupo do TIMER2. 1= Alta prioridade. 0= Baixa prioridade. Bit 0: TMR1IP: Bit de habilitao de prioridade de interrupo do TIMER1. 1= Alta prioridade. 0= Baixa prioridade. Registrador 2.14 IPR2

Bit 7: OSFIP: Bit de prioridade de interrupo por falha do oscilador 1= Alta prioridade. 0= Baixa prioridade. Bit 6:5: No implementado (lido como 0) Bit 4: EEIP: Bit de prioridade de interrupo da EEPROM 58

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

1= Alta prioridade. 0= Baixa prioridade. Bit 3: No implementado (lido como 0) Bit 2: LVDIP: Bit de prioridade de interrupo por deteco de baixa tenso 1= Alta prioridade. 0= Baixa prioridade. Bit 1: No implementado (lido como 0) Bit 0: CCP2IP: Bit de prioridade de interrupo do mdulo CCP2 1= Alta prioridade. 0= Baixa prioridade. Registrador 2.15 IPR3

Bit 7-5:No implementado (lido como 0) Bit 4: PTIP: Bit de prioridade de interrupo da base de tempo do mdulo PWM 1= Alta prioridade. 0= Baixa prioridade. Bit 3: IC3DRIP: Bit de prioridade da interrupo por captura de borda ou de mudana de direo do contador POSCNT Mdulo de Captura de borda habilitado (IC3): 1= Interrupo IC3 com alta prioridade. 0= Interrupo IC3 com baixa prioridade. Mdulo de quadratura de encoder habilitado: 1= Alta prioridade. 0= Baixa prioridade. Bit 2: IC2DRIP: Bit de prioridade da interrupo por captura de borda ou de mudana de direo do contador POSCNT Mdulo de Captura de borda habilitado (IC2): 1= Interrupo IC2 com alta prioridade. 0= Interrupo IC2 com baixa prioridade. Mdulo de quadratura de encoder habilitado: 1= Alta prioridade. 0= Baixa prioridade. Bit 1: IC1IP: Bit de prioridade da interrupo do mdulo de captura IC1

59

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

1= Alta prioridade. 0= Baixa prioridade. Bit 0: TMR5IP: Bit de prioridade da interrupo do TIMER5. 1= Alta prioridade. 0= Baixa prioridade. Registrador 2.16 RCON

Bit 7: IPEN: Bit de habilitao prioridade de interrupes 1= Habilita nveis de prioridade de interrupes. 0= Desabilita nveis de prioridade de interrupes. Bit 6-5: No implementado (lido como 0) Bit 4: RI: No estudado. Bit 3: RI: No estudado. Bit 2: RI: No estudado. Bit 1: RI: No estudado. Bit 0: RI: No estudado. Portanto para habilitarmos uma determinada interrupo, devemos primeiramente habilitar a interrupo desejada atravs dos registradores PIEs e INTCONs dependendo do tipo de interrupo desejada, e em seguida construir a rotina de tratamento de interrupo. Importante: Todos os flags de interrupo (com exceo do canal serial) devem ser resetados aps o tratamento de interrupo atravs no programa de usurio. Para evitar recursividade. Tratamento de interrupes utilizando o compilador C18 da Microchip. Para construirmos uma rotina de tratamento de interrupo, primeiramente devemos construir o cdigo a partir do endereo de memria de programa que aponta para o vetor de interrupo do dispositivo utilizado. Para realizar esta operao utiliza-se a diretiva #pragma code seguido do nome do cdigo e o endereo absoluto da memria de programa onde se deseja alocar o cdigo. Exemplo: #pragma code meu_cdigo=0x0020 Esta diretiva define que as instrues a seguir sero alocadas a partir do endereo 0020h.

60

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Vale lembrar que esta diretiva pode ser utilizada para alocao de programas independentemente do tratamento de interrupes. O MPLAB C18 no aloca automaticamente a RSI (Rotina de Servio de Interrupo) no vetor de interrupo, portanto atravs da diretiva mencionada acima devemos inserir o vetor de interrupo. Geralmente no vetor de interrupo colocamos o uma instruo de salto GOTO para o respectivo segmento onde se localiza a rotina de tratamento de interrupo. Observe o exemplo a seguir.
#pragma code low_vector=0x0018 void interrupt_low_vector(void) { _asm GOTO low_RSI _endasm } #pragma code

#pragma interruptlow low_RSI void low_RSI { /* . . . */ }

Quando declaramos a diretiva #pragma interruptlow low_RSI estamos informando ao compilador que este segmento de programa se refere a uma rotina de tratamento de interrupo. Com isso o compilador procede de maneira adequada para tratamento de interrupo como, por exemplo, salvamento de contexto entre outras funes. 2.2.7 EXERCCIOS RESOLVIDOS 2.2.7.1 Elabore o programa em linguagem C para que uma forma de onda quadrada com freqncia de 1kHz seja gerada no pino RB1 do microcontrolador PIC 18f2431 trabalhando com uma freqncia de clock de 8MHz. Soluo: Primeiramente devemos determinar o valor a ser carregado nos registradores TMR0H e TMR0L. Para determinarmos este valor devemos primeiramente saber de quanto em quanto tempo dever ser gerada a interrupo, observando a figura 2.16 possvel visualizar que a interrupo dever ser gerada a cada 500 microssegundos.

61

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

mudana de estado

500

1000

t(S)

Figura 2.16: Mudana de estado do pino do RB1

Portanto devemos configurar o TIMER0 para gerar interrupes a cada 500 microssegundos, e a cada interrupo a sada RB1 dever mudar de estado. Ento devemos primeiramente determinar qual valor dever ser carregado no registrador TMR0 para gerar interrupes no perodo desejado. Do estudo sobre Timer (Cap. 2.2.4) temos: f OSC 4 e N f TIMER = ( CARGA ) = 65535 txf (TIMER ) . P.S Utilizando o prescaler 1:1 e fOSC = 8MHz temos:
8 10 6 4 = f TIMER = 2MHz 1

f TIMER

O N de carga ser:
N (CARGA) = 65535 500 10 6 x 2 10 6 N (CARGA) = 64535 = FC17h

Portanto teremos TMR0H=FCh e TMR0L=17h A seguir temos o cdigo fonte sugerido e comentado em linguagem C para o compilador MPLAB C18.
/***********************************************************************/ /* RESOLUO DO EXERCCIO 2.2.7.1 */ /***********************************************************************/ #include<p18f2431.h> #include<timers.h> /***********************************************************************/ /* Prottipo da funo high_RSI */ /***********************************************************************/ void high_RSI(void); /***********************************************************************/ /* A funo Config_Int() tem a finalidade de configurar os registrado- */ /* necessrios para o funcionamento da interrupo. */ /***********************************************************************/

62

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

void Config_Int(void) { INTCONbits.TMR0IE=1;//Habilita interrupo do TIMER0 INTCON2bits.TMR0IP=1;//Habilita prioridade de interrupo do TIMER0 INTCONbits.TMR0IF=0;//Reseta o flag de overflow do TIMER0 INTCONbits.GIEH=1; } /***********************************************************************/ /* A funo Config_Sys() tem a finalidade de configurar os registrado- */ /* de E/S e configurao do TIMER0 */ /***********************************************************************/ void Config_Sys(void) { OSCCON=0x72; TRISBbits.TRISB1=0; TMR0H=0xFC; TMR0L=0x17; OpenTimer0(T0_16BIT&T0_SOURCE_INT&T0_PS_1_1); T0CONbits.TMR0ON=0; } /***********************************************************************/ /* Declarao da funo de desvio para o tratamento da interrupo */ /***********************************************************************/ #pragma code high_vector=0x08 void high_vector(void) { _asm GOTO high_RSI _endasm } #pragma code /***********************************************************************/ /* Funo de tratamento da interrupo */ /***********************************************************************/ #pragma interruptlow high_RSI void high_RSI(void) { INTCONbits.TMR0IF=0; PORTBbits.RB1=!PORTBbits.RB1; TMR0H=0xFC; TMR0L=0x17; } #pragma code /***********************************************************************/ /* Funo Principal */ /***********************************************************************/ void main() { Config_Sys();

63

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Config_Int(); while(1); } /***********************************************************************/ /* Fim do Cdigo */ /***********************************************************************/

2.2.7.2 Considerando o exerccio 2.2.3.7, e adicionando um boto com contato N.F com a funo de parada de emergncia no pino INT0, como deve ficar o novo cdigo fonte do exerccio sabendo-se que quando o boto de emergncia estiver pressionado o sistema dever permanecer bloqueado? Soluo: Para a soluo deste problema, algumas modificaes sero feitas no algoritmo j pronto, uma delas a amarrao do incio do funcionamento da mquina somente se o boto de emergncia estiver solto. Outra modificao com relao interrupo, pois teremos que ativar a interrupo INT0 para que a mquina possa ter seu processo interrompido independentemente de qualquer ao que a mesma deva estar executando. Para habilitarmos a interrupo INT0 devemos carregar nvel lgico 1 nos bits 7 e 4 do registrador 2.4 (INTCON) O flag da interrupo INT0 est localizado no bit 1 do mesmo registrador. O bit de seleo de borda de atuao da interrupo INT0 o bit 6 do registrador 2.5 (INTCON2), o nome deste bit INTEDG0. Considerando que o contato do boto de emergncia do tipo N.F, e que este esteja conectado ao pino INT0 atravs de um resistor de PULL-DOWN, toda vez que este boto for pressionado ser gerada uma borda de descida no pino INT0, portanto a borda de atuao da interrupo dever ser de descida (bit INTEDG0=0). Segue a seguir o cdigo fonte sugerido para a soluo do exerccio:
/***********************************************************************/ /* CDIGO FONTE DO EXERCCIO 2.2.7.2 */ /***********************************************************************/ #include<p18f2431.h> /***********************************************************************/ /* Prottipo da funo high_RSI */ /***********************************************************************/ void high_RSI(void);

64

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

/***********************************************************************/ /* Declarao da funo de tratamento da interrupo */ /***********************************************************************/ void Config_Interrupcao(void) { INTCONbits.INT0IF=0; INTCONbits.INT0IE=1; INTCONbits.GIEH=1; } /***********************************************************************/ /* Declarao da funo de desvio para o tratamento da interrupo */ /***********************************************************************/ #pragma code high_vector=0x08 void high_vector(void) { _asm GOTO high_RSI _endasm } #pragma code /***********************************************************************/ /* Funo de tratamento da interrupo */ /***********************************************************************/ #pragma interrupt high_RSI void high_RSI(void) { INTCONbits.INT0IF=0; while(PORTBbits.RB2==0) { PORTBbits.RB5=0; PORTBbits.RB4=1; } while(PORTCbits.RC3==0); } #pragma code /***********************************************************************/ /* Funo Principal */ /***********************************************************************/ void main() { OSCCON=0x72; TRISB=0xCF; PORTBbits.RB4=0; PORTBbits.RB5=0; Config_Interrupcao(); while(PORTCbits.RC3==0); while(1) { if((PORTBbits.RB6==1)&&(PORTBbits.RB7==1)) {

65

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

if(PORTBbits.RB1==1) { if(PORTBbits.RB3==1)goto SOBE; PORTBbits.RB5=1; } else { PORTBbits.RB5=0; } } else { SOBE: while(PORTBbits.RB2==0) { PORTBbits.RB5=0; PORTBbits.RB4=1; } PORTBbits.RB4=0; } } } /***********************************************************************/ /* FIM DO CDIGO */ /***********************************************************************/

2.2.7.3 Elaborar um programa para implementar um mostrador digital a partir do diagrama mostrado na figura 2.17 de forma que a cada segundo o valor presente no PORTC seja mostrado em decimal no display de sete segmentos. Deve-se observar que a varredura do display deve se dar a cada 10 milisegundos para garantir visualizao do mesmo.
+5V
VDD
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7

D1 RA0 RA1 RA2

D2

D3

VSS

Figura 2.17: Sistema mostrador com display

66

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

Soluo: Devemos observar que temos dois tempos diferentes para o controle das aes propostas, um intervalo de 10 milisegundos para a atualizao do display de sete segmentos e um intervalo de 1 segundo para a realizao da leitura do PORTC. Portanto o TIMER0 ser utilizado para gerar interrupes a cada 10 milisegundos e a cada 100 interrupes geradas ser feita uma leitura no PORTC e o valor ser convertido em decimal e consequentemente atualizado nas variveis de dados do display. Assim a rotina de tratamento de interrupo ficar da seguinte forma:
#pragma interrupt RSI_high void RSI_High(void) { if(i==100) { Buff_PORTC=PORTC; Saida[0]= Buff_PORTC/100; Buff_PORTC= Buff_PORTC-Saida[0]*100; Saida[1]= Buff_PORTC/10; Saida[2]= Buff_PORTC-Saida[1]*10; i=0; } i++; if(j==3) { j=0; } PORTB=BUFF_DIS[Saida[j]]; PORTA=pow(2,j); j++; } INTCONbits.TMR0IF=0; } #pragma code

Observamos acima que a cada 100 interrupes de 10 milisegundos (i=100), uma leitura no PORTC realizada e os buffers contendo os dados de centena, dezena e unidade so atualizados atravs da tabela BUFF_DIS[Saida[j]] que contm os dados codificados para o display de sete segmentos. A tabela de converso do valor das variveis para cdigo do display de sete segmentos leva a seguinte codificao.
... rom int BUFF_DIS[7]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; ...

Observe que a declarao do vetor de dados de converso declarada na memria de programa uma vez que esta permanece imutvel. A figura a seguir auxilia o entendimento das constantes declaradas. 67

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

RB0 RB5 RB1 RB6 RB4 RB2 RB3

Figura 2.18: Esquema de acionamento do display

A seguir temos o cdigo sugerido para resolver a situao proposta.


/***********************************************************************/ /* RESOLUO DO EXERCCIO 2.2.7.3 */ /***********************************************************************/ #include<p18f2431.h> #include<timers.h> #include<math.h> int i,j,Buff_PORTC; int Saida[3]; //Declarao das contantes de decodificao do display rom int BUFF_DIS[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; /***********************************************************************/ /* Prottipo da funo RSI_high */ /***********************************************************************/ void RSI_high(void); /***********************************************************************/ /* A funo Config_Int() tem a finalidade de configurar os registrado- */ /* necessrios para o funcionamento da interrupo. */ /***********************************************************************/ void Config_Int(void) { INTCONbits.TMR0IE=1;//Habilita interrupo do TIMER0 INTCON2bits.TMR0IP=1;//Habilita prioridade de interrupo do TIMER0 INTCONbits.TMR0IF=0;//Reseta o flag de overflow do TIMER0 INTCONbits.GIEH=1; } /***********************************************************************/ /* A funo Config_Sys() tem a finalidade de configurar os registrado- */ /* de E/S e configurao do TIMER0 */ /***********************************************************************/ void Config_Sys(void) { OSCCON=0x72; TRISB=0;//Configura PORTB como sada

68

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

ANSEL0=0; TRISA=0; TRISC=0xFF; TMR0H=0xD8;//Valores de inicializao do registrador TMR0L e TMR0H TMR0L=0xF0; OpenTimer0(T0_16BIT&T0_SOURCE_INT&T0_PS_1_2); } /***********************************************************************/ /* Declarao da funo de desvio para o tratamento da interrupo */ /***********************************************************************/ #pragma code high_vector=0x08 void high_vector(void) { _asm GOTO RSI_high _endasm } #pragma code /***********************************************************************/ /* Funo de tratamento da interrupo */ /***********************************************************************/ #pragma interrupt RSI_high void RSI_high(void) { INTCONbits.TMR0IF=0; PORTBbits.RB1=!PORTBbits.RB1; TMR0H=0xD8; TMR0L=0xF0; if(i==100) { Buff_PORTC=PORTC; Saida[0]= Buff_PORTC/100; Buff_PORTC= Buff_PORTC-Saida[0]*100; Saida[1]= Buff_PORTC/10; Saida[2]= Buff_PORTC-Saida[1]*10; i=0; } i++; if(j==3) { j=0; } PORTB=BUFF_DIS[Saida[j]]; PORTA=pow(2,j); j++; } #pragma code void main() { Config_Sys(); Config_Int(); while(1);

69

UMC ACET Tec. Automao Industrial Microprocessadores (I) A famlia de Microcontroladores PIC Prof. Joo Luis Sanches

70

You might also like