Diseño de un dado digital con PIC18F4520

Hoy en el siguiente artículo, se ha programado una sencilla aplicación para entrar en la programación de microcontroladores de Microchip, conocidos como PIC. Se hará una breve descripción del diseño electrónico y se comentará parte de la programación realizada en C con el compilador CCS, como siempre al final del artículo podrán descargar el proyecto.


Descripción de funcionamiento.

La aplicación es muy sencilla, hay un pulsador que al activarlo, generará un número aleatorio comprendido entre 1 y 6 como si de un dado real se tratara. El número se mostrará en un display que se mantendrá mientras no se vuelva a presionar de nuevo el botón.

Al presionar el pulsador, éste mantiene durante un tiempo aproximado de 2 segundos números apareciendo en el display del 1 al 6 hasta que queda parado en uno de ellos.


Descripción técnica.

La parte principal del dado es un PIC 18F4520, un microcontrolador de gama alta de Microchip de 8 bits. La aplicación puede diseñarse con PIC más sencillos, pero así muchos van perdiendo el miedo a la gama 18F, verán que no hay tanta diferencia.

Por una parte, se aprovecha los 4 primeros bits del puerto C para enviar un número aleatorio en binario al decodificador 7448. Éste integrado tiene la función de decodificar 4 bits a 7 segmentos por lo que el display podrá mostrar el número.

Hay una parte a destacar, uno de los bits del puerto B se usa para el pulsador, la resistencia es de pull-up y he puesto 4 condensadores en paralelo. La función de éstos es la de incrementar el tiempo en que se van generando números aleatorios y para con un número definitivo. Cuantos más condensadores en paralelo, es como si se sumaran y aumenta el tiempo, también se podría añadir condensadores de mas capacidad.

Le he añadido el oscilador externo, éste microcontrolador se le puede configurar oscilador interno, aunque ya por costumbre no cuesta nada y en el datasheet del fabricante especifíca el valor del cristal y los condensadores, en este caso está a 4 Mhz.

Programación

A nivel de programación no presenta ningún tipo de dificultad, se utiliza la función random del C para generar un número aleatorio. Al utilizar esta función, a diferencia del C en el ordenador, en el micro el número aleatorio varía de 0 a 255. La idea es dividir esas 255 posibilidades entre 6 que son los números de un dado, dependiendo el rango que salga equivaldrá a un valor.

Una vez tengamos ese valor, con una estructura condicional, sacaremos el número en binario 4 bits correspondiente por el puerto C, el resto se encargará el desmultiplexor y lo veremos en formato decimal.

A continuación expongo la parte de código donde se crea el número aleatorio, se censa y se genera el número en binario. Si alguien quiere el codigo completo, está al final del artículo en descarga.

while (input_state(PIN_B3)==1){ // Si pulsamos boton, generamos número
rand_num = rand(); //Generamos numero entre 0-255
if (rand_num <= 43){output_C (0b0001);}
if (rand_num > 43 & rand_num <= 86) {output_C (0b0010);}
if (rand_num > 86 & rand_num <= 129){output_C (0b0011);}if (rand_num > 129 & rand_num <= 172){output_C (0b0100);}
if (rand_num > 172 & rand_num <= 215){output_C (0b0101);}
if (rand_num > 215 & rand_num <= 255){output_C (0b0110);}
}

Componentes

Los componentes electrónicos utilizados para el diseño són:

  • Microcontrolador PIC 18F4520.
  • Pulsador NA.
  • 2 condensadores 47 pf
  • 4 condensadores 4.7 mF.
  • Decodificador 4bit/7 seg 7448.
  • Display BCD cátodo común.
  • Resistencia de 10k.
  • Cristal de cuarzo de 4 Mhz.
  • Sería importante añadir resistencias de 220, 8 en total antes del display para protejerlo.

Como siempre dejo aquí la descarga del proyecto, encontrarán por una parte la simuación para proteus, y una carpeta con el codigo fuente y el hexadecimal compilado.


- Descarga el proyecto dado electrónico (simulación + codigo fuente)

- Ver el codigo fuente completo (pastebin)

1 comentarios:

Juan Pablo Parra dijo...

Hola, nos podemos contactar por favor

Publicar un comentario

Copyright © Microtronic