Configuration touche + fonction aléatoire pic 18f452

Configuration touche + fonction aléatoire pic 18f452 - C - Programmation

Marsh Posté le 23-05-2006 à 10:30:51    

Bonjour tout le monde,
 
voila je voudrais savoir si vous pouvez m'aider sur la programmation de la fonction aléatoire en C sur un pic 18f452, cela doit varier entre 0 et 12, et pour configurer les touches d'un clavier toujours pour un pic 18f452?
 
Merci d'avance

Reply

Marsh Posté le 23-05-2006 à 10:30:51   

Reply

Marsh Posté le 23-05-2006 à 14:07:40    

srr a écrit :

voila je voudrais savoir si vous pouvez m'aider sur la programmation de la fonction aléatoire en C sur un pic 18f452, cela doit varier entre 0 et 12, et pour configurer les touches d'un clavier toujours pour un pic 18f452?


Si tu as la bibliothèque C, tu as srand() et rand(). Sinon, Cherche 'Mersenne twister'. [:google] est ton ami...
 
Quand au clavier, sans connaitre le type de materiel associé, impossible de répondre.

  • Console sur le port série ?
  • Matrice de contacts ?
  • Autre...


 
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-05-2006 à 09:44:39    

merci de ta réponse, le probléme ce que je ne maitrise pas le srand() et rand(), j'ai vu des exemples sur le net, mais ils ne s'appliquent pas à mon µc le 18f452.
Pourrais tu m'aider? ou si quelqu'un peut m'aider se serait sympa.
 
Merci d'avance

Reply

Marsh Posté le 24-05-2006 à 10:14:43    

srr a écrit :

merci de ta réponse, le probléme ce que je ne maitrise pas le srand() et rand(), j'ai vu des exemples sur le net, mais ils ne s'appliquent pas à mon µc le 18f452.


Je suis censé deviner pourquoi ? Si tu n'expliques pas le problème, comment je peux t'aider ?  


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-05-2006 à 10:24:29    

c'est marqué juste au dessus, je veux générer un nombre aléatoire allant de 1 à 12, mais j'aimerais que cette fonction ne soit pas la meme à chaque fois, à chaque reinitialisation. Je programme en C sur un pic 18f452 à l'aide de MPLAB C18

Reply

Marsh Posté le 24-05-2006 à 10:25:37    

J4ai lu sur le datasheet que la fonction srand() permettait de ne pas avoir la meme sequence à chaque fois, mais vu qu'il n'y à pas d'exemple je n'arrive pas à la faire fonctionner.

Reply

Marsh Posté le 24-05-2006 à 10:40:24    

srr a écrit :

c'est marqué juste au dessus, je veux générer un nombre aléatoire allant de 1 à 12, mais j'aimerais que cette fonction


Tu veux dire cette valeur ?

Citation :

ne soit pas la meme à chaque fois, à chaque reinitialisation. Je programme en C sur un pic 18f452 à l'aide de MPLAB C18


Ca, tout le monde a compris, mais tu dis "j'ai vu des exemples sur le net, mais ils ne s'appliquent pas à mon µc le 18f452." sans autres explications.  
 
Ma question est
 

  • Quels exemples ?
  • En quoi ne s'appliquent-ils pas sur ton µC ?


Si il y a un problème particulier que j'ignore, je préfère être au courant avant de donner une solution qui ne fonctionne pas.

Citation :

"je n'arrive pas à la faire fonctionner."


Et tu penses qu'avec ça je vais pouvoir t'aider ? Si ne montre pas le code qui ne fonctionne pas, je ne vais pas le deviner. Ca parait évident, non ?
 
Si tu ne veux pas te faire aider, dit le tout de suite... Sinon, donne des éléments précis.


Message édité par Emmanuel Delahaye le 24-05-2006 à 10:43:10

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-05-2006 à 13:43:23    

deja les bibliothéques utlisées ne sont pas les mêmes je vais te donner 2 exemples ne pouvant être utilisés

Reply

Marsh Posté le 24-05-2006 à 13:43:44    

#include <18F452.h>
#include <STDLIB.H>
#include <string.h>
#use delay(clock=40000000)
#use standard_io (D)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
 
#define ALL_RIGHT 200 //Clock and counterclock boundaries for how  
#define ALL_LEFT 2100 //Far the servo can go
#define MY_RAND_MAX (ALL_LEFT - ALL_RIGHT)  // Everything inbetween those boundaries
 
int32 i;
int16 random;
int16 randPos;
 
void delay_mine(int16);       //this is a function I wrote to  
                              //do longer delays
 
void main() {
 
   while (true)
   {
      random = rand();
      printf("rand is %ld \n",random);
 
//  The next line takes max value a random number can be (32k) and divides it by
// the biggest number we would ever want (allleft-allright),  
// giving us a scaling factor.
// We then divide the actual random number by that factor,  
// then add it to allright
// In essence, we take any number between 0 and 32767 and turn
// it into an analogous number between 200 and 2100
 
      randPos = random / (32767 / MY_RAND_MAX) + ALL_RIGHT;
      printf("turning to %ld \n",randPos);
      i = 150; //again, i varied this
      while (i >= 1) {
         output_high(pin_D2);
         delay_mine(randPos); //varied these too
         output_low(pin_D2);
         delay_ms(19);
        i--;
      }
   }
}
 
void delay_mine(int16 realMicros)
{
   int16 major;
   char minor,x;
 
   major = realMicros / 255;
   minor = realMicros % 255;
   for( x = major; x>=1; x--)
   {
      delay_us(255);
    }
   delay_us(minor);
}


Message édité par srr le 24-05-2006 à 13:46:33
Reply

Marsh Posté le 24-05-2006 à 13:44:06    

#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])  
{
 int i, x = 0;
 int n = (argc > 1) ? atoi(argv[1]) : 1;
 
 /* par défaut on ne génère qu'un seul bit */
 srand(time(NULL));
 /* initialise la graine en fonction de la date */
 for(i = 0; i < n; ++i) {
  x = (int)((double)rand()/((double)RAND_MAX+1)*2);
  /* cf. man rand (3) */
 
  printf("%d", x);
  sleep(0.1); /* fait varier la graine */
 }
 printf("\n" );
 return 0;
}
 
 
LA fonction srand(time(NULL)) n'est pas valide avec MPLAB C18.
Pour donner la variation du nombre aléatoire avec rand() max et min, pareil je ne peux le faire.
J'ai fait ce programme à l'aide d'un exemple sur le net mais il me donne la séquence à chaque fois lors du redemarrage.
 
// fonction aléatoire permettant de génerer un mot sur 16bits
unsigned int my_rand (void)
{
 static unsigned int first=0b0000000000000000;
 if (first ==0b0000000000000000)
 {
  srand (0b0);
  first=1;
 }
 return (rand());
}
 
J'ai fait ce programme pour 16 bits juste pour voir ce que ca donnait, ce n'est pas définitif, je l'ajusterais dés que j'arrive à faire une variation aléeatoire, sans avoir les même sequences à chaque fois.


Message édité par srr le 24-05-2006 à 13:56:23
Reply

Marsh Posté le 24-05-2006 à 13:44:06   

Reply

Marsh Posté le 29-05-2006 à 14:14:26    

personne pour me répondre?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed