Цитата(Bogila Anton @ Aug 10 2009, 17:38)

#define ADC_VREF_TYPE 0x00 //(что значит эта строка?)
В совокупности со строчкой:
Цитата
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
Значит, что VCC used as analog reference.
Цитата
#define VREF 4900 //mV (не знаю нодо ли это, или как правильно?)
Измерить тестером VCC и указать реальное значение VCC в миливольтах.
Цитата
unsigned int VCC, kv=1.84; //(какой тип данных следует применять?)
для констант вида 1.84 - float, но в tiny13 float не влезет, следовательно unsigned short и поменять логику вычислений на целочисленную.
Цитата
Это правильно?
Работать не будет. У вас в кучу смешаны вольты и миливольты, плюс как для измерения VCC выбран неправильный референс.
Если требуется измерить Vcc, то подход на тини13 д.б. такой:
выбрать Internal Voltage Reference 1.1V (ADMUX bit REFS0 = 1).
На вход канала PB2 через делитель 1/5 подавать VCC.
Результат АЦП преобразовать в миливольты по нехитрой формуле:
VCC = ADC * 43 / 8;
или
VCC = ADC * 43 >> 3;
Как получились цифры 43 и 8:
Vbgref = 1.1V (из даташита).
Vin (при Vcc=5V) = 1V
5000mv = k * ADC;
ADC (при Vcc=5V) = 1023 / 1.1 = 930.
k = 5000 / 930 = 5.3763
Чтобы не сильно потерять в точности при целочисленной арифметике, домножаем k на 8 с округлением до целого:
K = 8k = 43.010 (43 после округления)
С таким K, результат будет в 1/8 миливольта. Приводим его обратно к миливольтам делением на 8 (эквивалентно сдвигу результата вправо на 3 разряда) и имеем то, что имеем:
VCC = ADC * 43 >> 3;