shur1k 0 1 апреля, 2011 Опубликовано 1 апреля, 2011 (изменено) · Жалоба А, кстати, почему умножение занимает так много? Может ты в плавающей точке вычисления делаешь? Нет, умножение было целочисленным. А много потому, что нет аппаратного умножителя, а програмно получается так много. Изменено 1 апреля, 2011 пользователем SHUR1K Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 1 апреля, 2011 Опубликовано 1 апреля, 2011 · Жалоба Нет, умножение было целочисленным. А много потому, что нет аппаратного умножителя, а програмно получается так много. Страхи какие-то у вас :) Повсеместно использую целочисленное умножение типа 16 х 16 или 32 * 32, и никаких таких мегаразмеров программы не получается, как же так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shur1k 0 1 апреля, 2011 Опубликовано 1 апреля, 2011 · Жалоба Страхи какие-то у вас :) Повсеместно использую целочисленное умножение типа 16 х 16 или 32 * 32, и никаких таких мегаразмеров программы не получается, как же так? 16x16 и 32х32 - это совсем другое. Умножение на число, которое является степенью двойки - это просто сдвиг влево на соответствующие число позиций (степень двойки). А Вы попробуйте умножить на 11 или 13 и посмотрите как вырастет hex Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 1 апреля, 2011 Опубликовано 1 апреля, 2011 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 1 апреля, 2011 Опубликовано 1 апреля, 2011 · Жалоба 16x16 и 32х32 - это совсем другое. Умножение на число, которое является степенью двойки - это просто сдвиг влево на соответствующие число позиций (степень двойки). А Вы попробуйте умножить на 11 или 13 и посмотрите как вырастет hex Проверил, умножил 1000 на 25, программа выросла на 80 байт, но это еще с учетом вызова функции itoa(), и где обещанные килобайты? :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 1 апреля, 2011 Опубликовано 1 апреля, 2011 · Жалоба 16x16 и 32х32 - это совсем другое. Умножение на число, которое является степенью двойки - это просто сдвиг влево на соответствующие число позиций (степень двойки). А Вы попробуйте умножить на 11 или 13 и посмотрите как вырастет hex Это что, первоапрельский прикол такой ? 16x16 это, простите, не умножение числа 16 на число 16, а перемножение двух произвольных 16-битных чисел. В один килобайт влезают четыре действия в плавучке и еще место останется, а уж целочисленное умножение при отсутствии команды mul - три-четыре десятка команд (меньше сотни байтов). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shur1k 0 1 апреля, 2011 Опубликовано 1 апреля, 2011 · Жалоба Это что, первоапрельский прикол такой ? 16x16 это, простите, не умножение числа 16 на число 16, а перемножение двух произвольных 16-битных чисел. В один килобайт влезают четыре действия в плавучке и еще место останется, а уж целочисленное умножение при отсутствии команды mul - три-четыре десятка команд (меньше сотни байтов). Прошу прощения, тупанул. Перепроверил у себя, при использовании в одном выражении деления и умножения код вырастает значительно. Если делать это не в одном выражении, то прирост действительно не так велик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 2 апреля, 2011 Опубликовано 2 апреля, 2011 · Жалоба Прошу прощения, тупанул. Перепроверил у себя, при использовании в одном выражении деления и умножения код вырастает значительно. Если делать это не в одном выражении, то прирост действительно не так велик. Хм, что то у вас с компилятором, добавил деление в формуле, прирост чуть больше чем при умножении, что то у вас не так :) Проверьте настройки компилятора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shur1k 0 3 апреля, 2011 Опубликовано 3 апреля, 2011 · Жалоба Хм, что то у вас с компилятором, добавил деление в формуле, прирост чуть больше чем при умножении, что то у вас не так :) Проверьте настройки компилятора. Нет, не с компилятором :-). Просто если использовать в одном выражении умножении и деление, ну например *3/2, то получается *1.5, а это уже дробное число, вот и растет код безбожно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Stanislav_S 0 3 апреля, 2011 Опубликовано 3 апреля, 2011 · Жалоба Нет, не с компилятором :-). Просто если использовать в одном выражении умножении и деление, ну например *3/2, то получается *1.5, а это уже дробное число, вот и растет код безбожно. ?? мы говорили о целочисленном делении, разве нет? Если вы говорите о плавучке, тогда да, код раздувается на байт 800 примерно, но! Мы ведь говорили о целых числах :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shur1k 0 4 апреля, 2011 Опубликовано 4 апреля, 2011 · Жалоба ?? мы говорили о целочисленном делении, разве нет? Если вы говорите о плавучке, тогда да, код раздувается на байт 800 примерно, но! Мы ведь говорили о целых числах :) абсолютно правильно, мы говорили о целых числах. Просто я не обратил внимание на то, что при таких раскладах получаются дробные числа, чем ввел и себя и всех присутствующих в заблуждение. Так что, прошу прощения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ae_ 2 4 апреля, 2011 Опубликовано 4 апреля, 2011 · Жалоба ...Просто если использовать в одном выражении умножении и деление, ну например *3/2, то получается *1.5, а это уже дробное число, вот и растет код безбожно... абсолютно правильно, мы говорили о целых числах. Просто я не обратил внимание на то, что при таких раскладах получаются дробные числа, чем ввел и себя и всех присутствующих в заблуждение. Так что, прошу прощения. *3/2 это целочисленная арифметика, а вот *1.5 - уже с плавающей точкой. В первом случае никаких дробный чисел не будет, например 1*3/2=1, а не 1.5, как во втором случае. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 6 апреля, 2011 Опубликовано 6 апреля, 2011 (изменено) · Жалоба Разрешите вмешаться в интересную беседу о плавающей точке :rolleyes: . Мне пока все равно, сколько оно места занимает. В обработчике прерывания суммы квадратов я считаю целочисленно, а потом, когда цикл измерений (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. Спасибо. Изменено 6 апреля, 2011 пользователем hd44780 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 6 апреля, 2011 Опубликовано 6 апреля, 2011 · Жалоба Когда ТТ (токовый транс) вообще отсутствует (он у меня подключается проводками через клеммник) - левая нога R4 висит в воздухе, то на выходе ОУ я вижу свое напряжение смещения (2.18в). Вроде нормально. Когда я подключаю ТТ без нагрузки (или просто закорачиваю пинцетом вход R4 в землю), то сразу вижу на выходе ОУ 3.72в. Отнимаю смещение 3.72-2.18=1.54в. Откуда берутся эти 1.54в - я не понимаю . Ваше непонимание... Это же не инструментальный (дифференциальный) усилитель, а ОУ. На самом деле, если резисторы, которые 10к были бы равны, то на выходе должно было быть удвоенное - 2.18*2. Это потому, что на входах должно быть одинаковое напряжение. Кроме всего прочего у Вас неправильно сделан канал измерения напряжения - входное сопротиление у инверитрующей схемы не бесконечность, а Ваш переменный резистор (10к) войдет сложным образом в коэффициент усиления. Еще... ток в трансформаторы потечет, но небольшой... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hd44780 0 6 апреля, 2011 Опубликовано 6 апреля, 2011 · Жалоба То что резисторы по факту разные я понимаю. Собственно меня висящие входы мало интересуют. В готовом устройстве их не будет. Меня больше волнует - надо ли заводить на ОУ отриц. питание, чтобы он мог работать с малыми сигналами на входе? у Вас неправильно сделан канал измерения напряжения А как правильно сделать? Разделительные кондеры те поставить между делителем на трансе и резистором ОУ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться