Jump to content
Ermak

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

Recommended Posts

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

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

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

37 * 100 * 50 / 150 = 1233.

как

37 * (50 * 100  / 150) = 1233 

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

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

Х * (CONST) = 1233 

Х1 * (CONST) = Y1 

Edited by ruhi
поправил

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

Share this post


Link to post
Share on other sites
36 минут назад, ruhi сказал:

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

Х * (CONST) = 1233 

Х1 * (CONST) = Y1 

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

Edited by Ermak

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

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

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

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

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

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

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

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

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


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

Share this post


Link to post
Share on other sites

Запускаем новый BLE 5.2-чип BlueNRG-LP от STMicroelectronics

Любая разработка начинается с чтения документации и изучения доступных средств разработки. Данный материал целиком посвящен средствам разработки, включая детальные инструкции по запуску вашего первого приложения на BlueNRG-LP. Описана работа с отладкой STEVAL-IDB011V1, набором инструментов и пакетом ПО позволяющим разработчику быстро войти в курс дела.

Подробнее

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

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

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

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

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

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

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


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

Share this post


Link to post
Share on other sites

Революция в силовой электронике. Начало

Что привлекает в SiC по сравнению с кремнием, и какие особенности делают компоненты SiC часто используемыми, несмотря на более высокую стоимость в сравнении с кремниевыми высоковольтными устройствами? – Объясняет специалист ведущего разработчика силовых приборов из карбида кремния, компании Infineon.

Подробнее

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

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

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


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

Share this post


Link to post
Share on other sites

Материалы вебинара Практическое использование TrustZone в STM32L5

Материалы вебинара, посвященного экосистеме безопасности и возможностях, которые дает новая технология TrustZone в МК STM32L5, содержат две подробные практические работы: создание простого приложения с изоляцией в TrustZone, и пример отладки и тестирования TFM-SBSFU. Программа рассчитана на технических специалистов и тех, кто уже знаком с основами защиты ПО в STM32.

Подробнее

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

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

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

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

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


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

Share this post


Link to post
Share on other sites

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

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

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

 

Edited by AvrAsm

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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


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

Share this post


Link to post
Share on other sites
10 часов назад, Starichok сказал:

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

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

Edited by Ermak

Share this post


Link to post
Share on other sites
6 часов назад, Starichok сказал:

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

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

Share this post


Link to post
Share on other sites

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


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

Share this post


Link to post
Share on other sites
23.01.2021 в 21:45, Starichok сказал:

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

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


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

Share this post


Link to post
Share on other sites
4 часа назад, Starichok сказал:

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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


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

Share this post


Link to post
Share on other sites

Чтобы не плодить темы задам еще вопрос тут про таймер 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

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

Edited by Ermak

Share this post


Link to post
Share on other sites

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

359367504_.jpg.204d9e53dc0a5c4a0f4dacb0e88be213.jpg

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

1447909219_.jpg.f1f1aa9a1a4ff869ef88d36cd8c6dedc.jpg

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

Edited by Ermak

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • а кто тебя учил включать АТХ ИИП с ДГС без РЕАЛЬНОЙ НАГРУЗКИ?!
    • Как это ему поможет ? Сильно радио FM в тайге ловится ? Вот о тои и речь, а вот на 253,650 - 254,350 MHz  257,150 - 257,850 MHz передатчики работают по сей день.  http://www.radioscanner.ru/forum/topic21240.html С высоты конечно. Надо на земле.
    • Да что вы говорите? Во первых есть большая разница между 120 МГц и 121,5 МГц, 121.5мгц было написано у ТС. 121.5 МГц частота АСПАС ,вроде как единая во всём мире, приём сигналов вёлся на спутники системы Коспас-Сарсат, но сейчас эту частоту "убрали со спутников" ,осталась 406 Мгц, далее сами понимаете? У лётчиков ещё во времена СССР были радиостанции "комар" мощностью 100 мВт, такие в жёлтом корпусе. Ну наверно не зря так было? с 10км высоты принимались сигналы на расстоянии до 300км.
    • это всё понятно, а вот с драйвером вы меня расстроили, как раз паять управление это для меня самый лютый геморрой. а вообще да, логично. тогда погуглю какое-нибудь относительно просто в реализации решение на игбт модулях.
    • Klaus Shulze -  "Virtual Outback". Да в принципе такие тесты можно найти на многих треках, стоит только внимательно прислушаться. Например альбом "Metallica". Уже много лет меломаны спорят, что низа как-то странно прописаны, как бы плохая копия, ходили даже слухи, что  был конфликт с басистом и т.д. На самом же деле это не бас гитара, а бас-бочка, и у неё  звук двойной, с промежутком: удар по мембране 80-100 Гц, и собственно бас, Т.е. НЧ динамик должен быть и низкочастотным и шустрым одновременно. Тогда вам Металлика во всей красе. Те, у которых колонки не выдают 30-50 Гц, говорят что НЧ жесткие, Другие - что размазанные. Проверяется очень легко: прибавляем погромче, и включаем 1й трек, первые 30 сек. Бас должен быть глубокий, сочный, с эхом по громкости как сам удар. Если же усилитель прибавляет гулкие низа (чётная гармоника, так называемое "мясо"), то на 3м и 5м треке мы имеем неразборчивую "кашу. с мясом". Через 15 сек уже ясно, что за АС и усилитель мы слушаем. И поверьте, очень трудно на Металлике добиться этого баланса, даже если частоты раздела в АС настроены по приборам. Придётся таки корректировать по реальному звучанию динамиков. И не потому, что они плохие, а потому, что их надо сопрягать, как например струны на гитаре. То же самое могу сказать про альбом Yello -" Stella". (первые 30 сек.) 
    • да .... заменив 90% платы .... ключ, драйвер, диод, дроссель , радиатор, литы ... 
    • Отключил  вентилятор - блок завелся. Подключил другой - ОК. С материнкой напряжения 12,2 В и 4,8 В. Где-то  перекос. Без материнки 11, 8 В. Соучастие. 
×
×
  • Create New...