Перейти к содержанию

Найти координату функции f=kx на atmega8


Ermak

Рекомендуемые сообщения

3 часа назад, Ermak сказал:

Думаю остановлюсь на этом варианте.

если много точек надо считать то можно еще оптимизировать, перепишем:

37 * 100 * 50 / 150 = 1233.

как

37 * (50 * 100  / 150) = 1233 

вот это частное в скобках можно один раз посчитать в переменную, и потом ее использовать для всех точек. вместо 100 будет 256 намного лучше, потому как точность константы повышается.

Х * (50 * 100  / 150) = 1233  или

Х * (CONST) = 1233 

Х1 * (CONST) = Y1 

Изменено пользователем ruhi
поправил

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

36 минут назад, ruhi сказал:

Х * (50 * 100  / 150) = 1233  или

Х * (CONST) = 1233 

Х1 * (CONST) = Y1 

Тоже вариант, вместе с точками хранить константы, думаю самый удачный. EEPROM полно)

Изменено пользователем Ermak
Ссылка на комментарий
Поделиться на другие сайты

21.01.2021 в 18:36, Ermak сказал:

вместе с точками хранить константы

у одной прямой - одна константа, а не куча ...

но при умножении на такую константу точность теряется.

для примера выше после округления константа будет равна 33.

а 37 * 33 = 1221. и это вместо 1233.

так что, умножение с последующим делением будет гораздо точнее.

и не надо бояться деления.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

13 часов назад, Starichok сказал:

а 37 * 33 = 1221. и это вместо 1233.

так что, умножение с последующим делением будет гораздо точнее.

так это ошибка в дробной части, а дробная часть все равно отбрасывается. Дело в том что точнее не нужно! Поэтому рассуждать о том что можно точнее (тщательнЕе- Жванецкий) смысла нет.

13 часов назад, Starichok сказал:

и не надо бояться деления.

Бояться не надо, надо избегать :)!

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

9 часов назад, ruhi сказал:

так это ошибка в дробной части, а дробная часть все равно отбрасывается

если такую ошибку проигнорировать, то можно и единичку в целой части потерять.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

вообще, конешно, красивее всего получается с делением на 256 (отбрасывание младшего байта произведения).

для вычисления константы все равно один раз нужно применить деление.

для примера выше при делении на 256 константа получится 50 * 256 / 150 = 85.

и вариант с делением на 256 дает сразу в старшем байте целую часть, которую можно округлить по значению старшего бита в младшем байте. и уже после округления отбросить младший байт произведения.

а мой вариант выше имеет недостаток - из произведения еще надо выделить целую часть делением на 100.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

А почему только 256?

А чем плохи 65536, 16777216 и тд. ?

Иногда на и 8-ми битном МК приходится работать с 32...64-х битными данными.

 

Изменено пользователем AvrAsm
Ссылка на комментарий
Поделиться на другие сайты

если у автора координаты однобайтные, то смысла в 65536, 16777216 и т.д. совершенно нет - точность это не повысит.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

Я просто к тому что замена деления умножением с последующим отбрасыванием N младших байт, стандартная практика... 

Причем старший бит отбрасываемого байта/ов будет равен 0.5, следующий 0.25 и т.д.

Сорри если очевидные вещи пишу.

Ссылка на комментарий
Поделиться на другие сайты

ну да, зачем писать очевидное. особенно после того, что я уже всё и так подробно написал.

и даже уже написал, что по старшему биту отбрасываемого байта следует делать округление.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, Starichok сказал:

если у автора координаты однобайтные,

Да, координаты однобайтовые. Все это нужно для управления двигателем насоса. Контроллер генерит частоту. Дело в том, что зависимость частоты от расхода - нелинейная. Поэтому я добавил функцию калибровки - задается частота, после этого измеряется расход. Создается контрольная точка. Далее расход рассчитывается по контрольным точкам, и задание задается в литрах а не в попугаях. В протеусе по сути уже все работает адекватно, осталось только перенести на железку.

Изменено пользователем Ermak
Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, Starichok сказал:

ну да, зачем писать очевидное. особенно после того, что я уже всё и так подробно написал.

Ну да, ну да, на 100 зачем-то советовали умножить )

Ссылка на комментарий
Поделиться на другие сайты

молодец! сумел подколоть меня.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

23.01.2021 в 21:45, Starichok сказал:

вообще, конешно, красивее всего получается с делением на 256 (отбрасывание младшего байта произведения)

Но объяснять лучше на сотнях, как вы показали выше! Вы написали самое наглядное объяснение какое можно придумать! Людям надо объяснять на человеческих числах, для машины использовать машинные, одно другому не противоречит.

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Starichok сказал:

молодец! сумел подколоть меня.

И не собирался.

Просто акцентировал внимание что для многих писавших в теме этот метод деления на константу не был известен.

Ссылка на комментарий
Поделиться на другие сайты

да, многие про деление отбрасыванием младшего байта (или байтов) не знают, так как тут большинство начинающих и малоопытных.

но я уже давно, более 20 лет, занимаюсь программированием для МК, и, соответственно, давно знаю эту программистскую хитрость.

и в своих проектах активно пользуюсь этим приемом.

но как сказал @ruhi , малоопытным сначала объяснять лучше на сотнях, так быстрее поймут приемы работы с целыми числами.

но такими целыми, которые представляют собой дробные числа с фиксированной запятой.

Мудрость приходит вместе с импотенцией...

Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.

Ссылка на комментарий
Поделиться на другие сайты

Чтобы не плодить темы задам еще вопрос тут про таймер T2.

В общем задаю конфигурацию битов:

TCCR2 |=(1<<2)|(1<<3);

TIMSK |=(1<<0)|(1<<7);

Далее обработка прерывания таймера

ISR(TIM2_COMP) 
{
        PORTC ^= (1<<0);
}

Частота работы контроллера 4МГц. Поидее должно получится 4000000/(2*256(делитель)*256(счетчик в режиме CTC))

Но вместо ожидаемых 30Гц, получается 240Гц. Получается счетчик T2 работает только в асинхронном режиме, и для получения предделителя 256 надо задавать  TCCR2 |=(1<<1)|(1<<2)|(1<<3); ? Но тогда не понятно, откуда 240 Гц, в таком случае должно быть 120Гц. Вобщем, как получить нужные 30Гц на выходе?

CKSEL0,1=off, CKSEL1,2=on. Я правильно понимаю что при этой конфигурации контроллер должен работать на 4 МГц? Дело в том, что таймер T0 так же работает на частоте 122Гц, вместо положенных 30Гц.

TCCR0 |=(1<<2);

1161501863_.png.36477b43d284f1f4c5fdb248e0009b8b.png

Подскажите, где косяк?

Изменено пользователем Ermak
Ссылка на комментарий
Поделиться на другие сайты

И правда, если задать значения TCCR2 |=(1<<1)|(1<<2)|(1<<3); (соответствуют столбику ASn=0 clk/256) то частота таймера T2 равна частоте таймера T0.

359367504_.jpg.204d9e53dc0a5c4a0f4dacb0e88be213.jpg

Но почему частота больше рассчетной??? Биты конфигурации вроде как верны:

1447909219_.jpg.f1f1aa9a1a4ff869ef88d36cd8c6dedc.jpg

В протеусе период примерно получается 30мСек, примерно соответствует рассчетным 30Гц, а по факту измеряя у железки выходит 120Гц.

Изменено пользователем Ermak
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...