From: Keith Packard Date: Wed, 20 Dec 2017 00:56:33 +0000 (-0800) Subject: altos/attiny: Add ADC implementation X-Git-Tag: 1.8.4~1^2~3 X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=commitdiff_plain;h=99299986e194337b05ee81cfb7c4aa1cb9e9a74e;ds=sidebyside altos/attiny: Add ADC implementation It's primitive, but might serve to read ADC values. Untested. Signed-off-by: Keith Packard --- diff --git a/src/attiny/ao_adc_attiny.c b/src/attiny/ao_adc_attiny.c new file mode 100644 index 00000000..3a835d13 --- /dev/null +++ b/src/attiny/ao_adc_attiny.c @@ -0,0 +1,48 @@ +/* + * Copyright © 2017 Keith Packard + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + */ + +#include + +/* + * ATtiny ADC interface + */ + +uint16_t +ao_adc_read(uint8_t mux) +{ + uint8_t low, high; + + /* Set the mux */ + ADMUX = mux; + + /* Start conversion */ + ADCSRA = ((1 << ADEN) | + (1 << ADSC) | + (0 << ADATE) | + (0 << ADIF) | + (0 << ADIE) | + (0 << ADPS2) | + (0 << ADPS1) | + (0 << ADPS0)); + + /* Await conversion complete */ + while ((ADCSRA & (1 << ADSC)) != 0) + ; + + /* Read low first */ + low = ADCL; + high = ADCH; + + return (((uint16_t) high) << 8) | low; +} diff --git a/src/attiny/ao_arch.h b/src/attiny/ao_arch.h index 3a34f417..68f5702d 100644 --- a/src/attiny/ao_arch.h +++ b/src/attiny/ao_arch.h @@ -85,4 +85,7 @@ ao_eeprom_read(uint16_t addr, void *buf, uint16_t len); void ao_eeprom_write(uint16_t addr, void *buf, uint16_t len); +uint16_t +ao_adc_read(uint8_t mux); + #endif /* _AO_ARCH_H_ */