Autor Tema: Generar un numero aleatorio  (Leído 8768 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Generar un numero aleatorio
« en: 09 de Noviembre de 2006, 19:58:59 »
Hola saludos, en CCS creo que es facil, porque existe una funcion en alguna libreria, pero en ensamblador, como se puede generara un numero aleatorio?? muchas gracias
.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Generar un numero aleatorio
« Respuesta #1 en: 10 de Noviembre de 2006, 04:14:12 »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Generar un numero aleatorio
« Respuesta #2 en: 14 de Noviembre de 2006, 04:08:57 »
Si tu PIC tiene entrada ADC puedes dejarla al aire y leer su valor; el resultado será aleatorio.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Generar un numero aleatorio
« Respuesta #3 en: 15 de Noviembre de 2006, 14:56:26 »
hola saludos quisiera hacerlo con solo código, nada de timers, ni adc, no puedo usar eso; el primero parece interesante, lo probare vale. muchas gracias
.

Desconectado BINARIO

  • PIC16
  • ***
  • Mensajes: 156
Re: Generar un numero aleatorio
« Respuesta #4 en: 01 de Febrero de 2007, 11:44:46 »
Cabe aclarar que en un sistema digital, es poco probable lograr algo aleatorio, puedes lograr un numero indexado, es lo que se conoce como pseudo random, creo que ahy una funcion por alli o una libreria que se llama random, capaz que si la buscas en el google la encontras, lo del adc esta bueno pero no sabemos si su pic tiene entrada adc.
000101111 101110000011110 00010 11101 110 1 000111 00010010011010111100 101101001 11110000 001 00 10110 111 00001 01110 0010101 01011110 00 00011111111 0011111 011110001111111111 1011111111101100000000

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Generar un numero aleatorio
« Respuesta #5 en: 01 de Febrero de 2007, 12:34:58 »
hola saludos quisiera hacerlo con solo código, nada de timers, ni adc, no puedo usar eso; el primero parece interesante, lo probare vale. muchas gracias

Opino como binario, en un sistema digital sin intervención de una variable puramente "aleatoria" ¿cómo quieres lograr un número realmente aleatorio ?

Hay algoritmos muy complicados que buscan evitar el que se forme una campana de gauss en los valores obtenidos (osea que se den cierta repetibilidad de los valores) de cierto valor y saltan, etc, pero nunca son realmente aleatorios, siempre cumplen con una lógica determinada.

El ruido blanco es aleatorio y se obtiene de diversas formas, si haces lo que sugiere nocturno tienes grandes chances de lograr algo bastante aleatorio aunque estarán con una media que dependerá de la frecuencia de alimentación que use tu país (ej 50Hz en argentina).  De eso no te salvas porque esos 50Hz se inducen en todo aparato, persona o cosa que anda dando vueltas. 



Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Generar un numero aleatorio
« Respuesta #6 en: 01 de Febrero de 2007, 12:51:38 »
Lo ideal sería utilizar el valor leído del ADC como semilla para un algoritmo aleatorio. De esta forma sería realmente difícil establecer una analogía con la frecuencia de red.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Generar un numero aleatorio
« Respuesta #7 en: 01 de Febrero de 2007, 13:28:54 »
Lo ideal sería utilizar el valor leído del ADC como semilla para un algoritmo aleatorio. De esta forma sería realmente difícil establecer una analogía con la frecuencia de red.

Si, coincido, tal vez no quedó claro en mi post porque expuse ambas opciones

1) algoritmo
2) sensado simple con el A/D.

La mezcla de ambas sería en definitiva seguramente aleatoria para la mayoría de los casos prácticos (salvo para algún matemático que venga a refutar la teoría)
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Generar un numero aleatorio
« Respuesta #8 en: 01 de Febrero de 2007, 15:57:44 »
ok, si es muy buena la idea, digamos que no tengo A/d, que estoy con un 16f84a, tons se optaria por el timer, verda? simpre todo pic tiene por lo menos un timer, verdaD???
.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Generar un numero aleatorio
« Respuesta #9 en: 01 de Febrero de 2007, 16:45:20 »
ok, si es muy buena la idea, digamos que no tengo A/d, que estoy con un 16f84a, tons se optaria por el timer, verda? simpre todo pic tiene por lo menos un timer, verdaD???

Si, ese pic tiene timer.  De todas formas, si el retardo de tus rurtina es fijo y tu bucle es fijo, usar el timer tampoco sería lo ideal....

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Juancar

  • PIC12
  • **
  • Mensajes: 79
Re: Generar un numero aleatorio
« Respuesta #10 en: 01 de Febrero de 2007, 20:48:55 »
En  primer lugar tienes que determinar que rango de números quieres (del 1 al 5, del 1 al 100, entre 100 y 10000 en pasos de 100...) y si el número de números, valga la redundancia, no es muy elevado, una manera de hacerlo podría ser la siguiente:
Creas una tabla, de manera que en cada celda guardes un número, y un programa que la recorra de manera cíclica a gran velocidad. Cuando necesites obtener un número, provocas una interrupción y haces que se muestre el valor del número contenido en la celda que se está leyendo en ese momento. El resultado debería ser aleatorio.

Un saludo.
"Las cosas se hacen bien, o no se hacen"

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Generar un numero aleatorio
« Respuesta #11 en: 02 de Febrero de 2007, 08:22:48 »
En  primer lugar tienes que determinar que rango de números quieres (del 1 al 5, del 1 al 100, entre 100 y 10000 en pasos de 100...) y si el número de números, valga la redundancia, no es muy elevado, una manera de hacerlo podría ser la siguiente:
Creas una tabla, de manera que en cada celda guardes un número, y un programa que la recorra de manera cíclica a gran velocidad. Cuando necesites obtener un número, provocas una interrupción y haces que se muestre el valor del número contenido en la celda que se está leyendo en ese momento. El resultado debería ser aleatorio.

Un saludo.

Juancar, pero con esta solución el programa estaría todo el tiempo haciendo o calculando la tabla.

¿Además recorrer una tabla a gran velocidad? El pic estaría como máximo ejecutando una instrucción por vez y la rutina de la tabla sería siempre igual por ende si usas un timer para ello, estás en la misma entre usar el timer en sí que usar la tabla.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Generar un numero aleatorio
« Respuesta #12 en: 02 de Febrero de 2007, 12:41:33 »
hola saludos, como se pueden fijar la fecha de inicio del hilo, pues lo necesitaba hace mucho tiempo ya, jeje, y no era para pic, sino era para un microprocesador, para un 68000, y pues por eso solo lo queria en ensamblador, pero la forma como la solucione para el fue haciendo varias operaciones sumas multiplicaciones divisiones y rotaciones a un numero ingresado y a partir de ello pues desplazaba un puntero las veces que me decia mi numero aleatorio, y pues como en el pic no se puede ingresar facilmente un numero, ta dificil de ese modo, jeje, asi que creo que deberia ir el timer que dará el numero de entrada al azar en el momento de un pulsador por ejemplo, se captura el timer y listo, y creo que no importa cuan repititivo sea el ciclo infinito, pues dependerá del buen dedo que presione el pulsador, jeje, si lo hacemos de ese modo; pero si queremos que en cualquier momento (sin necesidad de un pulsador) generemos el numero, ahi creo que si va lo que dice maunix, y que no sera tan aleatorio y se repetiran mucho.

ya los limites se los coloca preguntando por una variable si es mayor se pide otro, etc.
.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Generar un numero aleatorio
« Respuesta #13 en: 02 de Febrero de 2007, 12:59:01 »
A veces sucede que algún usuario nuevo entra en el foro y pregunta sobre algo o bien agrega algún comentario a algún post sin fijarse la fecha de creación del mismo, precisamente por ser nuevo.

Estas cosas pasan, y últimamente cada vez más, jeje.  :)

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)