proyecto: generador de números aleatorios verdaderos utilizando un display de matríz de leds 7 x 10

 

DICEALEATORIOS200V.jpg (112976 bytes)

 

Descripción general:

Se muestra un circuito prototipo de matriz de leds 7 x 10 para el sistema EB88, el cual se utiliza para mostrar números aleatorios verdaderos entre los valores 00..99.

Por favor dé click en la imagen de la izquierda para ver el video disponible.

El usuario debe oprimir el botón de reset del sistema para obtener cada nuevo número aleatorio.

El programa generador de los números aleatorios está desarrollado en C, para el compilador CCS. El valor de cada número, se obtiene de una variable que se está incrementando cada 2 milisegundos y se guarda en una localidad fija en memoria, durante el curso del programa.

Cuando el usuario oprime el botón de reset, se recupera de la memoria RAM el valor de esta variable, para mostrarse en el display 7 x 10. El valor recuperado es un valor aleatorio verdadero, dada la alta velocidad de incremento de la variable, comparado con el tiempo que toma el usuario entre una pulsación del botón de reset y la siguiente.

NUMEROS PSEUDOALEATORIOS VS. NUMEROS ALEATORIOS VERDADEROS

El compilador CCS cuenta con la función rand( ) para generar números pseudoaleatorios. Esta función a su vez requiere de un número "semilla" que sirve para generar el resto. Esta semilla ó "seed" se inicializa con la función srand(x).

Sin embargo, si se utiliza la función rand( ) se generan en secuencia los mismos números a partir de una misma semilla. Es por esta razón que a estos números se les conoce como pseudoaleatorios.

Para generar números aleatorios verdaderos (true random numbers), se requiere de una variable física externa que proporcione los valores. Tal sería el caso, por ejemplo de una señal de tiempo aleatoria, que es el método que se utilizó en este proyecto.

El usuario realiza la solicitud de número aleatorio al sistema oprimiendo el botón de reset. Entre el tiempo que transcurre entre una solicitud y la siguiente, se genera internamente en el programa, una variable que lleva una cuenta ascendente en un registro de 8 bits, con valores entre 0...255 (con el overflow, regresa a 0). Esta variable además, es incrementada muy rápidamente, cada 2 milisegundos dentro del programa de aplicación.

Dado que el usuario no puede anticipar el tiempo que demorará en solicitar el siguiente número al sistema, se obtiene un valor aleatorio simplemente recuperando el valor de esta variable después del último reset.

 

MATRIX7X5AG5.jpg (66440 bytes)

 

Para la construcción del módulo de matriz doble de leds 7 x 10, se emplearon dos módulos como el mostrado en la foto.

Su número de parte es GMM-12057ASB, y consiste en 35 leds en un arreglo de 7x5 (7 renglones y 5 columnas).

Cada módulo tiene ánodo común a renglón y requiere de una técnica de multiplexaje en el tiempo para controlar el patrón de encendido de los 35 leds.

Este display es barato y de bajo consumo en sus leds. Cada módulo cuenta con solo 14 pines lo cual facilita su alambrado en un prototipo.

 

MATRISDOBLE.JPG (75800 bytes)

 

El módulo se construyó en una tarjeta para alambrado de prototipos. Debajo de los dos módulos utilizados, hay espacio para colocar los transistores y resistencias del circuito, lo cual ahorra un espacio considerable.

Se utilizó un conector en ángulo de 14 pines para realizar la interfaz estándar al puerto para LCD del sistema EB88. El diagrama del circuito es el siguiente:

Matriz7X10.pdf

Para conocer el principio de funcionamiento de estos circuitos de matriz de leds, vaya a éste vínculo.

 

MATRIXDOBLE1.jpg (101883 bytes)

 

Una vez ensamblado el circuito, se inserta en el puerto para LCD del sistema EB88. Para ejecutar el programa, debe cargarse previamente el archivo ejecutable .hex con el software TINY.

En el siguiente archivo se proporcionan el archivo fuente, las librerías y el archivo .hex, del proyecto desarrollado para el compilador CCS:

GENERADOR NUMEROS ALEATORIOS CCS.ZIP

Cada vez que el usuario oprime el botón de reset, el sistema proporciona un número aleatorio distinto. En este programa en particular, el rango de valores es de 00...42, pero es posible modificar el archivo fuente para trabajar con números hasta 00...99.