#include <avr/interrupt.h>
#include <avr/sleep.h>
void setup() {
cli(); // Clear global interrupt
// Set Pin 13 as output
DDRB |= B100000 ;
// Set Pin 8 as input
DDRB &= B111110 ;
// Control regs for PCINT
PCICR |= B00000001 ; // Enable PCINT0
PCMSK0 |= B00000001 ; // Select PCINT0 mask
// Serial.begin(9600); // Only for debug
// Use an appropriate sleep mode
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sei(); // Set global Interrupt
}
// ISR for pin change interrupt capture
// Note: triggers both on rising & falling
ISR(PCINT0_vect) {
// Display in serial monitor for debug
// Serial.println(“Switch pressed”);
// Toggle the LED
PORTB ^= B100000 ;
}
// Main loop
void loop() {
// Display in serial monitor for debug
// Serial.println(“Main loop”);
// Do nothing!
// Put MCU to sleep
sleep_mode();
}
// #include <avr/sleep.h>
// char rep = 0; // Timer repeat count
// void setup () {
// // Set pin 13 as output
// DDRB |= B100000;
// // Using Timer2, normal mode
// TCCR2A = B00000000;
// // Pre-scaler 1024 (max)
// TCCR2B = B00000111;
// // Pre-scaled clock rate = 16M/1024
// // = ~16k
// // Timer max count=16k/0.25k=~64
// // Turn on OVF interrupt
// TIMSK2 = B00000001;
// // Sleep mode must be IDLE for Clk_IO
// set_sleep_mode(SLEEP_MODE_IDLE);
// // Turn on global interrupt
// sei();
// }
// // ISR for TOV that triggers it
// ISR(TIMER2_OVF_vect) {
// rep++; // Increment repeat count
// // For 1 sec, 64 repeats needed
// if (rep == 64) {
// rep = 0; // Reset repeat count
// PORTB ^= B100000; // toggle bit 13
// }
// }
// // Main loop
// void loop() {
// // void loop Nothing to do
// // set sleep mode and sleep cpu
// sleep_mode();
// }
// char timer = 0;
// void setup() {
// DDRB |= B100000 ; // Pin 13 as output
// // Using timer, Set to Normal mode, Pin OC0A disconnected
// TCCR2A = B00000000 ;
// // Prescale clock by 1024, Interrupt every 256K/16M sec = 1/64 sec
// TCCR2B = B00000111 ;
// // Turn on timer overflow interrupt flag
// TIMSK2 = B00000001 ;
// sei(); // Turn on global interrupts
// }
// ISR(TIMER2_OVF_vect) {
// timer++;
// PORTB ^= B100000 ; // Toggle bit 13
// }
// void loop() {
// // Do nothing
// }