TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: cristhian roca camarena 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);
}
}
-
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.