Hola a todos.
Estoy realizando un proyecto con un sensor NTC, un microcontrolador pic 18f4550 y display 7 segmentos de cuatro dígitos.
la idea es leer la temperatura sea negativa oséa bajo cero o positiva y visualizarlo en el display, si es negativa mostrar el símbolo negativo y el símbolo de grados.
pero cuando realice pruebas para la programación de la multiplexación del display me funciono correctamente, cuando le agregue el código para la lectura del sensor NTC, no me quiere funcionar.
el código del sensor lo verifique con una lcd y me funciono correctamente mostrándome la lectura del sensor.
les comparto código y pantallazo de simulación en proteus, no se si me puedan ayudar para ver donde tengo el error.
Gracias.
#include <18f4550.h>
#include <math.h>
#fuses nowdt, xt, put, noprotect
#use delay (clock = 4M)
#use standard_io(B;C)
#define C1 pin_C0
#define C2 pin_C1
#define C3 pin_C2
#define C4 pin_C4
// 0 1 2 3 4 5 6 7 8 9 GR NEG
const int disp[12]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x18,0x9C,0xBF};
//___________________________________________________VARIABLES DISPLAY
int num = 0;
int dec=0, uni=0, dec2=0, uni2=0;
int num2 =0;
//Variables temperatura-------------------------------
float tv,tr,temp=0,y;
int16 value;
//____________________________________________________
void Mostrar_neg(){ //si el valor de la temperatura es negativa (menor que cero)
output_C(0b00000010); //decena
output_B(disp[dec2]);
delay_ms(2);
output_C(0b00000100); //unidad
output_B(disp[uni2]);
delay_ms(2);
output_C(0b00010000); //grados
output_B(disp[10]);
delay_ms(2);
output_C(0b00000001); //signo menor
output_B(disp[11]);
delay_ms(2);
}
//_____________________________________________________
void Mostrar_Pos(){ //si el valor de la temperatura es positivo (mayor que cero)
output_C(0b00000010); //decena
output_B(disp[dec]);
delay_ms(1);
output_C(0b00000100); //unidad
output_B(disp[uni]);
delay_ms(1);
output_C(0b00010000); //grados
output_B(disp[10]);
delay_ms(1);
}
//____________________________________________________
void Config(){ //configuracion analogica
setup_port_a( ALL_ANALOG );
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 );
delay_us(

;
}
//____________________________________________________
void calculo_temp(){ //calculo de la temperatura del sensor NTC
value = Read_ADC();
tv = 5.0 * value / 1024.0;
tr = tv * 10000.0 / (5.0 - tv); // TTC103 10K -30/+125
y = log(tr/20000.0);
y = (1.0/298.15) + (y *(1.0/4050.0));
temp=1.0/y;
temp = temp -273.15;
num = temp*1;
}
//____________________________________________________
void Op_Neg(){ //busco unidades y decenas del valor obtenido en el calculo NTC
num2 = abs(num); //convirtiendolo de negativo a positivo
dec2 = num2/10;
uni2 = num2-(dec2*10);
}
//___________________________________________________
void Operacion_Pos(){ //busco unidades y decenas del valor obtenido en el calculo NTC
//si el valor obtenido es positivo
dec = num/10;
uni = num-(dec*10);
}
//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
void main(){
Config();
while(TRUE){
calculo_temp();
if(num < 1){
Op_Neg();
Mostrar_neg();
}
else{
Mostrar_Pos();
}
}
}