Skip to the content.

Torna all’indice

Comparatore analogico

Il chip Atmega328 ha un comparatore di tensione analogico integrato. Cioè, può attivare un interrupt quando una tensione in ingresso supera una soglia. Il comparatore ha due ingressi differenziali V+ e V- dei quali esegue la differenza.

Se la tensione sul pin di ingresso è maggiore (o minore) di quella nel pin di riferimento l’uscita del comparatore assume il valore HIGH (LOW).

All’operazione di confronto del comparatore si possono associare alcuni eventi segnalabili con un interrupt:

Lo schema interno ad Arduino del comparatore è: comparatore

Un esempio di setup HW delle porte D6 e D7 potrebbe essere: setupporte

ACIS1 ACIS0 Mode
0 0 Toggle
0 1 Reserved
1 0 Falling Edge
1 1 Rising Edge

Un esempio di sketch SW potrebbe essere:

volatile boolean triggered;

ISR (ANALOG_COMP_vect)
  {
   triggered = true;
  }

void setup ()
  {
  Serial.begin (115200);
  Serial.println ("Started.");
  ADCSRB = 0;           // (Disable) ACME: Analog Comparator Multiplexer Enable
  ACSR =  bit (ACI)     // (Clear) Analog Comparator Interrupt Flag
        | bit (ACIE)    // Analog Comparator Interrupt Enable
        | bit (ACIS1);  // ACIS1, ACIS0: Analog Comparator Interrupt Mode Select (trigger on falling edge)
   }  // end of setup

void loop ()
  {
  if (triggered)
    {
     Serial.println ("Triggered!"); 
     triggered = false;
    }
  
  }  // end of loop

È possibile anche una impostazione che realizza un collegamento interno tra l’uscita del convertitore ADC e l’ingresso del riferimento del comparatore. Questa impostazione permette di modificare il valore del riferimento in base al valore di più ingressi analogici campionati e digitalizzati in intervalli di tempo differenti (multiplexing).

Torna all’indice