Автор |
Сообщение |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
красиво. попробую обязательно.
красиво. попробую обязательно.
|
|
|
 |
Добавлено: 06 авг 2012, 23:27 |
|
|
 |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
[quote="avtonomki"] Построил график .Потом по точкам нашел формулу прямой y=0.83*x+0.8 или y=0.82*x+0.9 ,как то так. Дело за математикой ..[/quote]
С математикой в АБ несложно. Если нет ограничения по времени, то лучше использовать стандартные подпрограммы. Скажем, ваш случай y=0.83*x+0.8. Чтобы избавиться от дробных чисел, умножим и разделим, скажем, на 256. Почему 256 – понятно, деление на 256 легко сделать – просто отбросить младший байт. Получаем формулу y=256*0.83*x+0.8*256 или y=212*x+205 А для умножения надо использовать стандартную подпрограмму умножения. Получаем искомую программу:
Umnojenie(x,212) Itog_Umnojenia+205 [@Itog_Umnojenia+1] -> [@Rezultat+0] [@Itog_Umnojenia+2] -> [@Rezultat+1]
Сделаю пояснения. Umnojenie(x,212) – стандартная подпрограмма с параметрами умножения 2-хбайтных чисел (они в скобках), ее надо подключить к основной программе. Переменную «х» лучше, конечно, назвать по другому, поскольку название «х» может с чем-нибудь совпасть. Результат умножения будет в 4-хбайтной переменной Itog_Umnojenia. В 2-хбайтной переменной Rezultat будет искомое значение. При переброске просто отбрасывается младший байт Itog_Umnojenia, что является делением на 256. Если 2 байт переменной Rezultat недостаточно, можно сделать ее 3-хбайтной, это уже детали. Все просто, ваша программа на АБ пишется за несколько минут.
|
|
|
 |
Добавлено: 06 авг 2012, 22:40 |
|
|
 |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
[quote="avtonomki"] Где бы поподробней узнать.. Я просто вводил поправку в результаты и это было не просто.[/quote] Подробнее маловероятно, что где-то можно прочитать про такие приёмы. Можно у меня спросить ;) Общий смысл такой. Создаёте эталонный сигнал который проходит все узлы вашей схемы. Допустим в вашем случае. от 10В до 22В. Значит делаете стенд. 16разрядный цап ИОН пару ОУ. Привязываете точки начала и конца шкалы ЦАП на уровне 10 и 22. при 16 разрядах это будет (22-10)/65,535=0.000183108262760357061112382696269В на ступеньку. Проходите все уровни вашего сигнала и смотрите что выдаёт АЦП. Строите таблицу входной сигнал-значение с АЦП. По результату прогона по шкале сохраняете и пользуетесь в предварительной обработке данных АЦП.
В вашем случае наверно имеет смысл сделать управление стендом на отдельном МК. Ваша платка допустим переходит в отладочный режим по замыкании перемычки. Связывается со стендом. И посылает ему команды вида (код цап). Сам мк целевой платы зная напряжение поданное на вход и результат преобразование АЦП сохраняет табличку в память программ. Вот такая вот система. Учитывая что задача у вас учебная. + несколько балов вам гарантированно. Тк достигается автоматическая калибровка партии изделий. И необходимость метрологической поддержки сильно упрощается. По сути поверять нужно лишь сам стенд. а все изделия автоматически калибруются по стенду. И обеспечивается единство системы измерения при массовом производстве [i]Во загнул то :mrgreen: [/i]
|
|
|
 |
Добавлено: 20 мар 2012, 16:12 |
|
|
 |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
Вложения: |

уравнение прямой.JPG [ 25.33 КБ | Просмотров: 6141 ]
|
[quote]Мне кажется табличный метод удобнее. Из-за возможности автоматизированной калибровки. Поставил на стенд. Нажал кнопку и Мк сам себя откалибровал. И записал. Те учитывая индивидуальные особенности. (кривые резисторы в цепях оу. Ошибки ИОН. нелинейность АЦП. ИТД )[/quote] Где бы поподробней узнать.. Я просто вводил поправку в результаты и это было не просто.
вот сделал себе шпаргалку
|
|
|
 |
Добавлено: 19 мар 2012, 16:22 |
|
|
 |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
[quote="avtonomki"] сейчас расхождение в диапазоне от 10 до 30 вольт 0.1-0.3 вольта и это без табличных поправок. еще раз спасибо.[/quote] Поздравляю!. Мне кажется табличный метод удобнее. Из-за возможности автоматизированной калибровки. Поставил на стенд. Нажал кнопку и Мк сам себя откалибровал. И записал. Те учитывая индивидуальные особенности. (кривые резисторы в цепях оу. Ошибки ИОН. нелинейность АЦП. ИТД ) Те получается намного точнее. ;) Хотя никто не мешает заставить автоматически подбирать коэффициенты в формулы пересчёта. Что удобнее выбирать разработчику :-)
|
|
|
 |
Добавлено: 18 мар 2012, 22:36 |
|
|
 |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
Было бы интересней посмотреть алгоритм. 
Было бы интересней посмотреть алгоритм. ;)
|
|
|
 |
Добавлено: 18 мар 2012, 18:20 |
|
|
 |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
докладываю о результатах исходная y=0.83*x+0.8 ( уравнение прямой которую имею по факту) все получилось вот в таком виде y=64*x+16*x+2*x+x +800 : 100 сейчас расхождение в диапазоне от 10 до 30 вольт 0.1-0.3 вольта и это без табличных поправок. еще раз спасибо.
докладываю о результатах исходная y=0.83*x+0.8 ( уравнение прямой которую имею по факту) все получилось вот в таком виде y=64*x+16*x+2*x+x +800 : 100 сейчас расхождение в диапазоне от 10 до 30 вольт 0.1-0.3 вольта и это без табличных поправок. еще раз спасибо.
|
|
|
 |
Добавлено: 18 мар 2012, 18:03 |
|
|
 |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
понял.спасибо.
понял.спасибо.
|
|
|
 |
Добавлено: 18 мар 2012, 13:49 |
|
|
 |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
Вложения: |

1.jpg [ 6.12 КБ | Просмотров: 13369 ]
|
[quote="avtonomki"] Поясните пож. Вот у меня данные АЦП например 135 (это X) , мне надо получить ,исходя из графика 120 (это -Y в формуле ) Тоесть 135*10=1350*83=112050+800=112850 Не получается. Кроме того как в АВ умножить( делить) на 83 ? Я могу умножать (и делить) сдвигом - r5>> или <<r5 а это получается степень двойки , то есть разделить могу на 2 , 8, 16 , 32 , 64 и тд.[/quote] Если Вы берёте значение х=135, то умножать на 10 не нужно. Пример был для Х = 13,5. Тогда 83*135+800=12005. Примеры умножение в АВ приведены в самом начале поста.
Деление, замените вычитанием. [attachment=0]1.jpg[/attachment]
|
|
|
 |
Добавлено: 18 мар 2012, 13:28 |
|
|
 |
|
|
Заголовок сообщения: |
Re: А как умножать двоичное число на 10, на 100, на 1000? |
Цитата |
|
[quote]то выглядит она так: У = 83*(Х*10)+800.[/quote] Поясните пож. Вот у меня данные АЦП например 135 (это X) , мне надо получить ,исходя из графика 120 (это -Y в формуле ) Тоесть 135*10=1350*83=112050+800=112850 Не получается. Кроме того как в АВ умножить( делить) на 83 ? Я могу умножать (и делить) сдвигом - r5>> или <<r5 а это получается степень двойки , то есть разделить могу на 2 , 8, 16 , 32 , 64 и тд.
|
|
|
 |
Добавлено: 18 мар 2012, 10:55 |
|
|
 |
|