toggle led en mode ctc

Pour toutes vos questions sur WinAVR, AVR-GCC et la programmation en C en général

Modérateur: Modérateur

toggle led en mode ctc

Messagede omsi le 17 Mar 2008 15:49

Salut utilisateurs d'atmega 8535,comme le dit le titre , j'aimerai ecrire un log qui fasse clignoter une led sur le port B de preference et le tout en mode CTC.
J'attendrai donc avec impatience vos suggestions, le temps que je coggitte tout ca dans mon coin.
Merci d'avance les loulous. 8)
omsi
 

toggle led en fonction d'une autre

Messagede omsi le 18 Mar 2008 12:02

Voici quelque chose de plus concret,je fais clignoter ma led toutes les secondes et je veux en faire clignoter une deuxième après 5 secondes, donc voilà mon code:
Code: Tout sélectionner
#include <avr/io.h>
#include <avr/interrupt.h>

unsigned char count;

int main(void)
{
   DDRB = 0X07;
   PORTB = 0X00;
   TCCR1B |= (1 << WGM12) | (1 << CS12);//set only (1 << CS12) for prescaler 256
   sei();//enable globale interrupts
   TIMSK |= (1 << OCIE1A);//enable output compare A
   OCR1A = 39062;//CTC value to 1HZ @ 8MHZ(AVR clk)
   
   
}

ISR(TIMER1_COMPA_vect)
{
   
   for (count=5;count=0;count--)
   {
      if(count==0)
      {
         PORTB ^=(1 << PB1);
      }
      PORTB ^= (1 << PB0);//toggle LED
   }
   while(1);
}
omsi
 

code opérationnel

Messagede omsi le 19 Mar 2008 10:01

Bonjour à moi,puisque j suis le seul qui me réponde pour l'instant.
aller je vais me donner à moi la réponse que je cherchais et pour les autres curieux.
Code: Tout sélectionner
#include <avr/io.h>
#include <avr/interrupt.h>

int i=5;

int main(void)
{

   DDRB = 0X03;//3first bits as outputs
   TCCR1A |= ((1 << COM1A1) | (1 << COM1A0));
   TCCR1B |= ((1 << WGM12) | (1 << CS12)); //settings for prescaler 256 and CTC mode
   sei(); //enable globale interrupts
   TIMSK |= (1 << OCIE1A); //enable output compare A
   OCR1A = 39062; //CTC value to 1HZ @ 8MHZ(AVR clk)
   return 0;
   
}

ISR(TIMER1_COMPA_vect)
{

   i--;
   if(i==0)
   {
      PORTB ^= (1 << PB1);
      i=5;
   }
      
   
   
   
   PORTB ^= (1 << PB0); //toggle LED 1 sec
   
}

Ben voilà,je rappel simplement que c'est un atmega16 et que j'ai utiliser le timer1(mode CTC).
Ciao.
omsi
 


Retourner vers WinAVR-AVR GCC

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités