Quand le hasard devient prévisible.

Robert5111

New Member
La fonction RANDOM permet de générer une suite de nombres , qui est toujours
la même .Certe il y en a beaucoup (jusqu`à 65535) , mais ils reviennent quand
même , donc apparence de hasard ou pseudo-random. Pour générer un nombre,
le plus alléatoire possible , il faut manuellement injecter un nombre différent avant d`utiliser la fonction Random , ce qui revient à démarrer la "boucle" de la fonction RANDOM à des endroits différents.
Quand on utilise un PICAXE 08 ou 08M il devient difficile, justement, de générer automatiquement
une séquence de chiffres différents d`une fois à l`autre .Le manuel suggère judicieusement l`emploi d`une
boucle fermée et d`un bouton poussoir pour générer un début de séquence alléatoire avant chaque exécution de la fonction RANDOM. Cela fonctionne certe,mais ce n`est pas automatique , ça prend l`intervention humaine pour déclencher le
processus.Après mûre réflextion , j`ai contourner le problème par l`emploi d`un circuit simple de charge RC ,résistance / condensateur .À chaque mise sous tension ,le circuit se charge selon une fonction log.
En mesurant la tension avec la commande READADC10 puis en injectant la mesure dans la variable de la
fonction RANDOM , on obtient automatiquement une nouvelle séquence de chiffres,à chaque démarrage.Cela semble fonctionner , mais j`aimerais bien savoir si il y a d`autres méthodes , plus simple , pour arriver aux mêmes résultats
,en employant les PICAXE 08 ou 08M (Excluant la série M ou X2),et qui génère AUTOMATIQUEMENT une série de nombres , différentes à chaque exécution de la fonction RANDOM.
 
Last edited:

PieM

Senior Member
Bonjour,

En principe, il est rare que dans un programme il n'y ait pas une intervention extérieure, type appui sur un bouton poussoir, lecteur d'une valeur ana, etc...
Un programme étant avant tout une boucle, il suffit d'associer une variable word à un comptage lié à cette boucle, et d'en écrire la valeur en eeprom dès l'apparition de l'évènement externe.
Si c'est une lecture d'une grandeur ana, c'est le même principe, la stocker en eeprom.
Au démarrage suivant du programme, cette valeur servira de graine au calcul pseudo aléatoire.
 

Robert5111

New Member
Merci pour ta réponse.
À bien y penser, il y a bien une intervention extérieure au programme , une entrée numérique ( 0 ou 1) de durée variable , provenant du dispositif contrôlé par le PICAXE 08M.

Et comme le programme comporte aussi une boucle de durée variable , liée à l`état de cette entrée numérique, l`idée d`associer une variable word à un comptage lié à cette boucle et
de garder une trace de la dernière valeur sur EEPROM ,en vue du prochain démarrage du programme , n`est pas bête du tout .

Ce qui me dérange un peu c`est la durée de vie des mémoires EEPROM , surtout
si l`enregistrement de données est fréquent. Hummm.....
 

fuse

Senior Member
Bonjour,
L'idée de Robert_5111 pour créer un nombre de départ pour générer une information permettant de générer un nombre pseudo-aléatoire est très judicieuse... Idem pour PieM. J'y penserais pour de futurs programmes.
Concernant une sauvegarde en EEPROM, cela vaut surement le coup. En effet, le nombre de cycle d'écriture est prévu de 1.000.000
Si l'on allume le Picaxe 50 fois par jour, cela devrait fonctionner pendant plus de 50 ans....
Cordialement
 

PieM

Senior Member
Bonjour à tous,

Si l'on allume le Picaxe 50 fois par jour, cela devrait fonctionner pendant plus de 50 ans....
Et on peut présumer que dans 50 ans, le picaxe n'existera plus ... ;)

Bonne journée
 

Robert5111

New Member
Bonjour
Suite à la suggestion de Piem ( Pierre je présume ) ,
j`ai écrit un petit programme pour tester l`enregistrement de données permanentes
dans l`EEPROM d`un PICAXE . Je ne suis pas familier avec les fonctions dédiées
à l`EEprom et il y a quelque chose qui m`échappe encore .Je réussi à enregistrer
puis à lire dans l`EEPROM , ici pas de problème .Cependant je ne parvient pas à
enregistrer une donnée permanente dans l`EEPROM qui puisse survivre au
dowload d`un autre programme.

'PGM DE TEST fonction WRITE/READ de l`EEPROM du PICAXE 08M

W0=257 'Valeur à sauvegarder dans l`EEPROM du PICAXE 08M -->$0101
write 0, WORD W0 'Copie la variable W0 à l`adresse 0 et 1 de l`EEPROM


DEPART: 'Lit la valeur de l`EEPROM puis la stocke dans W0 puis affiche à l`écran

read 0, WORD w0 'Lit la var. W0 enregistrée dans l`EEPROM du PICAXE 08M ,adresse 0 et 1

DEBUG W0 'Affiche la valeur stockée dans l`EEPROM du PICAXE 08M ,adresse 0 et 1

PAUSE 300 'Nouvelle lecture

GOTO DEPART

Dans un premier temps , j`enregistre la valeur 257 ($0101) dans l`EEPROM
et ensuite je regarde si c`est bien la bonne valeur enregistrée dans l`EEPROM
Jusqu`ici tout va bien
Ensuite je dowload le même programme , mais sans les deux premières lignes , puisque
j`en ai plus besoin puisque la valeur est supposé avoir été gravé dans l`EEPROM.
Et c`est là que la donnée est effacée.
Comment faire pour enregistrer une donnée dans l`EEprom qui puisse survivre
au démarrage suivant du programme?
Le dowload d`un nouveau programme , lave blanc, plus que blanc.....
Possible ou impossible that`s is the question . Je cherche à vérifier qu`une variable
enregistré dans l`EEPROM lors de l`exécution A du programme puisse se retrouver
lors de l`execution B du programme.Vraiment , il y a quelque chose qui m`échappe...
où je m`y prend mal .
 
Last edited:

PieM

Senior Member
Ce qui se passe est tout à fait normal.
Les valeurs écrites en eeprom restent après une mise hors tension du picaxe.
Par contre un download, lui n'est pas un démarrage normal de programme! la réécriture d'un programme remet à 0 la mémoire eeprom, programme et données.
Si les valeurs doivent être conservées même après un download, il faut passer par une eeprom externe.

Je cherche à vérifier qu`une variable
enregistré dans l`EEPROM lors de l`exécution A du programme puisse se retrouver lors de l`execution B du programme
Oui, ça c'est vrai. Mais pas si on change de programme !
 

fuse

Senior Member
Bonjour Robert_5111,

Le téléchargement efface la mémoire eeprom du Picaxe. Je ne sais pas comment faire autrement. Il y a peut-être une astuce??? je ne la connais pas.
Cependant, il est possible de charger un programme avec une initialisation permettant de charger des valeurs dans l'EEPROM :
exemples :
EEPROM 0 , (1,2)
permet de charger l'adresse 0 avec 1 et l'adresse 1 avec 2

EEPROM 16, ("Test")
permet de charger l'adresse 16 (en héxa) avec le code ascii de T,
l'adresse 17 (en héxa) avec le code ascii de e,
etc....

Bien sur ses informations peuvent être écrasées après...
Ah oui, il est possible de lire l'EEPROM d'un PICAXE avec un logiciel de type IC-Prog (manipulation pour les habitués des Pics).
Attention de ne pas effacer le bootloader en effaçant le Picaxe....


Cordialement
 
Last edited:

Robert5111

New Member
Citation: Juste avant sa mort il vivait encore.

Bonjour messieurs

Le brouillard Canadien s`éclaircie un peu , donc impossibilité de sauvegarder des données enregistrées dans l`EEPROM du PICAXE après un dowload de programme puisque toute
les données présentes seront effacées pour faire place aux nouvelles instructions .
Par contre , si on a prévue des sauvegardes en EEPROM à même le fonctionnement du programme , on pourra les " récupérer " lors du prochain démarrage ou mise sous tension .

J`ai toujours une confiance relative en ce qui concerne la durée de vie des mémoires EEPROM , surtout si on sollicite toujours les mêmes adresses mémoires .
Que ce soit 1 millions de cycles ou 100,000 ça m`importe peu , parce que ça peut lâcher n`importe quand entre ces deux extrêmes et même beaucoup plus tôt .
Je trouve les manufacturiers bien optimistes quand il avance ces chiffres.
( C`est mon opinion.....et je la respecte ! :)

Il serait bien d`écrire un programme pour illustrer le début de mon propos , vous avez des idées ?
Enfin , pour diminuer la fréquence d`écriture dans l`EEPROM il faudrait imaginer
un dispositif simple pour détecter un arrêt imminent du programme ou détecter une baisse de tension d`alimentation. Donc c`est juste à ce moment qu`on ferait un enregistrement
de sauvegarde dans l`EEPROM , juste avant que le dispositif ne s`éteigne , que Dieu ait
son âme.
Facile à dire , pas facile à faire , j`imagine. Encore merci pour votre aide .
 

PieM

Senior Member
Bonjour,

J'avoue ne pas trop comprendre quel est votre problème! :confused:
Il me semblait que vous aviez besoin de générer un nombre aléatoire différent à chaque démarrage.?

Il suffit donc d'une seule séquence d'écriture faite à n'importe quel moment au cours du programme, pour inscrire une nouvelle valeur prise en compte lors du prochain démarrage de programme. Je ne comprends pas votre
pour diminuer la fréquence d`écriture dans l`EEPROM il faudrait imaginer...

Concernant la durée de vie d'une eeprom, leur durée de vie est bien de 1 million de cycles effacement/écriture et les données sont mémorisées pendant 200 ans. il s'agit d'une valeur statistique basée sur quelques milliards de composants. Alors bien sûr on peut tomber sur le composant qui lâche au bout de trois secondes !

Si l'intégrité de votre projet est à ce point sensible, il vous est possible de pratiquer la redondance hard et soft, en doublant ou triplant en parallèle le microcontrôleur ....

Sinon, changez le picaxe tous les ans, ça vous coûtera moins cher. :)

Il serait bien d`écrire un programme pour illustrer le début de mon propos , vous avez des idées ?
Il est difficile d'écrire un programme quand on ne connait pas la finalité du projet...

les shadoks disaient: "S’il n’y a pas de solution c’est qu’il n’y a pas de problème"
 

Robert5111

New Member
La voie de la simplicité volontaire.

Bonsoir

Finalement, avec la méthode suggérée d`écriture dans l`EEPROM
je parviens à générer un nombre aléatoire différent à chaque démarrage .
Si on n`utilise pas l`EEPROM ,c`est plus compliqué car on doit se rabattre
sur d`autres variables que l`on doit mesurer et injecter dans la fonction
RANDOM ,comme décrit précédemment.

Je vais probablement choisir l`option EEPROM , qui a l`avantage de la
simplicité en plus de libérer un port . Avec une réduction de la
fréquence d`écriture dans la mémoire EEPROM , cela devrait
faire l`affaire. Pour ce qui concerne la protection d`un dispositif
contrôlé par microcontrôleur (Watch dog), cela pourrait faire
l`objet d`une prochaine discussion.
 

PieM

Senior Member
Bonjour,

Pour ce qui concerne la "protection d`un dispositif contrôlé par microcontrôleur (Watch dog)" je pense qu'il faudra préciser la finalité. Car un vrai watch dog existe dans les pics.
S'il s'agit de sauvegarder des données avant un arrêt lié à un défaut d'alimentation, c'est un autre problème...
Mais effectivement, il s'agit d'un autre sujet.
 

Robert5111

New Member
Bonjour

Merci beaucoup pour votre aide.

(À propos du watchdog)
Je pensais , en fait , à un dispositif qui surveille le fonctionnement du microcontrôleur.
En cas d`arrêt subit du programme , de plantage du logiciel ou autres causes, le
dispositif positionne les organes de régulations dans un état sécuritaire (fail safe).
Je pense qu`une telle précaution est essentielle dans des applications marginales
où la sécuritée des personnes est en jeux.
 

PieM

Senior Member
Bonjour,

En aucun cas le système Picaxe ne peut être utilisé si la sécurité des personnes peut être en jeu.
Je crois qu'il faut être très clair là dessus.
 

Robert5111

New Member
Picaxe sous observations.

En théorie , bien sûr. Hélas, ce n`est pas toujours aussi clair. Des applications bien innocentes en apparence , peuvent conduirent à la catastrophe ,
si l`on a mal anticiper tous les cas de figures . D`ou l`importance de prévoir
un arrêt sécuritaire , en cas de pépins .Par exemple , un chargeur expérimental de piles LI-Po
mal conçue , peut provoquer un incendie et mettre votre vie en danger.
 
Last edited:

PieM

Senior Member
Sureté de fonctionnement

Bonjour,

Si le risque est lié à un vice de conception, un bug de programmation, ou un défaut de fonctionnement d'un picaxe ou d'un autre composant, il est clair que la conséquence, (si elle a bien été identifiée !) doit être surveillée par un autre système extérieur.
Sur un simple radiateur électrique, un excès de température est surveillé par un organe indépendant du thermostat.
Dans le cas que vous citez, des accus LiPo, une surveillance de la baisse du courant de charge, et de la montée en température serait un minimum.
Et il est des expérimentations qu'il vaut mieux éviter si le risque est jugé important.
Comme tout ou presque dans une maison peut être source d'incendie, on a qu'une alternative: construire une usine à gaz pour tout surveiller ou alors mettre un détecteur d'incendie. :)
 
Top