Perte de temps

MGU

Senior Member
Bonjour,

Quelques soucis avec la simulation de PE6 (8.0.6)

Voici un petit programme:
Code:
#picaxe 08M2
	pullup %1000				;pullup sur C.3
	do
		readadc C.4, b1			;lecture potar ; b1 de 0 à 255		
		do loop while pinC.3=1	;attente appui poussoir
		high C.1				;relais colle
		do loop while pinC.3=0	;attente relachement poussoir
		time=0
		do loop while time<b1	;time compte les secondes
		low C.1					;relais décolle	
	loop
La simulation fonctionne avec PE5
Avec PE6, time reste à 0

Je ne sais pas pourquoi.

Merci

MM
 

PieM

Senior Member
Bonsoir Michel,

Oui c'est normalement anormal. C'est un pb avec la simulation.

Pour t'en sortir il faut introduire une petite pause dans ta boucle qui surveille time:

Code:
[COLOR=Navy]#picaxe [/COLOR][COLOR=Black]08M2
   [/COLOR][COLOR=Blue]pullup [/COLOR][COLOR=Navy]%1000            [/COLOR][COLOR=Green];pullup sur C.3
   [/COLOR][COLOR=Blue]do
      readadc C.4[/COLOR][COLOR=Black], [/COLOR][COLOR=Purple]b1         [/COLOR][COLOR=Green];lecture potar ; b1 de 0 à 255      
      [/COLOR][COLOR=Blue]do loop while [/COLOR][COLOR=Purple]pinC.3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]1  [/COLOR][COLOR=Green];attente appui poussoir
      [/COLOR][COLOR=Blue]high C.1          [/COLOR][COLOR=Green];relais colle
   [/COLOR][COLOR=Blue]do loop while [/COLOR][COLOR=Purple]pinC.3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]0  [/COLOR][COLOR=Green];attente relachement poussoir
   [/COLOR][COLOR=Purple]time[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]0
      [/COLOR][COLOR=Blue]do 
         pause [/COLOR][COLOR=Navy]1     
      [/COLOR][COLOR=Blue]loop while [/COLOR][COLOR=Purple]time[/COLOR][COLOR=DarkCyan]<[/COLOR][COLOR=Purple]b1   [/COLOR][COLOR=Green];time compte les secondes
      [/COLOR][COLOR=Blue]low C.1              [/COLOR][COLOR=Green];relais décolle   
   [/COLOR][COLOR=Blue]loop[/COLOR][COLOR=Green]; [/COLOR]
tu peux même mettre un pauseus 1
 

BESQUEUT

Senior Member
Oui : je suis tombé sur le même roblème : Time-not-corectly-simulated
L'explication serait que la simulation est réalisée en "nombre de boucles" et non en temps réel.

Du coup, si votre programme ne contient aucune pause, le simulateur doit faire un très grand nombre de boucles pour atteindre une seconde.
Par contre, cette explication ne colle pas avec un pauseus 1 (qui ne change que peu le temps de boucle, et donc le nombre de boucles en 1s).
 

MGU

Senior Member
Bonsoir Michel,

Oui c'est normalement anormal. C'est un pb avec la simulation.
OK, merci. la version 8.0.6 a corrigé des bugs de 8.0.4 (chez moi).
Espérons que la version suivante corrigera celui la. Pour faire une démo de picaxe, ça fait un peu moche.

MM
 

MGU

Senior Member
Bonjour,

Oui, j'ai lu. Mais du point de vue de la simulation, c'en est un. Un simulateur doit simuler, si il ne simule pas, ce n'est pas un simulateur.
Si A=>B ,alors nonB =>nonA. (vieux souvenir)

Vouloir faire comme dans la réalité pour finalement faire un truc qui ne fonctionne pas....Je ne vois pas l'intérêt.
Pourquoi faire un simulateur moins bon que PE5 sur ce point?
Bref, faut pas encore jeter PE5.

MM
 

BESQUEUT

Senior Member
Oui, j'ai lu. Mais du point de vue de la simulation, c'en est un. Un simulateur doit simuler, si il ne simule pas, ce n'est pas un simulateur.
A vrai dire, les deux options se défendent : ça dépends de ce que l'on souhaite simuler.
On est bien d'accord que le simulation tourne (beaucoup) moins vite qu'un Picaxe.
Donc, c'est assez logique que le temps soit dilaté.
Mais d'un autre coté, en démo, on rencontre un vrai problème en particulier avec la variable Time...
L'idéal serait un paramètre quelque part (case à cocher) qui permettrait de choisir entre les deux approches.
 

PieM

Senior Member
A vrai dire, les deux options se défendent : ça dépends de ce que l'on souhaite simuler.
On est bien d'accord que le simulation tourne (beaucoup) moins vite qu'un Picaxe.
Donc, c'est assez logique que le temps soit dilaté.
Mais d'un autre coté, en démo, on rencontre un vrai problème en particulier avec la variable Time...
L'idéal serait un paramètre quelque part (case à cocher) qui permettrait de choisir entre les deux approches.
Je pense que ça ne doit pas être difficile d'utiliser le timer interne de l'ordinateur dans le logiciel de simulation, lié au curseur de vitesse de simulation, non ?
 

BESQUEUT

Senior Member
Je pense que ça ne doit pas être difficile d'utiliser le timer interne de l'ordinateur dans le logiciel de simulation, lié au curseur de vitesse de simulation, non ?
Oui, ça semble faisable. Mais ça ne semble pas être l'option prise par RevEd qui si j'ai bien compris tente de simuler le nombre de boucles qu'aurait fait un Picaxe pour incrémenter Time...
Je n'ai pas testé avec pauseus comme vous l'indiquez. Mais si ça marche, l'explication de RevEd ne tient pas, et d'une façon ou d'une autre il y a un problème de simulation.
Quand au curseur de vitesse de simulation, il ne fait qu'ajouter un délai suplémentaire à chaque instruction.
Mais même à zéro, le simulateur reste beaucoup plus lent qu'un vrai Picaxe. D'où le problème avec la variable Time;
 

PieM

Senior Member
Oui, ça semble faisable. Mais ça ne semble pas être l'option prise par RevEd qui si j'ai bien compris tente de simuler le nombre de boucles qu'aurait fait un Picaxe pour incrémenter Time...
Je n'ai pas testé avec pauseus comme vous l'indiquez. Mais si ça marche, l'explication de RevEd ne tient pas, et d'une façon ou d'une autre il y a un problème de simulation.
Quand au curseur de vitesse de simulation, il ne fait qu'ajouter un délai suplémentaire à chaque instruction.
Mais même à zéro, le simulateur reste beaucoup plus lent qu'un vrai Picaxe. D'où le problème avec la variable Time;
Ce que je ne comprends pas dans les explications de Technical, c'est cette histoire de boucles.
La variable time est directement liée à un timer interne du PIC, son prescaler, et ses interruptions hard.
Donc une fois que les registres internes du Pic sont configurés, ce n'est que du comptage déclenché par des interruptions hard...
Enfin, je vois les choses comme ça.
Ce que je voulais dire avec le curseur, c'est que par exemple, on conserve la base de temps 1 seconde pour la vitesse la plus rapide de simulation, temps que l'on augmente avec le curseur.
 
Top