martes, 26 de mayo de 2015

Dado electrónico con Pic 16f628a

Hola, en mi primera publicación en electrónica he preparado un proyecto muy simple basado en el dado electrónico de Ucontrol desarrollado por Ariel ; para verlo pulsa en el siguiente enlace.
Lo he simulado primero en Proteus para ver su funcionamiento, configurando previamente el compilador CCS que lleva integrado el programa. Sin más voy a mostraros capturas de pantalla del mismo.
El código fuente para este micro usando el oscilador interno a 4 MHz es el siguiente :
(aclaro que este código no es de mi autoría pero que funciona perfectamente)
********************************************************************************************************************************************************
/* Main.c file generated by New Project wizard
 *
 * Created:   vi. may. 22 2015
 * Processor: PIC16F628A
 * Compiler:  CCS for PIC
 */
#include <16F628A.h>           //PIC utilizado
#fuses NOWDT,NOPROTECT,PUT  //Configuramos los fuses
#use delay(internal=4M)        //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(2000);         //Espero 5 segundos, y vuelvo al programa ppal.
}
********************************************************************************************************************************************************
Adjunto el proyecto en proteus en el siguiente enlace: proteus (no tiene contraseña)
Ahora paso a mostrar el proyecto realizado en Eagle Cad tanto esquemático como pcb:

Adjunto también el proyecto de Eagle en el siguiente enlace: dado en eagle
Aqui dejo foto y video de funcionamiento



Para cualquier duda mi correo es luisdlahuerta@hotmail.com
Gracias por visitar mi blog
Saludos