diff options
Diffstat (limited to 'lock/util.c')
| -rw-r--r-- | lock/util.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lock/util.c b/lock/util.c index 4f63625..ebcf9fe 100644 --- a/lock/util.c +++ b/lock/util.c @@ -21,3 +21,26 @@ void xor(const char *k, const char *s, char *d, uint8_t n) d[i] = s[i] ^ k[i]; } +/* Measure vcc by measuring known internal 1.1v bandgap + * reference voltage against AVCC. + * Place a 100nF bypass capacitor on AREF. + */ +uint16_t getvcc(void) +{ + uint16_t vcc; + + ADMUX |= (1 << REFS0); + ADMUX |= (1 << MUX3) | (1 << MUX2) | (1 << MUX1); + ADCSRA |= (1 << ADEN) | (1 << ADPS2) | (1 << ADPS0); + + // https://www.sciencetronics.com/greenphotons/?p=1521 + _delay_us(500); + + ADCSRA |= (1 << ADSC); + while (ADCSRA & (1 << ADSC)) + ; + vcc = (1100UL * 1023 / ADC); + + ADCSRA &= ~(1 << ADEN); + return vcc; +} |
