TODOPIC

Simuladores, editores de PCB, etc => Simuladores de circuitos => Mensaje iniciado por: fergar2 en 20 de Enero de 2004, 05:08:00

Título: Mostrar resultador por displays
Publicado por: fergar2 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.
Título: RE: Mostrar resultador por displays
Publicado por: cucaracha 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!!
Título: RE: Mostrar resultador por displays
Publicado por: pocher 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
Título: RE: Mostrar resultador por displays
Publicado por: fergar2 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;
}
Título: RE: Mostrar resultador por displays
Publicado por: cucaracha 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!!

Título: RE: Mostrar resultador por displays
Publicado por: fergar2 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.