#include <stdio.h>
#include <stdlib.h>
+#include <stdbool.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/sleep.h>
#include <util/delay.h>
#include "haptic.h"
-volatile int xvar = 1;
-
-/* idle mode will wake up board and will
- * return PC after latest sleep_mode() call */
-EMPTY_INTERRUPT(SIG_COMPARATOR);
-
-ISR(TIM0_COMPA_vect)
-{
- xvar++;
+ISR(SIG_COMPARATOR)
+{
+ if (ACSR & (1 << ACO)) {
+ PORTB |= (1 << PB4);
+ } else {
+ PORTB &= ~(1 << PB4);
+ }
}
+EMPTY_INTERRUPT(TIM0_COMPA_vect);
+
static void switch_idle(void)
{
sei();
* When the bandgap reference is connected to the Analog Comparator (by setting the ACBG bit in ACSR). */
}
+static void set_ref_voltage(void)
+{
+ DDRB |= (1 << DDB1); /* set PB0 as output */
+ TCCR0A = TCCR0B = 0;
+ TCCR0A |= (1 << WGM01) | (1 << WGM00) | (1 << COM0B1);
+ TCCR0B |= (1 << CS00); /* clk/1024 prescaler */
+ OCR0B = 0x20; /* 25% duty cycle */
+ TCNT0 = 0;
+ TIMSK = (1 << OCIE0B); /* enable interrupts for overflow and compare */
+}
+
+static void config_comparator(void)
+{
+ ADCSRA = 0;
+ ADCSRB |= (1 << ACME); /* multiplex enable */
+
+ //ADMUX |= (1 << MUX0); /* ADC1 as negative input */
+
+ ACSR &= ~(1 << ACD); /* enable comparator */
+ //ACSR |= (1 << ACBG);
+ //ACSR |= (1 << ACIS1) | (1 << ACIS0);
+
+ DIDR0 |= (1 << AIN1D) | (1 << AIN0D);
+
+ ACSR |= (1 << ACIE); /* enable interrupts */
+}
+
int main(void)
{
init_board();
- xvar = 1;
+
+ DDRB |= (1 << DDB4);
+ //PORTB |= (1 << PB1);
+
cli();
- DDRB |= (1 << DDB0); /* set PB0 as output */
- TCCR0A = TCCR0B = 0;
- TCCR0A |= (1 << WGM01) | (1 << WGM00) | (1 << COM0A1);
- TCCR0B |= (1 << CS02) | (1 << CS00); /* clk/1024 prescaler */
- OCR0A = 0x7F; /* 50% duty cycle */
- TCNT0 = 0;
- TIMSK = (1 << OCIE0A); /* enable interrupts for overflow and compare */
+ //set_ref_voltage();
+ config_comparator();
sei();
while(1) {
_delay_ms(100);
- /* set LRA as sensor and switch to idle mode
- * check back-EMF of LRA: if treshold is surpassed
- * comparator intterupt is triggered */
-// set_lra_as_sensor();
-// switch_idle();
-//
-// /* board wakes up, set LRA as actuator and
-// * plays haptic effect */
-// set_lra_as_actuator();
-// play_haptic();
-
}
}