TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado 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
-
Aca hay algo de eso:
http://www.phanderson.com/PIC/16C84/random.html
Saludos
-
Si tu PIC tiene entrada ADC puedes dejarla al aire y leer su valor; el resultado será aleatorio.
-
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
-
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.
-
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
-
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.
-
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)
-
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???
-
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....
-
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.
-
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
-
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.
-
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. :)