Autor Tema: Mostrar resultador por displays  (Leído 1874 veces)

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

Desconectado fergar2

  • PIC10
  • *
  • Mensajes: 27
Mostrar resultador por displays
« en: 20 de Enero de 2004, 05:08:00 »
Hola a todos.
¿Como puedo mostrar un resultado almacenado en un entero del PIC por unos displays BCD?.
El problema q le veo es como a los displays les entran 4 bits a partir del numero 9 salen los caracteres propios de numeros hexadecimales (A,B,C,D...), yo quiero que al llegar al 9 se vuelva a poner a 0.
¿Alguna sugerencia?.
Gracias.

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Mostrar resultador por displays
« Respuesta #1 en: 20 de Enero de 2004, 09:30:00 »
Necesitas una rutina de conversión de binario a bcd.
No indicas en que lenguaje programas. De todos modos te paso esta función para C:
Codigo:

/*******************************************************************/
/*************** RUTINA DE CONVERSIÓN BINARIO A BCD ****************/
/***** Convierte un valor BINARIO de 8bits a otro BCD de 8bits *****/
/************* El rango de entrada debe ser de 00 a 99 *************/
/*******************************************************************/

byte bin2bcd(byte valor_binario)
{
byte temp;
byte retval;

temp = valor_binario;
retval = 0;

while(1)
{
// Get the tens digit by doing multiple subtraction of 10 from the binary value
if(temp >= 10)
{
temp -= 10;
retval += 0x10;
}
else // Get the ones digit by adding the remainder.
{
retval += temp;
break;
}
}

return(retval);
}



Espero que te sirva...

Saludos!!
Saludos desde Huelva (ESPAÑA)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
RE: Mostrar resultador por displays
« Respuesta #2 en: 20 de Enero de 2004, 09:53:00 »
Me dá la impresión que es cuestión de programación y de "decirle" al contador que cuando sobrepase el nueve que vuelva a empezar con el código del cero. Si quieres muestra como lo has hecho.

Un saludo

Desconectado fergar2

  • PIC10
  • *
  • Mensajes: 27
RE: Mostrar resultador por displays
« Respuesta #3 en: 21 de Enero de 2004, 05:54:00 »
Gracias por la ayuda.
Al final lo he hecho mediante esta funcion basada en el código de Cucaracha (espero q no estes a favor de las patentes de SW ), la idea es la misma simplemente q en lugar de hacer restas sucesivas lo hago con una division y que sirve para mostrar hasta el 9999. Luego muestra por unos displays conectados a los puertos B y C el resultado.

void muestra_display(int valor_binario)
{
   unsigned char byte0=0x00;
   unsigned char byte1=0x00;
   unsigned char byte2=0x00;
   unsigned char byte3=0x00;
   
   int valor_aux=0;

   
   byte3=valor_binario/1000;
   valor_aux=valor_binario%1000;
   byte2=valor_aux/100;
   valor_aux=valor_aux%100;
   byte1=valor_aux/10;
   valor_aux=valor_aux%10;
   byte0=valor_aux;
   
   PORTB=(byte1<<4)+byte0;
   PORTC=(byte3<<4)+byte2;
}

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Mostrar resultador por displays
« Respuesta #4 en: 21 de Enero de 2004, 10:56:00 »
Ok, te cedo los derechos, aunque... no es una rutina mia. Me la pasaron con un ejemplo para el uso un reloj en tiempo real.
Una cosa. Usas un entero, que por defecto al menos en CCS tiene 8bits (o eso tengo entendido). Osea 256 combinaciones. Vamos, que nunca llegarás a usar ese cuarto display. Me equivoco??

Saludos!!

Saludos desde Huelva (ESPAÑA)

Desconectado fergar2

  • PIC10
  • *
  • Mensajes: 27
RE: Mostrar resultador por displays
« Respuesta #5 en: 22 de Enero de 2004, 13:07:00 »
Puede que tengas razón, aunque yo uso el compilador de Hi Tech y creo que los enteros los guarda en 2 bytes, en cuyo caso necestaria otro display mas, pero vamos que para hacer las pruebas que necesitaba me sirve.
Un saludo.


 

anything