Val3n
 
  Home
  Registrate Ahora!
  Otros Idiomas...
  Electronica
  => Sensor Bar para Nintendo Wii
  => Dado Electronico con PIC
  => Cartel de led
  => Antena Yagi Wifi 15dbi
  => Silbato Ultrasonico
  => Sirena Electronica
  => [Info] Microcontroladores PIC
  => [Info] Osciladores
  => [Info] Osciladores a Cristal
  Foros
  Pedidos
  Solo Registrados
  Conectate por acá
Dado Electronico con PIC
Introducción

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 utilizar microcontroladores.

Como corazón de nuestro montaje hemos elegido a un microcontrolador de la familia “PIC16F” de Microchip. Concretamente, se trata del modelo PIC16F627A, 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 modesto PIC12F675 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 RB0, RB1, RB2 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.

El software

El programa necesario para que nuestro proyecto realmente funcione es bastante simple. Se limita a esperar que el usuario presione el pulsador, 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


Version 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 ;
delay_ms(5000); //Espero 5 segundos, y vuelvo al programa ppal.
}



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á.



PCB del dado con PIC.



Posicion de los componentes.



Modelo Terminado.

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.

Fuente: 
www.ucontrol.com.ar/wiki/index.php/Dado_electr%C3%B3nico_con_PIC#Lista_de_materiales
 
   
Hoy habia 5 visitantes (8 clics a subpáginas) en Val3n.es.tl
Este sitio web fue creado de forma gratuita con PaginaWebGratis.es. ¿Quieres también tu sitio web propio?
Registrarse gratis