diff options
| author | Sadeep Madurange <sadeep@asciimx.com> | 2025-05-01 14:18:31 +0800 |
|---|---|---|
| committer | Sadeep Madurange <sadeep@asciimx.com> | 2025-05-01 14:18:31 +0800 |
| commit | a1de6ebc054c84e1f27b21998cb017ae38151a2e (patch) | |
| tree | e59592281e8f81fe4e5e6aa4586fe1e796b14176 /lock/util.c | |
| parent | 57e9d1a5c00dc7dc5cf3149c35a8004b5f7aab7f (diff) | |
| download | smart-home-a1de6ebc054c84e1f27b21998cb017ae38151a2e.tar.gz | |
Check vcc and add LEDs for lock/unlock.
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; +} |
