![]() |
| I. Ilustración: Dado eléctronico |
Para construir este prototipo es necesario hacer el siguiente acopio de material:
- 7 Diodos led
- 1 Array de resistencias de 330 Ohm
- 1 Regulador 7805
- 1 Condensador 220 Kpf , K5m
- 1 Resistencia Pull up, 10kOhm
- 1 Pulsador
- 2 Interruptores
- 1 Conectores molex 9pin
- 2 Conectores molex 2 pin
- 1 PIC 16F886
- 1 PCB a doble cara
- 1 Caja diseñada e imprimida en una impresora 3D
Las Ilustraciones II, III y IV muestran los esquemas en Proteus y Ares que se han utilizado en las diferentes fases de desarrollo del dado:
![]() |
| Ilustracion II: Esquema ISIS para la simulación |
![]() |
| Ilustracion III: Esquema ISIS para la PCB |
![]() |
| Ilustracion IV: Esquema ARES de la PCB |
Este es el código fuente que se ha generado para programar el PIC16F886:
#include <16f886 data-blogger-escaped-.h="">
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT //Power Up Timer
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOCPD //No EE protection
#FUSES NOBROWNOUT //No brownout reset
//#FUSES IESO //Internal External Switch Over mode enabled
//#FUSES FCMEN //Fail-safe clock monitor enabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOWRT //Program memory not write protected
#FUSES BORV40 //Brownout reset at 4.0V
#FUSES INTRC_IO
//#FUSES INTRC
#use delay(clock=4000000)
int numale=0; //Creamos una variable donde guardaremos el numero aleatorio
int x=0x01; //Inicializamos una variable que luego utilizaremos en la secuenciacion de los leds
#int_RTCC //Inicio del tratamiento de la interrupción del TMR0
void rtcc_secuenciacion(void) //Funcion del TMR0 Secuenciacion de los LEDS
{
rotate_left(&x,1); //Funcion rotate para desplazar un bit hacia la izquierda
output_b(x); // Mostramos el valor de la variable X
delay_ms(300); // Esperamos 300ms
}
void main(void) //Programa principal
{
setup_adc_ports(NO_ANALOGS);
set_tris_a(0b11111111); //Declaramos el Puerto “A” como entrada
set_tris_b(0b00000000); // Declaramos el Puerto “B” como salida
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); //TMR0 interno con preescaler de 1
set_timer0 (0); // Cargar el TMR0 al maximo valor
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_1 ); //Timer1 interno
set_timer1(0); // Cargar el Timer1 al maximo valor
enable_interrupts(global); //Habilita interrupciones
disable_interrupts(int_timer0); // desabilitar interrupcion del TMR0
disable_interrupts(int_timer1); // deshabilitar interrupcion del TMR1
output_b(0); // Inicializacion de los LED a apagados
while(1) //Bucle infinito
{
while(input(PIN_A0)==0) // Esperamos a que se pulse el boton, mientras no se pulse no pasa de este bucle
;
delay_ms(20); // un delay para evitar el efecto rebote de los pulsadores
enable_interrupts(int_timer0); //habilitamos interrupcion del TMR0
while(input(PIN_A0)==1) //Un bucle que parara en cuanto se deje de pulsar el boton
;
delay_ms(20);
disable_interrupts(int_timer0); // desabilitar interrupcion del TMR0
numale=(get_timer1()%6)+1; //Obtencion del numero aleatorio que guardaremos en una variable, con la function get_timer1 conseguimos un numero practicamente aleatorio con la formula aplicada
if (numale==1){ // Nos mostrara el numero 1 en los LEDs en caso de que el numero aleatorio sea 1
output_b(0b10000000);
}
else if (numale==2){
output_b(0b00011000);
}
else if (numale==3){
output_b(0b10011000);
}
else if (numale==4){
output_b(0b01011010);
}
else if (numale==5){
output_b(0b11011010);
;
}
else if (numale==6){
output_b(0b01111110);
}
delay_ms(3000); // Esperamos 3 seg
output_b(0);
}
}
La caja o envolvente del dado (ver ilustracion V) ha sido bajada de thingiverse en esta dirección:
http://www.thingiverse.com/thing:26278/#files
![]() |
| Ilustracion V: Diseño 3D de la caja |
Trás ensamblar todos los elementos que constituyen el proyecto este es el producto final (ver Ilustración VI y VII):
![]() |
| Ilustración VI: Vista interna del proyecto |
![]() |
| Ilustración VII: Dos dados diferentes |
En este enlace se pueden descargar los archivos necesarios para construir este dado electrónico.







No hay comentarios:
Publicar un comentario