TODOPIC

Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: LordLafebre en 09 de Junio de 2005, 13:30:00

Título: Numero aleatorio con Random? como?
Publicado por: LordLafebre en 09 de Junio de 2005, 13:30:00
Hola Amigos:

Una ayudita con esto por favor:

Tengo un vector de 10 posiciones y quiero seleccionar de forma aleatoria una posición de dicho vector utilizando la función RANDOM…

La ayuda dice:

RANDOM Var
Efectúa una iteración pseudo-aleatoria en Var .Var debe ser una variable de 16 bit .No se pueden usar variables de array con índice variable, pero se permite usar variables de array con índice constante. Var se usa tanto como origen, como para guardar el resultado .El algoritmo pseudo-aleatorio usado tiene un paso de 65535 (el único número que no produce es el cero).

RANDOM W4 coloca un número aleatorio en W4.

Lo que no tengo idea y quiero saber es como hace para que sea solo valores entre 1 y 9, alguien puede guiarme con esto…? Avergonzado
Título: RE: Numero aleatorio con Random? como?
Publicado por: ejmc en 09 de Junio de 2005, 20:59:00
HolaSonrisa
Primero genera el random , luego tomas el resto de la division var/10, y asi tienes un random que tomara un valor de 0 a 9. Suerte
Título: RE: Numero aleatorio con Random? como?
Publicado por: LordLafebre en 10 de Junio de 2005, 11:17:00
Hola:

Gracias ejcm... a mi parecer hice lo que tu me dijiste con este codigo:

num var word

pause 250
lcdout $FE,1
inicio:
        random num
        num=num/10
        lcdout $FE,$C5,dec num
        pause 2000
        lcdout $FE,1
        goto inicio
end

Pero lo que obtengo son valores mayores a nueve... luego llega un momento que se hace 0 y permanece siempre asi... estoy haciendo algo mal..? por si de algo sirve utilizo un Pic 16F628.. pero no creo que influya en nada.... Que es lo que estoy haciendo mal...? Llorica
Título: RE: Numero aleatorio con Random? como?
Publicado por: ejmc en 10 de Junio de 2005, 22:45:00
Hola Lord  Sonrisa
Lo que te digo es asi:

num var word

pause 500
lcdout $FE,1
inicio: random num
          num = num // 10  "ESTO DIVIDE A NUM POR 10 Y EL RESTO DE LA DIVICION LO GUARDA EN NUM
          lcdout $FE,$C5,dec num
          pause 2000
          lcdout $FE,1
          goto inicio

aSI TIENE QUE ANDAR
Título: RE: Numero aleatorio con Random? como?
Publicado por: LordLafebre en 14 de Junio de 2005, 10:59:00
Hola ejmc:

probé lo que tu me dijistey si genera numeros pero solamente el 1 2 y 5 y siempre en la misma secuencia.. funciona siempre así o hay que corregir algo...?
Título: RE: Numero aleatorio con Random? como?
Publicado por: RGL en 14 de Junio de 2005, 12:30:00
Puedes hacer una cosa un poco más lenta pero que puede ser más eficaz:

Generas una var random de 1 a 65535 y con un case o un if seleccionas:

si var entre 1 y 7000 entonces el random es 1
si var entre 7001 y 14000 entonces random es 2
si var entre 14001 y 21000 entonces random es3

yt así sucesivamente. Se supone que todos los valores serán equiprobables y te irán saliendo todos los random

Saludos
Ricky
Título: RE: Numero aleatorio con Random? como?
Publicado por: ejmc en 14 de Junio de 2005, 23:22:00
Hola LordSonrisa
Si el random esta bien hecho no tendria que suceder eso que dices. Asi que deve ser un problema del PBP. Capas que usando dos random y una operacion cualquiera entre ellos, puedes solucionarlo. Quiero decir algo asi:

random var1
random var2
var1 = var1 // 5  "VAR1 TENDRIA QUE TENER CUALQUIER VALOR ENTRE 0 Y 4
var2 = var2 // 6  "VAR2      "           "       "             "               "          "     0 Y 5
var_final = var1 + var2 "var_final tendria que tener cualquier valor entre 0 y 9

Para saver si el random del pbp es el que esta mal puedes probar lo siguiente: gENERA un " RANDOM var ". Muestra el valor en el display y fijate si el ultimo digito de cada numero generado sigue la secuencia 1 2 y 5 que dices.
Suerte
Título: Re: Numero aleatorio con Random? como?
Publicado por: LordLafebre en 19 de Julio de 2007, 12:46:19
Hola:

Retomando nuevamente esto, ahora que lo necesito, me parece raro y sigo teniendo problemas con este bendito RANDOM y no puedo generar valores aleatorios entre 1-9  :8}, alguien tiene experiencia con esto y puede darme una ayudita  :P

Gracias  :mrgreen:
Título: Re: Numero aleatorio con Random? como?
Publicado por: dogflu66 en 19 de Julio de 2007, 13:23:25
el Pic16F628 si no recuerdo mal, tiene 3 Timer, usa uno para generar el random
es un poco bestia la solucion pero creo que debe ir bien.
Título: Re: Numero aleatorio con Random? como?
Publicado por: Nocturno en 19 de Julio de 2007, 14:10:52
Mi sugerencia es que utilices un pin ADC como entrada analógica al aire configurado, por ejemplo, a 8 bits de resolución.
El número que leerás será cualquier valor entre 0 y 255. Para conseguir un nº del 1 al 9, podrías hacer lo siguiente:
ValorRandom = entero ( ValorADC / 8 ) + 1
Título: Re: Numero aleatorio con Random? como?
Publicado por: navaismo en 19 de Julio de 2007, 14:45:47
Mi sugerencia es que utilices un pin ADC como entrada analógica al aire configurado, por ejemplo, a 8 bits de resolución.
El número que leerás será cualquier valor entre 0 y 255. Para conseguir un nº del 1 al 9, podrías hacer lo siguiente:
ValorRandom = entero ( ValorADC / 8 ) + 1

Esa si es una buena idea usar el adc, Yo estuve probando con RANDOM de PBP y si genera varios numeros al azar pero cuando sobrepasa el rango si es byte los 255 vuelve a repetir los valores.
Título: Re: Numero aleatorio con Random? como?
Publicado por: LordLafebre en 19 de Julio de 2007, 16:34:07
Hola:

Pues es muy buena la idea, gracias Manolo, la voy a probar, el Random funciona bien, pero genera un número aleatorio entre 0-65535, y a ratos da un mismo valor, probaré con lo que comentó manolo a ver que tal.
Título: Re: Numero aleatorio con Random? como?
Publicado por: aitopes en 19 de Julio de 2007, 17:51:47
Hola!
Hola Lord<img   src="http://pics.miarroba.com/caretos/smile.gif" alt="Sonrisa" title="Sonrisa" />
Si el random esta bien hecho no tendria que suceder eso que dices. Asi que deve ser un problema del PBP. Capas que usando dos random y una operacion cualquiera entre ellos, puedes solucionarlo. Quiero decir algo asi:

random var1
random var2
var1 = var1 // 5  "VAR1 TENDRIA QUE TENER CUALQUIER VALOR ENTRE 0 Y 4
var2 = var2 // 6  "VAR2      "           "       "             "               "          "     0 Y 5
var_final = var1 + var2 "var_final tendria que tener cualquier valor entre 0 y 9

Para saver si el random del pbp es el que esta mal puedes probar lo siguiente: gENERA un " RANDOM var ". Muestra el valor en el display y fijate si el ultimo digito de cada numero generado sigue la secuencia 1 2 y 5 que dices.
Suerte

Hay algun tipo de error en este razonamiento. Los valores de 0 a 9 obtenidos no son "al azar".

Me explico: Las posibilidades de obtener un 0 son una en 5x6 = 30, ya que ambos resultados tienen que ser 0 a la vez, y hay una posibilidad en 5 que el primero lo sea, y una en 6 de que el segundo lo sea, luego, hay una en 30 de que salga un "0" al sumar.

Peeeeeero...para otros numeros no es asi. Por ejemplo, para que salga un 5, puede salir 0 y 5, 1 y 4, 2 y 3, 3 y 2 o 4 y 1. Por lo que hay 5 veces mas posibilidades de obtener un "5" que un cero...y eso es inaceptable en el azar.

De hecho, algo de eso puede aprenderse si se estudian los numeros que se obtienen al arrojar un par de dados....no de gusto cada numero se paga mas o menos, justamente debido a esto.

Saludos!
Título: Re: Numero aleatorio con Random? como?
Publicado por: BrunoF en 19 de Julio de 2007, 18:37:56
Yo haria:

RANDOM Var
Var = Var % 10

Donde "%" deberia ser el operador MOD(no programo en este lenguaje de PICs asi que por ahi le corresponde otro simbolo).
Título: Re: Numero aleatorio con Random? como?
Publicado por: BrunoF en 19 de Julio de 2007, 18:39:08
Si lo queres entre 1 y 9 seria:

RANDOM Var
Var = (Var % 9) + 1
Título: Re: Numero aleatorio con Random? como?
Publicado por: LordLafebre en 19 de Julio de 2007, 19:57:05
Hola:

Ariel, Random genera números aleatorios entre 1-65535, el cero no, es así en PBP, voy a probar con sus sujerencias y ya les cuento amigos. GRACIAS  :mrgreen:
Título: Re: Numero aleatorio con Random? como?
Publicado por: LordLafebre en 19 de Julio de 2007, 20:19:28
Hola:

Pues probé como Bruno comenta y es algo así como lo hago en VB, pero en PBP no funciona, salen resultados repetidos y continuos, con la sujerencia de Manolo (muy acertada, gracias) va mucho mejor, así lo tengo probado por ahora y va bien, voy a hacer para dos dígitos y visualizar en un par de displays y ya les cuento.

Gracias a todos  :-/
Título: Re: Numero aleatorio con Random? como?
Publicado por: Nocturno en 20 de Julio de 2007, 01:45:42
Me confundí al transcribir la fórmula; la correcta es:
ValorRandom = entero ( ValorADC / 32 ) + 1
Título: Re: Numero aleatorio con Random? como?
Publicado por: Marioguillote en 20 de Julio de 2007, 01:59:14
Hola a todos !

RANDOM VAR1
VAR2 = DIG VAR1,3
PRINT @VAR2

Según Protón, con ése código, generas el número aleatorio y luego escojes el dígito del numero final obtenido en VAR1 que desees, para mostrarlo en el LCD.
O sea, si obtienes el número 12345, la sentencia DIG te pasará a VAR2 el número 4
Otro ..... 10729 .... VAR1 = 2

Combina esas dos instrucciones. RANDOM y DIG. Tal vez te sirva.

Saludos
Mario
Título: Re: Numero aleatorio con Random? como?
Publicado por: LordLafebre en 20 de Julio de 2007, 03:28:12
Hola:

Gracias Mario, tambien es una buena opción, si miré el protón, y de hecho es lo mismo para PBP, voy a hacer un poco de pruebas y veré cuál es la mejor opción.

Gracias.