Circuito tablero de tenis

muchas gracias brunomozzi.

yo lo que tenia pensado era hacerlo con un micro, yo la verdad que la parte de programacion no entiendo, pero uno de mis compañeros la tiene clara, asi que lo queremos hacer asi.
 
Hola, como estas, mira, lo que te puedo comentar es que el tablero yo ya lo hice y lo hice en base a contadores y para la decodificacion de los numero use puentes de diodos para retener la corriente a los segmentos. Es un lió hacerlo con eso hoy en día, lo que si te puedo decir es que lo hagas con microcontroladores que es mucho mas sencillo mucho mas efectivo y mucho mas versátil. Yo tengo hecho uno y lo que te puedo comentar es que se manejan mucho mejor los datos a expresar, y tambien tenes opcion a que se le pueda agregar un control remoto. Investiga un poco en microcontroladore y en lo que te pueda ayudar, te ayudo.

Hola a todos, estoy interesado de hacer el tablero con pic, necesitaria tu asesoramiento con respecto a este circuito, yo ya tengo el pgramadpr pic y se manejar el MPLAB y el PROTEUS, necesitamos hacer uno para la escuela. Gracias !!!!!!!
:D
 
Hola, estoy diseñando un marcador de ping-pong para mi mesa :D. Pienso usar un PIC16F886, un 7447 y 4 displays de 7 segmentos. Lo estoy haciendo en C con mplab. La entrada, con los pulsadores (uno para subir el marcador y el otro para bajar, por cada jugador), va a ser por el puerto A, voy a usar el puerto B para la habilitación de cada display y el puesto C para mostrar los números.

Para empezar, antes de embarcarme en la titánica tarea de toda la lógica de marcación, quería simplemente poder mostrar 4 números distintos. No me salió del todo bien!! ¿Me pueden dar una mano?!!

Acá les dejo mi código. Por ahora solo quería mostrar 4 números distintos en los displays, cuando me salga eso, voy a seguir con el resto del programa, pero ni eso me salió, asi que quería solucionar eso primero.

Código:
#include <pic.h>
#include <htc.h>

#define _XTAL_FREQ 4000000

unsigned int j1 = 0; //jugador 1
unsigned int j2 = 0; //jugador 2
unsigned int d1 = 0b000000011; //3
unsigned int d2 = 0b000000101; //5
unsigned int d3 = 0b000000010; //2
unsigned int d4 = 0b000000110; //6

void main()
	{
	TRISA = 0x01; //puerto A entrada
	TRISB = 0x00; //puerto B y C salidas
	TRISC = 0x00;

	PORTA = 0x00;
	PORTB = 0x00;
	PORTC = 0x00;

	ANSEL = 0; //configuro los puertos como entrada/salida digital	
	
        while(1)
		{
		//cargo un 000000011 (o sea un 3) en el puerto C
		PORTC = d1;
		// habilito solo el primer display
		PORTBbits.RB4 = 1;
		PORTBbits.RB5 = 0;		
		PORTBbits.RB6 = 0;		
		PORTBbits.RB7 = 0;
		//muestro el numero por un tiempo
		__delay_ms(50);

		//cargo un 000000101 (o sea un 5) en el puerto C
		PORTC = d2;
		// habilito solo el segundo display
		PORTBbits.RB4 = 0;
		PORTBbits.RB5 = 1;		
		PORTBbits.RB6 = 0;		
		PORTBbits.RB7 = 0;
		//muestro el numero por un tiempo
		__delay_ms(50);

		//cargo un 0000000010 (o sea un 2) en el puerto C
		PORTC = d3;
		// habilito solo el tercer display
		PORTBbits.RB4 = 0;
		PORTBbits.RB5 = 0;		
		PORTBbits.RB6 = 1;		
		PORTBbits.RB7 = 0;
		//muestro el numero por un tiempo
		__delay_ms(50);

		//cargo un 0000000110 (o sea un 6) en el puerto C
		PORTC = d4;
		// habilito solo el cuarto display
		PORTBbits.RB4 = 0;
		PORTBbits.RB5 = 0;		
		PORTBbits.RB6 = 0;		
		PORTBbits.RB7 = 1;
		//muestro el numero por un tiempo
		__delay_ms(50);
		}
	}

También les dejo mi diseño en proteus para que vean como conecté los displays y los pulsadores (por mas que no hagan nada todavía en el programa, quisiera saber si están bien conectados para que activen con ceros) y para que vean lo errático que se muestran los displays!

Cualquier cosa con la que puedan ayudar va a ser bien recibida!! Alguna idea de como seguir, lo que sea!!

Desde ya, muchas gracias!!
 

Adjuntos

  • marcador.rar
    85.1 KB · Visitas: 27
Hola,

Lo estuve mejorando bastante al marcador de ping-pong. Veo que me movieron el tema a tennis, pero buee, que le voy a hacer, es casi lo mismo.

Acá va el código:

Código:
#include <pic.h>
#include <htc.h>

#define _XTAL_FREQ 4000000

int j1 = 0;
int j1_unidades = 0; //jugador 1
int j1_decenas = 0; 
int j2 = 0;
int j2_unidades = 0; //jugador 2
int j2_decenas = 0;

void mostrar();

void main()
	{
	TRISA = 0xFF; //configuro el puerto A como entrada
	TRISB = 0x00; //configuro los puertos B y C como salidas.
	TRISC = 0x00;

	PORTA = 0x00;
	PORTB = 0x00;
	PORTC = 0x00;

	ANSEL = 0; //configuro todos los puestos como entrada/salida digital
	
	while(1)
		{
		if(PORTAbits.RA4 == 1) //botón de reset
			{
			if(PORTAbits.RA0 == 0)
				{
				j1_unidades++;
				j1++;
				if(j1_unidades == 10)
					{
					j1_unidades = 0;			
					j1_decenas++;
					}
				}
	
			if(PORTAbits.RA1 == 0)
				{
				j1_unidades--;
				j1--;
				if(j1_unidades == -1)
					{
					j1_unidades = 9;
					j1_decenas--;
					}
				}
	
			if(PORTAbits.RA2 == 0)
				{
				j2_unidades++;
				j2++;
				if(j2_unidades == 10)
					{
					j2_unidades = 0;
					j2_decenas++;
					}
				}
	
			if(PORTAbits.RA3 == 0)
				{
				j2_unidades--;
				j2--;
				if(j2_unidades == -1)
					{
					j2_unidades = 9;
					j2_decenas--;
					}
				}
			
			mostrar(20);
		
			if(((j1==7)&&(j2==0))||((j1==11)&&(j2==1))||((j1>=21)&&((j1-j2)>=2))) //si gana el jugador 1, de cualquiera de las 3 formas posibles
				{
				//TRISA = 0x00; ¿como desjabilito el puerto A?
				j2_decenas = 0;
				j2_unidades =0;
				mostrar();
				}

			if(((j2==7)&&(j1==0))||((j2==11)&&(j1==1))||((j2>=21)&&((j2-j1)>=2))) //si gana el jugador 2, de cualquiera de las 3 formas posibles
				{
				//TRISA = 0x00;
				j1_decenas = 0;
				j1_unidades =0;
				mostrar();
				}

			} //fin "if" del reset
		
		else
			{
			j1_decenas = 0;
			j1_unidades = 0;
			j2_decenas = 0;
			j2_unidades =0;
			j1 = 0;
			j2 = 0;
			mostrar();
			TRISA = 0xFF;
			}	

		} //fin while
	} //fin main

void mostrar()
	{
	PORTC = j1_decenas;
	PORTB = 0x10;
	__delay_ms(200);

	PORTC = j1_unidades;
	PORTB = 0x20;
	__delay_ms(200);

	PORTC = j2_decenas;
	PORTB = 0x40;
	__delay_ms(200);

	PORTC = j2_unidades;
	PORTB = 0x80;
	__delay_ms(200);
	}

¿Qué les parece? ¿se podría mejorar? Lo que querría agregarle es que cuando un jugador gane, se deshabilite el puerto A para que no se puedan seguir subiendo o bajando los puntos y también me gustaría que el marcador que ganó titile. ¿Cómo podría hacer esas cosas?

También adjunto una simulación en proteus. Si alguno lo simula, ¿esta bien como se ven los displays? Lo que hago es habilitar los displays de a uno, en la simulación se re nota el cambio de displya a display ¿se va a ver así en la realidad o se va a ver mas fluido?

Desde ya, muchas gracias!!!
 

Adjuntos

  • marcador.rar
    33.6 KB · Visitas: 23
Última edición:
Atrás
Arriba