Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Timer sur attiny85 modifier fréquence



  1. #1
    ElectronPiege

    Timer sur attiny85 modifier fréquence


    ------

    Bonjour,

    J'ai réalisé des cartes qui utilisent un ATTINY85 pour générer un PWM pour faire varier la luminosité de LEDs.
    Le truck c'est que j'ai une fréquence d'environ 30KHz, ce qui est trop pour mon application, surtout pour commander un mosfet de puissance.

    J'utilise le timer 1. Je met OCR1A à 0 au début, puis je l'initialise avec une valeur entre 0 et 255 en fonction de l'état d'une entrée, pour modifier le rapport cyclique.

    Mais comment faire pour changer la fréquence et arriver à environ 200Hz ou 500Hz ?

    Merci

    Voici mon code :

    Code:
     
    void main(void)
    {
    // Declare your local variables here
    
    // Crystal Oscillator division factor: 1
    #pragma optsize-
    CLKPR=(1<<CLKPCE);
    CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif
    
    // Input/Output Ports initialization
    // Port B initialization
    // Function: Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=In 
    DDRB=(0<<DDB5) | (0<<DDB4) | (0<<DDB3) | (0<<DDB2) | (1<<DDB1) | (0<<DDB0);
    // State: Bit5=T Bit4=T Bit3=T Bit2=T Bit1=0 Bit0=T 
    PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (1<<PORTB2) | (0<<PORTB1) | (1<<PORTB0);
    
    
       TCCR1 |= (1<<PWM1A);   //Enable PWM mode on OCR1A 
       TCCR1 |= (1<<COM1A1);   //Clear OC1A when 
                                        //compare match occurs 
       TCCR1 |= (1<<CS10);      //Set prescale to CK/8 (125Khz);
    
    
    
    while (1)
          {
    
          OCR1A = 0;
    
          while (PINB.2 == 0)
            {
            OCR1A = X;
    
                if(PINB.0 == 0)
                        {
                        X = 20;
                        }
                else
                        {
                        X = 25;
                        }
            } 
    
          } 
    
    }

    -----

  2. Publicité
  3. #2
    zibuth27

    Re : Timer sur attiny85 modifier fréquence

    hello,

    regardes bien la doc (RTFM !)
    tu déclares TCCR1 pour CK/8 mais tu ne programmes que le bit CS10 à 1 = tu fais autre chose !!

    à changer


    saluts

  4. #3
    ElectronPiege

    Re : Timer sur attiny85 modifier fréquence

    Salut,

    Donc ce qu'il faudrait que je fasse c'est mettre :

    - CS13 à 1
    - CS12 à 1
    - CS11 à 1
    - CS10 à 0

    Pour diviser ma fréquence de l'horloge interne par 8192 (j'utilise 4MHz) et arriver à 488Hz ? Ou

  5. #4
    zibuth27

    Re : Timer sur attiny85 modifier fréquence

    hello,

    Affirmatif !
    CS à 0x0E donne une division par 8192
    Est-ce réellement ce que tu veux?

    Sauf que ... c'est la fréquence bit, c'est à dire que cela définit la période du pas d'incrémentation du compteur

    Timer1 étant un compteur 8 bits, il lui faut 256 pas pour cycler et ta fréquence de récurrence sera de 1,9Hz
    Une fréquence de récurrence de 200 à 500Hz souhaitée va plutôt faire pencher pour un taux de prédivision à 32 (0x06)
    la récurrence sera à 488Hz

    Il ne semble pas qu'il y ait de bit de fuse ou autre dans ton tiny25 qui affecte le taux du prédiviseur (le tiny25 n'est pas dans ma panoplie, je n'ai fait qu'une recherche de mots-clés de la datasheet dans un premier temps)


    saluts

  6. #5
    ElectronPiege

    Re : Timer sur attiny85 modifier fréquence

    Super ! Merci !
    Tu as raison, 1.9Hz ca clignote... alors j'ai juste mis CS13 à 1, ca divise par 128.
    Là j'obtient une fréquence de 250Hz environ. Impec !

    Mais comment ca se calcule ? Je divise mon quartz par 128 ce qui donne 31.250KHz, que je redivise par 256 timer 8 bits) je tombe sur 122Hz... j'en ai le double. Pourquoi ?

    J'ai modifié mon code et je recharge OCR1A avec soit la valeur 230 soit la valeur 40 pour modifier le rapport cyclique.

  7. A voir en vidéo sur Futura
  8. #6
    zibuth27

    Re : Timer sur attiny85 modifier fréquence

    hello

    RTFM !

    la datasheet dit:
    TCCR1 – Timer/Counter1 Control Register
    • Bit 6 – PWM1A: Pulse Width Modulator A Enable
    When set (one) this bit enables PWM mode based on comparator OCR1A in Timer/Counter1 and the counter
    value is reset to $00 in the CPU clock cycle after a compare match with OCR1C register value.

    la fréquence de récurrence est bien (fréquence quartz) / (prédiviseur*256)
    ceci décrit la fréquence minimum car, avec le bit 6 de TCCR1 positionné à 1, tu remets le timer1 à 00 "un temps de cycle CPU" après que le compteur ait atteint OCR1A.

    Conséquemment la fréquence de récurrence augmente !



    saluts

  9. Publicité

Discussions similaires

  1. Modifier fréquence du secteur
    Par bl00dbliz dans le forum Électronique
    Réponses: 2
    Dernier message: 24/05/2013, 22h11
  2. [Divers] Modifier fréquence télécommande de garage
    Par claire728 dans le forum Dépannage
    Réponses: 6
    Dernier message: 12/03/2012, 17h53
  3. Modifier la fréquence d'un signal ?
    Par lucie.n dans le forum Électronique
    Réponses: 19
    Dernier message: 05/02/2012, 22h24
  4. fixation de la fréquence d'échantillonnage à l'aide du timer
    Par spray_kim dans le forum Électronique
    Réponses: 0
    Dernier message: 20/05/2010, 11h56
  5. modifier frequence radiocommande
    Par soltiss dans le forum Électronique
    Réponses: 17
    Dernier message: 15/08/2008, 04h29
Découvrez nos comparatifs produits sur l'informatique et les technologies.