root / branches / analog / code / projects / template / main.c @ 1454
History | View | Annotate | Download (1.3 KB)
| 1 | #include <dragonfly_lib.h> |
|---|---|
| 2 | |
| 3 | int count;
|
| 4 | |
| 5 | unsigned int testf(int); |
| 6 | void setf(int); |
| 7 | |
| 8 | int main(void) |
| 9 | {
|
| 10 | int loops;
|
| 11 | unsigned int val; |
| 12 | char i = 0 | _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); |
| 13 | |
| 14 | sei(); |
| 15 | |
| 16 | analog_init(ADC_STOP); |
| 17 | usb_init(); |
| 18 | range_init(); |
| 19 | |
| 20 | usb_puts("STARTING ANALOG CLOCK SCALE TEST\n\r");
|
| 21 | usb_puts("ADC10\tACD8\tCount\n\r");
|
| 22 | |
| 23 | for(;i >= 0; i--) { |
| 24 | ADCSRA &= ~7;
|
| 25 | ADCSRA |= i; |
| 26 | usb_puts("\n\rClock Prescalar: 2^");
|
| 27 | usb_puti(i); |
| 28 | usb_puts("\n\r");
|
| 29 | |
| 30 | for(loops = 0; loops < 10; loops++) { |
| 31 | val = testf(WHEEL_PORT); |
| 32 | usb_puti(val); |
| 33 | usb_puts("\t");
|
| 34 | usb_puti(val>>2);
|
| 35 | usb_puts("\t");
|
| 36 | usb_puti(count); |
| 37 | usb_puts("\n\r");
|
| 38 | delay_ms(500);
|
| 39 | } |
| 40 | } |
| 41 | |
| 42 | usb_puts("done");
|
| 43 | |
| 44 | return 0; |
| 45 | } |
| 46 | |
| 47 | unsigned int testf(int which) { |
| 48 | int adc_h;
|
| 49 | int adc_l;
|
| 50 | |
| 51 | // Let any previous conversion finish
|
| 52 | while (ADCSRA & _BV(ADSC));
|
| 53 | |
| 54 | if(which < EXT_MUX) {
|
| 55 | ADMUX = ADMUX_OPT + which; |
| 56 | } else {
|
| 57 | ADMUX = ADMUX_OPT + EXT_MUX; |
| 58 | setf(which - 8);
|
| 59 | } |
| 60 | |
| 61 | // Start the conversion
|
| 62 | ADCSRA |= _BV(ADSC); |
| 63 | |
| 64 | count = 0;
|
| 65 | |
| 66 | // Wait for the conversion to finish
|
| 67 | while (ADCSRA & _BV(ADSC)) {
|
| 68 | count++; |
| 69 | } |
| 70 | |
| 71 | adc_l = ADCL; |
| 72 | adc_h = ADCH; |
| 73 | |
| 74 | return ((adc_h << 2) | (adc_l >> 6)); |
| 75 | } |
| 76 | |
| 77 | void setf(int which) { |
| 78 | // mask so only proper bits are possible.
|
| 79 | PORTG = (PORTG & 0xE3) | ((which & 0x03) << 3) | (which & 0x04); |
| 80 | } |