[ATMEGA328P]Aide pour Timer1
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

[ATMEGA328P]Aide pour Timer1



  1. #1
    adrien4607

    [ATMEGA328P]Aide pour Timer1


    ------

    Bonjour,
    Aujourd'hui je viens vous ennuyer avec les timers de l'atmega328p
    Je suis entrain de coder une fonction qui me permetrais de voir depuis quand le µc est allumé (millis() sous arduino), pour cella j'utilise le timer1 qui est de 16bits mais je ne sais pour qu'elle raison ça ne fonctionne pas ...

    Le code :
    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    unsigned long int ms = 0;
    void timer1_init()
    {
        TCCR1A = 0x00; //Désactive les comparateur + Mode normal
        TCCR1B = 0x00;
        /*
        Horloge à 16Mhz
        1 période = 62.5ns
        clk/8 = 0.5µs
        clk/64 = 4µs
        Le prescale sera à 8
        */
        TCCR1B |= (1<<CS12) | (0<<CS11) | (1<<CS10); //Prescale à 8
        TIMSK1 = 1<<TOIE1; // Initialisation de l'interuption de débordement 
        sei();
    }
    unsigned long int millis()
    {
    	return TCNT1 / 2 + ms;
    }
    ISR(TIMER1_OVF_vect)
    {
        ms += 32768; //Lors du débordement le timer est égale à (2^16)*0.5 ms
    }
    
    int main(void)
    {
    	timer1_init();
    	DDRD = 0xff;
    	while(1)
    	{
    		PORTD = TCNT1H;
    	}
    }
    Je vois bien que TCNT1L change mais TCNT1H lui ne bouge pas ...

    Quelle-qu'un saurait-il me dire ou est l'erreur ?


    Merci d'avance

    -----

  2. #2
    invite037b2da2

    Re : [ATMEGA328P]Aide pour Timer1

    [Réponse sur la forme]
    Bonjour,
    Ta méthode millis() fait quoi ??? Tu ne l'appeles JAMAIS ou c moi ???
    Ta routine d'interruption ??? Si ton truc 2^16 ce fait au débordement pourquoi tu le fais tout le temps??

    Réda.

  3. #3
    ftorama

    Re : [ATMEGA328P]Aide pour Timer1

    Déjà ta variable ms devrait être en volatile, sinon elle ne sera jamais modifiée dans l'interruption.

    Ensuite, il y a peut-être un souci avec la lecture de TCNT1H directement. L'accès aux registres 16 bits doit se faire d'une certaine manière, même si je ne pense pas que le problème vienne de là.

    Que donne la simulation de ton bout de programme?
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  4. #4
    adrien4607

    Re : [ATMEGA328P]Aide pour Timer1

    Citation Envoyé par reda-21 Voir le message
    Ta méthode millis() fait quoi ??? Tu ne l'appeles JAMAIS ou c moi ???
    La fonction millis() retournera le temps depuis que le µc sera allumé, se temps me servira de repère pour mesurer et décoder un signal

    Citation Envoyé par reda-21 Voir le message
    Ta routine d'interruption ??? Si ton truc 2^16 ce fait au débordement pourquoi tu le fais tout le temps??
    La je ne te suis plus, elle ne le fais pas tous le temps vus qu'elle est dans ISR(TIMER1_OVF_vect)

    Citation Envoyé par ftorama Voir le message
    Déjà ta variable ms devrait être en volatile, sinon elle ne sera jamais modifiée dans l'interruption.

    Ensuite, il y a peut-être un souci avec la lecture de TCNT1H directement. L'accès aux registres 16 bits doit se faire d'une certaine manière, même si je ne pense pas que le problème vienne de là.

    Que donne la simulation de ton bout de programme?
    La variable a été mis a volatile.
    Pour-quoi avec TCNT1L, je vois bien mes sortie variée ? TCNT1L donne bien les 8 premier Bits de TCNT1 et TCNT1H les 8 dernier ...?

    Voici se que donne la simulation :
    atm.PNG
    io.PNG

    Merci pour votre aide

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

    Re : [ATMEGA328P]Aide pour Timer1

    A la plasse de TCNT1H j'ai mis TCNT1 >> 8 et ça m'affiche se que je veux et l’interruption se fait bien
    Nom : sim.PNG
Affichages : 58
Taille : 38,6 Ko
    (Ne fait pas attention au "bouton" propriétés, j'ai un soucis avec mon gestionnaire de fenêtre ^^' )


    Merci pour votre aide

  7. #6
    invite037b2da2

    Re : [ATMEGA328P]Aide pour Timer1

    Effectivement pour ta routine j'avais pas bien vu

    Je reste bloqué sur ta fonction millis elle renvoie le temps d'accord mais à qui ??
    Tu l'appeles où ?

    Réda.

  8. #7
    adrien4607

    Re : [ATMEGA328P]Aide pour Timer1

    En fait j'ai comme projet (je vise peut-être haut, mais c'est le défis ) de décoder un signal dcf77, il me faut donc un repère temporelle qui viendra de cette fonction, par contre, je viens de me rendre compte que ça n’enverra pas le temps en ms mais en µs .

  9. #8
    adrien4607

    Re : [ATMEGA328P]Aide pour Timer1

    Et part la suite si tous vas bien, de faire une horloge a tube nixie.
    Je viens dans recevoir un et je compte passé mes vacance a bidouiller sur le DCF77 et le nixie tube
    Nom : 1479541_10201306893977704_148943794_n.jpg
Affichages : 72
Taille : 79,8 Ko
    (Je pensait ces bestiole plus grande , mais qu'elle splendeur )

Discussions similaires

  1. Réponses: 14
    Dernier message: 20/12/2013, 11h55
  2. Programmation µC AVR Atmega328P-AU
    Par invite106ce3b0 dans le forum Électronique
    Réponses: 8
    Dernier message: 30/10/2013, 02h33
  3. Circuit de reset ATMEGA328p
    Par invite8e0aa999 dans le forum Électronique
    Réponses: 1
    Dernier message: 16/04/2013, 20h35
  4. Reception IR en c avec un atmega328p
    Par inviteeea328c7 dans le forum Électronique
    Réponses: 6
    Dernier message: 10/06/2011, 14h21
  5. Timer1
    Par invite91183f95 dans le forum Électronique
    Réponses: 2
    Dernier message: 26/04/2007, 15h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...