Autor Tema: Codigo Numero Aleatorio ...  (Leído 3391 veces)

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

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Codigo Numero Aleatorio ...
« en: 15 de Agosto de 2007, 20:25:14 »
Hola amigotes necesito su ayuda es para generar un numero aleatorio, lo intente revisar pero no encuentro en que puedo haber equivocado, gracias de antemano.

Código: C
  1. #include <16F84A.h>
  2.  
  3. #FUSES NOWDT                    //No Watch Dog Timer
  4. #FUSES XT                       //Crystal osc <= 4mhz
  5. #FUSES NOPUT                    //No Power Up Timer
  6. #FUSES PROTECT                  //Code protected from reads
  7.  
  8. #use delay(clock=4000000)
  9.  
  10. #include <stdlib.h>
  11. #byte porta=0x05
  12.  
  13. int number;
  14. void main()
  15. {
  16.    disable_interrupts(GLOBAL);
  17.    set_tris_b(0);
  18.    set_tris_a(1);
  19.    srand(10);
  20.    
  21.    do {
  22.             if(bit_test(porta,0))
  23.                  {
  24.                       do{
  25.                             number = rand();
  26.                           }while(bit_test(porta,0));
  27.                   }
  28.        output_b(number);
  29.       }while(true);
  30. }
El conocimiento se consigue a base de esfuerzo...

Desconectado pelusac

  • PIC16
  • ***
  • Mensajes: 118
Re: Codigo Numero Aleatorio ...
« Respuesta #1 en: 16 de Agosto de 2007, 15:38:39 »
En esta página hay un soberbio ejemplo de Vszener que creo te vendrá como anillo al dedo:

http://www.todopic.com.ar/foros/index.php?topic=4530.msg38904#msg38904

Saludos

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Codigo Numero Aleatorio ...
« Respuesta #2 en: 16 de Agosto de 2007, 15:40:22 »
¿Y cual es el problema?

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Codigo Numero Aleatorio ...
« Respuesta #3 en: 16 de Agosto de 2007, 19:12:21 »
Estoy siguiendo los ejemplos de VsZener pero no me funciona debe ser porque esta es una nueva version del CCS (4.038) y esa era una anterior y no se que cosa esta mal, me podrian dar una mano y decirme cual es mi error??? Me genera los numero aleatorios , pero de 0 a 32676 y yo quiero q el maximo generado sea 9 , ese es el problema.
El conocimiento se consigue a base de esfuerzo...

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Codigo Numero Aleatorio ...
« Respuesta #4 en: 16 de Agosto de 2007, 19:26:44 »
Vale, ahoraestá claro el problema. Según lo puesto en el manualde CCS sobre rand():

The rand function returns a sequence of pseudo-random integers in the range of 0 to RAND_MAX.

Por lo tanto tienes que modificar RAND_MAX para cambiar el valor:

#ifdef  RAND_MAX
#undef RAND_MAX
#define RAND_MAX 9
#endif

Un saludo

* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Codigo Numero Aleatorio ...
« Respuesta #5 en: 16 de Agosto de 2007, 19:31:01 »
Esa modificacion se hace directamente en la libreria??? pq asi si me salio, pero pense que se podia poner el limite en el mismo programa, sin tener q modificar la libreria. Disculpa por la terquedad  :(
El conocimiento se consigue a base de esfuerzo...

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Codigo Numero Aleatorio ...
« Respuesta #6 en: 16 de Agosto de 2007, 19:35:31 »
Claro que lo puedes poner en el programa, pero muy importante, despues de llamar a la libreria, sin no, no tendrá efecto.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Codigo Numero Aleatorio ...
« Respuesta #7 en: 16 de Agosto de 2007, 19:42:17 »
Código: C++
  1. #include <stdlib.h>
  2.  
  3. #define RAND_MAX 10
  4.  
  5. #byte porta=0x05
  6. int number;
  7. void main()
  8. {

Si era algo asi, no funciono amigo. La verdad no entiendo muy bien el orden q me indicas, puedes ayudarme ??
El conocimiento se consigue a base de esfuerzo...

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Codigo Numero Aleatorio ...
« Respuesta #8 en: 16 de Agosto de 2007, 20:00:26 »
El programa deberia de funcionar así:

Código: C
  1. #include <stdlib.h>
  2.  
  3. #ifdef  RAND_MAX
  4. #undef RAND_MAX
  5. #define RAND_MAX 9
  6. #endif
  7.  
  8. #byte porta=0x05
  9.  
  10. int number;
  11.  
  12. void main(){

Ese es el orden que debe de tener y las seudo intrucciones a incluir.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Codigo Numero Aleatorio ...
« Respuesta #9 en: 16 de Agosto de 2007, 20:04:01 »
Mi amigo siento decir esto pero me dio el mismo resultado, no entiendo cual es el problema , puede ser por la version de mi CCS ??? 4.038 probaste ese programa ??? gracias.
El conocimiento se consigue a base de esfuerzo...

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Codigo Numero Aleatorio ...
« Respuesta #10 en: 16 de Agosto de 2007, 20:22:07 »
No deberia dar problemas. Tienes la simulación en Proteus para probar el programa?, si es así postealo junto con el programa para probarlo.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Codigo Numero Aleatorio ...
« Respuesta #11 en: 16 de Agosto de 2007, 20:37:13 »
Adjunto el Hex. y pongo el programa en C, simulacion en Proteus 7.1 SP2


Código: C++
  1. #include <16F84A.h>
  2.  
  3. #FUSES NOWDT                    //No Watch Dog Timer
  4. #FUSES XT                       //Crystal osc <= 4mhz
  5. #FUSES NOPUT                    //No Power Up Timer
  6. #FUSES PROTECT                  //Code protected from reads
  7.  
  8. #use delay(clock=4000000)
  9. #byte porta=0x05
  10. #include <stdlib.h>
  11. #ifdef  RAND_MAX
  12. #undef RAND_MAX
  13. #define RAND_MAX 10
  14. #endif
  15.  
  16.  
  17. void main()
  18. {
  19.  
  20.       int number;
  21.  
  22.    srand(10);
  23.    disable_interrupts(GLOBAL);
  24.    set_tris_b(0);
  25.    set_tris_a(1);
  26.    
  27.    
  28.    do {
  29.        if(bit_test(porta,0))
  30.          {
  31.           do{
  32.                 number = rand();
  33.               }while(bit_test(porta,0));
  34.          }
  35.        output_b(number);
  36.       }while(true);
  37. }
El conocimiento se consigue a base de esfuerzo...

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Codigo Numero Aleatorio ...
« Respuesta #12 en: 16 de Agosto de 2007, 20:59:40 »
Ya está probado, la solución es ponerlo delante de la llamada a la libreria:

Código: C
  1. #define RAND_MAX 9
  2. #include <stdlib.h>

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Codigo Numero Aleatorio ...
« Respuesta #13 en: 17 de Agosto de 2007, 11:10:31 »
Excelente mi amigo , disculpa las molestias, funciona perfecto, gracias!!! a seguir aprendiendo....
« Última modificación: 17 de Agosto de 2007, 11:49:30 por manuelroin24 »
El conocimiento se consigue a base de esfuerzo...

Desconectado manuelroin24

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 665
Re: Codigo Numero Aleatorio ...
« Respuesta #14 en: 17 de Agosto de 2007, 12:30:46 »
Muchas Gracias amigo aqui dejo el Codigo para el dado electronico jejejeje gracias!!!
Código: C++
  1. #include <16F84A.h>
  2.  
  3. #FUSES NOWDT                    //No Watch Dog Timer
  4. #FUSES XT                       //Crystal osc <= 4mhz
  5. #FUSES NOPUT                    //No Power Up Timer
  6. #FUSES PROTECT                  //Code protected from reads
  7.  
  8. #use delay(clock=4000000)
  9. #byte porta=0x05
  10.  
  11.  
  12. #define RAND_MAX 9
  13. #include <stdlib.h>
  14.  
  15.  
  16. void main()
  17. {
  18.  
  19.       int number;
  20.  
  21.    disable_interrupts(GLOBAL);
  22.    set_tris_b(0);
  23.    set_tris_a(1);
  24.    
  25.    
  26.    do {
  27.        if(bit_test(porta,0))
  28.          {
  29.           do{
  30.                 number = rand();
  31.               }while(bit_test(porta,0));
  32.          }
  33.        output_b(number);
  34.       }while(true);
  35. }
El conocimiento se consigue a base de esfuerzo...