Sei sulla pagina 1di 7

Microcontroladores e Microprocessadores Prtica 01: Oscilador, I/O e Interrupo

FRANCISCO JONAS RODRIGUES JNIOR KLAY DA ROCHA CASIMIRO


1 2 1

IFCE Instituto Federal de Educao, Cincia e Tecnologia do Cear CEP 60.040-531 Fortaleza (CE) fco.jonas.rodrigues@gmail.com IFCE Instituto Federal de Educao, Cincia e Tecnologia do Cear CEP 60.040-531 Fortaleza (CE) klaycasimiro@yahoo.com.br

Resumo: Este artigo ir descrever os tipos de osciladores e suas fontes de clock, as portas I/O e algumas interrupes do PIC18F2550, essa descrio ser necessria para o desenvolvimento da prtica 01 da disciplina de Microcontroladores e Microprocessadores do curso de Engenharia de Computao do IFCE. .Ser demonstrado, no software de simulao PROTEUS-ISIS, como utilizar os recursos mencionados, unindo teoria e prtica para um maior entendimento do assunto. Palavras Chaves: microcontrolador, PIC18F2550, interrupes, oscilador, I/O, simulaes.

1 Introduo
Um microcontrolador(MCU) um sistema computacional completo, no qual esto includos internamente uma CPU (Central Processor Unit), memrias RAM (dados), flash (programa) e EPROM, pinos de I/O (Input/Output), alm de outros perifricos internos, tais como, osciladores, canal USB, interface serial assncrona USART, mdulos de temporizao e conversores A/D, entre outros, integrados em um mesmo componente (chip).Desses diversos perifricos iremos descrever e trabalhar com os osciladores, pinos I/O e alguns tipos de interrupes do PIC18F2550. O trabalho est organizado da seguinte forma. A seo 2 apresenta a definio de oscilador, os diferentes tipos de fontes de clock, suportado pelo MCU PIC18f2550, e como configur-los. A seo 3 descreve os pinos I/O e como utiliz-los. A seo 4 apresenta o papel das interrupes para o MCU, como programar alguns dos tipos possveis de interrupes do PIC18F. Interrupes do tipo:

TIMER2, INT0(interrupo externa) e interrupo RB. A seo 5 ser desenvolvido prticas utilizando os conhecimentos adquiridos nas sees anteriores e alguns conceitos extras deveram ser adicionadas em paralelo para obtermos xito em nossas simulaes. Na seo 6 iremos concluir o nosso trabalho resumindo o que foi aprendido na teoria e na prtica desenvolvida no PROTEUSISIS.

2 Oscilador
Os microcontroladores necessitam de uma fonte de clock para que possam processar as informaes, sendo a velocidade de processamento proporcional a frequencia fornecida pela fonte de clock, isso ser comprovado na seo 5, na prtica envolvendo oscilador. A CPU do MCU PIC18F2550 suporta trs diferentes fontes de clock, cuja a seleo feita atravs dos bits SCS1:SCS0(OSCCON<1:0>), os quais permitem as seguintes combinaes: OSCON<1:0> = 1X: oscilador interno; OSCON<1:0> = 01: oscilador TIMER; OSCON<1:0> = 00: oscilador primrio; Como nas simulaes iremos usar o oscilador implementado pelo o software de simulao PROTEUS-ISIS, ento no vamos entrar em detalhes sobre a configurao do oscilador, todavia vamos descrever a configurao do oscilador interno, caso a simulao seja desenvolvida no protoboard. Oscilador Interno H duas fontes de clock associadas ao bloco do oscilador interno. A principal sada desse bloco um clock de 8MHz(INTOSC) que pode ser usado diretamente para fornecer sinal de clock para a CPU, ou ento pode ser derivado eme outras frequncias compreendidas entre 31,25KHz e 4MHz. A frequncia de 31,25KHz selecionada pelo bit INTSRC(OSCTUNE<7> = 1). Outra fonte de clock o oscilador C interno(INTRC), o qual fornece uma frequncia de 31KHz e selecionada atravs do bit (OSCTUNE<7> = 0). Ambas as fontes de clock so selecionadas pelos bits IRCF:IRCF0(OSCCON<6:4>), cuja combinao fornece as seguintes frequncias: OSCCON<6:4> 111 110 101 100 011 010 001 000 Descrio 8MHz(INTOSC) 4MHz(INTOSC) 2MHz(INTOSC) 1MHz(INTOSC) 500KHz(INTOSC) 250KHz(INTOSC) 125KHz(INTOSC) 31KHz(INTOSC)

O oscilador interno calibrado pelo fabricante para fornecer frequncia de 8MHz (INTOSC), no entanto ela varia com a tenso de alimentao(Vcc) e temperatura. Por este motivo possvel fazer um ajuste fino atravs dos bits TUN4:TUN0(OSCTUNE<4:0>), cujos valores podem resultar nos seguintes eventos: OSCTUNE<4:0> = 0111: frequncia mxima. ... OSCTUNE<4:0> = 0111: frequncia ajustada pelo fabricante. ... OSCTUNE<4:0> = 0111: frequncia minima. A estabilidade da frequncia de sada do INTOSC sinalizada pelo bit IOFS(OSCCON<2>), sendo 1 Frequncia estvel e 0 Frequncia instvel.

3 Portas I/O
Portas I/O (Input/Output) digitais so portas/entrada de dados, cujos os valores alternam entre '0' e '1'. Por essas portas o microcontrolador capaz de obter informaes do mundo exterior , como tambm atuar diretamente no controle on/off de dispositiovos, como por exemplo, ligar/desligar uma lmpada, vlvula, motor, entre outros. O PIC18F2550 tem 3 portas(A,B e C). Os pinos associados a ela so multiplexados com diferentes funes de perifricos. Geralmente, quando um

determinado perifricos habilitado o pino relacionado a ele deixa de ser de propsito geral, e passa desempenhar a funo que concedida pelo perifrico. Cada porta tem trs registradores associados configurao. So eles: Registrador TRIS: configura o sentido de fluxo de dado de uma determinada porta. Registrador PORT: escreve/l o nvel dos pinos associados porta. Registrador LAT: armazena o valor do ltimo comando de escrita; O sentido dos fluxos de dados de uma determinada porta configurado pelo registrador TRIS. Ele tem 8bits e cada elemento corresponde configurao de um determinado pino I/O sendo 0 sada e 1 entrada. O compilador MPLAB C18 suporta comandos de acesso simultneo dos 8bits do registrador TRIS, com tambm de um nico bit. Os nomes dos identificadores de acesso aos 8bits dos registradores TRIS so os prprios nomes dos registros associados a eles. Sintaxe: TRISx = valor valor = TRISx Sendo: x:nome da porta(letra maiscula). Valor: valor de 8bits. 0(sada) o 1(entrada). Exemplo: TRISA = 0b00011111; //RA0 A RA4 entrada de dados e RA5 a RA6 sada de dados. notao em binrio(0bxxxxxxxx); A estrutura TRISxbits.TRISxy = valor bit(0 ou 1) permite a modificao ou acesso de apenas um bit do registrador TRIS, onde x = nome da porta(A, B, ou C, em maisculo) e y = nmero do pino(0,1,2,3,4...).

Exemplo: TRISAbits.TRISA5 = 1 //pino RA5 configurado como entrada. O status dos pinos de uma porta armazenado no registrador PORT e o registrador LAT guarda uma cpia do valor contido no registrador PORT. A sintaxe para se trabalhar no MPLAB C18 com o registrador PORT segue as mesmas regras apresentadas para os registradores TRIS. Exemplo: PORTA = 0b00011111; seta os pinos da porta A PORTAbits.RA0 = 1;// seta um nico pino da porta A;

4 Interrupo
As interrupes desempenham um papel importante em sistemas microcontrolados, pois permitem suspender a qualquer momento a execuo de uma linha de cdigo e comear a executar uma rotina designada ao tratamento de uma determinada interrupo. Aps finalizar a rotina, o processador retorna ao ponto do programa em que estava antes de a interrupo ser gerada. Caracteriza-se pela alta velocidade de execuo, uma vez que as interrupes so tratadas em hardware. As fontes de interrupes podem ser eventos externos, como mudana de estado de um pino de entrada, como tambm ser decorrentes de eventos internos, como, por exemplo, converso A/D, estouro de TIMER, estouro de WDT etc. O microcontrolador PIC18F2550 dispe de mltiplas fontes de interrupo sendo possvel definir o nvel de prioridade no atendimento de cada uma, selecionando-a com nvel de prioridade alto(high priority level) ou nvel de prioridade baixo(low priority level). Uma vez habilitada, se o dispositivo estiver atendendo uma interrupo de baixa prioridade, e em determinado momento ocorrer uma interrupo de alta prioridade o

controlador desviado par ao endereo dessa interrupo e aps trat-la volta executar a rotina antecedente. O primeiro passo para configurar o dispositivo para tratar as interrupes de acordo com o seu nvel de prioridade setar o bit IPEN(RCON<7> = 1) e habilitar as interrupes globalmente. Bit GIEH(INTCON<7> = 1) : habilita as interrupes de alta prioridade;

Como mencionado a cima o PIC18F2550 tem dezenas de tipos de interrupes, para fazermos as prticas no PROTEUS-ISIS ou no Protoboard precisamos conhecer trs delas. So elas: Interrupo externa INT0; Interrupo externa RB; Interrupo TIMER2; Veja a seguir os registros de configurao para cada fonte de interrupo mencionada acima. Interrupo externa INT0 Enable bit INT0IE (INTCON<4>) 1 Habilita interrupo externa INT0. 0 Desabilita interrupao externa INT0. 1 - Ocorreu interrupo externa(Limpar bit por software) 0 - No ocorreu interrupo externa INT0 No suporta nvel de prioridade 1- Interrupo na borda de subida. 0- Interrupo na borda de descida

Bit GIEL(INTCON<6> = 1) : habilita as interrupes de baixa prioridade. Uma vez configurado, quando ocorrer uma interrupo, o programa desviado para o endereo 000008h (High priority) ou 000018h(Low priority) de acordo com o nvel de prioridade selecionado. O nvel de prioridade no atendimento s interrupes opcional por definio o dispositivo est configurado para tratar as interrupes sem nvel de prioridade para habilitar essas funes manualmente basta limpar o bit IPEN(RCON<7> = 0) e habilitar as interrupes globalmente por meio dos bits PEIE e GIE. Bit GIE(INTCON<7>=1): habilita todas as fontes de interrupes. Bit PIE(INTCON<6>=1): habilita as fontes de interrupes de perifricos. Diferentemente do modo com nvel de prioridade todas as interrupes so desviadas para o endereo 000008h. Cada fonte de interrupo tm trs bits associados, cujo as funes so: Bit de sinalizao(flag bit): sinaliza a ocorrncia da interrupo. Bit de ativao(enable bit): ativa um determinado evento de interrupo. Bit de prioridade(priority bit):define o nvel de prioridade da interrupo.

Flag bit

INT0IF (INTCON<1>)

Priority bit Edge

---INEDG0 (INTCON2<6>)

Interrupo externa RB Enable bit RBIE (INTCON<3>) 1 - Habilita interrupo por mudana de estado nos pinos RB4:RB7. 0 - Desabilita interrupao por mudana de estado nos pinos RB4:RB7. 1 Pelo menos um dos pinos RB4:RB7 mudou de estado. 0 - Nenhum dos pinos RB4:RB7mudou de

Flag bit

RBIF (INTCON<0>)

estado. Priority bit RBIP (INTCON2<0> ) TIMER2 Enable bit TMR2IE (PIE1<1>) 1 - Habilita interrupo por combinao do TMR2 e PR2. 0 - desabilita interrupo por combinao do TMR2 e PR2. 1 o valor do registro TMR2 igual ao valor do registro PR2. 0 - o valor do registro TMR2 diferente do valor do registro PR2. 1 - Alta prioridade 0 - Baixa prioridade 1 - Alta prioridade 0 - Baixa prioridade Simulao de Oscilador no Proteus-ISIS Frequncia 4 MHz 8 MHz 16 MHz 48 MHz Tempo para 1 piscada no LED1 3,06s 2,13s 1,47s Menos de 1s

Flag bit

TMR2IF (PIR1<1>)

Isso comprova o que foi descrito na seo 2 que diz: a velocidade de processamento de MCU proporcional a frequncia fornecida pela fonte de clock. Eventos em cadeia Inicialmente, salve uma cpia do arquivo do PROTEUS-ISIS referente ao projeto0 como projeto1. Modifique o circuito de forma tal a ficar similar ao circuito da figura 1 a seguir, e salve com um novo nome (projeto1 por exemplo). A partir do evento do timer 2 crie um segundo evento que ir chamar o seguinte handler: /** *@fn PORTC_LEDS_EVENT_handler() *@brief PORTC LEDS Event Handler *@param \a void *@return \a void */ void PORTC_LEDS_EVENT_handler(void) { //PORTC++; } Compile o projeto e verifique no PROTEUS-ISIS o funcionamento do projeto. Descreva o que aconteceu. Caso necessrio veja o capitulo 10 do Datasheet.

Priority bit

TMR2IP (IPR1<1>)

5 Prtica 01: Simulaes no PROTEUSISIS


Executando o projeto 0 no SOFTWARE PROTEUS-ISIS, carregando o *.hex gerado no PIC18F2550, a fim de testar o funcionamento do firmware e a interface grfica de simulao. Foram feitas as seguintes implementaes. Teste de Oscilador No PROTEUS-ISIS, modificamos o campo Processor Clock Frequency para os valores: 4 MHz; 8 MHz; 16 MHz; 48 MHz; Em seguida observamos o tempo com que o LED1 pisca.

O conjunto de leds ligados nos pinos RC0(LED-0), RC1(LED-1), RC2(LED-2), RC4(LED-3), PORTC, do PIC18F2550 se tornou um contador binrio de 4 bits, onde os bits que tm valor 1 so representados com a ativao do seu respectivo led e o contrrio acontece para bits com valor 0, ou seja bits com valor 0 representado por desativao do seu respectivo led. A cada invertida de estado do LED-4 o contador binrio representados pelos leds: LED-0, LED-1, LED-2, LED-3 incrementado de uma unidade, onde o bit mais significativo(MSB) representado pelo LED-3 e o menos significativo(LSB) pelo LED-0. Os pinos RC4:RC0 inicializado com o valor 0000, ou seja todos os leds que esto ligados a eles esto apagados. Quando o PORTC++ executado o valor setado nos pino RC4:RC0 0001, portanto o LED-0 ir acender enquanto os demais permaneceram apagados. Quando o valor setados nos pinos RC4:RC0 forem iguais a 1000, o LED-3 deveria acender, mas isso no acontece, devido o PORTC<4> e PORTC<5> somente funcionarem como entrada de dados digitais, como o LED-3 s ir mudar de estado se houver sada de dado do pino RC4 do PIC18F2550 o mesmo permanecer apagado .

void INT0_EVENT_handler(void) { LED2 ^= 1; } Compile o projeto e verifique no PROTEUSISIS o funcionamento do projeto. Descreva o que aconteceu. Caso necessrio veja os captulos 9 e 10 do Datasheet. Todas as vezes que o boto 1, ligado ao pino rb0, pressionado gerado uma interrupo externa(INT0), essa interrupo(INT0) chama o handler INT0_EVENT_handler(void); que inverte o valor de sada do pino RA1 onde est ligado o LED2, que por sua vez muda seu estado sempre que isso acontece. Interrupo de alta prioridade 2 Pesquise na documentao do PIC18F2550 como utilizar a interrupo externa RB (pino RB7). Defina essa interrupo como sendo de alta prioridade. Existe diferena entre utilizar o pino RB7 ou RB4 para executar essa interrupo? E quanto ao Pino RB3? A interrupo RB acontece todas as vezes que houver mudana de estado em um do pinos RB7:RB4. Por isso, no a diferena se o boto fosse ligado no pino RB4, desde que o boto esteja ligado em um dos pinos dentro dessa faixa(RB7:RB4) a interrupo RB ir acontecer, caso o boto estivesse ligado ao pino RB3 no iria acontecer nenhum tipo de interrupo, pois nesse pino no h interrupo associada e se o boto estivesse ligado nos pinos(RB0:RB2) a interrupo gerada no seria do tipo RB, mas do tipo interrupo externa(INT0,INT1 ou INT2). Interrupo RB pode ser definida como de alta e baixa prioridade, diferente da interrupo do tipo INT0.

Interrupo de alta prioridade 1 Pesquise na documentao do PIC18F2550 como utilizar a interrupo externa INT0 (pino RB0). A interrupo INT0 pode ser de baixa prioridade? Por qu? Por escolha do fabricante(Microchip) a interrupo externa INT0 no suporta nvel de prioridade ela ir sempre ser executada como high priority, A partir da interrupo gere um evento para piscar um LED no pino RA1, de forma similar ao cdigo abaixo: /** *@fn INT0_EVENT_handler(void) *@brief Teste da interrupo externa 0 *@param \a void *@return \a void */

A partir da interrupo gere um evento para mudar o estado do LED no pino RA1, de forma similar ao cdigo abaixo: /** *@fn RB_EVENT_handler(unsigned char X) *@brief Teste da interrupo por mudana de borda da porta B *@param \a Estado da porta B *@return \a void */ void RB_EVENT_handler(unsigned char X) { X &= 0x80; X >>= 7; LED2 = !X; } Explique o cdigo acima e compare a sua execuo com a interrupo provocada pelo evento INT0. O procedimento recebe um valor binrio de 8bits(valor contido no PORTB no momento da interrupo RB). Na primeira linha do procedimento feita uma comparao lgica AND bit a bit entre X e 0x80 = 0b10000000, o resultado armazenado na prpria varivel X. Essa comparao funciona como uma mscara para selecionar posteriormente apenas um bit do valor de X Na segunda linha o nmero binrio de 8 bits armazenado na varivel X tem seus bits deslocados 7 vezes par a direita. Por exemplo se X = 0b10000000: 0b10000000(inicio) 0b01000000 0b00100000 0b00010000 0b00001000 0b00000100 0b 00000010 0b 00000001 Logo, o valor de X = 0b00000001. Na terceira linha atribudo ao LED2(pino RB7) a negao de X, por exemplo se X = 0b00000001 ento o LED2 recebe o bit LSB do valor guardado em X(0b11111110), portanto LED2 apagado. Ao contrrio da interrupo INT0, que gera uma interrupo ao apertarmos o BOTO-01, a interrupo RB gera duas interrupo ao apertarmos o boto, ou seja, uma interrupo

ao apertarmos e outra ao soltarmos o BOTO02 Compile o projeto e verifique no PROTEUS-ISIS o funcionamento do projeto. Descreva o que aconteceu. Caso necessrio veja os captulos 9 e 10 do Datasheet. Ao apertarmos e segurarmos o BOTO-02 o LED2 fica continuamente ativado, o led s apaga se o usurio deixar de pressionar o boto.

6 Concluso
Aprendemos o que so e como funcionam o oscilador, fonte de interrupo do TIMER2, INT0 e RB, quais as caractersticas dos pinos RB0:RB7 do PIC18F2550, microcontrolador, alm de um enriquecimento nos conhecimentos de lgica de programao para MCU, promovido por tcnicas implementadas nas prticas realizadas.

7 Referncias.
https://docs.google.com/viewer? a=v&q=cache:lZCeOe5f84J:www.posmec.ufc.br/~lpe m/files/Apostilacpic.pdf+perifericos+pic +18f2550&hl=ptBR&gl=br&pid=bl&srcid=ADGEESiidjM QqzAtwVuNhyaLJnMhNP15NTmZ8Gsv nYvHe6_0UI_NIl4k1QNmwhJTZUDesWwhsNFWi_2qD M9o9CS9153_70IttfR3PxhDmkaz1HOk gCOdpcmR2U73ij2phHFbIxJMql&sig=AHIEtbTQrX7d8xmh0qk-OAFN7FxEZz9mw http://pt.wikipedia.org/wiki/PIC http://ww1.microchip.com/downloads/en /DeviceDoc/39632e.pdf http://www.eletrica.info/livromicrocontroladores-pic18-aprenda-eprograme-em-linguagem-c/

Potrebbero piacerti anche