Autor Tema: Decimales por LCD  (Leído 1617 veces)

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

Desconectado COMBAT

  • PIC10
  • *
  • Mensajes: 11
Decimales por LCD
« en: 24 de Julio de 2007, 11:40:20 »
   Saludos a todos:
   Estoy programando en C un PIC16F877 y quiero que muestre por LCD, a medida que presiono un botón, números decimales: 0,0 - 0,1 - 0,2 ... 1,0 .... el problema aparece cuando voy en 0,5 presiono el boton aparece 0,6 (normal) presiono denuevo para ir a 0,7 pero se queda en 0,6 luego presiono denuevo y aparece 0,8 esto sucede cada siete números, no aparece el 1,4 sino que se queda en 1,3 y luego aparece 1,5. Hay solución para esto. De ante mano muchas gracias. :)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Decimales por LCD
« Respuesta #1 en: 24 de Julio de 2007, 11:45:54 »
Habría que ver el programa, pero suena a que está haciendo un redondeo que no tienes controlado. Mira si los tipos de variables que estás usando son los correctos y utiliza el operador cast donde corresponda.
Si no lo consigues, pega aquí el programa.

Desconectado COMBAT

  • PIC10
  • *
  • Mensajes: 11
Re: Decimales por LCD
« Respuesta #2 en: 24 de Julio de 2007, 12:42:15 »
   Bueno en realidad no le aplico mucho a la programación pero la subrutina es la siguiente:


#byte port_b=6
int key2;      // variable que corresponde al no. de pulsaciones del boton
float key3;   // variable que transforma a key2 en decimal

int tiempo_acel(float &key3)   // subrutina devuelve al prog. principal el no. decimal
{

key2=0;     
port_b=0;

while(1){
   while(input(PIN_B1))   // RB1 boton para aumentar no.
     {
       restart_wdt();
       key2++;
       key3=0.1*key2;
       delay_ms(200);
    lcd_gotoxy(16,1);
    printf(lcd_putc," %1.1f",key3);
    }

     while(input(PIN_B2))   // RB2 boton para disminuir no.
      {
       restart_wdt();
       key2--;
       key3=0.1*key2;
       delay_ms(200);
    lcd_gotoxy(16,1);
    printf(lcd_putc," %1.1f",key3);
    }
    if((input(PIN_B4))&&(key2!=0)){   // RB4 es como el "enter"
    return key3;}
}
}

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Decimales por LCD
« Respuesta #3 en: 24 de Julio de 2007, 13:43:05 »
Prueba así:

Código: C
  1. #byte port_b=6
  2. int key2;      // variable que corresponde al no. de pulsaciones del boton
  3. float key3;   // variable que transforma a key2 en decimal
  4.  
  5. int tiempo_acel(float &key3)   // subrutina devuelve al prog. principal el no. decimal
  6. {
  7.  
  8. key2=0;      
  9. port_b=0;
  10.  
  11. while(1){
  12.    while(input(PIN_B1))   // RB1 boton para aumentar no.
  13.      {
  14.        restart_wdt();
  15.        key2++;
  16.        key3=0.1*(float)key2;
  17.        delay_ms(200);
  18.     lcd_gotoxy(16,1);
  19.     printf(lcd_putc," %1.1f",key3);
  20.     }
  21.  
  22.      while(input(PIN_B2))   // RB2 boton para disminuir no.
  23.       {
  24.        restart_wdt();
  25.        key2--;
  26.        key3=0.1*(float)key2;
  27.        delay_ms(200);
  28.     lcd_gotoxy(16,1);
  29.     printf(lcd_putc," %1.1f",key3);
  30.     }
  31.     if((input(PIN_B4))&&(key2!=0)){   // RB4 es como el "enter"
  32.     return key3;}
  33. }
  34. }

Desconectado COMBAT

  • PIC10
  • *
  • Mensajes: 11
Re: Decimales por LCD
« Respuesta #4 en: 24 de Julio de 2007, 16:05:22 »
    Malas noticias... el problema persiste. Mi conocimiento en c es muy básico asi que no tengo mas ideas que aportar a mi programa como la utilización de otras instrucciones. De todas formas gracias nocturno por responder.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Decimales por LCD
« Respuesta #5 en: 24 de Julio de 2007, 17:04:01 »
La otra opción válida es trabajar siempre con enteros y dividir justo en el momento del printf:

printf(lcd_putc," %1.1f",(float)key3/10.0);

Así seguro que te va a funcionar

Desconectado COMBAT

  • PIC10
  • *
  • Mensajes: 11
Re: Decimales por LCD
« Respuesta #6 en: 25 de Julio de 2007, 15:27:58 »

    Funciona excelente...... salve oh gran nocturno !

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Decimales por LCD
« Respuesta #7 en: 25 de Julio de 2007, 15:30:09 »
 8) Enhorabuena