arduino 38khz

a marqué ce sujet comme résolu.

Merci à ce monsieur qui a écrit ce parfait tutorial: https://zestedesavoir.com/tutoriels/537/arduino-premiers-pas-en-informatique-embarquee/745/les-grandeurs-analogiques/3432/et-les-sorties-analogiques-enfin-presque/#3-transformation-pwm-signal-analogique

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
 // division par : 1, 8, 64, 256, 1024
byte division_frequence=0x01;
// fréquence : 62500Hz, 7692Hz, ...
// temps de la période : 16µs, 130µs, ...

void setup()
{
    pinMode(6, OUTPUT); // broche de sortie

    // TCCR0B c'est le registre, on opère un masquage sur lui même
    TCCR0B = TCCR0B & 0b11111000 | division_frequence;
    // ce qui permet de modifier la fréquence de la PWM
}

void loop ()
{
    // on écrit simplement la valeur de 0 à 255 du rapport cyclique du signal
    analogWrite(6, 128);
    // qui est à la nouvelle fréquence choisit
}

mais malheuresement je ne suis pas au niveau pour comprendre cette partie :/ je ne qu'est ce que je vais changer pour avoir 38khz et donc j'ai besoin d'aide

apres des recherches j'ai trouve que je dois faire: 0x6D

donc: byte division_frequence=0x6D

mais ca ne marche tjrs pas

ma question est simple c'est: qu'est ce que je dois changer dans le code pour obtienir le 38khz voila et merci

+0 -0

Tout ce qui suit est spécifique aux ATMega, et ne s'applique pas aux arduino utilisant d'autres micro-contrôleurs. Tout ce qui suit s'appuie sur la datasheet de l'AT Mega 328p

La fréquence de la PWM dépend de la fréquence de l'horloge des I/O du micro-contrôleur (que je vais abreger en MCU). Malheureusement, les développeurs d'arduino n'ont pas jugé utile de documenter leur réglage pour leurs cartes. Le code TCCR0B = TCCR0B & 0b11111000 | 0x01 va configurer les PWM pour prendre l'horloge des I/O sans la prédiviser. Il n'y a pas d'autre diviseur.

Si arduino a utilisé la fréquence du quartz comme fréquence de clock I/O, on a f(I/O) = 16MHz, et comme il y a 256 périodes d'horloge dans une période de PWM, on a f(PWM)=62.5kHz. On retombe sur la valeur du tuto, il y a donc des chances que mes suppositions soient correctes. Le pas suivant est de diviser clk I/O par 8, on passe sous les 8kHz.

Le règlage de clock PWM de l'ATMega328p ne permet pas de créer une PWM à 38kHz à partir de 16MHz. Je vois néanmoins quelques idées pour s'approcher du résultat:

  • Changer de quartz et jouer sur le diviseur de clk I/O pour avoir f(I/O) = 9728kHz
  • passer les PWM en phase correct mode, ce qui permet d'avoir des PWM à 31372.55 Hz

Je n'ai pas mieux à proposer sur AT Mega328p.

C'est pour jouer avec un emetteur Infrarouge ? (si oui, alors il faudra utiliser les timers et ne pas se soucier de faire une vrai PWM puisqu'un rapport cyclique à 50% suffira) ( http://forum.arduino.cc/index.php?topic=139418.0 )

Dans tout les cas, il va surement falloir partir à la découverte des registres et des choses avancées. À la rigueur tenté deux delayMicroseconds() (un pour le temps bas et un pour le temps haut) si on veut essayer quelque chose de simple. (attention, fonction bloquante)

+0 -0

le probleme c'est qu'il n'y a pas un tuto francais qui explique l'utilisation des timers et registre, j'ai cherche partout mais il n'y a rien.

datasheet sans que tu sais ce que qu'il fait le micro-controlleur ça devient n'import quoi

exemple cette ligne dans datasheet: http://www.hostingpics.net/viewer.php?id=663189Sanstitre.png c'est de chinois pour moi, impossible que je pige ce que ce dit s'il n'y a pas un bon tuto qui explique les bases, donc SVP datasheet est fait pour des gens avancé et non pas pour des debutants.

les tutos anglais c'est pour des gens qui maitrise l'anglais et non pas pour un simple francophone

là: TCCR0B & 0b11111000 | 0x01

je ne sais pas ce que signifié cette ligne

Eskimon tu dois faire un tuto sur ça :D tu sais c'est vraiment important de manipuler les registre et tout ça…

regarde j'ai trouvé ça: http://forum.arduino.cc/index.php/topic,10555.0.html

mais je ne pige rien dans le code, j'ai besoin d'un help ou d'un mini tuto et c'est le cas de beaucoup des gens

merci d'avance

+0 -0

le problème c'est que sur arduino, personne ne t'encourage d'aller gratter dans les registres. perso j'ai eu essayé pour résoudre un problème, ça a mis la plus grosse pagaille que ça a pu et plus rien n'a fonctionné.

pour voir comment ça fonctionne sur un autre microcontroleur (un pic 16f, si je me rappelle bien, moi j'ai appris ce genre de subtilités à l'école sur un 18f…), il y a toujours le cours de BigOnOff…

+0 -0

c'est ça le probleme, quand je dis je veux ça personne ne m'aide à part le mot va voir datasheet -_-

registre c'est un truc bien avancé pour un simple debutant il me faut des tutos, de savoir les bases de ce registre comment le manipuler… puis je fais voir le registre, mais aller sans les bases je peux considere ça comme s'il me moque de moi x)

bon j'ai pigé qu'il y'en a qui ne savent pas bosser avec le registrer et donc j'ai juste demande la solution sans que je comprendre, avoir 38khz pour utiliser l'infrarouge voila c'est tout

J'ai utilisé la librairie IRremote, il n y'a pas un tuto clair sur les registres et les timers de 328p donc j'ai laisé tombé je ne veux pas programmer ce que je ne sais pas, avec la librairie c'est comme meme clair, je ne pige pas l'anglais donc je peux pas m'avanccer il me faut un tuto francais, si jamais tu veux M. Eskimon tu pourras nous faire des trucs approfondi sur le 328p ^^ j'aimerai l'utilisé sans arduino ^^

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte