Обсуждаем контроллеры компании Atmel.
Ответить

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 09:41:13

Varlakotam, я там сделал упущение. чтобы деление
freq / 341
было с плавающей точкой, нужно было написать
freq / 341.0
иначе это деление будет целочисленным, и частота не будет меняться плавно, а будут 4 ступеньки частоты скачками.

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 10:46:39

Starichok51, с плавающей точкой регулировка вернулась к первоначальному состоянию: регулировка появляется с среднего положения подстроечника. Вчера не обратил внимания- с обоими вариантами появились две точки где происходит "срыв" колебаний, частота резко увеличивается, как будто в резонанс входит. Чуток увеличиваю, частота нормализуется до следующей точки. Первая примерно на трети, вторая две трети. Это с экспонентой. С гиперболой (первый вариант) срыв один, примерно на 3/4.

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 13:12:58

мне не понятно такое поведение, не вижу причин таких провалов в вычислении переменной 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);
и так для всех формул вычисления кусочков синуса.

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 13:15:01

descr1 = (uint16_t)(120 * exp(freq / 341.0)) Так-же только с середины начинается заметная регулировка. Срывов нет. Примерно на 3/4 максимальная частота, дальше завал и опять увеличение до максимальной частоты.

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 15:17:15

чертовщина... ничего пока не понимаю...
на следующей неделе сам буду разбираться с этими вычислениями в Студии.
еще один момент.
переменную t нужно было объявлять uint8_t, а не uint16_t, так как ШИМ однобайтовый.
тут может быть сбой не в вычислении descr1, а в том, что двухбайтовое число обрезается до однобайтового в функциях PWM1(uint8_t val) и PWM2(uint8_t val).
и при этом обрезании в регистры таймера попадает не то, что нужно.
хотя, значение t не должно превышать 255, и это обрезание не должно повлиять на работу ШИМ. а вдруг...

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 15:50:24

я на Си для МК не программирую, поэтому не знаю всех деталей программирования на Си.
если как на компе, то нужно приведение типов делать.
по аналогии с компом следовало бы записать
descr1 = (uint16_t)(120 * exp(freq / 341.0))
чтобы плавающую точку привести к целому числу.
попробуй этот вариант приведения типов чисел.

Чёйта. Приведение не требуется, т.к. автоматом приводится к типу результата.
Правила для всех одни - хоть для ПК, хоть для 8 бит МК. Не так ли?

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 16:03:28

правила разные, так как я уже много программ написал для ПК. там без приведения типов данных сразу выскакивают предупреждение (warning).
для МК, может, это приведение делается автоматически, но я об этом не знаю.

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 16:24:18

Starichok51, компилятор какой?
Последний раз редактировалось OKF Пт апр 19, 2024 16:34:56, всего редактировалось 1 раз.

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 16:28:17

у меня Atmel Studio 7

Добавлено after 57 seconds:
варнингов не выдал

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 18:14:06

Varlakotam писал(а):варнингов не выдал
это для меня очень странно, должен по идее ругацца на несовпадение типов. Для передачи в функцию грузим в стек двухбайтовое число, а в самой функции извлекаем однобайтовое, так как для ее параметра указан тип uint8_t. Я уже про это писал. Можно попробовать t определить как uint8_t, может проканает :)
Может, настройками компилятора задушили предупреждения? Я со студией очень мало работал, не знаю, где это посмотреть :dont_know:

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 18:20:45

metan, То что вы пишете для меня странные колдунские заклинания. Единственное понял про компилятор- нет я его не настраивал, ничего не трогал. Всё по умолчанию

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 18:27:06

Varlakotam писал(а):странные колдунские заклинания
извиняюсь :)
можно попробовать вот эту строчку
Код:
   uint16_t descr1, descr2, Amp, t;


заменить на
Код:
   uint16_t descr1, descr2, Amp;
   uint8_t t;

этим самым мы скажем, что число однобайтовое, и передавать нужно именно такой тип. Может, что изменится. Но это не точно :)

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 19:07:46

уже писал про uint8_t t.

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 19:59:43

правила разные, так как я уже много программ написал для ПК. там без приведения типов данных сразу выскакивают предупреждение (warning).

Скриншот 19-04-2024 195544.jpg
(50.74 KiB) Скачиваний: 25

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 21:52:54

OKF, что это было?)
у меня для компа в С++ нет таких объявлений типов, как у тебя.
у меня для беззнаковых есть byte (8 бит), word (16 бит), uint (32 бит).

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 22:57:13

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

Re: Atmega8 регулировка частоты и амплитуды

Пт апр 19, 2024 23:21:38

тут мы говорим про МК семейства AVR.
в каком МК семейства AVR ты нашел регистр eax?
или ты показал, что у тебя на ПК твой компилятор не дает предупреждения?

Re: Atmega8 регулировка частоты и амплитуды

Сб апр 20, 2024 06:09:29

Я пытаюсь показать что правила С/С++ одни для всех. А варнинги - это предупреждения для тебя, не ошибся ли ты и включаются/выключаются в опциях компилятора. Потому и спрашивал чем ты компилируешь на ПК.
правила разные, так как я уже много программ написал для ПК. там без приведения типов данных сразу выскакивают предупреждение (warning).
для МК, может, это приведение делается автоматически, но я об этом не знаю.

Re: Atmega8 регулировка частоты и амплитуды

Сб апр 20, 2024 09:04:04

у меня майкрософт вижл студио, С++.
и у тебя на картинке я вижу типы данных такие же, как для МК (uint8_t и так далее).
а у меня для целых чисел по другому называются типы данных, я их перечислил выше.
и я в своей студии никакие опции компилятора даже никогда не трогал. и даже никогда не интересовался, есть ли там такие опции.
и если у меня обнаруживается несоответствие типов данных, я всегда получаю варнинги.

Re: Atmega8 регулировка частоты и амплитуды

Сб апр 20, 2024 09:43:23

Есть скетч на pro Mini Atmega168. Может он что подскажет? И второй вопрос: можно ли мою программу (которая на Atmega8) переделать на Atmega168?
Вложения
final.rar
(3.52 KiB) Скачиваний: 24
Ответить