Autor Tema: Como displayar una variable int16 en cutro display de 7seg?  (Leído 2120 veces)

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

Desconectado Medusa

  • PIC18
  • ****
  • Mensajes: 252
Como displayar una variable int16 en cutro display de 7seg?
« 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?

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Como displayar una variable int16 en cutro display de 7seg?
« Respuesta #1 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...
« Última modificación: 04 de Febrero de 2010, 14:30:56 por Menta »
     

Desconectado erdanieee

  • PIC10
  • *
  • Mensajes: 44
Re: Como displayar una variable int16 en cutro display de 7seg?
« Respuesta #2 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 :-)
« Última modificación: 04 de Febrero de 2010, 14:42:39 por erdanieee »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Como displayar una variable int16 en cutro display de 7seg?
« Respuesta #3 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
El papel lo aguanta todo

Desconectado Rodricity

  • PIC10
  • *
  • Mensajes: 43
Re: Como displayar una variable int16 en cutro display de 7seg?
« Respuesta #4 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

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Como displayar una variable int16 en cutro display de 7seg?
« Respuesta #5 en: 06 de Febrero de 2010, 00:27:03 »
El famoso 4511...

     


 

anything