TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: Cryn en 09 de Noviembre de 2006, 19:58:59

Título: Generar un numero aleatorio
Publicado por: Cryn 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
Título: Re: Generar un numero aleatorio
Publicado por: BrunoF en 10 de Noviembre de 2006, 04:14:12
Aca hay algo de eso:

http://www.phanderson.com/PIC/16C84/random.html

Saludos
Título: Re: Generar un numero aleatorio
Publicado por: Nocturno 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.
Título: Re: Generar un numero aleatorio
Publicado por: Cryn 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
Título: Re: Generar un numero aleatorio
Publicado por: BINARIO 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.
Título: Re: Generar un numero aleatorio
Publicado por: maunix 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

Título: Re: Generar un numero aleatorio
Publicado por: Nocturno 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.
Título: Re: Generar un numero aleatorio
Publicado por: maunix 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)
Título: Re: Generar un numero aleatorio
Publicado por: Cryn 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???
Título: Re: Generar un numero aleatorio
Publicado por: maunix 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....

Título: Re: Generar un numero aleatorio
Publicado por: Juancar 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.
Título: Re: Generar un numero aleatorio
Publicado por: maunix 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
Título: Re: Generar un numero aleatorio
Publicado por: Cryn 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.
Título: Re: Generar un numero aleatorio
Publicado por: maunix 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.  :)