TIPE interruption micro controleur
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 31

TIPE interruption micro controleur



  1. #1
    flofloconcon

    Wink TIPE interruption micro controleur


    ------

    Bonjour, je suis en train de terminer mon TIPE, or je suis tomber sur un problème.

    Mon TIPE consiste a étudier le fonctionnement d'un diapason élèctronique ( donc un appareil capable de produire le son La).
    Je me suis tourné vers les micro controleur, et j'ai souhaité produire le signal pour le La grâce a l'interruption de ceux si. Nom : timer0 8bit.PNG
Affichages : 76
Taille : 56,8 Ko
    Ainsi, je me suis basé sur un quartz 32 MHz, et ensuite j'ai pris : TOCS=0, PSA=1, et j'ai utilisé le fonctionnement 8 bit du timer0. Et je suis bloqué ici, j'ai oublié tout bonnement l'expliquation de mon professeur pour arriver a la création du signal 440Hz ( un La ) ( il faut donc arriver a 880 impulsion par seconde pour creer un signal carré de 440 Hz) . Je sais que quand le TMR0L est en overflow, il arrete le travail et recommence, mais comment faire pour arriver a 880Hz ? je vous remercie, et pardonnez moi si j'ai dis des chose horrible, je débute dans ce domaine !

    -----

  2. #2
    PIXEL

    Re : TIPE interruption micro controleur

    mouaif.....

    prendre un µCont pour fabriquer UNE SEULE NOTE , c'est le marteau-pilon pour écraser une mouche !

    un simple oscillateur suffit, libre ou un peu plus chiadé ( quartz + diviseur).

    c'est plus simple à comprendre et à réaliser .

  3. #3
    invitefaaca50b

    Re : TIPE interruption micro controleur

    880 impulsions par secondes pour creer un 440Hz??? etrange tout de meme, et puis le signal carré n'est pas vraiment indiqué pour faire un diapason. Il vaudrait mieux passer par un tableau de valeurs (360 valeurs - 1 valeur par degres) pour recreer avec le PWM du µC une onde sinusoidale qui sera lissee par un filtre basse bas. Et pour changer la frequence, changer l'interruption entre chaque lecture du tableau (entre chaque degres)...
    Le but c'est de faire une lecture PWM d'une cartographie du signal... la duree entre chaque degres permet de faire varier la frequence... Le timer sera d'un grand secours dans ce cas...
    Sinon, un simple oscillateur sera sufisant...

  4. #4
    flofloconcon

    Re : TIPE interruption micro controleur

    le problème n'est pas que j'ai choisi ou non la bonne solution, je voulais vraiment faire un tipe sur les microcontrôleurs, j'ai choisi ce sujet et maintenant je suis bien lancé, et a l’approche de ma présentation sur ce TIPE, je ne peux que continuer... donc je veux seulement savoir comment avec un quartz de 32 MHz faire un signal carré de 440 Hz grâce a l'interruption merci

  5. A voir en vidéo sur Futura
  6. #5
    invitefaaca50b

    Re : TIPE interruption micro controleur

    avec 880 impulsions /secondes, tu pourras pas.... ou alors, j'ai pas tout compris...

  7. #6
    flofloconcon

    Re : TIPE interruption micro controleur

    en faite ce que je souhaite c'est qu'a chaque interruption ( grace au timer0) ma sortie passe de l'etat bas a l'etat haut , ou l'inverse, suivant son etat avant l'interruption, je pourrais creer ainsi un signal carré de 440 Hz s'il y a 880 changement d'etat par seconde. Je sais que c'est possible, j'ai vue mon proffesseur le faire, mais je n'ai plus aucune idée de son cheminement pour y arriver... sa serait vraiment bien si quelqu'un arriverait a m'aider

  8. #7
    invitefaaca50b

    Re : TIPE interruption micro controleur

    Ca, c'est a toi de bosser un peu et de bouquiner, car il existe des stocks impressionnants de documentation sur le sujet...
    Par contre faire un diapason en signal carré, c'est pas tres serieux, et ca risque de te planter au diplome....

  9. #8
    kevin8z

    Re : TIPE interruption micro controleur

    Salut, j'aurais surement une idée mais à confirmer:
    - Tu utilise un quartz de 32MHz
    - Cette fréquence est divisé par 4 donc 8MHz
    - Tu veut 880 changement par seconde donc tu fait 8000000/880 = 9091, donc a chaque instruction tu incrémente une variable jusque 9091 et la tu change l'état de ton port.

  10. #9
    invitefaaca50b

    Re : TIPE interruption micro controleur

    attention, car quand tu fais un comptage avec test du zero (decfsz ...), cela ne compte pas pour 1 cycle machine, mais la routine compte pour plusieurs cycles... donc avec ton decompte ou ton comptage jusqu'a 9091, tu va generer pâs plus de 120 Hz...

    La solution du timer est LA meilleure solution si on se fiche du signal carré.
    Si on veut un joli sinus, on utilise le PWM
    440Hz ca fait une periode de 2272µS si on divise le sinus en 180 points (2° par increment), il faut changer le PWM tous les 12.6µS en reactualisant le PWM a ce moment... et là, tu as un vrai sinus tres proche de 440Hz.

  11. #10
    kevin8z

    Re : TIPE interruption micro controleur

    Ha oui parce que j'ai oublié de dire que quand on rentre dans une interruption, c'est quand TMR0 passe de 255 à 0, donc il suffit de faire 9091/255 = 37, donc des que l'on est rentrée 37fois en interruption on change l'état du port, et la on a un signal carré d'environ 440Hz.

  12. #11
    invitefaaca50b

    Re : TIPE interruption micro controleur

    eh non... ne pas confondre le nombre de cycles total avec le nombre d'execution d'une boucle...

    Exemple d'une boucle faisant 9091 cycles d'attente avant changement de niveau

    Code:
    ; Clock frequency = 32 Mhz
    ; Actual delay = .001136375 Seconds
    ; (9091 Cycles)
    	cblock
    	     d0
    	     d1
    	endc
    
    	movlw D'205'
    	movwf d0
    	movlw D'12'
    	movwf d1
    loop
    	decfsz d0, f
    	goto loop
    	decfsz d1, f
    	goto loop
    
    ; Rest = 1 Cycles
    	nop

  13. #12
    kevin8z

    Re : TIPE interruption micro controleur

    Désolé mais je connais pas l'assembleur ( enfin pas encore j'apprendrais ça a la rentrée scolaire) je ne connais que le C, je ne comprend pas trop l'histoire de la boucle, parce que une boucle, il faut 4 coup d'horloge pour être effectué, donc mon raisonnement est bon?

  14. #13
    flofloconcon

    Re : TIPE interruption micro controleur

    cette solution de PWM m'a l'air interessante, comment fonctionne cette partie du microcontroleur exactement ?

  15. #14
    invitefaaca50b

    Re : TIPE interruption micro controleur

    Non pour la boucle il ne faut pas dire 4 coups d'horloge.

    en fait, pour un PIC, il faut 4 cycles d'horloges pour 1 cycle CPU
    Avec un quartz a 4 MHz, on peut faire 1 milion d'instructions seconde
    Certaines instructions prennent 1 cycle machine, d'autres il en faut 2 (goto par exemple)

    Dans le cas suivant, quand tu veux faire une boucle qui attend 100µS (100 cycles) sur une horloge a 4MHz, en fait la boucle se repete 33 fois

    Code:
    ; Clock frequency = 4 Mhz
    ; Actual delay = .0001 Seconds
    ; (100 Cycles)
    	cblock
    	     d0
    	endc
    
    	movlw D'33'
    	movwf d0
    loop
    	decfsz d0, f
    	goto loop
    Pour le PWM, en fait, en C ou en ASM, c'est pas si abordable que cela en grattant sur le net
    On trouve ici un calculateur pour un PWM en C adaptable en ASM: http://www.micro-examples.com/public...alculator.html
    Le but en fait c'est de lancer ton PWM et a chaque fois que le PWM retombe, de changer le registre du taux du PWM, ce qui permet de mapper une tension lissee representant une sinusoide. Ta frequence de ta sinusoide etant de 440 Hz, ton PWM sera x fois plus rapide où x est le nombre de points de definition de la sinusoide (exemple 90 points avec un quantum de 4° entre chaque validation du PWM)...

    Mais deja si tu sors un simple signal carré, tu peux le lisser en mettant un filtre RC en sortie pour lui donner un aspect moins raide et eliminer des harmoniques....

  16. #15
    sin92

    Re : TIPE interruption micro controleur

    Bon si j'ai bien compris tu veux générer un signal carré de fréquence 440 HZ en utilisant le timer 0 :

    De mémoire mais je peux me tromper je pense que le PWM est relié au timer 1 ou 2 mais pas 0 donc on va faire sans PWM.

    Ton quartz fait 32Mhz dont 8 Méga instructions par secondes.

    Il faut chercher dans un premier temps quel valeur a rentrer dans le TMR0 et quel prescaler lui appliquer.(sachant que le timer 0 est un compteur 8 bits). 440 Hz ca fait une période de 2.27 ms pour ton signal.

    D'après mes calculs, (j'ai pas vérifié c'est le matin je te laisse le faire ) en mettant une valeur compté de 142 et un pré-compteur de 128, ça colle.

    La valeur initiale du TMR0 devra donc être de 256-142 = 114.

    Donc dans ton programme :

    void main()
    {
    TRISB=0x00; // tu prend la sortie que tu veux perso j'ai pris RB0;
    INTCON=INTCON&0xFB; //fou à 0 le flag du timer 0
    OPTION_REG=0b11010110; //PSA à 0 , prescaler de 128
    TMR0=114;

    while(1)
    {
    if(TOIF)
    {
    RB0=(!RB0); // ta sortie change d'état logique
    TOIF=0;
    TMR0=114;
    }
    }
    }

    Bon voila si c'est pas ça que tu voulais hésite pas à re poster.
    Dernière modification par sin92 ; 18/06/2012 à 08h14.

  17. #16
    RISC

    Re : TIPE interruption micro controleur

    Floflo,

    Quel PIC veux-tu utiliser ?

    Dois-tu absolument utiliser un quartz de 32MHz ?

    a+

  18. #17
    PA5CAL

    Re : TIPE interruption micro controleur

    Bonsoir

    De quel microcontrôleur s'agit-il ?

    Assez souvent, la simple programmation d'un timer suffit à générer un signal carré de fréquence déterminée, sans recourir aux interruptions. Et cette programmation, qui consiste à écrire les valeurs adéquates dans des registres de contrôle, est généralement accessible au langage C.

    Certaines librairies du langage C permettent même de générer directement l'onde carrée à la fréquence souhaitée à l'aide d'un simple appel de fonction.

  19. #18
    invitefaaca50b

    Re : TIPE interruption micro controleur

    disons que ca fait kitsch d'utiliser un 32F pour generer une tonalité là ou un simple 12F683 y arriverait...
    on sort un signal carré lissé par un filtre RC et on aura un joli son en 440Hz commutable en 880Hz

    bsf GPIO,0
    call Tempo1.136ms
    bcf GPIO,0
    call Tempo1.136ms
    goto $-4


    On cree une routine appelle Tempo1.136ms grace a picdelay, et hop...
    Et c'est torché en ASM pour du 440Hz

  20. #19
    PA5CAL

    Re : TIPE interruption micro controleur

    Mouais... Mais les PIC ne sont pas les seuls µC sur le marché, l'utilisation de temporisations nécessite normalement de soustraire les temps d'exécution des autres instructions de la période à réaliser, et l'imprécision des horloges internes mène bien souvent à calibrer ces temporisations pour réaliser un diapason...

    Sur un PIC 12F683, la précision de l'horloge interne rapide est de ±5% sur toute la gamme de tension et de température, de ±2% sur la gamme normale d'utilisation, et de ±1% pour 3,5V et 25°C (quant à l'horloge interne lente, elle est donnée pour ±50%). Et pour l'oreille d'un musicien, ±1% d'erreur sur la fréquence correspond à un instrument très nettement désaccordé. Pour rester sérieux, il faudrait faire mieux que ±0,2% (précision que le premier venu atteindrait déjà en accordant un instrument).
    Dernière modification par PA5CAL ; 19/06/2012 à 07h29.

  21. #20
    flofloconcon

    Re : TIPE interruption micro controleur

    sin92

    Re : TIPE interruption micro controleur
    Bon si j'ai bien compris tu veux générer un signal carré de fréquence 440 HZ en utilisant le timer 0 :

    De mémoire mais je peux me tromper je pense que le PWM est relié au timer 1 ou 2 mais pas 0 donc on va faire sans PWM.

    Ton quartz fait 32Mhz dont 8 Méga instructions par secondes.

    Il faut chercher dans un premier temps quel valeur a rentrer dans le TMR0 et quel prescaler lui appliquer.(sachant que le timer 0 est un compteur 8 bits). 440 Hz ca fait une période de 2.27 ms pour ton signal.

    D'après mes calculs, (j'ai pas vérifié c'est le matin je te laisse le faire ) en mettant une valeur compté de 142 et un pré-compteur de 128, ça colle.

    La valeur initiale du TMR0 devra donc être de 256-142 = 114.

    Donc dans ton programme :

    void main()
    {
    TRISB=0x00; // tu prend la sortie que tu veux perso j'ai pris RB0;
    INTCON=INTCON&0xFB; //fou à 0 le flag du timer 0
    OPTION_REG=0b11010110; //PSA à 0 , prescaler de 128
    TMR0=114;

    while(1)
    {
    if(TOIF)
    {
    RB0=(!RB0); // ta sortie change d'état logique
    TOIF=0;
    TMR0=114;
    }
    }
    }

    Bon voila si c'est pas ça que tu voulais hésite pas à re poster.
    je trouve la meme valeur que toi pour la valeur compté (142), mais avec un prescamer de 64

  22. #21
    PA5CAL

    Re : TIPE interruption micro controleur

    Compte tenu de ce que j'ai indiqué juste au-dessus, il n'est pas sûr que la valeur de 142 convienne.

    Tu as un fréquencemètre précis pour vérifier le résultat, ou bien un véritable diapason mécanique pour écouter les battements ?
    Dernière modification par PA5CAL ; 19/06/2012 à 12h56.

  23. #22
    invitefaaca50b

    Re : TIPE interruption micro controleur

    j'ai pas precisé que pour un diapason, on doit utiliser le quartz externe de la valeur de son choix (sur un PIC ou sur un autre µC), mais dans l'absolu, je prefere parler de ce que je connais, et quand on veut parler du decompte des temps machines, cans ce cas, on est a 1/1136 soit inferieur a 0.1%... donc quasi negligeable.... Mais pour le purisme, on peut recalculer aux petits oignons le tempo... et on peut aussi ne pas etre a 50% de cycle, pour trouver un chiffre sans decimales... ou avec decimales finies...

  24. #23
    sin92

    Re : TIPE interruption micro controleur

    C'est vrai que pour produire un LA pur un µC c'est du bourrin un simple oscillateur asservi et tu l'obtiens ou bien comme la dis Franck un PWM combiné au timer 1/2. Concernant la bonne valeur à rentrer dans TMR0 et OPTION_REG : comment en est tu arrivé a un pré-compteur de 64?que je vois tes calculs.

    Dans le cadre d'un TIPE la précision requise ne doit pas être gargantuesque.De mémoire si tu veux vraiment taper dans la précision quand tu écris dans le registre TMR0 ca prend 3 cycles machines.Mais sérieux te prend pas la tête.

  25. #24
    flofloconcon

    Re : TIPE interruption micro controleur

    pour mes calculs j'ai fait comme ci dessous:

    Je veux un signal de 440 Hz, donc 880 "impulsion" par seconde. Ceci correspond a 1136 µs pour une impulsion.

    si je prend le prescaler = 64, et la valeur compté = 142, j'obtiens : T=4*64*142/(32*10^6)=1136µs.

    ai-je faux ?

    Et le professeur m'a dit que de passer sur du 16 bit augmenterait la précision, or la avec la valeur compté que je prend je ne peux être plus précis, je ne vois pas l’intérêt ?
    Dernière modification par flofloconcon ; 19/06/2012 à 21h34.

  26. #25
    sin92

    Re : TIPE interruption micro controleur

    Oula déjà je ne comprend pas 880 impulsions : 880 impulsions ne donneront rien . Tu veux plutôt dire 880 fronts non?mais ne résonne pas en impulsion résonne en période : oui c'est toi qui à raison puisque pour une période avec une fréquence de 440 Hz, il te faut une demi période (durée de l'état logique haut ou bas donc) de 880 Hz donc un pré-compteur de 64 et non de 128.

    Je viens de vérifier ton calcul est bon.

    L'intérêt d'augmenter la précision de ton timer, c'est de te rapprocher encore plus du LA.

    Le timer1 est en 16 bits tu peux l'utiliser.

    Zappe le timer2 il va t'embrouiller plus qu'autre chose.

  27. #26
    PA5CAL

    Re : TIPE interruption micro controleur

    Citation Envoyé par flofloconcon Voir le message
    Et le professeur m'a dit que de passer sur du 16 bit augmenterait la précision, or la avec la valeur compté que je prend je ne peux être plus précis, je ne vois pas l’intérêt ?
    Pour obtenir précisément 440 Hz en partant d'un quartz à 32 MHz, il faut globalement diviser la fréquence par 72727,2727..., soit encore une division par 9090,90909... si le principe de réalisation t'impose déjà une division par 8.

    Si tu parviens à faire une division entière par 9091, ce sera plus précis qu'en faisant une division par 64x142=9088. Tu obtiendrais une précision théorique de 0,001% au lieu de 0,032%. L'erreur numérique serait alors rendue inférieure à l'erreur physique due au quartz.
    Dernière modification par PA5CAL ; 19/06/2012 à 21h51.

  28. #27
    flofloconcon

    Re : TIPE interruption micro controleur

    ok merci, par contre avec les valeurs que je trouve, je tombe tout pile sur du 440 Hz, je ne vois pas l’intérêt de passer par du 16 bit, la précision ne sera pas plus grande, peut etre y a t il un interet de ne pas utiliser de prescaler ?

  29. #28
    PA5CAL

    Re : TIPE interruption micro controleur

    Citation Envoyé par flofloconcon Voir le message
    ok merci, par contre avec les valeurs que je trouve, je tombe tout pile sur du 440 Hz, je ne vois pas l’intérêt de passer par du 16 bit, la précision ne sera pas plus grande, peut etre y a t il un interet de ne pas utiliser de prescaler ?
    Si tu trouves pile poil 440 Hz, c'est que ta calculatrice n'affiche pas tous les chiffres. Tu devrais trouver 440,141 Hz.

    Cela dit, l'intérêt n'est que de principe, car la précision obtenue n'est réalisable qu'à condition d'utiliser un bon oscillateur à quartz, et elle n'est pas vraiment utile pour réaliser un diapason musical. Une fréquence de 440,141 Hz est déjà très suffisante pour accorder précisément un instrument de musique.
    Dernière modification par PA5CAL ; 19/06/2012 à 21h59.

  30. #29
    sin92

    Re : TIPE interruption micro controleur

    En fait ton prof voudrait surtout que tu utilise le module PWM/timer2 du PIC mais techniquement ta fini ton TIPE.

  31. #30
    flofloconcon

    Re : TIPE interruption micro controleur

    ok merci a vous tous ! je vais finaliser tout ça.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Réponses: 11
    Dernier message: 22/11/2010, 13h33
  2. Micro-contrôleur
    Par invitef06f0671 dans le forum Électronique
    Réponses: 14
    Dernier message: 03/11/2010, 14h23
  3. Micro Controleur
    Par invitecfc0bef7 dans le forum Électronique
    Réponses: 11
    Dernier message: 05/10/2008, 20h41
  4. micro controleur
    Par invite07d46e5b dans le forum Électronique
    Réponses: 2
    Dernier message: 05/04/2008, 14h24
  5. micro-controleur
    Par invite103abebb dans le forum Électronique
    Réponses: 2
    Dernier message: 28/07/2007, 23h02
Découvrez nos comparatifs produits sur l'informatique et les technologies.