Buscar

Relat Lab Micro ANA CAROL 5

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PRÁTICA 5: MEDIÇÃO DE TEMPO DE EVENTOS, COMPARAÇÃO E PWM (MÓDULOS CCP).
Ana Carolina Gonçalves de Carvalho
Universidade Federal do Piauí - UFPI
Endereço Rua Doutor Nartan Portela, Ininga – 64049-550 – Teresina-PI
anacarol.eng@hotmail.com
�
Resumo. Prática relacionada ao uso dos módulos ccp (comparação, captura, pwm) utilizando o pic16f877a através do programa MPLAB e do compilador CCS C.
Palavras-chave: módulos ccp, pic 16f877a, mplab
Abstract. Practice related to the use of the CCP modules (compare, capture, PWM) using PIC16F877A through the program MPLAB and CCS C compiler.
Keywords: ccp modules, PIC 16F877A, mplab
1.	INTRODUÇÃO
	PIC – PROGRAMMABLE INTERRUPT CONTROLLER (CONTROLADOR DE INTERRUPÇÃO PROGRAMÁVEL) é um componente eletrônico programável produzido pela Microchip Technology Inc, utilizado no controle de processos e atividades lógicas.
Os microcontroladores são compostos de uma única pastilha de silício encapsulada, popularmente chamada de CI (Circuito Integrado) e todos os elementos necessários para o controle das atividades estão internamente ligados a pastilha de silício. Aliás, essa é a característica principal que diferencia os microcontroladores dos microprocessadores.
O PIC16F877A está enquadrado na família 8 bits de microcontroladores Microchip, possui via de programação com 14 bits, memória RAM de 368 Bytes, memória auxiliar EEPROM (não volátil) de 256 Bytes, um conjunto de 35 instruções, operação com clock de até 20 MHz (5 MIPS) e quatro tipos de encapsulamentos disponíveis (PDIP 40, PLCC 44, QFN 44 e TQFP 44). 
O encapsulamento adotado, o PDIP 40, como mostra a Figura 1.1, possui 4 pinos de alimentação, 2 pinos de clock, 1 pino de reset, 33 pinos de entrada/saída configuráveis e fácil prototipagem em Protoboards.
Figura 1.1. Pinagem do encapsulamento do PDIP 40.
2. METODOLOGIA 
	Utilizando a placa de desenvolvimento da Labtools, escreveu-se um programa em C para o PIC16F877A a fim de acionar um cooler por PWM na frequência de 20kHz. Inicialmente, o cooler é desligado. A cada segundo, a velocidade de rotação do cooler é medida. Caso, o cooler estiver parado, a razão cíclica é aumentada em 5 %, senão a razão cíclica permanece constante. Ou seja, a razão cíclica é aumentada até o cooler começar a girar. Para essa aplicação, utilizou-se o módulo CCP2 através do pino RC1 do PIC para acionar o cooler. E utilizou-se o timer0 para medir a velocidade de rotação (em RPS) através do pino RA4 (ligar no JP2, 1 com 2). O resultado está apresentado em dois displays de 7 segmentos (DS1 e DS2). A cada 10 voltas no cooler, o LED no pino RB1 muda de estado. Para isso, utilizou-se o módulo CCP1 no modo de comparação.
Após ser pressionado o botão S3, o timer1 foi configurado como temporizador e a medida de rotação passa a ser feita pelo módulo CCP1 no modo de captura através do pio RC2, e foi apresentado nos displays a rotação medida a cada segundo. Obs: Ligaou-se o pino 2 do JP1 no pino 2 do JP2. Ao pressionar o botão S2, o sistema volta para o primeiro modo de funcionamento mencionado no parágrafo anterior.
3. RESULTADOS E DISCUSSÕES
	A seguir, segue o programa feito no laboratório.
#include <16f877a.h>
#fuses XT, NOWDT
#use delay (clock = 4000000)
#bit ccp1if =0x0C.2 
#define botao_3 input(pin_b6)
#define botao_2 input(pin_b7)
byte sete (int valor)
{
	switch (valor)
	{//retorna o código para acender um display de 7 seg.
		case 0: return 0b00111111;//acender o numero 0 no display
		case 1: return 0b00000110;//acender o número 1
		case 2: return 0b01011011;//assim sucessivamente...
		case 3: return 0b01001111;
		case 4: return 0b01100110;
		case 5: return 0b01101101;
		case 6: return 0b01111101;
		case 7: return 0b00100111;
		case 8: return 0b01111111;
		case 9: return 0b01101111;
	}
}
void saida(int16 vel)
{
	int valor1;
	int valor2;
	
	valor1 = vel/10; //Pegando a parte inteira 
	valor2 = (vel -(vel/10)*10); //subtraindo para pegar o segundo dígito
	output_d(sete(valor1));
	output_a(sete(valor2)); 
}
void botao_s2(){
set_tris_c(0b00000001); 
// pin_c0 como entrada para contagem do timer 1
// pin_c1 como saida config do pwm modulo ccp2
// pin_c2 como saída config do comparador modulo ccp1	
				
set_tris_a(0b00010000); 
//pin_a4 como entrada da contagem do timer 0
set_tris_b(0b11000010); 
//pin_b1 led como entrada
//pin_b7 como botao_s2 
//pin_b6 como botao_s3
setup_timer_2(T2_DIV_BY_1,49,16);
setup_ccp2(CCP_PWM);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
setup_ccp1(CCP_COMPARE_RESET_TIMER);
setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1); 
//timer0 como contador 
set_pwm2_duty(0);
set_timer0(0);
}
void botao_s3(){
int16 capt;
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_ccp1(CCP_CAPTURE_RE);
set_tris_c(0b00000101);
if (ccp1if ==1){
capt=0;
capt= get_timer1();
saida(capt);
}
}
void main()
{
int16 tempo;
int16 y;
int16 passou_1s;
int16 dutty;
int16 girou;
 botao_s2();
while(1)
{
if (y==1250){
passou_1s=1;
y=0;
tempo = get_timer0(); // medindo velocidade do cooler a cada segundo
if (tempo>=7){
girou=1;
 // 7 pulsos indica uma volta no cooler
}
else{
dutty+10; //razao ciclica aumentada em 5%
}
set_pwm2_duty(dutty);
saida(tempo/7);
}
ccp_1=70;
if (ccp1if ==1){
output_toggle(pin_b1);
ccp1if=0;
} //a cada 10 voltas, pin_b1 muda de estado
enable_interrupts(GLOBAL|INT_CCP1|INT_TIMER2|INT_TIMER1);
}
}
	Resolvendo os questionários:
Questão 1: Faça um programa para gerar um sinal PWM em 20kHz de frequência, no qual o seu duty varie conforme a largura de um pulso, conectado no pino RC2 do microcontrolador.
#include <16f877a.h>
#fuses XT, NOWDT
#use delay (clock = 4000000)
#bit ccp1if =0x0C.2 
void main(){
int16 pri_captura;
int16 pri_valor;
int16 dif;
setup_timer_2(T2_DIV_BY_1,49,16);
setup_ccp2(CCP_PWM);
set_pwm2_duty(0);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
setup_ccp1(CCP_CAPTURE_RE);
set_tris_c(0b00000100);
pri_captura=1;
while(1){
if(ccp1if==1){
if(pri_captura==1){
pri_valor=ccp_1;
}else{
dif=ccp_1-pri_valor;}
}
pri_captura^=1;
ccp1if=0;
set_pwm2_duty(dif);
}
}
Questão 2: Implemente um PWM com frequência de 20kHz cujo duty cycle varie de forma senoidal com o tempo em 100Hz de frequência. O duty central deve ser de 50%. Utilize um dos módulos CCP.
#include <16f877a.h>
#fuses XT, NOWDT
#use delay (clock = 4000000)
void main(){
setup_timer_2(T2_DIV_BY_1,49,1);
setup_ccp2(CCP_PWM);
set_tris_c(0b00000000);
while(1){
int16 dutty;	
dutty+100; //razao ciclica aumentada em 50%
set_pwm2_duty(dutty);
}
}
Questão 4: Faça um programa para setar o estado do pino RC2/CCP1 toda vez que a contagem do timer1 for 10 e faça outro programa para limpar o estado do pino RC2/CCP1 toda vez que a contagem do timer1 for 20.
Primeiro programa:
#include <16f877a.h>
#fuses XT, NOWDT
#use delay (clock = 4000000)
#bit ccp1if =0x0C.2 
void main(){
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
setup_ccp1(CCP_COMPARE_SET_ON_MATCH);
set_tris_c(0b00000000); //ccp1 modo comparação, pin_c2 como saída
while(1){
ccp_1=10;
if(ccp1if==1){
}
}
}
	Segundo programa:
#include <16f877a.h>
#fuses XT, NOWDT
#use delay (clock = 4000000)
#bit ccp1if =0x0C.2 
void main(){
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
setup_ccp1(CCP_COMPARE_CLR_ON_MATCH);
set_tris_c(0b00000000); //ccp1 modo comparação, pin_c2 como saída
while(1){
ccp_1=20;
if(ccp1if==1){
}
}
}
4. CONCLUSÕES
	Podemos concluir que a prática foi satisfatória, pois os programas foram compilados e realizados de acordo com o problema da questão. 
	Além disso, foipossível o aprimoramento em relação ao módulo ccp no pic 16f877a. Portanto, foi efetuado o aprendizado com o modo de captura, comparação e pwm através da prática e das questões feitas.
	Esse módulo é muito importante, pois têm diversas aplicações, como o controle de um motor e o controle de um brilho no led, aumentando ou diminuindo a intensidade do brilho, por exemplo, através da razão cíclica. Também é possível realizar ações após um certo tempo, através do modo de captura, por exemplo, após 10 minutos o motor deve ser desligado ou aumentar a velocidade de rotação.
	
REFERÊNCIAS
[1]	Microchip Tec. Inc., “8-bit PIC Microcontrollers”, Data Sheet, 2010.
[2] Microchip Tec. Inc., “PIC16F87XA - 28/40/44-Pin Enhanced Flash Microcontrollers”, Data Sheet, 2003.

Outros materiais