00001
00051 #include "avr_compiler.h"
00052 #include "qdec_driver.h"
00053 #include "qdec_signal_generator.h"
00054
00058
00059
00061 uint8_t freq = 60;
00062
00064 bool dir = 0;
00065
00069 #define CLOCK_DIV_bm TC_CLKSEL_DIV64_gc
00070 #define CLOCK_DIV 64
00071
00073 uint8_t lineCount = 30;
00074
00076 uint16_t captureFreq = 0;
00077 uint16_t calcFreq = 0;
00078 uint16_t calcRPM = 0;
00079
00099 int main( void )
00100 {
00101
00102 PORTC.DIRSET = 0xFF;
00103
00104
00105
00106
00107
00108
00109
00110
00111 QDEC_Total_Setup(&PORTD,
00112 0,
00113 false,
00114 0,
00115 EVSYS_CHMUX_PORTD_PIN0_gc,
00116 false,
00117 EVSYS_QDIRM_00_gc,
00118 &TCC0,
00119 TC_EVSEL_CH0_gc,
00120 lineCount);
00121
00122
00123 QDEC_TC_Freq_Setup(&TCD0, TC_EVSEL_CH2_gc, EVSYS_CHMUX_PORTD_PIN0_gc, CLOCK_DIV_bm);
00124
00125 #ifdef GENERATE_TEST_SIGNAL
00126
00127 generate_qdec_signal(&PORTE, lineCount, freq, dir);
00128
00129
00130 PMIC.CTRL |= PMIC_LOLVLEN_bm;
00131
00132
00133 sei();
00134 #endif
00135
00136
00137 while (1) {
00138
00139 if ((TCD0.INTFLAGS & TC0_CCAIF_bm) != 0) {
00140
00141
00142
00143
00144
00145 calcFreq = (F_CPU / CLOCK_DIV) /
00146 ((GetCaptureValue(TCD0) & 0xFFFC) * lineCount );
00147 calcRPM = calcFreq*60;
00148 PORTC.OUT = ~(calcFreq);
00149 }
00150 }
00151 }