Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

22/12/2014 #21

Avatar de Saint_

hola dragon33, con un poco de esfuerzo y habilidad de programación podría hacerse un programa de decente de generación de números pseudoaleatorios.
esto puede darte una base.
http://carlosmarquez.files.wordpress...leatorios1.pdf
22/12/2014 #22

Avatar de Marce

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.
27/12/2014 #23
Moderador

Avatar de Vick

Por acá hay algunas rutinas para microcontroldores PIC que permiten generar números aleatorios (o al menos pseudo-aleatorios) por código (sin necesidad de circuitos o estímulos externos):

http://www.piclist.com/techref/microchip/rand.htm
27/12/2014 #24


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.
04/01/2015 #25

Avatar de dragon33

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?.
04/01/2015 #26

Avatar de Scooter

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'
04/01/2015 #27

Avatar de papirrin

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?.
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.
04/01/2015 #28

Avatar de dragon33

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.
04/01/2015 #29

Avatar de papirrin

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.
04/01/2015 #30

Avatar de dragon33

Subo un sencillo esquema de generador de RUIDO BLANCO.
Imágenes Adjuntas
Tipo de Archivo: jpg generador_de_ruido_blanco.jpg (213,0 KB (Kilobytes), 34 visitas)
04/01/2015 #31

Avatar de papirrin

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.
04/01/2015 #32


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
05/01/2015 #33

Avatar de Scooter

Habría que probar, quizás vale una simple puerta cmos con el pin de entrada al aire y eso a una entrada digital.
24/01/2015 #34

Avatar de dragon33

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.
Archivos Adjuntos
Tipo de Archivo: zip BINGO.zip (45,2 KB (Kilobytes), 7 visitas)
24/01/2015 #35
Moderador general

Avatar de Fogonazo

Arma una rutina que al encontrar coincidencia (Número ya salió) efectúe automáticamente otro sorteo.
24/01/2015 #36

Avatar de dragon33

Fogonazo dijo: Ver Mensaje
Arma una rutina que al encontrar coincidencia (Número ya salió) efectúe automáticamente otro sorteo.
Podrías detallar mas, que no lo pillo.
24/01/2015 #37
Moderador general

Avatar de Fogonazo

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.
24/01/2015 #38

Avatar de papirrin

¿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}
24/01/2015 #39

Avatar de dragon33

Fogonazo dijo: Ver Mensaje
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".
24/01/2015 #40
Moderador general

Avatar de Fogonazo





Perooooooo, yo haría otro sorteo, esto para evitar que los números vallan apareciendo en orden creciente
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.