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
Aqui dejo foto y video de funcionamiento
Para cualquier duda mi correo es luisdlahuerta@hotmail.com
Gracias por visitar mi blog
Saludos