Varlakotam, я там сделал упущение. чтобы деление freq / 341 было с плавающей точкой, нужно было написать freq / 341.0 иначе это деление будет целочисленным, и частота не будет меняться плавно, а будут 4 ступеньки частоты скачками.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51, с плавающей точкой регулировка вернулась к первоначальному состоянию: регулировка появляется с среднего положения подстроечника. Вчера не обратил внимания- с обоими вариантами появились две точки где происходит "срыв" колебаний, частота резко увеличивается, как будто в резонанс входит. Чуток увеличиваю, частота нормализуется до следующей точки. Первая примерно на трети, вторая две трети. Это с экспонентой. С гиперболой (первый вариант) срыв один, примерно на 3/4.
мне не понятно такое поведение, не вижу причин таких провалов в вычислении переменной descr1. и уже тем более мне не понятна эта "мертвая зона" до среднего положения. с гиперболой целочисленные вычисления, и причины срыва вообще не должно быть. сейчас у меня нет возможности проверить формулы в отладчике - я в гостях у дочки. вернусь домой в понедельник, проверю расчеты в Студии. я на Си для МК не программирую, поэтому не знаю всех деталей программирования на Си. если как на компе, то нужно приведение типов делать. по аналогии с компом следовало бы записать descr1 = (uint16_t)(120 * exp(freq / 341.0)) чтобы плавающую точку привести к целому числу. попробуй этот вариант приведения типов чисел.
Добавлено after 1 hour 33 minutes 49 seconds: и для вычислений синуса тоже следовало бы делать приведение типов данных: t=(uint8_t)(sin(1.57/descr1*i)*Amp); и так для всех формул вычисления кусочков синуса.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
descr1 = (uint16_t)(120 * exp(freq / 341.0)) Так-же только с середины начинается заметная регулировка. Срывов нет. Примерно на 3/4 максимальная частота, дальше завал и опять увеличение до максимальной частоты.
Опубликованы материалы вебинара, посвященного пленочным конденсаторам компании Hongfa, на котором была представлена текущая линейка и модельный ряд продукции этого направления, включая новые, недавно вышедшие серии.
На вебинаре были приведены актуальные примеры применения пленочных конденсаторов Hongfa в источниках питания, зарядных станциях для электротранспорта, преобразователях частоты, фотоэлектрических преобразователях и ветрогенераторах.
чертовщина... ничего пока не понимаю... на следующей неделе сам буду разбираться с этими вычислениями в Студии. еще один момент. переменную t нужно было объявлять uint8_t, а не uint16_t, так как ШИМ однобайтовый. тут может быть сбой не в вычислении descr1, а в том, что двухбайтовое число обрезается до однобайтового в функциях PWM1(uint8_t val) и PWM2(uint8_t val). и при этом обрезании в регистры таймера попадает не то, что нужно. хотя, значение t не должно превышать 255, и это обрезание не должно повлиять на работу ШИМ. а вдруг...
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Компания Hongfa - один из лидеров азиатского рынка пленочных конденсаторов с полным циклом производства. Она выпускает пять серий помехоподавляющих конденсаторов этого типа как для бытовой, так и для трехфазной промышленной сети, а также для автомобильного применения. Продукция компании по ассортименту, параметрам и количеству серий конденсаторов ЭМП не уступает другим крупным производителям этого сегмента и может легко заменить ассортимент ушедших из РФ брендов.
я на Си для МК не программирую, поэтому не знаю всех деталей программирования на Си. если как на компе, то нужно приведение типов делать. по аналогии с компом следовало бы записать descr1 = (uint16_t)(120 * exp(freq / 341.0)) чтобы плавающую точку привести к целому числу. попробуй этот вариант приведения типов чисел.
Чёйта. Приведение не требуется, т.к. автоматом приводится к типу результата. Правила для всех одни - хоть для ПК, хоть для 8 бит МК. Не так ли?
правила разные, так как я уже много программ написал для ПК. там без приведения типов данных сразу выскакивают предупреждение (warning). для МК, может, это приведение делается автоматически, но я об этом не знаю.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
это для меня очень странно, должен по идее ругацца на несовпадение типов. Для передачи в функцию грузим в стек двухбайтовое число, а в самой функции извлекаем однобайтовое, так как для ее параметра указан тип uint8_t. Я уже про это писал. Можно попробовать t определить как uint8_t, может проканает Может, настройками компилятора задушили предупреждения? Я со студией очень мало работал, не знаю, где это посмотреть
metan, То что вы пишете для меня странные колдунские заклинания. Единственное понял про компилятор- нет я его не настраивал, ничего не трогал. Всё по умолчанию
OKF, что это было?) у меня для компа в С++ нет таких объявлений типов, как у тебя. у меня для беззнаковых есть byte (8 бит), word (16 бит), uint (32 бит).
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
тут мы говорим про МК семейства AVR. в каком МК семейства AVR ты нашел регистр eax? или ты показал, что у тебя на ПК твой компилятор не дает предупреждения?
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Я пытаюсь показать что правила С/С++ одни для всех. А варнинги - это предупреждения для тебя, не ошибся ли ты и включаются/выключаются в опциях компилятора. Потому и спрашивал чем ты компилируешь на ПК.
правила разные, так как я уже много программ написал для ПК. там без приведения типов данных сразу выскакивают предупреждение (warning). для МК, может, это приведение делается автоматически, но я об этом не знаю.
у меня майкрософт вижл студио, С++. и у тебя на картинке я вижу типы данных такие же, как для МК (uint8_t и так далее). а у меня для целых чисел по другому называются типы данных, я их перечислил выше. и я в своей студии никакие опции компилятора даже никогда не трогал. и даже никогда не интересовался, есть ли там такие опции. и если у меня обнаруживается несоответствие типов данных, я всегда получаю варнинги.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения