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