Autor Tema: generar numeros random  (Leído 10904 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ronaldomh

  • PIC10
  • *
  • Mensajes: 3
generar numeros random
« en: 23 de Mayo de 2006, 03:27:42 »
hola a todos

estoy trabajando en un proyecto usando el mirocontrolador atmega8, y necesito generar numeros aleatorios (random). por favor alguien podria decirme como hacer para generar numeros aleatorios??????
« Última modificación: 05 de Junio de 2006, 21:20:46 por migsantiago »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: generar numeros random
« Respuesta #1 en: 23 de Mayo de 2006, 19:30:01 »
Hola Ronaldo

¿Qué lenguaje estás usando para programar el micro?

Si usas ensamblador te puedo dar una ayuda.

Desconectado ronaldomh

  • PIC10
  • *
  • Mensajes: 3
Re: generar numeros random
« Respuesta #2 en: 28 de Mayo de 2006, 23:31:58 »
hola, hace casi una semana q no vengo x aca.

Sí es en lenguaje ensamblador, asi q cualquier ayuda t lo agradeceria.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: generar numeros random
« Respuesta #3 en: 28 de Mayo de 2006, 23:58:05 »
Cuando yo hice un dado electrónico lo hice con el contador del timer, en un AVR pero para el caso es lo mismo. Simulaba estados random.

Para empezar necesitas saber cuántos estados aleatorios necesitas. En mi caso fueron 6: 1,2,3,4,5 y 6 (las 6 caras del dado). ¿Cuántos estados necesitas tú?

El contador del timer era de 8bits, entonces cuando el usuario apretaba un botón, se obtenía el conteo del timer, que podía ser de 0 a 255, un número aleatorio.

Para obtener los 6 estados de los 256 números posibles se puede hacer una división. Digamos que cae en 137...

137 / 6 = 22 + 5/6 (veintidós enteros cinco sextos)

Tomas el residuo 5 (de cinco sextos). En este caso el estado aleatorio cayó en 5, de 6 estados posibles: 0,1,2,3,4 y5.

Si haces una subrutina que seleccione los estados, tendría que ser para el número de estados que obtendrás (256 si es con un timer de 8bit) dividido entre los estados que deseas (en mi caso 6).

El ejemplo del dado para un at90s1200 está aquí. En este ejemplo uso otro método para elegir el estado random, pero te lo dejo de todas formas.

http://www.todopic.com.ar/foros/index.php?topic=1124.msg9339#msg9339

También hay otra forma de generar números aleatorios usando el hardware del AVR. NEcesitas tener un AVR con convertidor ADC. Simplemente dejas sin concetar la terminal encargada del ADC y en la lectura digital obtendrás un número aleatorio, ya que la terminal está abierta.

Cuéntame si tienes dudas.  :mrgreen:
« Última modificación: 29 de Mayo de 2006, 00:00:57 por migsantiago »

Desconectado ronaldomh

  • PIC10
  • *
  • Mensajes: 3
Re: generar numeros random
« Respuesta #4 en: 29 de Mayo de 2006, 18:24:41 »
hola q tal. gracias x la ayuda.

T explico pues de q trata esta parte d mi proyecto. Usando un modulo AVR y lenguaje assembler Tengo que encender aleatoriamente 8 leds (necesito entonces 8 estados aleatorios), cada led debe estar encendido un cierto tiempo, y si en ese tiempo en el q el led se encuentra prendido presiono un pulsador (cada led estara "concectado" a un pulsador especifico), entonces debo incrementar un contador, y al final mostrar en un display el numero de veces q se consiguio presionar el pulsador a tiempo.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: generar numeros random
« Respuesta #5 en: 29 de Mayo de 2006, 23:20:18 »
jejeje suena bien el juguetito  :mrgreen:

Dado que el número random solo puede ser generado por interacción del usuario, te recomiendo lo siguiente...

Para obtener el primer número random pide al usuario que presione cualquier botón (algo así como START :D ). Captura el conteo del timer al momento de la presión, ya tienes un número random en las manos.

Espera un tiempo usando el timer. Una vez pasado ese tiempo (que tú definirás) enciende el led elegido por el número random de hace rato (1 a 8 ).

Empieza un conteo con el timer para ver si el usuario tiene buenos reflejos. Cuando el usuario presione el botón correcto, captura el conteo del timer en ese momento y verifica que el usuario haya sido rápido, que no haya excedido el tiempo que tú marcas. Ahora ya tienes un número random para el siguiente led a encender.

Espero te sirvan estas ideas, te toca mejorarlas y depurarlas, ah y pasarlas a ensamblador.

Saludos

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: generar numeros random
« Respuesta #6 en: 05 de Junio de 2006, 02:48:22 »
hola migsantiago
mira es que me interesa mucho todo lo relacionado con el avr
y e visto que tu ejercicio y me a gustado mucho
pero te queria preguntar algo ya que estoy empezando hacer mis pinitos con el atmel
Código: [Seleccionar]
Para obtener los 6 estados de los 256 números posibles
se puede hacer una división. Digamos que cae en 137
queria saber como haces esta division para poder entenderla
Digamos que cae en 137
que calculos hiciste ??
gracias por contestarme

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: generar numeros random
« Respuesta #7 en: 05 de Junio de 2006, 21:08:33 »
Hola Belgitaes

El programa que hice para el dado usa un método distinto para generar los random. Nunca he programado una división en ensamblador, es muy pesado.

Puedes examinar el del dado y ver si puedes mejorar ese programa, o puedes revisar las application notes que Atmel proporciona.

AVR200: Multiply and Divide Routines   (21 pages, revision C, updated 05/06)
This Application Note lists subroutines for multiplication and division of 8 and 16-bit signed and unsigned numbers.

http://atmel.com/dyn/resources/prod_documents/doc0936.pdf

http://atmel.com/dyn/resources/prod_documents/AVR200.zip

Saludos  :-/

Desconectado Belgitaes

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 215
Re: generar numeros random
« Respuesta #8 en: 06 de Junio de 2006, 00:35:42 »
okey muchas gracias migsantiago
lo voy a leer me interesa
me gusta todo lo relacionnado con el atmel
gracias