|
|
  |
Цифровой вольтметр-амперметр-ваттметр на AVR для бытовой сети, некоторые вопросы |
|
|
|
Apr 1 2011, 11:08
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(777777 @ Apr 1 2011, 10:56)  А, кстати, почему умножение занимает так много? Может ты в плавающей точке вычисления делаешь? Нет, умножение было целочисленным. А много потому, что нет аппаратного умножителя, а програмно получается так много.
Сообщение отредактировал SHUR1K - Apr 1 2011, 11:14
|
|
|
|
|
Apr 1 2011, 12:46
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(Stanislav_S @ Apr 1 2011, 14:33)  Страхи какие-то у вас  Повсеместно использую целочисленное умножение типа 16 х 16 или 32 * 32, и никаких таких мегаразмеров программы не получается, как же так? 16x16 и 32х32 - это совсем другое. Умножение на число, которое является степенью двойки - это просто сдвиг влево на соответствующие число позиций (степень двойки). А Вы попробуйте умножить на 11 или 13 и посмотрите как вырастет hex
|
|
|
|
|
Apr 1 2011, 13:03
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(SHUR1K @ Apr 1 2011, 16:46)  16x16 и 32х32 - это совсем другое. Умножение на число, которое является степенью двойки - это просто сдвиг влево на соответствующие число позиций (степень двойки). А Вы попробуйте умножить на 11 или 13 и посмотрите как вырастет hex Ну и на сколько? Код ;************************************************* ;* ;;/умножение Беззнаковых 16х16;;* * ;************************************************* Mul16x16: mul temp,rab mov R13,LoMul ;| здесь AH*BH mov R14,MeMul mul temp1,rab1 mov R11,LoMul ;| здесь AL*BL mov R12,MeMul mul temp,rab1 ;| здесь AH*BL add R12,LoMul adc R13,MeMul adc R14,HiMUL mul temp1,rab ;| здесь BH*AL add R12,LoMul adc R13,MeMul adc R14,HiMUL ret
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Apr 1 2011, 18:04
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(rx3apf @ Apr 1 2011, 18:10)  Это что, первоапрельский прикол такой ? 16x16 это, простите, не умножение числа 16 на число 16, а перемножение двух произвольных 16-битных чисел. В один килобайт влезают четыре действия в плавучке и еще место останется, а уж целочисленное умножение при отсутствии команды mul - три-четыре десятка команд (меньше сотни байтов). Прошу прощения, тупанул. Перепроверил у себя, при использовании в одном выражении деления и умножения код вырастает значительно. Если делать это не в одном выражении, то прирост действительно не так велик.
|
|
|
|
|
Apr 3 2011, 14:35
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(Stanislav_S @ Apr 2 2011, 14:08)  Хм, что то у вас с компилятором, добавил деление в формуле, прирост чуть больше чем при умножении, что то у вас не так  Проверьте настройки компилятора. Нет, не с компилятором :-). Просто если использовать в одном выражении умножении и деление, ну например *3/2, то получается *1.5, а это уже дробное число, вот и растет код безбожно.
|
|
|
|
|
Apr 3 2011, 15:30
|

извечный пессимист
    
Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125

|
Цитата(SHUR1K @ Apr 3 2011, 18:35)  Нет, не с компилятором :-). Просто если использовать в одном выражении умножении и деление, ну например *3/2, то получается *1.5, а это уже дробное число, вот и растет код безбожно. ?? мы говорили о целочисленном делении, разве нет? Если вы говорите о плавучке, тогда да, код раздувается на байт 800 примерно, но! Мы ведь говорили о целых числах
--------------------
Slaves are those of this world Given freedom to lay chains upon The Master The wolf is no longer free Release the chains and come for me
|
|
|
|
|
Apr 4 2011, 05:39
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 6-04-10
Из: Киев
Пользователь №: 56 447

|
Цитата(Stanislav_S @ Apr 3 2011, 17:30)  ?? мы говорили о целочисленном делении, разве нет? Если вы говорите о плавучке, тогда да, код раздувается на байт 800 примерно, но! Мы ведь говорили о целых числах  абсолютно правильно, мы говорили о целых числах. Просто я не обратил внимание на то, что при таких раскладах получаются дробные числа, чем ввел и себя и всех присутствующих в заблуждение. Так что, прошу прощения.
|
|
|
|
|
Apr 4 2011, 08:01
|
Участник
  
Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695

|
Цитата(SHUR1K @ Apr 4 2011, 14:39)  ...Просто если использовать в одном выражении умножении и деление, ну например *3/2, то получается *1.5, а это уже дробное число, вот и растет код безбожно... абсолютно правильно, мы говорили о целых числах. Просто я не обратил внимание на то, что при таких раскладах получаются дробные числа, чем ввел и себя и всех присутствующих в заблуждение. Так что, прошу прощения. *3/2 это целочисленная арифметика, а вот *1.5 - уже с плавающей точкой. В первом случае никаких дробный чисел не будет, например 1*3/2=1, а не 1.5, как во втором случае.
|
|
|
|
|
Apr 6 2011, 07:35
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
Разрешите вмешаться в интересную беседу о плавающей точке  . Мне пока все равно, сколько оно места занимает. В обработчике прерывания суммы квадратов я считаю целочисленно, а потом, когда цикл измерений (20 мс - пероид 50 Гц) завершится, все дальнейшие расчеты с плавающей точкой. Проц у меня сейчас ATMega16, на данный момент флэшки занято 47-48% - поэтому размер кода в настоящий момент совершенно не жмет  . Когда все расчеты будут готовы, тогда займусь оптимизацией. Калибровку я сделал, вольтметр показывает нормально. Возникли вопросы о канале измерения тока. Собрана схема - вложено. ОУ питаются от +5в и земли. Питание однополярное. Когда ТТ (токовый транс) вообще отсутствует (он у меня подключается проводками через клеммник) - левая нога R4 висит в воздухе, то на выходе ОУ я вижу свое напряжение смещения (2.18в). Вроде нормально. Когда я подключаю ТТ без нагрузки (или просто закорачиваю пинцетом вход R4 в землю), то сразу вижу на выходе ОУ 3.72в. Отнимаю смещение 3.72-2.18=1.54в. Откуда берутся эти 1.54в - я не понимаю  . То же самое я наблюдаю и на канале напряжения, если я отключаю вход с обмотки и закорачиваю на землю. Подключил нагрузкой свой паяльник 25W. На выходе транса вольтметр показал 0.035в= 35мВ. В пересчете это 0.1176А. Амперметр показывает 0.11-0.12А. Т.е. сам ТТ работает нормально. Но ОУ это напряжение совершенно не замечает - на выходе те самые 3.72в. Наверное оно слишком мало. ОУ ведь неидеален  . Вот я и думаю - может организовать ему 2-полярное питание - вместо земли кинуть небольшое отриц. напряжение. Такая возможность есть - на трансе БП есть ср. точка. Или взять другой ОУ. Есть у меня LF353. Спасибо.
Сообщение отредактировал hd44780 - Apr 6 2011, 07:38
Эскизы прикрепленных изображений
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
Apr 6 2011, 08:56
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(hd44780 @ Apr 6 2011, 11:35)  Когда ТТ (токовый транс) вообще отсутствует (он у меня подключается проводками через клеммник) - левая нога R4 висит в воздухе, то на выходе ОУ я вижу свое напряжение смещения (2.18в). Вроде нормально. Когда я подключаю ТТ без нагрузки (или просто закорачиваю пинцетом вход R4 в землю), то сразу вижу на выходе ОУ 3.72в. Отнимаю смещение 3.72-2.18=1.54в. Откуда берутся эти 1.54в - я не понимаю  . Ваше непонимание... Это же не инструментальный (дифференциальный) усилитель, а ОУ. На самом деле, если резисторы, которые 10к были бы равны, то на выходе должно было быть удвоенное - 2.18*2. Это потому, что на входах должно быть одинаковое напряжение. Кроме всего прочего у Вас неправильно сделан канал измерения напряжения - входное сопротиление у инверитрующей схемы не бесконечность, а Ваш переменный резистор (10к) войдет сложным образом в коэффициент усиления. Еще... ток в трансформаторы потечет, но небольшой...
|
|
|
|
|
Apr 6 2011, 09:09
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 26-08-05
Из: Донецк, ДНР
Пользователь №: 7 980

|
То что резисторы по факту разные я понимаю. Собственно меня висящие входы мало интересуют. В готовом устройстве их не будет. Меня больше волнует - надо ли заводить на ОУ отриц. питание, чтобы он мог работать с малыми сигналами на входе? Цитата(Tanya @ Apr 6 2011, 10:56)  у Вас неправильно сделан канал измерения напряжения А как правильно сделать? Разделительные кондеры те поставить между делителем на трансе и резистором ОУ?
--------------------
Чтобы возить такого пассажира, необходим лимузин другого класса. (с) Мария Эдуарда
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|