# error código pic



## robotic (Sep 10, 2010)

hola amigos del foro despues de rebuscar y no encontrar la respuesta, pregunto aca
tengo el siguiente código, no me sale error pero al compilar y usarlo en proteus no sucede nada y yo quiero que me de la temperatura del lm35 espero alguno de ustedes me pueda orientar 

#include "C:\Documents and Settings\Administrador\Datos de programa\PICC\Projects\prueba\prueba.h"
*#include <lcd.c>*
*#define use_portd_lcd TRUE*


float tension, tensionV;
float temperatura;
void leerSensor(int sensor);

void main()
{

 * setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
 * setup_adc(ADC_CLOCK_INTERNAL);
 * setup_psp(PSP_DISABLED);
 * setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
 * setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
 * setup_timer_2(T2_DIV_BY_1,0,1);
 * setup_comparator(NC_NC_NC_NC);
 * setup_vref(FALSE);

 * // TODO: USER CODE!!
*lcd_init();
(lcd_putc,("c"));*
 while (1){ //Bucle infinito
 * * *leerSensor(0);
 * * *leerSensor(1);
 * * *leerSensor(2);
 * * *leerSensor(3); 
 * }
}

void leerSensor(int sensor){
 * set_adc_channel(sensor);
 * delay_ms(20);
 * int8 tension=read_adc();
 * putchar(tension); * //tensión leida por el ADC
/* tensionV=(tension/1024)*5; *//tensión en voltios
 * temperatura= tensionV/0.01; //Temperatura en grados Cº
 * printf(%f temperatura);*/
 * delay_ms(80);
}


----------



## EINNER C (Sep 10, 2010)

Hola Robotic

primero q nada seria bueno q mostraras el contenido de prueba.h, me imagino q alli indicas el pic utilizado, ... por el momento estoy corto de tiempo, en este post encntraras un ejemplo q subi hace un tiempo q hace lo q requieres y del q quizas t puedas guiar

https://www.forosdeelectronica.com/f24/programa-conversion-d-pic-16f877-6061/#post174702

alli esta el codigo fuente y el archivo de simulacion....

saludos...


----------



## robotic (Sep 10, 2010)

aca esta el .h

#include <16F877A.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)


----------



## Dedust (Sep 10, 2010)

Hola robotic primero que nada tienes que usar un acondiconador de señal para el LM35 ya q este a su salida da 10mV/ºC. Usa un amplificador de voltaje y un seguidor de tension.


----------



## robotic (Sep 10, 2010)

Dedust dijo:


> Hola robotic primero que nada tienes que usar un acondiconador de señal para el LM35 ya q este a su salida da 10mV/ºC. Usa un amplificador de voltaje y un seguidor de tension.



hola gracias por responder, el lm35 es solo de prueba y esta funcionando porque lo probe con el labview y funciona todo el rato, yo solo quiero que el lcd me muestre los datos que entran al pic. espero me puedas ayudar, gracias de antemano


----------



## Dedust (Sep 11, 2010)

Robotic no entiendo esta instruccion de tu programa.
* set_adc_channel(sensor);
sensor en una variable?? por que no la veo declarada y tampoco donde pueda cambiar su valor. Que tal si pruebas colocando 
* set_adc_channel(0);
Asi habilitas el canal 0 del A/D a ver si lo esta leyendo. Prueba y comenta. 
Saludos.


----------



## Ferny (Sep 12, 2010)

Dedust, eso está bien, dentro del main() llama a la función leerSensor() pasando como parámetero el número entero, que es lo que usa luego en set_adc_channel()

Otra cosa, si estás usando el lcd.c que yo me sé, en el pin D3 no va nada conectado, todo va entre D0-D2 y D4-D7, así que tienes mal hechas la conexiones según vi en tu imagen...

Por otro lado mejor adjunta en tu respuesta el código, los .c y .h que estás usando, y trabajamos ya con ellos, porque hay varios errores en el código que pones y que no debería compilar, así que quizá está modificado??? Ah, cuando haces el printf en la última función, eso no lo muestra en el LCD, sino que lo manda por el puerto serie, creo... es decir la función está mal planteada.

Creo que poniendo bien las conexiones en el esquemático, si al principio pones:

// TODO: USER CODE!!
*lcd_init();
lcd_putc("Hola Mundo");*

Debería mostrarlo en el LCD... con eso al menos validas las conexiones entre PIC y LCD.

Saludos


----------



## robotic (Sep 13, 2010)

Hola gracias por sus respuestas las he ido complementando a mi estudio, he logrado establecer comunicación del labview con el proteus pero ahora me ocurre el siguiente problema, el labview lle cada 500 ms y en el código c tengo 
void leerSensor(int sensor)         //
{
   set_adc_channel(sensor);         //
   delay_us(20);                    //espero 20 microsegundos
   tension=read_adc();              //

   printf("%c", tension);  //envia el valor de la tension
   delay_ms(80);                    //espero 80 milisegundos
}

por mas que he movido los números no logro que sincronicen  me han dicho que mejor intente enviar al pic la señal para que sepa cuando tiene que enviar los datos pero no se por donde tendría que hacer eso. espero me puedan ayudar


----------



## EINNER C (Sep 15, 2010)

hola robotic

en el proteus puede verificar el tiempo exacto entre envio y envio, solo pones un breack point cuando envias el valor, y le das correr dessde dicha instruccion y abajo te muestra el tiempo exacto, si no tienes el mplab, cargas el .cof, aunque nunca se me presento ese problema, labview me recibia a la velocidad en q le enviaba y ademas enviaba tambn muy rapido, alguna vez necesite enviar datos cada 2ms y no hubo problema, lo q con matlab y visual no pude lograr,,,, cualquier cosa, estoy para colaborar

saludos,,,,


----------

