Deux programes simultanés sur 08M2

chimere322

Senior Member
Bonjour à tous,

Je sollicite votre aide pour un programme de sirène récupéré sur l'excellent site de electromag1 : http://electromag1.wifeo.com/sirenes-pompier-police-samu-ambulance-etc.php
Programme que j'ai modifié car je n'ai besoin que de 2 sirènes(Police et gendarmerie)à implanter dans une maquette.Cela fonctionne bien.J'ai

modifier le schéma afin de créer un flash de pénétration avec deux LEDS bleue haute luminosité et fait le programme qui tourne parfaitement.Mon

problème et le suivant: à la mise sous tension je souhaiterais que la sirène s'enclenche (ce qui est le cas)et en même temps que le flash

fonctionne en permanence.J'ai lu des tas de docs ainsi que les manuels Picaxe,mais je n'ai pas réussi à fusionner les deux programmes tout au

plus à les faire tourner l'un après l'autre mais c'est pas cool. J'ai essayer de comprendre mais je n'en suis pas encore au pseudo multitâche.
Pouvez vous m'aider SVP à résoudre le problème.Si le programme fonctionne,je pense que je comprendrais la logique.

ci joint les fichiers et le schéma:

Flash sirene.jpgFlash sirene.jpg



[CODE
Code:
[COLOR=Green]'SIRENES  01/02/2012 MM

      [/COLOR][COLOR=Navy]#picaxe [/COLOR][COLOR=Black]08M2      [/COLOR][COLOR=Green]'
      [/COLOR][COLOR=Blue]setfreq m4        [/COLOR][COLOR=Green]'Fr�quence � 4MHz,les pauses sont en mS
      [/COLOR][COLOR=Blue]read [/COLOR][COLOR=Navy]0[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]b1         [/COLOR][COLOR=Green]'Lecture derni�re sir�ne utilis�e[/COLOR]
[COLOR=Black]debut:      
      
      [/COLOR][COLOR=Blue]on [/COLOR][COLOR=Purple]b1 [/COLOR][COLOR=Blue]goto [/COLOR][COLOR=Black]police,gendarme [/COLOR][COLOR=Green]'adressage suivant b1
      
      [/COLOR]
[COLOR=Black]police:
      [/COLOR][COLOR=Green]; un 2 tons de police (1er ton : 435Hz, 2�me ton : 580 Hz, cadence : 55 cycles/minute)
      
      [/COLOR][COLOR=Blue]do
      pwmout pwmdiv16[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]143[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]287
      [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]545
      [/COLOR][COLOR=Blue]pwmout pwmdiv16[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]107[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]216
      [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]545
      [/COLOR][COLOR=Blue]if [/COLOR][COLOR=Purple]pin3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]1 [/COLOR][COLOR=Blue]then  [/COLOR][COLOR=Black]change
      [/COLOR][COLOR=Blue]loop
      [/COLOR]
[COLOR=Black]gendarme:
      [/COLOR][COLOR=Green]; un 2 tons de gendarmerie (1er ton : 435Hz, 2�me ton : 732Hz, cadence : 55 cycles/minute)
      
      [/COLOR][COLOR=Blue]do
      pwmout pwmdiv16[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]143[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]287
      [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]545
      [/COLOR][COLOR=Blue]pwmout pwmdiv16[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]84[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]171
      [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]545
      [/COLOR][COLOR=Blue]if [/COLOR][COLOR=Purple]pin3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]1 [/COLOR][COLOR=Blue]then  [/COLOR][COLOR=Black]change
      [/COLOR][COLOR=Blue]loop
      
      [/COLOR]
[COLOR=Black]change:
      [/COLOR][COLOR=Blue]pwmout [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black],[/COLOR][COLOR=Blue]off            [/COLOR][COLOR=Green];Arret sortie PWM
      [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]100               [/COLOR][COLOR=Green]'anti rebond, on laisse passer l'orage
      [/COLOR][COLOR=Black]att: [/COLOR][COLOR=Blue]if [/COLOR][COLOR=Purple]pin3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]1 [/COLOR][COLOR=Blue]then [/COLOR][COLOR=Black]att [/COLOR][COLOR=Green]'attente relachement touche
      [/COLOR][COLOR=Blue]inc [/COLOR][COLOR=Purple]b1                  [/COLOR][COLOR=Green]'incr�mentation b1
      [/COLOR][COLOR=Purple]b1[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Purple]b1[/COLOR][COLOR=DarkCyan]//[/COLOR][COLOR=Navy]2                
      [/COLOR][COLOR=Blue]write [/COLOR][COLOR=Navy]0[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]b1              [/COLOR][COLOR=Green]'memo derni�re sir�ne

      [/COLOR][COLOR=Blue]goto [/COLOR][COLOR=Black]debut[/COLOR]
][/CODE]


Code:
[code]
[COLOR=Green]'BASIC converted from flowchart:
'
'Converted  2014-11-29 at 16:38:09[/COLOR]

[COLOR=Gray]{ [/COLOR][COLOR=Green];Symbols[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varA [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b0[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varB [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b1[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varC [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b2[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varD [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b3[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varE [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b4[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varF [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b5[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varG [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b6[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varH [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b7[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varI [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b8[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varJ [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b9[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varK [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b10[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varL [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b11[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varM [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b12[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varN [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b13[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varO [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b14[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varP [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b15[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varQ [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b16[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varR [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b17[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varS [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b18[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varT [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b19[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varU [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b20[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varV [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b21[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varTEMPBYTE1 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b22[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varTEMPBYTE2 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b23[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varTEMPBYTE3 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b24[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varTEMPBYTE4 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b25[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varTEMPBYTE5 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b26[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varTEMPBYTE6 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]b27[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varTEMPWORD1 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]w11[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varTEMPWORD2 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]w12[/COLOR]
[COLOR=Blue]symbol [/COLOR][COLOR=Black]varTEMPWORD3 [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Purple]w13[/COLOR]
[COLOR=Gray]}[/COLOR]


[COLOR=Black]main:
      [/COLOR][COLOR=Blue]let [/COLOR][COLOR=Purple]dirsC [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy]7[/COLOR]

[COLOR=Black]Cell_7_3:
      [/COLOR][COLOR=Blue]for [/COLOR][COLOR=Black]varH [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy]1 [/COLOR][COLOR=Blue]to [/COLOR][COLOR=Navy]3
            [/COLOR][COLOR=Blue]gosub [/COLOR][COLOR=Black]prc_FLASH_GAUCHE
      [/COLOR][COLOR=Blue]next [/COLOR][COLOR=Black]varH
      [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]300
      [/COLOR][COLOR=Blue]for [/COLOR][COLOR=Black]varH [/COLOR][COLOR=DarkCyan]= [/COLOR][COLOR=Navy]1 [/COLOR][COLOR=Blue]to [/COLOR][COLOR=Navy]3
            [/COLOR][COLOR=Blue]gosub [/COLOR][COLOR=Black]prc_FLASH_DROIT
      [/COLOR][COLOR=Blue]next [/COLOR][COLOR=Black]varH
      [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]300
      [/COLOR][COLOR=Blue]goto [/COLOR][COLOR=Black]Cell_7_3

prc_FLASH_DROIT:
      [/COLOR][COLOR=Blue]high C.4
      pause [/COLOR][COLOR=Navy]10
      [/COLOR][COLOR=Blue]low C.4
      pause [/COLOR][COLOR=Navy]100
      [/COLOR][COLOR=Blue]return[/COLOR]
[COLOR=Black]prc_FLASH_GAUCHE:
      [/COLOR][COLOR=Blue]high C.1
      pause [/COLOR][COLOR=Navy]10
      [/COLOR][COLOR=Blue]low C.1
      pause [/COLOR][COLOR=Navy]100
      [/COLOR][COLOR=Blue]return[/COLOR]

[COLOR=Navy]#no_data    [/COLOR][COLOR=Green]'reduce download time[/COLOR]
[/CODE]


Grand merci à vous.
 

BESQUEUT

Senior Member
Puisque c'est un M2, j'aurais tendance à dire que c'est le moment d'expérimenter le multitâche. En tout cas, ça ne coûte pas grand chose d'essayer :
- ajouter start0 au tout début du premier programme,
- ajoutez start1 puis le second programme

Téléchargez et ça devrait le faire !

Pour la doc, c'est dans le tome1

PS1 : le setfreq ne sert à rien en mode multitâche, mais ça ne devrait pas gêner non plus.
PS2 : si j'ai bien compris, b1 vaut 0 ou 1 (police ou gendarmerie) Pour changer, vous pouvez utiliser l'astuce suivante : b1=1-b1
 

PieM

Senior Member
Le multitâche est effectivement adapté dans ce cas.

Le start 0 n'est pas nécessaire : il est implicite.
ne pas mettre setfreq m4: sinon erreur de syntaxe

mettre start1: pour le second qui fait le clignotement dans une boucle do ... loop.

pour simuler mettre la directive #simtask all en tout début.
 

chimere322

Senior Member
Bonsoir BESQUEUT,

PS2 : si j'ai bien compris, b1 vaut 0 ou 1 (police ou gendarmerie) Pour changer, vous pouvez utiliser l'astuce suivante : b1=1-b1]
Poussoir relâché,la mélodie change et reste en mémoire après mise hors tension.
ajouter start0 au tout début du premier programme]
Je pense que tu veux dire avant la ligne 9 ?

ajoutez start1 puis le second programme
à la ligne 46 après goto debut ?

J'ai vu ça dans une doc mais ou je ne sais plus. Je vais faire la modif et vous tiens au courant dés que possible.

Encore merci.
 

MGU

Senior Member
Bonjour,

Je relis ce code qui date un peu, c'est pas une merveille, il serait différent aujourd'hui.

Donc, deux sirènes avec flash. Synchro ou alternés, les flashs?

MM
 

chimere322

Senior Member
Bonsoir PieM, bonsoir Michel, Pour faire suite, j'ai modifier entretemps avec les conseils de BESQUEUT. Ça fonctionne mais le son est devenu plus aigu.

Voici le programme:

Code:
'SIRENES  01/02/2012 MM
#picaxe 08M2    '

    read 0,b1        'Lecture derni?re sir?ne utilis?e
    
Do    
    on b1 goto police,gendarme 'adressage suivant b1

    
police:
    ; un 2 tons de police (1er ton : 435Hz, 2?me ton : 580 Hz, cadence : 55 cycles/minute)
    
    do
    pwmout pwmdiv16, 2, 143, 287
    pause 545
    pwmout pwmdiv16, 2, 107, 216
    pause 545
    if pin3=1 then  change
    loop
    
gendarme:
    ; un 2 tons de gendarmerie (1er ton : 435Hz, 2?me ton : 732Hz, cadence : 55 cycles/minute)
    
    do
    pwmout pwmdiv16, 2, 143, 287
    pause 545
    pwmout pwmdiv16, 2, 84, 171
    pause 545
    if pin3=1 then  change
    loop
    
    
change:
    pwmout 2,off        ;Arret sortie PWM
    pause 100            'anti rebond, on laisse passer l'orage
    att: if pin3=1 then att 'attente relachement touche
    inc b1            'incr?mentation b1
    b1=b1//2            'modulo 2, on boucle entre 0 et 1.            
    write 0,b1            'memo derni?re sir?ne
loop
    
{ ;Symbols
symbol varA = b0
symbol varB = b1
symbol varC = b2
symbol varD = b3
symbol varE = b4
symbol varF = b5
symbol varG = b6
symbol varH = b7
symbol varI = b8
symbol varJ = b9
symbol varK = b10
symbol varL = b11
symbol varM = b12
symbol varN = b13
symbol varO = b14
symbol varP = b15
symbol varQ = b16
symbol varR = b17
symbol varS = b18
symbol varT = b19
symbol varU = b20
symbol varV = b21
symbol varTEMPBYTE1 = b22
symbol varTEMPBYTE2 = b23
symbol varTEMPBYTE3 = b24
symbol varTEMPBYTE4 = b25
symbol varTEMPBYTE5 = b26
symbol varTEMPBYTE6 = b27
symbol varTEMPWORD1 = w11
symbol varTEMPWORD2 = w12
symbol varTEMPWORD3 = w13
}



    let dirsC = 7
start1:

Cell_7_3:
    for varH = 1 to 3
        gosub prc_FLASH_GAUCHE
    next varH
    pause 300
    for varH = 1 to 3
        gosub prc_FLASH_DROIT
    next varH
    pause 300
    goto Cell_7_3

prc_FLASH_DROIT:
    high C.4
    pause 10
    low C.4
    pause 100
    return
prc_FLASH_GAUCHE:
    high C.1
    pause 10
    low C.1
    pause 100
    return

Synchro ou alternés, les flashs?
Je pense que ça doit être synchro en fait je sais pas trop car en vrai ils peuvent être arrêté à tout instant au même titre que la sirène.
A ce sujet,voici 2 PDF ainsi qu'un site intéressant et surtout rubrique PICAXE
http://www.bb1601.fr/index.php?lng=fr
View attachment GAMME_GREGORIENNE.pdf
View attachment Sirenes.pdf
 
Last edited:

MGU

Senior Member
Le son est plus aigu ?

A essayer, les flashs sont un peu décalés, on peut en mettre un troisième

MM

Code:
'SIRENES  29/11/2014 MM

	#picaxe 08M2	'

	read 0,b1		'Lecture dernière sirène utilisée
Do	
	
	on b1 goto police,gendarme 'adressage suivant b1
		
police:
	; un 2 tons de police (1er ton : 435Hz, 2ème ton : 580 Hz, cadence : 55 cycles/minute)
	
	do
	pwmout pwmdiv16, 2, 143, 287
	pause 545
	pwmout pwmdiv16, 2, 107, 216
	pause 545
	if pin3=1 then  change
	loop
	
gendarme:
	; un 2 tons de gendarmerie (1er ton : 435Hz, 2ème ton : 732Hz, cadence : 55 cycles/minute)
	
	do
	pwmout pwmdiv16, 2, 143, 287
	pause 545
	pwmout pwmdiv16, 2, 84, 171
	pause 545
	if pin3=1 then  change
	loop
	

	
change:
	pwmout 2,off		;Arret sortie PWM
	pause 100			'anti rebond, on laisse passer l'orage
	Do loop while pinC.3=1 'attente relachement touche
	inc b1				'incrémentation b1
	b1=b1//2			'modulo 2, on boucle entre 0 et 1.
	write 0,b1			'memo dernière sirène

Loop	
	
start1:
	Do
		high C.1
		pause 10
		low C.1
		pause 300
	loop
	
start2:
	Do
		high C.4
		pause 10
		low C.4
		pause 400
	loop
 

chimere322

Senior Member
le son est plus aigu.

Pour le flash comme dans mon premier poste.
Principe:
3 flash à gauche
1 temps d'attente
3 flash à droite
1 temps d'attente
...et bouclage

Séquence de flash:

10ms <---100ms---> 10ms <---100ms---> 10ms <---100ms--->

Ensuite on attend 300ms et c'est la led de droite qui flashe 3fois.
Une petite image:Attention les sorties sont C.1 et C.4

Capture01.jpg
 

MGU

Senior Member
le son est plus aigu.

Pour le flash comme dans mon premier poste.
Principe:
3 flash à gauche
1 temps d'attente
3 flash à droite
1 temps d'attente
...et bouclage

Séquence de flash:

10ms <---100ms---> 10ms <---100ms---> 10ms <---100ms--->

Ensuite on attend 300ms et c'est la led de droite qui flashe 3fois.
Une petite image:Attention les sorties sont C.1 et C.4
Tout est dit, y a plus qu'à.
C'est pas plus compliqué de l'écrire directement en basic:
Les for/next ne me semblent pas indispensables

Code:
'SIRENES  29/11/2014 MM

	#picaxe 08M2	'

	read 0,b1		'Lecture dernière sirène utilisée
Do	
	
	on b1 goto police,gendarme 'adressage suivant b1
		
police:
	; un 2 tons de police (1er ton : 435Hz, 2ème ton : 580 Hz, cadence : 55 cycles/minute)
	
	do
	pwmout pwmdiv16, 2, 143, 287
	pause 545
	pwmout pwmdiv16, 2, 107, 216
	pause 545
	if pin3=1 then  change
	loop
	
gendarme:
	; un 2 tons de gendarmerie (1er ton : 435Hz, 2ème ton : 732Hz, cadence : 55 cycles/minute)
	
	do
	pwmout pwmdiv16, 2, 143, 287
	pause 545
	pwmout pwmdiv16, 2, 84, 171
	pause 545
	if pin3=1 then  change
	loop
	

	
change:
	pwmout 2,off		;Arret sortie PWM
	pause 100			'anti rebond, on laisse passer l'orage
	Do loop while pinC.3=1 'attente relachement touche
	inc b1				'incrémentation b1
	b1=b1//2			'modulo 2, on boucle entre 0 et 1.
	write 0,b1			'memo dernière sirène

Loop	
	
start1:
	Do
		high C.1
		pause 10
		low C.1
		pause 300
		
		high C.1
		pause 10
		low C.1
		pause 300
		
		high C.1
		pause 10
		low C.1
		pause 300
		
		high C.4
		pause 10
		low C.4
		pause 300
		
		high C.4
		pause 10
		low C.4
		pause 300
		
		high C.4
		pause 10
		low C.4
		pause 300
		
	loop
MM
 

chimere322

Senior Member
Bonjour Michel,

Tout est dit, y a plus qu'à.
C'est pas plus compliqué de l'écrire directement en basic:
Voir le code modifié poste#7 C'est parfait.

Concernant le son, le timbre à changer depuis la disparition de la ligne setfreq m4.

Si je prend l'exemple de la sirène de police:
Les sons sont maintenant générés une octave plus haute et les temps d'attente divisés par deux. Idem pour la gendarmerie. Donc à cogité. En tout cas le pseudo multitâche fonctionne et j'ai compris le principe et c'est le plus important.

Bon dimanche à toi.
 

MGU

Senior Member
Intéressant...

En utilisant le "multitâches", on perd la maitrise de la fréquence, setfreq donne une erreur, mais je pensais que cette fréquence était fixée à 4 MHz par défaut.

Ici, la fréquence serait de 8MHz, il faut recalculer les PWM pour cette fréquence et multiplier les temps par 2.

Faut revoir l'utilisation de pwmout en multitaches...

MM
 

MGU

Senior Member
En effet mais il y a peut être une autre solution. Voir ICI: http://www.bb1601.fr/articles.php?lng=fr&pg=478 au chapitre bidouilleur. Je n'ai pas essayé. Je lis le manuel 2
On avait fait des essais avec la fonction "sound", mais il y a systématiquement un blanc entre les notes et les fréquences exactes ne sont pas obligatoirement dans la gamme.
Le calcul des pwm n'est pas compliqué, il y a un utilitaire pour ça dans le bandeau : PICAXE/ WIZARDS/PWMOUT:

Codes pour les différentes fréquences à 8 MHz

pwmout pwmdiv64, 2, 71, 144 ;435 Hz
pwmout pwmdiv16, 2, 215, 431 ;580 Hz
pwmout pwmdiv16, 2, 170, 342 ;732 Hz


MM
 

PieM

Senior Member
Intéressant...

En utilisant le "multitâches", on perd la maitrise de la fréquence, setfreq donne une erreur, mais je pensais que cette fréquence était fixée à 4 MHz par défaut.

Ici, la fréquence serait de 8MHz, il faut recalculer les PWM pour cette fréquence et multiplier les temps par 2.

Faut revoir l'utilisation de pwmout en multitaches...

MM
Il y a confusion ! en multitâche un M2 va voir sa fréquence passer à 16MHz de telle sorte que chaque tâche (4 maxi) puisse fonctionner à 4MHz. par contre le PWM qui lui est en tâche de fond, va bien fonctionner à 16 MHz.

Le fait de passer en multitâche voit donc la fréquence non pas changer d'une octave, mais de deux ! (Freq x 4). le 430 Hz se retrouve à 1720 Hz.
il faut donc :
pwmout pwmdiv64, 2, 143, 287 ;435 Hz
pwmout pwmdiv64, 2, 107, 215 ;580 Hz
pwmout pwmdiv64, 2, 84, 168 ;732 Hz
 

chimere322

Senior Member
Bonjour et merci PieM,

En plus il y a la formule dans le manuel de référence. C'est comme les contrats, il faut lire entre les lignes :cool:
 

MGU

Senior Member
Il y a confusion ! en multitâche un M2 va voir sa fréquence passer à 16MHz de telle sorte que chaque tâche (4 maxi) puisse fonctionner à 4MHz. par contre le PWM qui lui est en tâche de fond, va bien fonctionner à 16 MHz.

Le fait de passer en multitâche voit donc la fréquence non pas changer d'une octave, mais de deux ! (Freq x 4). le 430 Hz se retrouve à 1720 Hz.
il faut donc :
pwmout pwmdiv64, 2, 143, 287 ;435 Hz
pwmout pwmdiv64, 2, 107, 215 ;580 Hz
pwmout pwmdiv64, 2, 84, 168 ;732 Hz
Merci PieM,

C'est ce que je viens de vérifier, et pourtant, le sujet a déjà été évoqué...
Voici le code complet, rectifié, avec des variables tp1 et tp2 pour modifier les tempos flash facilement.

4 tâches maxi, c'est pour le 08M2, les autres sont à 8 maxi. Je vais vérifier pour un 20M2. A suivre...

SUITE: Pour un 20M2, avec 8 taches, c'est toujours 16 MHz

Code:
'SIRENES 30/11/2014 MM

	#picaxe 08M2
	symbol tp1=40
	symbol tp2=1200	'

	read 0,b1		'Lecture dernière sirène utilisée
Do	
	
	on b1 goto police,gendarme 'adressage suivant b1
		
police:
	; un 2 tons de police (1er ton : 435Hz, 2ème ton : 580 Hz, cadence : 55 cycles/minute)
	
	do	
	pwmout pwmdiv64, 2, 143, 287	;calcul pour 16MHz en pseudo multitaches
	pause 2180
	pwmout pwmdiv64, 2, 107, 216
	pause 2180
	if pin3=1 then  change
	loop
	
gendarme:
	; un 2 tons de gendarmerie (1er ton : 435Hz, 2ème ton : 732Hz, cadence : 55 cycles/minute)
	
	do
	pwmout pwmdiv64, 2, 143, 287
	pause 2180
	pwmout pwmdiv64, 2, 84, 171
	pause 2180
	if pin3=1 then  change
	loop
	
	
change:
	pwmout 2,off		;Arret sortie PWM
	pause 100			'anti rebond, on laisse passer l'orage
	Do loop while pinC.3=1 'attente relachement touche
	inc b1				'incrémentation b1
	b1=b1//2			'modulo 2, on boucle entre 0 et 1.
	write 0,b1			'memo dernière sirène

Loop	
	
start1:
	Do
		high C.1
		pause tp1
		low C.1
		pause tp2
		
		high C.1
		pause tp1
		low C.1
		pause tp2
		
		high C.1
		pause tp1
		low C.1
		pause tp2
		
		high C.4
		pause tp1
		low C.4
		pause tp2
		
		high C.4
		pause tp1
		low C.4
		pause tp2
		
		high C.4
		pause tp1
		low C.4
		pause tp2
		
	loop
 
Last edited:

chimere322

Senior Member
Super Michel,

J'ai remis les pause sirènes à 545 sinon les policiers vont dormir dans la voiture. J'ai rajouté la variable symbol tp3=300 pour les flashs.

Code:
        [COLOR=Green]'SIRENES 30/11/2014 MM

            [/COLOR][COLOR=Navy]#picaxe [/COLOR][COLOR=Black]08M2
            [/COLOR][COLOR=Blue]symbol [/COLOR][COLOR=Black]tp1[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]10
            [/COLOR][COLOR=Blue]symbol [/COLOR][COLOR=Black]tp2[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]100    
            [/COLOR][COLOR=Blue]symbol [/COLOR][COLOR=Black]tp3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]300

            [/COLOR][COLOR=Blue]read [/COLOR][COLOR=Navy]0[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]b1         [/COLOR][COLOR=Green]'Lecture derni?re sir?ne utilis?e
        [/COLOR][COLOR=Blue]Do  
            
            on [/COLOR][COLOR=Purple]b1 [/COLOR][COLOR=Blue]goto [/COLOR][COLOR=Black]police,gendarme [/COLOR][COLOR=Green]'adressage suivant b1
                  
        [/COLOR][COLOR=Black]police:
            [/COLOR][COLOR=Green]; un 2 tons de police (1er ton : 435Hz, 2?me ton : 580 Hz, cadence : 55 cycles/minute)
            
            [/COLOR][COLOR=Blue]do    
            pwmout pwmdiv64[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]143[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]287  [/COLOR][COLOR=Green];calcul pour 16MHz en pseudo multitaches
            [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]545
            [/COLOR][COLOR=Blue]pwmout pwmdiv64[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]107[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]216
            [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]545
            [/COLOR][COLOR=Blue]if [/COLOR][COLOR=Purple]pin3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]1 [/COLOR][COLOR=Blue]then  [/COLOR][COLOR=Black]change
            [/COLOR][COLOR=Blue]loop
            
        [/COLOR][COLOR=Black]gendarme:
            [/COLOR][COLOR=Green]; un 2 tons de gendarmerie (1er ton : 435Hz, 2?me ton : 732Hz, cadence : 55 cycles/minute)
            
            [/COLOR][COLOR=Blue]do
            pwmout pwmdiv64[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]143[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]287
            [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]545
            [/COLOR][COLOR=Blue]pwmout pwmdiv64[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]84[/COLOR][COLOR=Black], [/COLOR][COLOR=Navy]171
            [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]545
            [/COLOR][COLOR=Blue]if [/COLOR][COLOR=Purple]pin3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]1 [/COLOR][COLOR=Blue]then  [/COLOR][COLOR=Black]change
            [/COLOR][COLOR=Blue]loop
            
            
        [/COLOR][COLOR=Black]change:
            [/COLOR][COLOR=Blue]pwmout [/COLOR][COLOR=Navy]2[/COLOR][COLOR=Black],[/COLOR][COLOR=Blue]off            [/COLOR][COLOR=Green];Arret sortie PWM
            [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Navy]100               [/COLOR][COLOR=Green]'anti rebond, on laisse passer l'orage
            [/COLOR][COLOR=Blue]Do loop while [/COLOR][COLOR=Purple]pinC.3[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Navy]1 [/COLOR][COLOR=Green]'attente relachement touche
            [/COLOR][COLOR=Blue]inc [/COLOR][COLOR=Purple]b1                        [/COLOR][COLOR=Green]'incr?mentation b1
            [/COLOR][COLOR=Purple]b1[/COLOR][COLOR=DarkCyan]=[/COLOR][COLOR=Purple]b1[/COLOR][COLOR=DarkCyan]//[/COLOR][COLOR=Navy]2                [/COLOR][COLOR=Green]'modulo 2, on boucle entre 0 et 1.
            [/COLOR][COLOR=Blue]write [/COLOR][COLOR=Navy]0[/COLOR][COLOR=Black],[/COLOR][COLOR=Purple]b1              [/COLOR][COLOR=Green]'memo derni?re sir?ne

        [/COLOR][COLOR=Blue]Loop      
            
        start1:
            Do
                  high C.1
                  pause [/COLOR][COLOR=Black]tp1
                  [/COLOR][COLOR=Blue]low C.1
                  pause [/COLOR][COLOR=Black]tp2
                  
                  [/COLOR][COLOR=Blue]high C.1
                  pause [/COLOR][COLOR=Black]tp1
                  [/COLOR][COLOR=Blue]low C.1
                  pause [/COLOR][COLOR=Black]tp2
                  
                  [/COLOR][COLOR=Blue]high C.1
                  pause [/COLOR][COLOR=Black]tp1
                  [/COLOR][COLOR=Blue]low C.1
                  pause [/COLOR][COLOR=Black]tp2
                  [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Black]tp3
                  
                  [/COLOR][COLOR=Blue]high C.4
                  pause [/COLOR][COLOR=Black]tp1
                  [/COLOR][COLOR=Blue]low C.4
                  pause [/COLOR][COLOR=Black]tp2
                  
                  [/COLOR][COLOR=Blue]high C.4
                  pause [/COLOR][COLOR=Black]tp1
                  [/COLOR][COLOR=Blue]low C.4
                  pause [/COLOR][COLOR=Black]tp2
                  
                  [/COLOR][COLOR=Blue]high C.4
                  pause [/COLOR][COLOR=Black]tp1
                  [/COLOR][COLOR=Blue]low C.4
                  pause [/COLOR][COLOR=Black]tp2
                  [/COLOR][COLOR=Blue]pause [/COLOR][COLOR=Black]tp3
            [/COLOR][COLOR=Blue]loop[/COLOR]
Encore merci à tous les participants.
 
Top