Programmation en C avec Timer 0 et Timer 1 - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 44 sur 44

Programmation en C avec Timer 0 et Timer 1



  1. #31
    invite7dc94ab0

    Re : Programmation en C avec Timer 0 et Timer 1


    ------

    Bonjour!

    Oui c'est vrai les 2 idées que j'avais avancé été irréfléchies.
    C'est normal que le programme reste sur l'analyse de fréquence mais ce n'est que visuellement car il doit toujours y avoir une sorte de reset, mais on ne le voit plus car plus de test!
    Et la remarque sur la longueur c vrai je suis encore loin de saturer la mémoire!

    Pour le "hello world j'avais déja étudié les interruptions mais pas avec un compteur comme ceci...

    Pour ta question, C0 est une LED, C1 à C7 pour un 7 segments (note), D0 une autre LED, D1 à D7 pour une 2eme 7 segments (utilisé plus tard pour Dièse / Bémol).

    Je joints le prog en entier, attention les yeux!

    Code:
    #include<16F877.h>
    #include<defines.h>
    
    
    
    #USE delay(clock=20000000)
    
    
    float freq;
    int compteur_t1;
    int fronts;
    
    void init();
    void test();
    void interrupt();
    void afficheAm();
    void afficheAj();
    void afficheAp();
    void traitement(float freq);
    
    void main()
    {	init();
    	//test();
    		//Parametres Compteur
     	ADCON0 = 0b00000000;  // ADC OFF
     	ADCON1 = 0b00000111;  // ADC OFF
    	T1CON  = 0b00110001;  // activation du TMR1, avec PreScaler=8
    	INTCON = 0b11010000;  // activation INT RB0 + Périphs
    	PIE1   = 0b00000001;  // activation INT TMR1
    
    while(1)
    	{
    	traitement(freq);
    	}
    }
    
    void init()
    {
    	TRISA=0xFF;
    	TRISB=0b00000001;  // port RB0 en entrée
    	TRISC=0x00;
    	TRISD=0x00;
    	//TRISE=0x00;
    
    	//PORTB=0;
    	PORTC=0xFF;
    	PORTD=0xFF;
    }
    
    
    void test()
    {
    	//TEST DES 2 AFFICHEURS
            PORTC=0;
            delay_ms(1000);
            PORTD=0;
            delay_ms(1000);
    }
    
    void interrupt()
    {
       if(INTF=1) // si INT RB0
       {
         fronts ++;
         INTF = 0;  // re-active INT RB0
       }
       if(TMR1IF = 1) // si INT TMR1
       {
         compteur_t1 ++;
         if(compteur_t1>9)
         {
           freq = fronts;
           fronts = 0;
           compteur_t1 = 0;
         }
         TMR1L = 220;     // période de 100ms @ 20Mhz
         TMR1H = 11;      // période de 100ms @ 20Mhz
         TMR1IF = 0; // re-active INT TMR1
       }
    
    }
    
    
    void traitement(float freq)
    {	if(freq<440)
    	{	afficheAm();//Affiche A -
    	}
    
    	if(freq==440)
    	{	afficheAj();//Affiche A - et +
    	}
    
    	if(freq>440)
    	{	afficheAp();//Affiche A +
    	}
    
    	freq=0;  // il faut remettre à 0 la fréquence calculée
    	
    }
    Voila pour mon prog, je n'ai pas mis afficheAp() etc car c'est juste des fonctions avec PORTB=0b11000110 par exemple

    Mais je pars de ce pas m'instruire de INT et TMR!

    Bonne journée

    -----

  2. #32
    invite7a49d0d5

    Cool Re : Programmation en C avec Timer 0 et Timer 1

    Bonsoir,

    merci pour le code complet...
    c'est plus clair ainsi...

    et ça paraît déjà bien sympa...

    pour les afficheurs 7 segments...
    une suggestion : l'on pourrait même
    en ajouter un ou deux (via multiplexage)...
    et donc carrément afficher la fréquence...

    si non, sur beaucoup d'accordeurs,
    il y a souvent plusieurs leds...
    indiquant approximativement la
    différence +/- à affiner...
    exemple 3 leds qui s'éteignent successivement
    à l'approche de LA NOTE...
    3 rouges(-), une verte (note), 3 rouges(+)
    ça indiquent en même temps dans quel "sens" acorder...
    (3leds- = tendre la corde ; 3leds+ = détendre...)...
    et aussi approximativement dans "quelle marge"...
    3 leds rouges allumées = une grosse re/de-tension nécessaire
    1 leds rouges allumées = une fine re/de-tension suffira
    (tension de la corde... ;O]... et 2 Leds= une "moyenne" re/de-tension ;O])
    nombres de leds rouges allumées selon la "différence" avec LA NOTE...

    c'est juste des idées qui me passent par la tête...
    et tiens nous au jus,
    vede
    ;O]

    ps et dans une version "pro" de ce genre de montage,
    il est bon d'étalonner la fréquence... on en reparlera si
    besoin...

  3. #33
    invite7dc94ab0

    Re : Programmation en C avec Timer 0 et Timer 1

    Salut!

    Ouai c'est un sacré montage que j'ai entrepris! Tes idées pour les LED sont sympa je les note mais j'essai déja de faire marcher ce dispositif... Et c'est dur sans GBF car il faut étalonner c'est sur; les premiers essais ne marchent pas, le programme trouve toujours une fréquence énorme... Faut que j'essaie de le mettre le WATCH de MPLAB pour voir la valeur de freq renvoyée!
    Si tu veux je peux t'envoyer en MP le schéma du montage!

    Bonne soirée et merci encore pour l'étude de mon cas!

  4. #34
    invite7a49d0d5

    Cool Re : Programmation en C avec Timer 0 et Timer 1

    hi,

    en fait le premier truc important et facile à faire, c'est déjà de vérifier que
    la "fenêtre" de 1 seconde fait bien une seconde... à l'oeil...mieux chrono/comptage sur 30s...
    (car si elle fait le double... ben ça fausse tout...)

    en mettant une led sur PORTB.5 dans l'interruption :
    Code:
         if(compteur_t1>9)
         {
           freq = fronts;
           fronts = 0;
           compteur_t1 = 0;
           PORTB.5 = !PORTB.5 // inverse l'état du port chaque seconde
         }
    sinon, oui, un GBF et un Fréquencemètre ;O] étalonnés ;O]
    après un GBF de base c'est vite très très vite fait avec un CD4001,11,69,93,.., (ou un NE555)
    c'est le Fréquencemètre le plus indispensable...

    t'envoies quoi actuellement comme "impulsions"?

    vede
    ;O]
    ______________
    ...

  5. #35
    invite7a49d0d5

    Cool Re : Programmation en C avec Timer 0 et Timer 1

    ps :

    et comme ça ça fait un programme double fonction ;O]
    accordeur ET clignotant à led ;O]

  6. #36
    invite7a49d0d5

    Cool Re : Programmation en C avec Timer 0 et Timer 1

    Edit :

    après un GBF de base c'est vite très très vite fait avec un CD4001,11,69,93,.., (ou un NE555)

    ou avec un autre PIC ;O] ;O] ;O]

  7. #37
    invite7a49d0d5

    Cool Re : Programmation en C avec Timer 0 et Timer 1

    re-Edit : re-GBF

    ...ou avec un PC... ;O]

    2 exemples de GBF sur PC (via carte son) gratuits récemments cités:

    http://pagesperso-orange.fr/vb-audio.../generator.htm
    (download en bas de page)

    http://pagesperso-orange.fr/jmdefais...m/log_elec.htm

    et d'autres sur google en tapant "GBF Freeware"...

  8. #38
    invite7dc94ab0

    Re : Programmation en C avec Timer 0 et Timer 1

    Bonjour
    Je pense que c'est mon interruption qui a un problème... Grace au mode débugger, je regarde la valeur des variables... et INTF ne passe jamais à 1. Donc je ne peux pas calculer les fronts donc pas de frequences...
    Le timer défile lui mais il commence avant meme d'avoir activé PIE1! Peut etre le mode débugger qui fait ca.

    J'ai essayer ta méthode avec la LED mais ca ne marche pas du tout! Donc c'est mon interruption!

    Question: tu utilises quoi comme compilateur C? J'ai CSS C mais il ne prends pas en compte l'écriture INTCON.INTF
    J'ai un fichier .h où mes variables sont déja décrites mais j'explore toutes les solutions!

    Merci

  9. #39
    invite7a49d0d5

    Cool Re : Programmation en C avec Timer 0 et Timer 1

    Bonjour,

    >Le timer défile lui mais il commence avant meme d'avoir activé PIE1! Peut etre le mode débugger qui fait ca.

    Non, c'est normal, le timer démarre dés qu'on l'active (T1CON.TMR1ON)...
    quel que soit l'état de son interruption...

    Pour l'INT sur RB0, fais des essais avec un BP sur RB0...
    pour par exemple allumer/éteindre une led à chaque appui...

    Pour le compilo, j'utilise MikroC Pro en version gratuite
    (limité à 2Ko de code, cad largement de quoi faire...)
    http://www.mikroe.com/en/compilers/mikroc/pro/pic/
    sinon tentes INTCON.bit... INTCON.5 = 0...

    vede
    ;O]
    _____________________
    Vive les PICS ;O]

  10. #40
    invite7dc94ab0

    Re : Programmation en C avec Timer 0 et Timer 1

    Merci pour tes liens pour les oscilloscopes via carte son, j'en avait entendu parler mais pour moi c'était pas encore au point! Et je vais vérifier mon montage électronique avant de regarder le programme.

    Je fais ça dans la journée et je te tiens au courant!!

    Pour l'interruption je rentre un signal carré 0-5V (mise en carré de la tension de sortie de la guitare élec, mais obligé de tester les notes en 12eme case pour avoir de belles sinusoides car sinon problèmes d'harmoiques dans mon signal et la fréquence et faussé!)
    Sinon je câblerai un BP et je verrai!

    Bonne journée

  11. #41
    invite7a49d0d5

    Cool Re : Programmation en C avec Timer 0 et Timer 1

    Bonjour velayg,

    put...g d'harmoniques ;O]
    ça faisait plusieurs jours que j'avais le mot sur la langue...
    mais j'ai pas voulu t'inquiéter ;O]

    une bonne base, aller voir comment font les autres ;O]
    schéma accordeur dans google = 8000 réponses...
    http://www.google.fr/search?client=f...cherche+Google

    tiens nous au jus,
    et bonn'journée,
    vede
    ;O]
    __________________________
    Vive les PICS ;O]

  12. #42
    invite6844fe5f

    Re : Programmation en C avec Timer 0 et Timer 1

    Moi J'ai mis un filtre passe bas, qui bloque toutes les fréquences au dessus 340Hz, ça bloque pas toutes les harmoniques mais c'est un début.

  13. #43
    invite7a49d0d5

    Cool Re : Programmation en C avec Timer 0 et Timer 1

    Citation Envoyé par Groundation Voir le message
    Moi J'ai mis un filtre passe bas, qui bloque toutes les fréquences au dessus 340Hz, ça bloque pas toutes les harmoniques mais c'est un début.
    Hi,

    un filtre RC?
    avec quelles valeurs?

    vede
    ;O]
    _______________________
    Vive les PICS ;O]

  14. #44
    invite6844fe5f

    Re : Programmation en C avec Timer 0 et Timer 1

    Effectivement un filtre RC avec R=1k et C=470nF, ce qui nous donne une fréquence de coupure de fc=339Hz, ça fonctionne mais malheureusement certaine harmoniques des trois dernières cordes ne sont pas filtrés.

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Timer : programmation et PIC débutant
    Par invite3570b5f7 dans le forum Bricolage et décoration
    Réponses: 1
    Dernier message: 21/03/2010, 20h58
  2. Programmation Timer renesas M16C
    Par invitef351b08a dans le forum Électronique
    Réponses: 2
    Dernier message: 12/06/2009, 07h39
  3. timer avec buzzer
    Par invite4fd05ab6 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/10/2008, 14h19
  4. Interruption Timer avec PIC16F876A
    Par invite5d1bc976 dans le forum Électronique
    Réponses: 9
    Dernier message: 28/07/2007, 21h57
  5. problème de programmation de timer keeper MK48T08
    Par invitec041fa6f dans le forum Électronique
    Réponses: 0
    Dernier message: 25/04/2006, 07h43
Découvrez nos comparatifs produits sur l'informatique et les technologies.