TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Cesareus01 en 24 de Abril de 2017, 12:50:40
-
Hola a todos, realice 2 programas para termostatos distintos para el pic16f886, uno para una sonda lm35 y el otro para una ds18b20 one wire, los compile con picc, las simulaciones en proteus me funciónan perfecto pero en la protoboard no me funcionan, tiendo a pensar que es el lcd (ya que lo compre muy barato y no en una casa del rubro) o el grabador pero el picpgm-1.9.2.3-win32-x86 me detecta bien el pic y en el log me salen perfecto los fuses que cargue y no me salta ningún error en la grabación ni en la lectura, y creo haber hecho todo el conexionado apropiado y VDD es correcto. Probé 100 configuraciones distintas en el programa y elimine casi todo dejando solo los comandos de impresión en pantalla, también configure pines directamente en main.h y cambie frecuencia de reloj y config de la declaración #use delay(internal 8M), incluí la declaración setup_oscillator(OSC_8MHZ|OSC_INTRC). en el display (que es azul) se ven los cuadraditos de pixels en blanco sobre fondo azul Les agradecería cualquier ayuda y desde ya muchas gracias :(
MCLR resist de 10k a VCC y pulsador a masa.
conexiones LCD
V0 en medio de pot de 10k a vcc y gnd
k GND y A a Vcc por medio de resistor de 100 ohms
vdd 5v
vss GND
RB7 D7
RB6 D6
RB5 D5
RB4 D4
RB2 RW
RB1 RS
RB0 E
El programa: Main.h y main. c:
MAIN.H
#include <16F886.h>
#device ADC=10
#fuses INTRC_IO,NOWDT,PUT,MCLR,NOPROTECT,NOCPD,NOBROWNOUT
#fuses NOIESO,NOFCMEN,NOWRT,NODEBUG,NOLVP
#use delay(internal,clock=8000000)
#define use_portb_lcd TRUE
MAIN.C
#include <main.h>
#include <lcd.c>
#define RELE PIN_C4
#define RELE1 PIN_C3
#define SW1 PIN_A1
#define SW2 PIN_A2
#define SW3 PIN_A3
#define SW4 PIN_A4
#use fast_io(A) // Configuración rápida del puerto A
#use fast_io(B) // Configuración rápida del puerto B
#use fast_io(C) // Configuración rápida del puerto C
long conversion;
float temo;
// ************** Programa Principal ************** //
void main ()
{
//******* Variables *******//
int mical=25;
int mahel=27;
set_tris_a(0x3f);
set_tris_b(0x00);
set_tris_c(0x00);
delay_ms(1000);
lcd_init (); // Inicializa la libreria para manejar el LCD.
delay_ms(1000);
printf ( LCD_PUTC, "\f" ); // Limpia la LCD.
delay_ms(200);
lcd_gotoxy(4,1);
printf(lcd_putc,"TEMP:");
delay_ms(200);
lcd_gotoxy(12,1); //Acomoda cursor LCD
lcd_putc("oC");
delay_ms(200);
lcd_gotoxy(4,2);
printf(lcd_putc,"TC:");
delay_ms(200);
lcd_gotoxy(9,2);
printf(lcd_putc,"-TR:");
delay_ms(200);
while ( true )
{
setup_adc(adc_clock_div_32);
setup_adc_ports(sAN0);
set_adc_channel(0);
delay_us (20);
conversion=read_adc();
temo= conversion*(0.48875);
lcd_gotoxy(9,1);
printf(lcd_putc,"%F",temo);
lcd_gotoxy(7,2);
printf(lcd_putc,"%d",mical);
lcd_gotoxy(13,2);
printf(lcd_putc,"%d",mahel);
delay_ms(300);
if(input(SW1)){
mical++;}
if(input(SW2)){
mical--;}
if(input(SW3)){
mahel++;}
if(input(SW4)){
mahel--;}
if(temo<mical)
output_high(RELE);
else
output_low(RELE);
if(temo>mahel)
output_high(RELE1);
else
output_low(RELE1);
}
}
-
Bueno, error de conexión del lcd, ya funciona, pero le conecto el lm35 con r de 100k a gnd y me da 0.00 grados. Evidentemente no me esta leyendo AN0, no se cual puede ser el problema. Gracias desde ya.
-
le mediste con el multimetro a la salida del LM35 ?.. Por lo menos para ver si es que tiene salida de tension. Y si es posible probarlo afuera del circuito, no vaya a ser cosa que el PIC lo este pulleando a 0V
-
Gracias por responder Killer :). El problema es que el lm35 tira 10mv x grado, para una salida decente para tester lo tendría que poner a 100 o 120 grados. Quizas sea mejor medirlo con el osciloscopio. Pero la idea es buena, me fijo y te cuento. Estuve leyendo en algunos foros que algunos le amplifican la salida con un operacional. Pero supuestamente no debería ser necesario. Saludos.
-
Pero a 25ºC tranquilamente tenes 0.25V o 250mV, y un multimetro comun tiene escalas de 200mV seguro. La idea es ver si la salida no es 0V.
-
Toda la razón Killer. El lm35 me marcaba cerca de 30v a la salida!!. De todas formas se aprende un montón, configuración adc, vref, amplificación por op etc... modifiqué el programa que había hecho para one wire con un DS18B20 Y con las especificaciones de la librería 16f886.h y salió andando perfecto. Igualmente, cuando compre voy a hacer pruebas con sondas lm35 en buenas condiciones. Saludos y gracias. :mrgreen: