Autor Tema: Duda programacion  (Leído 3748 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado imnos

  • PIC10
  • *
  • Mensajes: 23
Duda programacion
« en: 03 de Noviembre de 2009, 12:29:42 »
Hola, mi nombre es Imnos, aunque llevo registrado en el foro desde hace un tiempo, la verda es que practicamente no he escrito nada.
Desde hace poco intento aprender programacion en C por hobby y, mas o menos he ido leyendo el foro con ejemplos expuestos aquí, en diversos temas etc para poder aprender, ahora bien:
Desde hace un par de semanas intento montar en la protoboard un termometro con un LM35DZ que tengo por aqui suelto, el problema es que a la hora de correr el pic, en la pantalla del LCD que tengo puesta me marca valores un tanto extraños (unos 18.5 ºC), digo extraños porque tengo un termometro convencional comprado el cual arroja por su LCD unos 20.5 ºC.
Espero que podais ayudarme o al menos intentarlo
Os dejo el programa realizado en C por el compilador CCS:


#include "16f876.h"                    // Pic a utilizar
#device adc=10                         // Usa resolución de 10 bits
#use delay(clock=4000000)       // Cristal a utilizar
#fuses xt,nowdt,nobrownout,nolvp,noprotect   // Fusibles
#include "flex_lcd.c"
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7

#define LCD_RS PIN_C0
#define LCD_RW PIN_C1
#define LCD_E  PIN_C2              // Libreria para utilizar LCD

void main (void)
{
float tempx,value;
lcd_init();                                    // Inicia LCD
lcd_putc(" Termometro\n");          // Saca texto   \n= cambio de linea
lcd_putc(" Digital");               // Saca texto
delay_ms(800);
lcd_putc("\f");                             // Limpia pantalla
lcd_putc("Temp actual\n");          // Saca texto                    
delay_ms(1000);
lcd_gotoxy(14,2);                       // Acomoda cursor LCD
lcd_putc("oC");
while (1)
{
lcd_gotoxy(7,2);      // Acomoda cursor LCD
lcd_putc(" ");          // Limpia ese sector de pantalla
lcd_gotoxy(7,2);     // Acomoda cursor LCD

setup_adc (adc_clock_internal);     // selecciona el moodo para la configuracion del modulo conversor A/D
                                    //correspondientes a los bits7:6 del ADCON0
setup_adc_ports (all_analog);       //DEFINICION DE LAS ENTRADAS ANALOGICAS CORRESPONDIENTE A LOS BITS 3-0 DEL ADCON1
set_adc_channel (0);                // Elige canal analogico a medir
delay_us (20);                      //espera 20 microseg
value=read_adc ();              // Hace conversión A/D
             // Apaga ADC
tempx=value*(0.48875);     // Pasar a ºC
 
printf(lcd_putc,"%02.1f",tempx);  
delay_ms (2000);
}
}

Gracias de antemano.

PD: Una ultima pregunta: lo subrayado en Rojo alquien me puede explicar de donde viene esa cifra?
« Última modificación: 03 de Noviembre de 2009, 12:41:56 por imnos »

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Duda programacion
« Respuesta #1 en: 03 de Noviembre de 2009, 13:41:18 »
lo subrayado quiere decir q se representara un float de dos caracteres y una cifra flotante
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda programacion
« Respuesta #2 en: 03 de Noviembre de 2009, 14:13:26 »
Claro, como indica jhozate, se presenta 2 cifras enteras y 1 decimal El 0 antes del 2 indica que si el numero es menor a 10.0 debería agregar un 0 en la segunda cifra entera (por ejemplo 05.3), pero esto en flotante no funciona, por lo menos a mi  :? En el caso de manejar enteros funciona correctamente  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Duda programacion
« Respuesta #3 en: 03 de Noviembre de 2009, 15:27:02 »
Hola

El LM35 es un sensor bastante impreciso con error de +/- 0.5°C.

Además el ADC del pic a 10 bits tiene una precisión de 4.88mV/bit con una fuente de 5V y sus dos últimos bits (1 y 0) se consideran erróneos en la hoja de especificaciones.

Por lo que si sumas el error del LM35, más el error de los dos últimos bits del ADC más el error de la fuente de referencia del ADC de 5V llegarás a la conclusión de que los 20.5°C que mides... son los esperados después de tanto error que se acarreó.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Duda programacion
« Respuesta #4 en: 03 de Noviembre de 2009, 15:51:17 »
Hola.

Cuando usas ese tipo de sensores, debes generar la curva de calibración y con esa curva generar la función de correlación entre el valor medido real (el de tu patrón de temperatura) y el valor medido por tu sensor.

Saludos
El papel lo aguanta todo

Desconectado imnos

  • PIC10
  • *
  • Mensajes: 23
Re: Duda programacion
« Respuesta #5 en: 03 de Noviembre de 2009, 16:57:40 »
Gracias por contestar a todo el mundo tan rapidamente.
Ya he entendido lo que subraye anteriormente, y respecto a las contestaciones dadas entiendo que si pongo en vez de "%02.1f", esta cifra "%01.1" o esta otra %04.2fC" daria igual. si no es como yo lo digo (que no sera) por favor corregir mi error.
Por cierto la f significa: flotante con truncado?
y la C significa: Caracter?

Respecto a la contestacion de Migsantiago, entiendo ya el porque de la inestabilidad de la temperatura, Gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda programacion
« Respuesta #6 en: 03 de Noviembre de 2009, 17:18:44 »
No, si colocas %1.1f, mostrará solo 9.9 o 0.1 por ejemplo, en cambio %4.2f se puede mostrar 1243.25

Cuando tengas una variable y quieras mostrarla como carácter usas c, pero %c, no %4.2fc porque el compilador indicará erro.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado imnos

  • PIC10
  • *
  • Mensajes: 23
Re: Duda programacion
« Respuesta #7 en: 03 de Noviembre de 2009, 18:30:23 »
Ok pero en el libro que me compre para poder aprender la simulacion llamado  "Compilador C CCS para microcontroladores" en un ejemplo de practica A/D con un termometro LM35, el codigo indica lo que anteriormente mencione (os expongo una parte de el):

do{
 value=read_adc();
tv=5.0*value/1024.0;
y=41.0*tv-55.0;
printf(lcd_putc,"\nt=%04.2fC",y);
}while (TRUE);
}

lo coloco porque se me hace raro, aunque Suky no pongo en tela de juicio lo que sabes de programacion (ya que seguro estaras en lo cierto)

Por cierto Suky, por favor me podrias decir donde puedo encontrar las equivalencias, abajo referidas, que has puesto antes para explicarme la pregunta que hice?

"No, si colocas %1.1f, mostrará solo 9.9 o 0.1 por ejemplo, en cambio %4.2f se puede mostrar 1243.25"


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Duda programacion
« Respuesta #8 en: 03 de Noviembre de 2009, 23:11:51 »
La C es para indicar los grados centigrados.

Todo lo respectivo a la funcion printf() esta en la ayuda del CCS.

Saludos
El papel lo aguanta todo

Desconectado imnos

  • PIC10
  • *
  • Mensajes: 23
Re: Duda programacion
« Respuesta #9 en: 04 de Noviembre de 2009, 08:35:58 »
Gracias!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Duda programacion
« Respuesta #10 en: 04 de Noviembre de 2009, 10:52:30 »
Cuando tengas una variable y quieras mostrarla como carácter usas c, pero %c, no %4.2fc porque el compilador indicará erro.

No va a marcarte error, ya que esta definida la salida con %4.2f luego de eso, es decir la c, el printf() ya lo toma como parte del string.

Saludos
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda programacion
« Respuesta #11 en: 04 de Noviembre de 2009, 13:08:55 »
Cuando tengas una variable y quieras mostrarla como carácter usas c, pero %c, no %4.2fc porque el compilador indicará erro.

No va a marcarte error, ya que esta definida la salida con %4.2f luego de eso, es decir la c, el printf() ya lo toma como parte del string.

Saludos
Si es cierto, fue un  bug!  :D :D Estaba concentrado  :shock: en mostrar una variable como ascii  :tongue:

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado imnos

  • PIC10
  • *
  • Mensajes: 23
Re: Duda programacion
« Respuesta #12 en: 06 de Noviembre de 2009, 20:32:53 »
Ciertas son las palabras de MLO_ pues, por probar y aprender,  modifique el programa y el printf lo puse como habeis dicho ("%4.2fC") y no me marca ningun error, al reves me lo marco como si fuera otro caracter

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Duda programacion
« Respuesta #13 en: 06 de Noviembre de 2009, 21:09:52 »
Si quieres agregar el º en el lcd coloca el caracter ß (Alt + 225)

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado imnos

  • PIC10
  • *
  • Mensajes: 23
Re: Duda programacion
« Respuesta #14 en: 07 de Noviembre de 2009, 10:47:12 »
Gracias Suky!


 

anything