Гудвин, волшебник (11.10.2011 21:42, просмотров: 146) ответил fk0 на Хочется измерить напряжение на батарейке. Как? (делитель либо её разряжает, либо гигаомные резисторы -- что с ними наизмеряешь). Либо подключать делитель транзистором, может есть более специальные решения?
Для atmega168 без всяческих внешних элементов:
char test_battery()
{
#define ADC_VREF_TYPE 0x40 // ADC Voltage Reference: AVCC pin
#define ADC_CHANNEL 0x0e // ADC канал 1.1В (Vbg)
// 2.0V - 546
// 2.2V - 496
// 2.4V - 455
// 3.0V - 360
// 3.3V - 328
// ADC initialization
// ADC Clock frequency: 62,500 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: None
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
// ADC4: On, ADC5: On
signed char itog;
int temp;
DIDR0=0x00;
ADMUX=ADC_VREF_TYPE;
ADCSRA=0x86;
ADMUX=ADC_CHANNEL |ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10; // результаты первого преобразования пропускаем
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
temp = ADCW;
ADCSRA=0x00; // выключим ADC
ADMUX=0;
itog = (420-temp)/15+1; // масштабирование 3.0 - 2.6 в (1-4 деления) - для печатей с радиомодулем RR8
return itog;
}