Hola a todos,
Soy nuevo en esta comunidad y ahora que empiezo a trastear con los PICs creo un buen momento para empezar a leeros y a escribir.
De las primeras cosas que hice fue el siguiente montaje, este lo adjunto como .jpg
Son dos sensores (temperatura y presión) que se conectan a un PIC 16F877A y muestra en un LCD los resultados, además le añado un LED que se enciende si se sobrepasan unos valores.
Aquí el código en C:
Tiene una oscilación de 4MHz y el código está hecho con Mikro C for PIC. El software de simulación es Proteus.
Todo va muy bien en la simulación salvo que la presión no la monitoriza, se queda fija en 121 kPa, he probado de todo y nada, no se que hacer. He sacado el trozo de código que afecta a la presión y simulado en un otro PIC y funciona perfectamente, estoy en un callejón, espero que puedan darme algún consejo o remitirme algún error.
Un saludo y muchas gracias !
Soy nuevo en esta comunidad y ahora que empiezo a trastear con los PICs creo un buen momento para empezar a leeros y a escribir.
De las primeras cosas que hice fue el siguiente montaje, este lo adjunto como .jpg
Son dos sensores (temperatura y presión) que se conectan a un PIC 16F877A y muestra en un LCD los resultados, además le añado un LED que se enciende si se sobrepasan unos valores.
Aquí el código en C:
Código:
//LCD Pin Definition
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;
//LCD TRIS Definition
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;
void main (void)
{
//Declaración de variables
unsigned int Radct, Radcp, TemI, PreI;
float Tem, Pre;
char Textt[16], Textp[16];
TRISD.F0 = 0; //Makes PORTD0 or RD0 Output Pin
//Configura el módulo ADC con el pin AN3
//como voltaje de referencia positiva
ADCON1=0b11000001;
//Inicio del LCD
Lcd_Init();
//Borrado del cursor
Lcd_Cmd(_LCD_CURSOR_OFF);
//Impresión de texto
Lcd_Out(2, 1, "Cº:");
Lcd_Out(1, 1, "KPa:");
while(1) //Bucle infinito
{
if(TemI>100||PreI>123)
{
PORTD.F0 = 1; //LED ON
}
else
{
PORTD.F0 = 0; //LED OFF
}
//Lectura del canal 1 del ADC
Radct=ADC_Read(1);
//Uso de la ecuación
Tem=0.244*Radct;
//Se convierte el resultado a un número entero
TemI=Tem;
//Se convierte el número entero a una cadena de caracteres
IntToStr(TemI, Textt);
//Se imprime el resultado
Lcd_Out(2, 6, Textt);
//Retardo de 100m segundos
delay_ms(100);
//Reading ADC channel 0.
Radcp=ADC_Read(0);
//Using the equation
Pre=0.10861*Radcp+10,5555;
//Forces the result to the integer part.
PreI=Pre;
//Converts the integer to a string.
IntToStr(PreI, Textp);
//prints the result.
Lcd_Out(1, 6, Textp);
//Delay 100 m seconds.
delay_ms(100);
}
}
Tiene una oscilación de 4MHz y el código está hecho con Mikro C for PIC. El software de simulación es Proteus.
Todo va muy bien en la simulación salvo que la presión no la monitoriza, se queda fija en 121 kPa, he probado de todo y nada, no se que hacer. He sacado el trozo de código que afecta a la presión y simulado en un otro PIC y funciona perfectamente, estoy en un callejón, espero que puedan darme algún consejo o remitirme algún error.
Un saludo y muchas gracias !
Adjuntos
Última edición por un moderador: