Here I’m sharing a working example using the analog comparator of the Adafruit’s TRINKET (ATtiny85).
/*Trinket_comp_ISR.ino Arduining.com 12 JUL 2015 Sketch to test interrupts fron the analog comparator. 2.5 Volt in ANI0 (voltage divider). Potentiometer input in ANI1 An interrupt is generated in every change of the comparator output (toggle). The interrupt set the flag "triggered". The main loop program checks for the flag, if the flag is set, test the output value of the comparator and modify the state of the LED according.*/ #define LED 4 volatile boolean triggered=false; //------------ Analog Comparator Interrupt Routine ---------------------------- ISR(ANA_COMP_vect){ triggered = true; } //----------------------------------------------------------------------------- void setup(){ pinMode(LED,OUTPUT); ADCSRB &= ~(1<<ACME); //Set AIN1 as the negative input (Potentiometer). DIDR0 |= (1<<AIN1D)|(1<<AIN0D); // disable digital inputs. //ACSR – Analog Comparator Control and Status Register ACSR = B00001000; // comparator interrupt enabled and tripped on toggle. (compare with AN1) // ||||||||_ ACIS0 ACIS1, ACIS0: Analog Comparator Interrupt Mode Select // |||||||__ ACIS1 10= falling edge; 11= raising edge; 00= toggle. // ||||||___ ACIC Reserved Bit // |||||____ ACIE Interrupt Enable // ||||_____ ACI Analog Comparator Interrupt Flag (R/W), write 1 to clear it. // |||______ ACO Analog Comparator Output (read only) // ||_______ ACBG 1= Bandgap Select (1.1V); 0= compare with AIN0 (pin 6) // |________ ACD Analog Comparator Disable digitalWrite(LED, HIGH);//LED on for 100 milliseconds. delay(100); //Put the LED status as the analog comparator output (inverted) if(ACSR & (1<<ACO))digitalWrite(LED, LOW); else digitalWrite(LED, HIGH); } //----------------------------------------------------------------------------- void loop(){ if(triggered){ if(ACSR & (1<<ACO))digitalWrite(LED, LOW); else digitalWrite(LED, HIGH); triggered= false; //while(1){} } }