PIC16F84A para hacer un BINGO

Hola,a ver si te puedo dar una idea, te cuento hace unos años arregle un juego de una agencia de quinielas, el juego se trataba de numeros al azar y al tocar TU signo del zodiaco te daba X numero un par de segundos y luego seguia contando a gran velocidad, sino me equivoco electronicamente, era un 555, un CD4017 y otro integrado que no me acuerdo, ademas tenia 3 displays de 7 segmentos.
El juego consistia en tocar un boton de metal en tu signo, ese boton de metal detenia el contador por unos segundos, esos segundos eran dados por el valor de un cap electrolitico que al descargarlo evitaba que el 555 oscilara.
Electronicamente el juego valia monedas, pero comercialmente era una locura lo que salia comprarlo.
 
Yo, para un sistema de luces navideñas con arduino leo una entrada analógica que dejo sin conectar (al aire). De ahí sale cualquier cosa. Luego le aplico un poco de matemáticas y listo.
 
Despues de dar un repaso a muchas webs incluso anglosajonas, lo que voy a hacer es una rutina que incremente un registro, y mediante una entrada externa provocar una interrupción que detenga el contaje y muestre el número, este número será memorizado de alguna forma por banderas de otros registros y comparado con el número que salga en cada momento para no repetirse. La entrada externa será activada por una señal proveniente de un generador de RUIDO BLANCO, lo cual dotará al sistema de pseudoaletoriedad. He probado la señal externa por entrada de una señal pulsatoria proveniente de un 555, y el resultado que me da, es que la secuencia de números aún siendo aleatoria en cada puesta en marcha, era siempre la misma, es decir, pongo en marcha y sale 2, 5, 7, 8, 1...vuelvo a poner en marcha y sale 2, 5, 7, 8, 1, y obviamente eso NO VALE. Por lo menos en la simulación de PROTEUS sale así, no se si tendrá variación en circuito real. ¿Alguien me puede poner un circuito lo mas simple posible de generación de ruido blanco con una amplitud de señal de +5Vcc?.
 
Última edición:
Claro que no vale un 555; su señal es predecible y una señal predecible da una secuencia predecible. Solo se me ocurre que mezcles cosas poco predecibles de sensores; hora del día, presión atmosférica, temperatura, orientación con una brújula... A priori todo eso no es muy predecible.
Por ejemplo un receptor de radio; si no es predecible lo que emitan...
Hacer el oscilador con 555 con ptc, ntc, ldr etc para que la velocidad de oscilación dependa de factores 'aleatorios'
 
Última edición:
pongo en marcha y sale 2, 5, 7, 8, 1...vuelvo a poner en marcha y sale 2, 5, 7, 8, 1, y obviamente eso NO VALE. Por lo menos en la simulación de PROTEUS sale así, no se si tendrá variación en circuito real. ¿Alguien me puede poner un circuito lo mas simple posible de generación de ruido blanco con una amplitud de señal de +5Vcc?.
:no:en lo real no es para nada igual a la simulacion , y sobretodo si pones el 555 a la mas alta frecuencia posible.

puedes incluso dejar el pin del pic sin conectar a nada (al aire) y en lo real podria cambiar aleatoriamente , o poner un transistor sin conectar nada en la base. y para nada se comportaria igual que en ningun simulador.
 
Como señal externa, ¿cual creeis que sería la mas adecuada?:

-- Generador de ruido blanco.
-- 555 con resistencia variable NTC, PTC, LDR.
-- Dejar la patita de entrada de la interrupción "al aire"
-- Transistor (¿pnp, npn?) con la base "al aire"

Cuantas mas opciones mas lio, afinemos, a ver que sería lo mas adecuado.
 
:unsure: prueba todas y aprendes XD.

empieza por la mas simple, no conectes nada, despues pones un alambrito como especie de antena, despues pones un transistor, el que sea, con una resistencia en el colector a VDD de unos 100K obvio. depues pones un 555 y lo del generador de ruido blanco que no se como es el esquema o como se genera pero se me hace mucho XD.
 
Reitero, se me hace muy complejo ese circuito para lo que se busca.

si observas basicamente el elemento "importante" de ese circuito es el Q1, que es basicamente lo que te digo de poner un transistor sin nada en la base.

y corrijo lo que mencione en lugar de una resistencia de 100K quizas estaria mejor una de 470K, o probar varios valores para ver con cual da mejor resultado.
 
Última edición:
Estoy dándome cuenta que se quiere usar un 16F84 y este no tiene entradas analógicas (creo), entonces no es aplicable lo que dije del Arduino. De cualquier modo, y si se puede cambiar el microcontrolador, aquí pego un ejemplo de lo que digo (código y números generados). La entrada A0 está simplemente desconectada. El generador se puede mejorar haciendo por ejemplo 5 lecturas con un tiempo de retardo (ej. 500ms) y luego operar con ellas para usarlo como semilla (sumar L1+L2)*L3/L4+L5 o cosas así (controlando la posible división por cero por supuesto!.

Código:
int numerito = 0;

void setup(){
  Serial.begin(115200);
  Serial.println("Arduino ha sido reiniciado (Pulsado Reset)");
  randomSeed(analogRead(0));

}

void loop(){
  numerito=random(1,100);
  Serial.print("Generado un numero: ");
  Serial.println(numerito);
  delay(1000);
}

Y la salida (pulso el botón de reset para cada nueva ejecución)

Código:
Arduino ha sido reiniciado (Pulsado Reset)
Generado un numero: 52
Generado un numero: 61
Generado un numero: 54
Generado un numero: 68
Generado un numero: 68
Arduino ha sido reiniciado (Pulsado Reset)
Generado un numero: 20
Generado un numero: 4
Generado un numero: 24
Generado un numero: 2
Arduino ha sido reiniciado (Pulsado Reset)
Generado un numero: 68
Generado un numero: 90
Generado un numero: 69
Generado un numero: 51
Generado un numero: 41
Arduino ha sido reiniciado (Pulsado Reset)
Generado un numero: 45
Generado un numero: 25
Generado un numero: 46
Generado un numero: 35
Generado un numero: 27
Generado un numero: 99
Generado un numero: 48
Arduino ha sido reiniciado (Pulsado Reset)
Generado un numero: 15
Generado un numero: 22
Generado un numero: 15
Generado un numero: 84
Generado un numero: 70
Generado un numero: 58
Generado un numero: 75
Generado un numero: 79
Generado un numero: 52
Generado un numero: 19
Generado un numero: 27
Generado un numero: 27
 
Bueno, ya tengo el código y simulación en PROTEUS, en vez de un 16F84A e usado un 16F628A, el circuito hace lo siguiente, con el pulsador "BOLA" vamos sacando números pseudoaleatorios (pseudoaleatorio en base a que la pulsación no es exacta), estos números que van saliendo se van almacenando en la EEPROM interna, cada vez que se detiene el contaje de un registro interno, antes de ser visualizado, se compara con la información almacenada en la EEPROM, si coincide, es decir, es el mismo número, no se visualiza y busca otro número. El interruptor "LEE", detiene el contaje y saca los números almacenados en EPROM, al desactivar este pulsador sigue contando. Ahora bien, el problema que tengo es que cuantos mas números tengo almacenados en la EEPROM mas le cuesta encontrar al sistema un número que no coincida con los ya registrados, y eso se traduce en pulsaciones del botón "BOLA" que no sacan nada, y cada vez mas cuanto mas números existan en la EEPROM interna. ¿Cómo podría mejorar esto que es el único problema que tengo?. Gracias amigos.
 

Adjuntos

  • BINGO.zip
    45.2 KB · Visitas: 20
Última edición:
Arma una rutina que al encontrar coincidencia (Número ya salió) efectúe automáticamente otro sorteo.
 
La misma rutina que empleas para conocer si el número ya salió la haces condicional.

El número no salió ---> Válido ---> Se muestra en el tablero y se registra en la memoria.

El número ya salió ---> NO Válido ---> No se muestra, No se registra pero si se hace un nuevo sorteo automático.
 
¿Cómo podría mejorar esto que es el único problema que tengo?.
if (entendi bien el problema){
me parece que un metodo mas rapido es el que se usa en la indexacion..

en pocas palabras, haces una lista ordenada en algun arreglo o tabla, y sacas un numero, y recorres la lista, con ese metodo es lo contrario al principio es lento al recorrer la lista pero conforme se va haciendo mas chica se vuelve mas rapido.

sino quedo claro busca en internet algoritmos de indexacion.}

else

{no me hagas caso}
 
Última edición:
La misma rutina que empleas para conocer si el número ya salió la haces condicional.

El número no salió ---> Válido ---> Se muestra en el tablero y se registra en la memoria.

El número ya salió ---> NO Válido ---> No se muestra, No se registra pero si se hace un nuevo sorteo automático.



Ya te he pillado, o sea, si el número no es valido regresa al contaje y va sacando numeros hasta que sea valido sin esperar otra pulsación del botón "BOLA".
 

pulgar.jpg



Perooooooo, yo haría otro sorteo, esto para evitar que los números vallan apareciendo en orden creciente
 
Atrás
Arriba