Pesquisar neste blog

14/06/2022

Pulso com PIC 16F877A

Ciclo de trabalho para PWM:

set_pwmx_duty(valor);

valor: dados de 8 ou 16 bits que determinam o ciclo de trabalho. Esse valor, juntamente com o valor do TMR2 preescaler, determina o valor do ciclo de trabalho. Na configuração T1MER2, o pós-aquecimento deve ser 1.

Exemplo 1: Meça a largura de um pulso usando o módulo CCP. Componentes ISIS: Utiliza-se o modo de captura do CCP, configurando-o para detectar a borda de subida ou descida do pulso a ser medido. 
Toda vez que ocorre uma detecção de borda, o valor de TMRl irá para o registro do módulo CCP.









CÓDIGO FEITO EM CCS C Compiler

#include <16F877A.h>
#fuses XT, NOWDT
#use delay(clock = 4MHz)

#ifndef lcd_enable
   #define lcd_enable   pin_E1 // pino enable do LCD
   #define lcd_rs       pin_E2 // pino rs do LCD
   //#define lcd_rw       pin_e2 // pino rw do LCD
   #define lcd_d4       pin_D4 // pino de dados d4 do LCD
   #define lcd_d5       pin_D5 // pino de dados d5 do LCD
   #define lcd_d6       pin_D6 // pino de dados d6 do LCD
   #define lcd_d7       pin_D7 // pino de dados d7 do LCD
#endif

#include <mod_lcd.c>
#byte PIR1 = 0x0C

int1 nuevopulso = 0;
int16 TFB = 0, TFS = 0, TF = 0;
float AP = 0.0, frequencia;
int1 cambio = 0;

#int_ccp1
void ccp1_int(){
   if(cambio == 0){
      TFS = CCP_1;
      setup_ccp1(CCP_CAPTURE_RE);
      cambio = 1;
   }else{
      TFB = CCP_1;
      setup_ccp1(CCP_CAPTURE_RE);
      cambio = 0;
      
      if(nuevopulso == 0){
         nuevopulso = 1;
      }
   }
}

void main(){
   lcd_ini();
   
   setup_timer_1(T1_INTERNAL);
   setup_ccp1(CCP_CAPTURE_RE);
   cambio = 0;
   enable_interrupts(int_ccp1);
   enable_interrupts(global);
   
   while(TRUE){
      if(nuevopulso >= 1){
         TF = (TFB - TFS);
         AP = TF * 1.0 / 1000.0;
         frequencia = 1.0 / (AP/1000.0);
         printf(lcd_escreve,"\f Pulso = %f ms\n Freq = %01.2f Hz",AP, frequencia);
         nuevopulso = 0;
         //delay_ms(100);
      }
   }
}

Saída de frequência usando CI 555



Observação: O oscilador astável com CI 555 não é preciso, logo haverá inconsistência nos resultados.
Logo, usando um outro exemplo com clock fixo verá que a precisão é siguinificativa.





Nenhum comentário: