X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Favr%2Fao_adc_avr.c;h=a47703e576df875286dc4707b515666b4bcf2277;hb=f1328d22aab4378c4fb6f0c24dbee95948ca836c;hp=5afced74a936acc4e9e911e76f999a7d3accbb52;hpb=c32893ce79835a8f861d6ef414644c2ff9769ff6;p=fw%2Faltos diff --git a/src/avr/ao_adc_avr.c b/src/avr/ao_adc_avr.c index 5afced74..a47703e5 100644 --- a/src/avr/ao_adc_avr.c +++ b/src/avr/ao_adc_avr.c @@ -20,6 +20,7 @@ volatile __xdata struct ao_adc ao_adc_ring[AO_ADC_RING]; volatile __data uint8_t ao_adc_head; +#ifdef TELESCIENCE const uint8_t adc_channels[AO_LOG_TELESCIENCE_NUM_ADC] = { 0x00, 0x01, @@ -34,6 +35,23 @@ const uint8_t adc_channels[AO_LOG_TELESCIENCE_NUM_ADC] = { 0x24, 0x25, }; +#endif + +#ifdef TELEPYRO +const uint8_t adc_channels[AO_TELEPYRO_NUM_ADC] = { + 0x00, /* ADC0 v_batt */ + 0x04, /* ADC4 sense_a */ + 0x05, /* ADC5 sense_b */ + 0x06, /* ADC6 sense_c */ + 0x07, /* ADC7 sense_d */ + 0x23, /* ADC11 sense_e */ + 0x22, /* ADC10 sense_f */ + 0x21, /* ADC9 sense_g */ + 0x20, /* ADC8 sense_h */ +}; +#endif + +#define NUM_ADC (sizeof (adc_channels) / sizeof (adc_channels[0])) static uint8_t ao_adc_channel; @@ -48,7 +66,7 @@ static uint8_t ao_adc_channel; #define ADCSRB_INIT ((0 << ADHSM) | /* No high-speed mode */ \ (0 << ACME) | /* Some comparitor thing */ \ - (2 << ADTS0)) /* Free running mode (don't care) */ + (0 << ADTS0)) /* Free running mode (don't care) */ static void ao_adc_start(void) @@ -75,7 +93,7 @@ ISR(ADC_vect) value = ADCL; value |= (ADCH << 8); ao_adc_ring[ao_adc_head].adc[ao_adc_channel] = value; - if (++ao_adc_channel < AO_TELESCIENCE_NUM_ADC) + if (++ao_adc_channel < NUM_ADC) ao_adc_start(); else { ADCSRA = ADCSRA_INIT; @@ -107,9 +125,26 @@ ao_adc_dump(void) __reentrant static __xdata struct ao_adc packet; uint8_t i; ao_adc_get(&packet); + printf("ADMUX: %02x\n", ADMUX); + printf("ADCSRA: %02x\n", ADCSRA); + printf("ADCSRB: %02x\n", ADCSRB); + printf("DIDR0: %02x\n", DIDR0); + printf("DIDR2: %02x\n", DIDR2); + printf("PORTF: %02x\n", PORTF); + printf("DDRF: %02x\n", DDRF); + printf("PINF: %02x\n", PINF); printf("tick: %5u", packet.tick); - for (i = 0; i < AO_TELESCIENCE_NUM_ADC; i++) + for (i = 0; i < NUM_ADC; i++) printf (" %2d: %5u", i, packet.adc[i]); + + + ADMUX = 0x60; + ADCSRB = 0x00; + ADCSRA = 0xc6; + while (ADCSRA & 0x40) + ; + printf ("ADCL: %02x\n", ADCL); + printf ("ADCH: %02x\n", ADCH); printf ("\n"); }