TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Medusa en 04 de Febrero de 2010, 12:56:52

Título: Como displayar una variable int16 en cutro display de 7seg?
Publicado por: Medusa en 04 de Febrero de 2010, 12:56:52
Hola estoy usando un pic18f452 y necesito displayar en 4 display de 7 segmentos el valor de una variable int16, la rutina de multiplexado de las digitos ya lo he desarrollado pero lo que no entiendo como trasferir el valor de la variable int16 al formato de 7seg, alguien me podria dar una sugerencia o decir como hacerlo?
Título: Re: Como displayar una variable int16 en cutro display de 7seg?
Publicado por: Menta en 04 de Febrero de 2010, 14:23:06
Primero debes dividir la variable en sus cuatro dígitos... la siguiente es una rutina que se me ocurrió ahora, no está probada....

numero = tu_variable_de_16_bits;
For(a=0;a<4;a++)
{
digito[a] = numero%10
numero=(int)(numero/10)
}
//digito[0] es la unidad
//digito[1] es la decena
//digito[2] es la centena
//digito[3] es la unidad de mil

Después debes convertir los dígitos al código de 7 segmentos... en este caso fijate que usé los 1(unos) para encender el segmento, eso depende si en tu circuitos usas displays cátodo común o ánodo común...
y según como conectes los pines del pic a los terminales del display es que deberás modificar o no la tabla que yo hice...(yo usé los 7 bist más significativos)

void to_7seg(int16 digi)
{
switch(digi)
{
case 0: dato=0b00000000; break;
case 1: dato=0b01100000; break;
case 2: dato=0b11011010; break;
case 3: dato=0b11110010; break;
case 4: dato=0b01100110; break;
case 5: dato=0b10110110; break;
case 6: dato=0b10111110; break;
case 7: dato=0b11100000; break;
case 8: dato=0b11111110; break;
case 9: dato=0b11110110; break;
}
//dato podría ser directamente el puerto de salida...
}

ejemplo de llamada:

to_7seg(digito[2]);

sólo faltaría adaptarla a tu multiplexado...
Título: Re: Como displayar una variable int16 en cutro display de 7seg?
Publicado por: erdanieee en 04 de Febrero de 2010, 14:37:08
Hola, yo una vez hize algo parecido y despues de pensar un rato sólo se me ocurrió hacerlo en 2 pasos; primero transformar el int16 a unidades (N % 10), decenas ((N % 100) / 10), centenas ((N % 1000) / 100) y millares ((N % 10000) / 1000) y despues con una función estática transformar cada dígito al formato 7seg. Para acelerar un poco la rutina, puse además un flag para ahorrarme ese engorroso cálculo mientras no hubiera cambios en el contador.

    Si no tienes problemas de memoria, otra opción sería llevar tú la cuenta de cada dígito en 4 variables separadas. Es bastante más rápido pero necesitas más espacio...


Editado: Menta, me lo has quitado :-)
Título: Re: Como displayar una variable int16 en cutro display de 7seg?
Publicado por: MLO__ en 05 de Febrero de 2010, 00:57:46
Hola.

También se podría usar la función sprintf(); y despliegas el buffer por medio de interrupciones y puede transferir números (y letras también) con la función strcpy().

Saludos
Título: Re: Como displayar una variable int16 en cutro display de 7seg?
Publicado por: Rodricity en 05 de Febrero de 2010, 17:34:51
 o puedes usar un chip que transforme de BCD a 7 segmentos, asi solo necesitarias 4 pines por numero, y en 2 puertos ya tienes el numero completo
Título: Re: Como displayar una variable int16 en cutro display de 7seg?
Publicado por: Menta en 06 de Febrero de 2010, 00:27:03
El famoso 4511...

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=29352.0;attach=11178)