Autor Tema: interrupciones: no se actualiza la frecuencia de un anemometro  (Leído 1757 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado cristhian roca camarena

  • PIC10
  • *
  • Mensajes: 3
interrupciones: no se actualiza la frecuencia de un anemometro
« en: 19 de Agosto de 2019, 03:52:59 »
Hola buenas, porfa alguien me puede hechar la mano con algunas recomendaciones sobre este código(Adjunto código) en PIC C COMPILER resulta que quiero obtener la data de una celda de carga, un pt100, un dht22 y medir la frecuencia de un anemómetro. No tengo ningún inconveniente en obtener la data de los sensores, el problema en si esta en el anemómetro ya que que la frecuencia que se obtiene no se actualiza. Estaba intentado desactivando las interrupciones pero nada.

Adjunto codigo gracias.

#include <16f877a.h>
#include <stdio.h>
#use delay(clock=10M)
#fuses hs,nowdt
#include <MCP3204_modificado.C>
#include "dht22.h"
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,stream=A,bits=8,parity=N)
#priority timer1,ext
int32 valor1,valor2,peso,pt100,humedad,temperatura;
float voltaje2;
int16 Ta,Tb,TICK,F;
float T,Periodo;

#INT_EXT                    // directiva de interrupcion por cambio de estado en RB0
void interrupcion_RB0(){
 Ta= get_timer1();
   Tick= Ta-Tb;
   Tb=ta;
}

void config_interrupcion(){
  SETUP_TIMER_1(T1_INTERNAL  |T1_DIV_BY_8);//Prescaler = 8
  ext_int_edge(0,L_TO_H);           //configuro interrupcion por flanco de bajada
  enable_interrupts(INT_EXT);     //habilito interrupcion RB0
  enable_interrupts(GLOBAL);      // habilito interrupcion global
}

void inicializacion(){
adc_init();
dht_init ();
}

void main(){                     //funcion principal
set_tris_c(0x04);
set_tris_b(1);
inicializacion(); 
config_interrupcion();
   while(TRUE){
      valor1=read_analog(0);
      peso=valor1*(10000.0/4095.0);
   
      valor2=read_analog(1);
      voltaje2=5.0*(valor2/4095.0);
      pt100=(21.598*voltaje2+11.728)*10;
   
      leer_dht22 (dhthum,dthtemp);
      delay_ms(50);
      humedad=dhthum; temperatura=dthtemp;
     
      T=4.0*8.0/10000000.0;
      Periodo=T*Tick;
      F=1/Periodo;
     
      printf("peso= %Lu\r\r",peso);
      printf("pt100= %3.1Lu\r\r",pt100);
      printf("humedad= %Lu\r",humedad);
      printf("temperatura= %Lu\r\r",temperatura);
      disable_interrupts(int_ext);
      disable_interrupts(int_timer1);
      printf("\nF= %LuHz\r\r",F);
      delay_ms(100);
   }
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:interrupciones: no se actualiza la frecuencia de un anemometro
« Respuesta #1 en: 19 de Agosto de 2019, 08:30:04 »
Me parece raro que no te funcione, tal ves puede ser algo del calculo, ¿probaste mostrar los Ticks? para saber si efectivamente no esta capturando nada .
Otra cosa que podes probar es poner una señal conocida en RB0 de esa forma te aseguras que la señal sea correcta, y vas eliminando posibles lugares donde se encuentre el problema.