49 lines
877 B
C
49 lines
877 B
C
#define __AVR_ATmega2560__
|
|
#define F_CPU 16000000UL
|
|
|
|
#include <avr/io.h>
|
|
#include <util/delay.h>
|
|
#include <stdbool.h>
|
|
#include <avr/interrupt.h>
|
|
|
|
volatile int debounce_int2 = 10;
|
|
volatile int debounce_int3 = 10;
|
|
|
|
ISR(INT2_vect) {
|
|
if (debounce_int2) return;
|
|
debounce_int2 = 100;
|
|
OCR0A++;
|
|
}
|
|
|
|
ISR(INT3_vect) {
|
|
if (debounce_int3) return;
|
|
debounce_int3 = 100;
|
|
OCR0A--;
|
|
}
|
|
|
|
ISR(TIMER0_COMPA_vect) {
|
|
PORTF ^= 0b00000001;
|
|
}
|
|
|
|
void main() {
|
|
DDRF = 0b00000001;
|
|
DDRD = 0b00000000;
|
|
PORTD |= 0b00001100;
|
|
|
|
// EIMSK controls which ports can trigger interrupts
|
|
EIMSK |= _BV(INT2) | _BV(INT3);
|
|
// Trigger on falling edge on INT2 and INT3
|
|
EICRA |= _BV(ISC21) | _BV(ISC31);
|
|
|
|
TCCR0B |= _BV(CS00) | _BV(CS02); // clk/1024
|
|
TIMSK0 |= _BV(OCIE0A);
|
|
OCR0A = 0;
|
|
|
|
sei();
|
|
|
|
while(1) {
|
|
_delay_ms(10);
|
|
OCR0A++;
|
|
}
|
|
}
|