Catégories
Arduino Interruption Arduino pwm

Arduino #39: Temporisation 1 seconde – INT0 + PWM #2

Objectifs

  1. Savoir utiliser générer un pulse d’une seconde
  2. Savoir générer un signal carré d’une fréquence spécifique
  3. Savoir utiliser l’interruption INT0 & PWM

Programme Arduino

#define PWMout    2         // Signal PWM  - [Mega: 4-13:980]

#define SecPulse  3         // Signal carré

#define ValSec    980      //= Fréquence = Nb cycles /sec 490




bool State=false;

unsigned long Count1Sec=0;

unsigned long CountEvent=0;







void setup()

{

  // Câblage du pin et configuration en entrée: INT0 => PD0 (pin 38 de la carte)

  DDRD =0x00; // Port D en entrée




  // Activation de l'interruption globale (registre SREG) 

  SREG|=0x80;

      //SREG|=0x80  // Activation

      //SREG&=0x7f  // Désactivation 

      //Ou bien

      //sei(): Set interrupt - Activation

      //cli(): clear interrup - Désactivation (masquer)  




  // Validation de l'interruption INT0 (Registre EIMSK)

  EIMSK|=0x01; // INT0

      //EIMSK|=0x02; // INT1

      //EIMSK|=0x04; // INT2

      //...

     

  // Choix du mode de détection: Front montant dans INT0

  EICRA|=0x01;

      //EICRA|=0x00;  //niveau bas '0' dans INTn

      //EICRA|=0x01;  //front montant ou descendant dans INTn

      //EICRA|=0x02;  //Front descendant dans INTn

      //EICRA|=0x03;  //Front montant dans INTn




  // Initialisation de la sortie PWM (signal carré, rapport cyclique 50%) 

  analogWrite(PWMout, 128);  




  // Config PIN 1 sec (pulse 1 seconde, fréquence 1/2 Hz)

  pinMode(SecPulse, OUTPUT);

}




void loop()

{

  // Au chaumage 

}

Routine de l’interruption

ISR(_VECTOR(1)){ // Ou _VECTOR(2)

  CountEvent+=1;

  CountEvent=CountEvent%ValSec; 

  if (!CountEvent)

  {

    State=not(State);

    digitalWrite(SecPulse,State);

  }

}

Laisser un commentaire