#include <18f452.h> //Mc a utilizar
#include <STDIO.h> //librería para hacer operaciones matemáticas
#fuses hs,nowdt,noprotect,nolvp //High speed, sin perro guardian, no pretegido, no bajo voltaje.
#use delay(clock=4000000,RESTART_WDT) //reloj a 4 MHz
#byte porta=0xf80
#byte portb=0xf81
#byte portc=0xf82 // Cambiando nombres a los puertos
#byte portd=0xf83
#byte porte=0xf84
void main() // Deja de leer todo lo primero y vamonos a:
{
int const disp [10] = /*{0x3f, 0x06, 0x5b, 0x4f,0x66, //declaramos los vectores para el display (Catodo Común)
0x6d, 0x7d, 0x07, 0x7f, 0x6f};*/
{0x40, 0x79, 0x24,0x30, 0x19, //declaramos los vectores para el display (Anodo Común)
0x12, 0x02, 0x78, 0x00, 0x18};
int uni,dec,multi,k; //Variables para los displays y k como retardo
int b=1; // Bandera lógica
int a=1; //Bandera lógica
float temp,temperatura; //Variables para las operaciones y así obtener la temperatura dentro del PIC
float dato;
SETUP_TIMER_2(t2_div_by_16,200,10); //definimos el Timer 2
enable_interrupts(GLOBAL); //Activamos las interrupciones globales
setup_adc_ports(2); //número de puertos ADC, puse 2 porque aveces conecto otro sensor y sacar promedios.
setup_adc(adc_clock_div_32); //Configuración de los ADC
set_adc_channel(0); //Activamos el ADC 0
delay_us(10); //Esperamos 10 microsegundos
set_tris_B(0x00);
set_tris_C(0x80); //Configuración de puertos.
set_tris_D(0x00);
portb=0; //Limpiamos el puerto b, que es donde estan conectados los displays de 7 segmentos.
while (TRUE) //Programa
{
dato = read_adc(); //Leemos el ADC y metemos el valor a la variable dato
read_adc(ADC_START_ONLY); //decirle al pic que solo y únicamente lea el ADC para una buena lectura
dato = read_adc(ADC_READ_ONLY); //meter de nuevo el valor a dato para corroborar
temp = (0.0196078*dato); //¿porqué 0.0196078? 5 volts entre 255 (recordemos que estamos trabajando con 8 bytes del ADC) nos da ese numero, o sea conversion de Analógico a digital.
multi = temp*100; //multiplicamos por 100 para tener la temperatura real entre 10.
dec = multi/10; //Con esta operación solo tengo el dato de las decenas
uni = multi%10; //Con esta solo tengo el dato de las unidades en una variable
temperatura = temp * 100; //Temperatura con el valor verdadero.
// Control para encender o apgar un ventilador o una bomba
if(temperatura > 29 && a==0) //Se activa D2 (Ventilador)
{
b=1;
output_high(PIN_D2);
output_low(PIN_D1);
}
if(temperatura <= 29 && temperatura >= 27) //Todo esta inactivo
{
b=1;
output_low(PIN_D2);
output_low(PIN_D1);
}
if(temperatura < 27 && b==0) //Se activa D1 (Calentador)
{
a=1;
output_low(PIN_D2);
output_high(PIN_D1);
}
if(temperatura < 25)
{
b=0;
}
if(temperatura > 31)
{
a=0;
}