TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: underwol2 en 02 de Mayo de 2010, 21:38:16
-
hola quisiera hacer un termometro con lm35 que active un relevo a determinada temperatura
alguien del foro tiene un ejemplo de un código escrito en c con pcw pic c ojala que no sea muy largo es para practica
ejemplo que si llega a 28 grados active el relevo o (relay)
-
Pues .... :?
Para que micro sería?
-
tengo el 16f873a en una placa de desarrollo queme arme para practicar y gualmente tendria que cambiar el orden de los pines del pic si es otro pic
-
Que tienes hecho hasta ahora?
-
tengo de guia este codigo adaptado al pic mela epasado jugando con el espero que todabia funcione
#include <16f873a.h>
#device adc=10 //Usa resolución de 10 bits
#use delay(clock=4000000)
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
#define LCD_ENABLE_PIN PIN_C2
#define LCD_RS_PIN PIN_C0
#define LCD_RW_PIN PIN_C1
#define LCD_TYPE 2
#include <lcd.c>
#use standard_io (D)
void main (void)
{
float temper,medicion;
lcd_init(); //Inicia LCD
lcd_putc(" Termometro\n"); //Saca texto
lcd_putc(" con LM35"); //Saca texto
delay_ms(2000);
lcd_putc("\f"); //Limpia pantalla
lcd_putc("Temperatura\n"); //Saca texto
lcd_putc("actual"); //Saca texto
delay_ms(1000);
lcd_gotoxy(14,2); //Acomoda cursor LCD
lcd_putc("oC");
while (1)
{
lcd_gotoxy(8,2); //Acomoda cursor LCD
lcd_putc(" "); //Limpia ese sector de pantalla
lcd_gotoxy(8,2); //Acomoda cursor LCD
setup_adc (adc_clock_internal);
setup_adc_ports (all_analog);
set_adc_channel (0); //Elige canal a medir RA0
delay_us (20);
medicion=read_adc (); //Hace conversión AD
setup_adc (adc_off); //Apaga ADC
temper=medicion*(0.48875); //Pasa binario a °C
//////////////////////////////////////////////////////////////////////////////////
// el "0.48875" sale de dividir 5/1023 y el resultado de eso multiplicarlo por 100
// el 5 sale de los 5 voltios aplicado a el voltage de referencia, los 1023 salen
// de los 10 bit de resolucion del conversor analogico digital que seleccionamos.
// Si utlizaramos la resolucion de 8 bist del conversor analogico digital, la
// formula fuera (5/255)*100 ya que con 8 bits el numero maximo posible es de 0-255
//////////////////////////////////////////////////////////////////////////////////
printf(lcd_putc,"%02.1f",temper); //xxx.x °C
delay_ms (1000);
}
}
-
tienes algun problema con ese codigo? Lo unico que falta seria la condicion para activar el relé.
-
Hola.
La configuración del ADC habría que sacarla del while() y quitar la linea en la que apaga el ADC. Para encender el rele, basta con un if comparando el valor al que quieres que se active.
Saludos
-
gracias por las respuestas podrían ayudarme con la parte del código lla que soy novato y no manejo muy bien la programacion de pic y estoy aprendiendo a programar en c
-
la solucion del problema gracias alspersonas que me alludaron a solucionar
el codigo es el siguiente
temper=medicion*(0.48875); //Pasa binario a °C
if(temper>=28) // Pregunta si temper es igual 28
output_high(PIN_b0);// este pin activa el rele
else //sino
output_low(pin_b0);este pin apaga el rele
-
:-/
Bien hecho!!!!!
Saludos