Bonjour,Bonjour à tous ,
comment faire varier la fréquence d'une sortie de 0 à 1000 hz d'un picaxe 08m2 à l'aide d'un potentiomètre, pouvez-vous me donner un bout de code pour me mettre sur la voie
merci à vous
Oui, le rapport cyclique, se règle par w3, la fréquence c'est 249 dans cet exemple, il faut le remplacer par une variable par ex w1. Pour un rapport cyclique fixe ex 50%, ilfaut w3=2 * w1oui je sais modifier le rapport cyclique avec PWMOUT mais la fréquence reste fixe moi je veux faire varier la fréquence avec un potentiomètre comme quand on peut le faire avec le rapport cyclique
readadc C.2,b3 'reg pot C.2
w3= b3*4 max 1000 ' or
pwmout C.5, 249, w3
Il faut tout de même comprendre qu'en numérique on ne peut pas avoir une variation continue !j'ai regardé la vidéo la modification de la fréquence dans une boucle je l'ai déja fait on à pas une modification de la fréquence en continu a travers un potentiomètre
Bonjour,j'ai regardé la vidéo la modification de la fréquence dans une boucle je l'ai déja fait on à pas une modification de la fréquence en continu a travers un potentiomètre
Je plussoie (excellent circuit), mais un bête 555 ne réponds-il pas au cahier des charges ?On trouve encore des XR2206:
Absolument pas car le paramètre de PWM image de la position du potentiomètre est la période et non la fréquence.Disons que :
0=1 Hz
...
511=500 Hz
...
1023=1000 Hz
Dans ce cas, le montage aura une résolution de 1hz ce qui n'est déjà pas mal.
Mais Georges, le problème ne change pas avec le pulsout! tu définis une période et non une fréquence. donc la loi de variation est toujours de 1/x donc une hyperbole.Si seule la fréquence est a prendre en compte, et NON le rapport cyclique, j'opterais pour pulsout.
Une simple bascule en sortie (S/R), et retombe en 50%.
Et, plus simple, s'il faut élargir la bande a couvrir. Rien n'empêche, selon la valeur ADC lue, d'intercaler des SetFreq pour passer automatiquement d'un "palier" à un autre.
Restez calme ! Je cherche juste à préciser le cahier des charges ; je ne sais pas à quel programme vous faites allusion.Absolument pas car le paramètre de PWM image de la position du potentiomètre est la période et non la fréquence.
A titre indicatif, avec une fréquence de 31kHz du picaxe, 1024 va donner 30.2 Hz, 510 va donner 60 Hz et 1 va donner 3875 Hz
J'ai parlé de 555 (plus facile à trouver qu'un XR2206 et moins cher) AVANT de parler de linéarité fréquence/position du potar.Même problème avec un 555.
Donc pause=1/fréquence - temps de bouclela loi de variation est toujours de 1/x donc une hyperbole.
Ben si :Je ne présente pas de cahier de charge
comment faire varier la fréquence d'une sortie de 0 à 1000 hz d'un picaxe 08m2 à l'aide d'un potentiomètre
On en déduit que vous souhaitez une "modification de la fréquence en continu", ce dernier terme laissant place à interprétation.on n'à pas une modification de la fréquence en continu a travers un potentiomètre
Alors merci de préciser votre simple boucle et le "fin" calcul sur picaxe pour parcourir une fréquence de 1 Hz en 1 Hz. de 1 à 1000 Hz.On peut imaginer une simple boucle avec une pause finement calculée, et pourquoi pas un setfreq si nécessaire.
J'ai partiellement répondu en #18, mais il me semble indispensable d'expérimenter, pour autant que M. Ritounet confirme mon interprétation très personnelle du terme "continu"Alors merci de préciser votre simple boucle et le "fin" calcul sur picaxe pour parcourir une fréquence de 1 Hz en 1 Hz. de 1 à 1000 Hz.
Ce serait quoi "mieux" dans votre idée ?M. Besqueut, les réponses exprimées me confortent dans l'idée que l'on ne peut pas faire mieux
C'est gentil de me rappeler que la période = 1/F.J'ai partiellement répondu en #18, mais il me semble indispensable d'expérimenter,
Pour le calcul pur, je ferais un truc du genre :Par exemple calcul pour avoir 963 Hz puis pour avoir 962 Hz.
[color=Navy]#simspeed 0[/color]
[color=Blue]symbol [/color][color=Purple]Freq[/color][color=DarkCyan]=[/color][color=Purple]w1[/color]
[color=Blue]symbol [/color][color=Purple]Period[/color][color=DarkCyan]=[/color][color=Purple]w2[/color]
[color=Blue]for [/color][color=Purple]freq[/color][color=DarkCyan]=[/color][color=Navy]930 [/color][color=Blue]to [/color][color=Navy]970
[/color][color=Purple]w3[/color][color=DarkCyan]=[/color][color=Navy]65535[/color][color=DarkCyan]/[/color][color=Purple]Freq
w4[/color][color=DarkCyan]=[/color][color=Purple]w3[/color][color=DarkCyan]*[/color][color=Purple]Freq
w4[/color][color=DarkCyan]=[/color][color=Navy]65535[/color][color=DarkCyan]-[/color][color=Purple]w4[/color][color=DarkCyan]/[/color][color=Navy]60
[/color][color=Purple]Period[/color][color=DarkCyan]=[/color][color=Purple]w3[/color][color=DarkCyan]*[/color][color=Navy]15[/color][color=DarkCyan]+[/color][color=Navy]18[/color][color=DarkCyan]+[/color][color=Purple]w4
[/color][color=Blue]sertxd([/color][color=Navy]#Freq[/color][color=Black],[/color][color=Red]"Hz "[/color][color=Black],#[/color][color=Purple]Period[/color][color=Black],[/color][color=Red]"ms"[/color][color=Black],[/color][color=Navy]13[/color][color=Black],[/color][color=Navy]10[/color][color=Blue])
next [/color][color=Purple]Freq[/color]
Mais il y a des choses à corriger en fonction de l'expérimentation, en particulier à cause du temps de boucle qui dépends du readadc10.
Je viens de faire quelques essais sur un 18m2 avec un setfreq m32 et toggle.
Ça va évidement pas trop mal aux faibles fréquences et on peut atteindre plus de 1000 hz avec un signal évidement symétrique dans ce cas. Mais la linéarité est difficile à obtenir.
Avec un pulsout ça va évidement deux fois plus vite, d'où une résolution meilleure au prix d'une moins bonne symétrie.
Reste à savoir ce que veut vraiment M. Ritounet, en particulier en terme de "mieux".
Si le but est de graduer le potar pour obtenir directement une fréquence au hz près, la graduation va être fine...
Si le but est d'avoir quelque chose de "quasi-linéaire" avec des fréquences fractionnaires, on peut imaginer une saisie avec un potar grossier et un autre plus fin. Mais pour le coup, il me semble que l'on va atteindre les limites du Picaxe non seulement en calcul, mais surtout en timing.
Très pointu en effet.passer de 1000 Hz à 999 Hz c'est ajouter 1 µs à la période.
[color=Navy]#picaxe [/color][color=Black]18m2[/color]
[color=Navy]#no_data[/color]
[color=Blue]setfreq m32
do
readadc10 c.0[/color][color=Black],[/color][color=Purple]w1
[/color][color=Blue]toggle b.3
[/color][color=Purple]w1[/color][color=DarkCyan]=[/color][color=Purple]w1[/color][color=DarkCyan]+[/color][color=Navy]1
[/color][color=Purple]w1[/color][color=DarkCyan]=[/color][color=Navy]4000[/color][color=DarkCyan]/[/color][color=Purple]w1[/color][color=DarkCyan]-[/color][color=Navy]3
[/color][color=Blue]pause [/color][color=Purple]w1[/color]
[color=Blue]loop[/color]
Ceci est confirmé.mais je ne pense pas si l'on peut inclure de l'assembleur dans les picaxe ?
Encore que générer cette fréquence fixe avec un picaxe est parfaitement possible (à 1.2% près ) avec pwm.pour fabriquer un signal infrarouge je souhaitais générer du 38Khz
Entièrement d'accord. Ceci dit, dans la mesure où, bien que très hors spécifications, ces instructions donnent un délai répétitif il reste en théorie possible d'ajuster le tir pour au final obtenir une fréquence proche de celle demandée. Mais c'est un gros travail nécessitant moults expérimentations...le problème est lié au fait que les instructions pulsout ou pauseus ne sont absolument pas fiables du fait de l'interprétation;
par ex un pulsout 1 a 32 MHz au lieu de 1.25 µs va mettre 73 µs avant d'envoyer un pulse de 3 µs. En dehors du retard, il commence à être conforme à partir de pulsout 100
idem pour un pauseus 5 qui engendre une pause 20 fois plus grande.
Voir #18 : l'inverse deJe cherche a poser ça en équation, mais, j'y arrive pas ... (bon, ça va viender, faut réveiller le neurone ...).
Do
Readadc10 C.2,w0
w0=65535/w0
Toggle C.2
Pause w0
Toggle C.2
Pause w0
Loop
Le soucis, c'est que :Si je me plante, dites le, hein !...
temps de cycle estimé à 32 MHz, de l'ordre 600 µs.Bon, pas fait de test, mais ...
Ca devrait être linéaire, de un poil plus que le Hz, jusqu'à 1200Hz. (horloge à 32Mhz)
Donc pour 1200 Hz, il faut une pause de 233µstemps de cycle estimé à 32 MHz, de l'ordre 600 µs.
Pour 1200 Hz, la période est de 833 µs; reste pas grand chose pour les pauses !
et pour te dégouter encore plus un pauseus 5 à 32 MHz c'est 131 µs au lieu des 6.25 µs théoriques.
Bonne chance pour calculer la bonne valeur !Donc pour 1200 Hz, il faut une pause de 233µs
soit un pauseus entre 7 et 10
reste à calculer la bonne valeur.
Limite, mais jouable...
Pauseus 5 | 131 | |
Pauseus 10 | 137 |