Bonjour,
Je voudrais comprendre ce que sont les interruptions et essayer de comprendre comment on les utlise à fin de pouvoir mettre 2 timers de mon pic 18f2520 en cascade. J'ulise le compilateur HIGH-TECH universal tool. Merci.
-----
Bonjour,
Je voudrais comprendre ce que sont les interruptions et essayer de comprendre comment on les utlise à fin de pouvoir mettre 2 timers de mon pic 18f2520 en cascade. J'ulise le compilateur HIGH-TECH universal tool. Merci.
Beaucoup de sites expliquent bien :
http://fr.wikiversity.org/wiki/Utili...0_en_langage_C
http://extremeelectronics.co.in/micr...handling-in-c/
Est-ce que tu as une question en particulier ?
Ppour etre precis, mon but est de fabriquer un signal caré de 50 hz à cycle variable c'est possible?
Oui...Pas forcément besoin de mettre deux timer en cascade, suffit de réduire la fréquence du microcontroller
tu fais une boucle avec des temporisation qui mette ON et OFF une sortie et tu set l'oscillation en RC et tu la règle avec un potentiomètre...
Salut memo,
Concernant les timers il n'est pas possible de les cascader de façon hardware.
Peux-tu changer de PIC ? il y a peut-être des solutions sur d'autres modèles.
Utilises tu un quartz ou l'horloge interne ?
Quel compilateur HiTech utilises-tu ? Je pense que c'est une très vieille version.
Télécharges XC8 (version renommée de Hitech) qui existe aussi en version gratuite.
a+
Dernière modification par RISC ; 31/07/2014 à 11h40.
Merci pour vos reponses a tous. Pourquoi il ne serait pas possible de mettre 2 timers en cascades? J'ai vu dans la datasheet qu'on peut faire une interruption en ce qui concerne le debordement du timer. Il me semble que je pourrait profiter de cela mais je ne sais pas comment programmer l'interruption. J'utilise un quartz externe 20Mhz pour l'oscillateur.
Merci pour ta réponse qui me semble etre la solution. Si tu pouvais seulement m'expliquer comment faire car je suis débutant en programmation de PIC
Je ne connais pas le C malheureusement, je programme seulement en assembleur. Mais si ça peux t'aider, tu n'a pas besoin de programmation pour faire varier la fréquence. Tu règle l'oscillation sur _RC_OSC donc avec une résistance et condensateur mais au lieux d'une résistance tu mets un potentiometre... Pour le reste, tu fait une boucle, tu active une sortie, tu mets une tempo, tu désactive la sortie, tu mets une tempo et tu reviens au début de ta boucle.
Avec cette technique la précision n'est pas superbe mais si ce n'est pas critique pour ce que tu veux faire, c'est la bonne solution.
Bonjour!
Normalement, un carré à 50Hz à cycle variable peut se faire avec un unique timer configuré
en PWM. Une boucle n'est jamais une bonne solution. Pour tout dire, je ne connais pas le PIC
mais j'imagine que c'est la même chose.
Un timer a une période de base et des registres de comparaison.
Admettons que vous ayez une fréquence de processeur de 1 MHz. Si la période de votre signal
carré est de 50Hz, alors il faut mettre la période de base à 20 000. (ou à 19999 selon les timers).
Et le rapport cyclique sera fonction directe du registre de comparateur que vous choisissez.
Exemple: vous voulez 50%, alors vous mettez le registre de comparaison à 10000 (ou 9999).
Vous voulez 25, alors ce sera 5000, etc... Et une fois que c'est fait, vous avez le signal carré
qui va tourner sans charger le processeur, ad vitam, ou du moins jusqu'à ce que vous l'arrêtiez.
Et pour changer le rapport, il suffit de changer le registre de comparaison.
Pascal
Je viens de réaliser que ce que tu nomme cycle n'est pas la fréquence mais le Duty... donc oublie mon idée car cela te donnera seulement une fréquence variable du même "cycle"...
50hz en PWM me semble impossible avec un quartz de 20mHZ. Trouve le bon quartz ou utilise l'horloge interne si la stabilité n'est pas importante. Et pour le potentiomètre, tu devra te brancher sur l'ADC du pic pour convertir l'analogique en numérique et définir avec celui si le DUTY "CYCLE" en conséquence.
bonjour
Oui, cela me parait etre une bonne soltutionPourquoi il ne serait pas possible de mettre 2 timers en cascades?
un premier timer (ex Timer1 en mode interrupt à 20mS
qui fait la lecture ADC potar sur voie RA0 0 à 1023 >> 1 ramené => 0 a 512
que l'on limitera à 10 ..490 par exemple pour les butees mini maxi
et qui donnera un NBmaxi Overfow Timer0
arme le Timer0 calé à 40µS (prescaler=2 Tmr0=156)
Mets la Sortie (ex RA4 ) à 1
...
au bout NBoverflow dans l'interrupt timer0
on remet la sortie RA4 à 0
on desarme timer0
...
l'interrupt Timer1 relance le cyclage au bout des 20mS
et cela devrai laisser (un peu ) de temps dans le main pour faire autre chose ?
Salut,
Si tu peux changer de PIC ,il existe des moyens très simples pour avoir des fréquences basses.
Certains PICs intègrent des cellules logiques programmables (CLC). Cela permet de router n'importe quel périphérique sur n'importe quel autre.
Exemple : tu peux prendre la sortie d'un TIMER et l'envoyer sur l'entrée d'un autre. Tu peux aussi faire des diviseurs ou des équations logiques (combiner plusieurs entrées pour sortir du mode sleep).
Un PIC comme le PIC16F1709 possède ce genre de cellule CLC. De plus les broches peuvent être affectées aux périphériques par soft (PPS).
a+
Soultion (MikroC) avec 2 timers
variation de 10 à 490 pas de 40µS avec potar sur ADC RA0
uniquement via interruptions .. donc laisse du temps au MCU pour autre chose..
voir ma reponse sur cet autre fil traitant apparament le meme probleme..
http://www.edaboard.com/thread320442.html
Re: need 2 pwm pulses of 50hz with 180 degree phase shift