ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
230265 Топик полностью
tvi (22.12.2010 21:34 - 23.12.2010 01:05, просмотров: 231) ответил MBedder на Ну, на AVRASM 16*16=32 - это аж целая дюжина строчек. По ссылкам - вся тема с примерами и прибаутками -->
Вот что у меня получилось. Подобрал постоянные резисторы входного делителя таким образом чтобы при 30в на вход АЦП подавалось напряжение чуть меньше Vref. Подаю напряжение (у меня был под рукой источник 29.2в) и запускаю АЦП, в итоге получилась цифра 960. Далее нахожу коэффициент для расчетов KU=(U * 10 * 65536)/ADC = 29.2*10*65536/960=19934 Записываю KU в EEPROM. Для преобразования замеров данные ADC умножаем на этот коэффициент и делим на 65536 (отбрасывая 2 младших байта произведения) Для повышения точности округления я все-таки использую и младшие байты, только не уверен что делаю это правильно. Ниже приведу мой код, он подробно прокомментирован, поэтому трудностей с пониманием моего замысла не должно быть. CalcResult: ldi t0,KU ; записываем во временный регистр адрес KU readeew t0,ain1,ain0 ; читаем из EEPROM коэффициент KU (ain1:ain0) mov aout1,adw1 ; и умножаем его на результат ADC, mov aout0,adw0 ; где adw1 - ADCH, adw0 - ADCL rcall mpy16u ; умножаем ain1:ain0 на aout1:aout0 ; произведение - aout3:aout2:aout1:aout0 clr t0 ; запишем ноль во вспомогательный регистр rol aout0 ; результат округляем - начнем с младшего байта adc aout1,t0 ; если есть перенос, добавим 1 к следующему rol aout1 ; adc aout2,t0 ; если есть перенос, добавим единицу adc aout3,t0 ; к старшим байтам mov adw1,aout3 ; для дальнейших расчетов mov adw0,aout2 ; берем только 2 ст.байта mov ain0,adw0 ; преобразование в двоично-десятичный вид mov ain1,adw1 ; вход ain1:ain0 rcall bin2BCD16 ; выход aout2:aout1:aout0 ; Вывод на индикатор Здесь я уже результат вывожу разделив на 10, путем постановки в нужном месте разделительной точки, если получилось 292, то на дисплее будет 29.2 Все вроде бы нормально работает, но может быть где то все-таки я неверно рассуждаю, посмотрите, пожалуйста.