Los Mas Sencillos

Los Bots Mas Sencillos Del Mundo ¡Aqui!

Dado Electronico www.ucontrol.com.ar

Gracias a los chicos de www.ucontrol.com.ar RECOMIENDO QUE VISITEN SU WEB ;)








Introducción

Dado electrónico con PIC16F627A
Dado electrónico con PIC16F627A

El segundo proyecto de la Ludoteca uControl es una versión del dado electrónico , pero utilizando un microcontrolador PIC16F627A.



El proyecto

Siguiendo con los montajes destinados a formar parte de nuestra “ludoteca”, presentamos un dado un tanto especial. Si bien se trata de un circuito que, como ya vimos, puede resolverse mediante una serie de componentes comunes, su simplicidad lo hace especialmente interesante para aprender a utilizarmicrocontroladores.

Como corazón de nuestro montaje hemos elegido a un microcontrolador de la familia “PIC16F” de Microchip. Concretamente, se trata del modeloPIC16F627A, de 18 pines. Seguramente el lector mas avanzado se preguntará el porque de esta elección, ya que, por ejemplo, un mucho mas pequeño y modestoPIC12F675 hubiese bastado para cumplir esa función.

Hemos basado nuestra decisión en el hecho de que ambos microcontroladores son económicos, y cuestan prácticamente lo mismo. Y como en futuras entregas ampliaremos este montaje a un número mayor de dados, nos vendrá bien ir conociendo este PIC.



Descripción del circuito

El circuito se destaca por su simplicidad. Podemos ver su esquema en la figura siguiente, donde rápidamente notamos la existencia de una pequeña fuente de alimentación construida alrededor de un regulador de voltaje de la familia LM78xx, concretamente un LM7805. Como se aconseja en la hoja de datos de este regulador, hemos incluido un par de condensadores cerámicos de 0.1 uF, uno en su entrada y otro en su salida.


 
Este es el esquema eléctrico de nuestro montaje.


Un diodo se encarga de evitar la “catástrofe” de conectar la alimentación en forma invertida, y un condensador electrolítico de 470 uF ayuda a eliminar el ripple que pudiese existir en alimentación externa.

El resto del circuito es el dado propiamente dicho. Si has leído el articulo “PICs y LEDs, una pareja perfecta” en este mismo sitio, seguramente el resto de este párrafo no es para tí. Cuatro salidas del PIC, concretamente RB0RB1RB2 y RB3, se encargan de controlar los cuatro grupos de LEDs que conforman el dado. Otras tantas resistencias limitan la corriente que circula por cada rama. La figura muestra que salidas debemos activar para cada valor posible del dado.



Grupos a encender para cada valor del dado.


Un pulsador, conectado a RA0, se encarga de poner ese pin a +V cada vez que se lo presiona. Esto nos permite saber que el usuario ha decidido lanzar el dado. Un resistor de 10k mantiene RA0 conectado a GND el resto del tiempo.


[editar]El software

El programa necesario para que nuestro proyecto realmente funcione es bastante simple. Se limita a esperar que el usuario presione elpulsador, y mientras que lo mantiene en esa condición cuenta continuamente de 1 a 6. El tiempo que el jugador mantiene presionado el pulsador es el que determina el estado final del dado. El hecho de que el PIC sea capaz de hacer esto decenas de miles de veces por segundo nos garantiza la imposibilidad de que el usuario pueda influir conscientemente en el resultado.

Igual que en otras oportunidades, hemos incluido una versión del programa en PIC BASIC (PSI), y otra en CCS:

    • Version BASIC
    '-----CONFIGURAMOS PUERTOS---------- AllDigital  'Todos los pines del PORTA como E/S TRISA = 0xff  'Configuro el PORTA completo como entrada. TRISB = 0x00  'Configuro el PORTB completo como salida.  '------DECLARO VARIABLES ----------- Dim i As Byte  'i contendrá el valor del dado en cada momento.  loop:  'bucle principal  PORTB = 0  'Apago todos los leds    If PORTA.0 = 1 Then  'Si el pulsador esta en alto...   Gosub lanzo_dado  Endif Goto loop  End  'Fin del programa principal                    '-------------------------------------------------- 'Esta rutina lanza el dado y muestra el resultado '-------------------------------------------------- lanzo_dado:  i = 0  'Valor inicial de i  While PORTA.0 = 1  'bucle principal   i = i + 1  'Sumo 1 a i    If i = 7 Then  'si pasa de 6...    i = 1  '..empiezo de 1 otra vez.   Endif  Wend   'Ahora, muestro el valor de "i" en los leds:  PORTB = LookUp(0x01, 0x08, 0x09, 0x0a, 0x0b, 0x0e), i  WaitMs 5000  'espero 5 segundos, y vuelvo al programa ppal. Return         
    • Versión CCS:
    #include <16f627a.h>           //PIC utilizado #fuses XT,NOWDT,NOPROTECT,PUT  //Configuramos los fuses #use delay (clock=4000000)     //Oscilador a 4Mhz #use fast_io(b)                //Optimizamos E/S del PORTB  #BYTE PORTB = 0x06             //El PORTB está en 0x06  //Variables globales-------------------------------------------------- //La tabla dado tiene el valor del PORTB para cada numero posible. int dado [6]={0x01,0x08,0x09,0x0A,0x0B,0x0E};  //Prototipo de funciones --------------------------------------------- void lanzo_dado(void);  //------Programa principal-------------------------------------------- void main(void) {    set_tris_a(0xFF);           //configuro el PORTA completo como entrada.    set_tris_b(0x00);           //configuro el PORTB completo como salida.     disable_interrupts(GLOBAL); //todas las interrupciones desactivadas     do{                         //bucle principal       PORTB = 0;               //Apago todos los leds       if(input(PIN_A0)){       //Si elpulsador esta en alto...             lanzo_dado();      //...lanzo el dado y muestro el resultado       }       }while(TRUE);            //Repito el bucle. } //-------------------------------------------------------------------- //Esta funcion lanza el dado y muestra el resultado //-------------------------------------------------------------------- void lanzo_dado(void) {       char i=0;             //i contendrá el valor del dado en cada momento.        do{                   //bucle principal          i++;               //Sumo 1 a i           if (i == 7) {      //Si pasa de 6...             i = 1;          //...empiezo de 1 otra vez.          }       }while(input(PIN_A0)); //Repito el bucle hasta que se suelte el pulsador.        //Ahora, muestro el valor de "i" en los LEDs:       PORTB =  dado [i];       delay_ms(5000);         //Espero 5 segundos, y vuelvo al programa ppal. } 

    Puedes descargar los archivos HEX y fuentes desde aqui.


[editar]El montaje

Se trata de un proyecto pequeño, así que no tendrás problemas para montarlo. En las figuras de la galería siguiente puedes ver el diseño del PCB que hemos realizado para alojar los componentes y otras que ayudaran en tu tarea.

Te recomendamos que prestes atención a la hora de colocar los LEDS, el diodo, el regulador de voltaje y el zócalo del PIC16F627A sobre el PCB, ya que si alguno de ellos queda en la posición incorrecta, el dado no funcionará.


(Haz click sobre las imagenes de la galería para ampliarlas)


Puedes descargar el archivo PDF con el diseño del PCB, listo para imprimir y a escala desde aqui.


Si el lector lo prefiere, puede dotar al de una caja adecuada, dejando siete agujeros de 5mm para los LED. En este caso, también se debería utilizar un pulsador diferente, ya que se montaría en la caja en lugar ir soldado directamente sobre el PCB.














Gracias a los chicos de www.ucontrol.com.ar RECOMIENDO QUE VISITEN SU WEB ;)




Este articulo forma parte de la Revista uControl #2
uControl Revista #2

En este número comenzamos a escribir el software que hará de nuestro Relojito un proyecto terminado. Aprovechamos para aprender un poco más sobre programación, y presentamos las rutinas encargadas de controlar su funcionamiento en BASIC y CCS.

También aprenderemos a construir un oscilador de frecuencia variable, en el rango de los MHz. que será mucha utilidad en nuestro banco de trabajo. Los hemos bautizado "u-Scilador", el oscilador de uControl.

Puedes consultar el índice completo desde aquí.

Puedes descargar la Revista uControl desde aquí, de forma totalmente gratuita.




2 comentarios:

Anónimo dijo...

cuanto voltaje usa el proyecto

Anónimo dijo...

5 V

Publicar un comentario en la entrada

Novedades!

Loading...

Comunicate

Quieres hablar conmigo? entonces envia un e-mail a ginotubaro@hotmail.com

Ads Click abajo!!

Seguidores