Autor Tema: Error código pic ayuda por favor  (Leído 2883 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Error código pic ayuda por favor
« en: 10 de Septiembre de 2010, 23:16:08 »
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);
}


aca esta el codigo .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)

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Error código pic ayuda por favor
« Respuesta #1 en: 11 de Septiembre de 2010, 00:37:11 »
Hola robotic, bienvenido al foro.  Al comienzo tienes declarada una variable: float tension y después dentro de una función tienes esta línea: int8 tension=read_adc();.  No es correcto declarar dos variables con el mismo nombre sobre todo si una de ellas es una variable global.  Luego de que soluciones lo anterior, sería mejor que declararas la variable al comienzo de la función void leerSensor(int sensor); como: int8 tensión; y luego simplemente utilizas la variable asi: tension=read_adc();

Luego al final parece que quieres mostrar el valor medido con la instrucción: putchar(tension);. Esta instrucción es para enviar un caracter por RS232 y no te va a funcionar en el LCD.  Más adelante tienes comentada esta instrucción: printf(%f temperatura);. Esta instrucción se escribiría correctamente asi: printf("%f", temperatura); y también da la salida por el RS232.  Mira el encabezado de la librería LCD.C que allí están los comandos y la forma de utilizarlos.  Para printf se puede usar por ejemplo asi con el LCD: printf(lcd_putc, "Temperatura: %f", temperatura);

Por último creo que por el voltaje de salida que da el LM35 no es conveniente conectarlo directamente a la entrada análoga.  Por aqui en el foro encuentras acondicionadores de señal para el LM35.

Saludos!
« Última modificación: 11 de Septiembre de 2010, 00:52:17 por bmb »

Desconectado robotic

  • PIC12
  • **
  • Mensajes: 55
Re: Error código pic ayuda por favor
« Respuesta #2 en: 11 de Septiembre de 2010, 02:15:22 »
Hola robotic, bienvenido al foro.  Al comienzo tienes declarada una variable: float tension y después dentro de una función tienes esta línea: int8 tension=read_adc();.  No es correcto declarar dos variables con el mismo nombre sobre todo si una de ellas es una variable global.  Luego de que soluciones lo anterior, sería mejor que declararas la variable al comienzo de la función void leerSensor(int sensor); como: int8 tensión; y luego simplemente utilizas la variable asi: tension=read_adc();

Luego al final parece que quieres mostrar el valor medido con la instrucción: putchar(tension);. Esta instrucción es para enviar un caracter por RS232 y no te va a funcionar en el LCD.  Más adelante tienes comentada esta instrucción: printf(%f temperatura);. Esta instrucción se escribiría correctamente asi: printf("%f", temperatura); y también da la salida por el RS232.  Mira el encabezado de la librería LCD.C que allí están los comandos y la forma de utilizarlos.  Para printf se puede usar por ejemplo asi con el LCD: printf(lcd_putc, "Temperatura: %f", temperatura);

Saludos!
hola gracias por responder he hecho lo que me dijiste

#include "C:\Documents and Settings\Administrador\Datos de programa\PICC\Projects\Proyecto tesis\ccs\tesis.h"
#define use_portb_lcd TRUE
#include <lcd.c>

float tension, tensionV;
float temperatura;
int8 tensión;
tension=read_adc();

void main()
{
   setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,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);
   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);*/
   printf(lcd_putc, "Temperatura: %f", temperatura);
   delay_ms(80);
}
y lo compile y el lcd solo muestra una linea negra abajo y nada mas
podrías cambiar la parte del código y enviarla por favor si es que me he equivocado en alguna parte :)

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: Error código pic ayuda por favor
« Respuesta #3 en: 11 de Septiembre de 2010, 08:59:31 »
Hola robotic, declara solamente una vez la variable tensión, pero sin tildes.  Aqui te pongo el programa mas o menos en el orden que debe ir.  Por ahora solo vas a ver la variable tensión en el LCD, luego que veas que está funcionando, te encargas de convertirla a temperatura.

Código: [Seleccionar]
#include "tesis.h"
#define use_portb_lcd TRUE
#include <lcd.c>

int8 tension;
void leerSensor(int sensor);

void main()
{
   setup_adc_ports(AN0_AN1_AN2_AN3_AN4);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   lcd_init();

   while (1)
   { //Bucle infinito
      leerSensor(0);
 //     leerSensor(1);
 //     leerSensor(2);
 //     leerSensor(3);
   }
}

void leerSensor(int sensor)
{
   set_adc_channel(sensor);
   delay_us(20);
   tension=read_adc();

   lcd_gotoxy(1,1);
   printf(lcd_putc, "Tension: %u", tension);
   delay_ms(80);
}

De todos modos revisa muy bien las conexiones del LCD ya que veo que primero lo tenias asignado al puerto D y ahora lo tienes con el puerto B.

PD Por el momento solo deberias leer el canal al que tienes conectado el sensor.

Saludos!
« Última modificación: 11 de Septiembre de 2010, 09:33:00 por bmb »


 

anything