00001
00059 #include "avr_compiler.h"
00060 #include "ac_driver.h"
00061
00062
00063 #define AC ACA
00064
00065
00066 volatile bool above;
00067
00068
00069 int main(void)
00070 {
00071
00072 AC_EnableWindowMode(&AC, AC_WINTMODE_ABOVE_gc, AC_WINTLVL_LO_gc);
00073 above = true;
00074
00075
00076 AC_ConfigMUX(&AC, ANALOG_COMPARATOR0, AC_MUXPOS_PIN0_gc, AC_MUXNEG_PIN1_gc);
00077 AC_ConfigMUX(&AC, ANALOG_COMPARATOR1, AC_MUXPOS_PIN0_gc, AC_MUXNEG_PIN3_gc);
00078
00079
00080
00081 AC_Enable(&AC, ANALOG_COMPARATOR0, false);
00082 AC_Enable(&AC, ANALOG_COMPARATOR1, false);
00083
00084
00085
00086 PORTD.DIRSET = 0xFF;
00087 PORTD.OUT = 0xFF;
00088
00089
00090 PMIC.CTRL |= PMIC_LOLVLEX_bm;
00091
00092
00093 sei();
00094
00095 do {
00096
00097
00098 if( AC_GetWindowState(&AC) == AC_WSTATE_ABOVE_gc){
00099 PORTD.OUT = 0xFB;
00100 }else if( AC_GetWindowState(&AC) == AC_WSTATE_INSIDE_gc){
00101 PORTD.OUT = 0xFD;
00102 }else if( AC_GetWindowState(&AC) == AC_WSTATE_BELOW_gc){
00103 PORTD.OUT = 0xFE;
00104 }
00105
00106 } while(true);
00107 }
00108
00109
00113 ISR(ACA_ACW_vect)
00114 {
00115 if(above){
00116
00117 AC_EnableWindowMode(&AC, AC_WINTMODE_BELOW_gc, AC_WINTLVL_LO_gc);
00118 above = false;
00119 }else{
00120
00121 AC_EnableWindowMode(&AC, AC_WINTMODE_ABOVE_gc, AC_WINTLVL_LO_gc);
00122 above = true;
00123 }
00124 }