Бьюсь значит вот с каким шайтаном.
Сделал милливольтиметр на ATTiny13A. Частота 9.4МГц. Хочу вывести на 4значный семисегментный индикатор. Вывод динамический по прерыванию таймера, работает прекрасно. В прерывании АЦП происходит преобразование условных единиц АЦП в число и разбивка на декады, чтобы их потом выводило прерывание таймера. Все рабоает. Проверял выводом регистра АЦП. Выводит значение от 0 до 1023.
Первый вопрос.
Настроил преобразование АЦП на минимум, 73.438кГц. Значения на дисплее дергаются. Как сделать еще меньше? Например 2..3 преобразования в секунду.
Второй вопрос.
Преобразование кода сделал так
Код: Выделить всё
iVolts = 5*adc_data[0]-(24*adc_data[0]/1024)*5;
cDigit[0][0] = ~cSeg[((iVolts/1000)%10)];
cDigit[1][0] = ~cSeg[((iVolts/100 )%10)];
cDigit[2][0] = ~cSeg[((iVolts/10 )%10)];
cDigit[3][0] = ~cSeg[((iVolts/1 )%10)];Если я просто делаю так
Код: Выделить всё
iVolts = 5000*adc_data[0]/1024Есть ли какой то аналог функции MulDiv?
Как это нормально сделать на ATTiny?
Расшифровывать эту писанину думаю не нужно?
cDigit[0][0] - это массив на 4 декады для того чтобы потом прерывание таймера брало оттуда и выводило.
cSeg - это массив с кодами семисегментного индикатора.
Просьба отослать к существующей ветке, если такая есть.




