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

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

Сб апр 20, 2024 10:18:44

у меня майкрософт вижл студио, С++.

Значит предупреждения у тебя включены по дефолту.
Типы данных включаются в stdint.h.
Я специально привёл пример с разными типами.
Обрати внимание на компилятор.
Скриншот 20-04-2024 101139.jpg
(59.16 KiB) Скачиваний: 17

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

Сб апр 20, 2024 11:34:16

OKF, по твоей картинке я все равно ничего не понимаю про твой компилятор.
у меня для разных типов чисел не нужно подключать никакой заголовочный файл, ни для целых, ни для "плавающих".
а если есть в программе математические функции (возведение в степень, синус и т.п.), то для них подключается свой заголовок.
ты мне в личке давал тестовый текст, так там подключен был только stdlib.h, и никаких подключений для типов чисел там нет, и "флотский" тип там работал.

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

Сб апр 20, 2024 13:22:24

Можно и не подключать. Но тогда только стандартные С++ типы.)
Скриншот 20-04-2024 131315.jpg
(50.26 KiB) Скачиваний: 21

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

Сб апр 20, 2024 13:53:27

а что для твоего компилятора является стандартными типами, если я вижу, что у тебя все равно подключен заголовок для стандартных типов?

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

Сб апр 20, 2024 15:06:47

Ну ты совсем невнимателен сегодня.) Отключен!

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

Сб апр 20, 2024 15:21:30

да, прозевал я "отключку".

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

Сб апр 20, 2024 22:40:32

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

Ну вы же знаете. что нет ничего невозможного.) Мега88/168/328 дальнейшее улучшение Мега8. Но это не значит что всё так просто.

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

Вс апр 21, 2024 07:27:14

OKF, Для меня все эти МК непросто. А вы можете?))

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

Вс апр 21, 2024 09:01:38

Просто лень.) Там всё нужно переделывать. А лучше писать с нуля. Да я и брезгую в таком коде ковыряться, не в обиду автору.

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

Пн апр 22, 2024 20:39:20

Starichok51, Исправил везде "t=(uint8_t)(sin(1.57/descr1*i)*Amp)", t объявил uint8_t , ничего не изменилось.
descr1 = (uint16_t)(120 * exp(freq / 341.0)). Поэкспериментировал: 120 заменил на 190 чтобы срезать высокие частоты (столько не нужно), 341 заменил на 600, регулировка стала более плавной. Так можно делать?

Добавлено after 6 minutes 5 seconds:
И почти в самом конце регулятора, чуток не доходя до максимума, какой-то "всплеск" - частота подскакивает почти до максимума, амплитуда тоже. Как будто в резонанс входит, дальше кручу резистор- всё нормализуется и до конца всё нормально.

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

Пн апр 22, 2024 22:46:52

да, так можно и даже нужно делать, чтобы управлять максимальной и минимальной частотой.
вернулся я домой из гостей и провел анализ в атмел студио 7.0.
никакого криминала в расчетах, приводящего к подобным сбоям в частоте и амплитуде я не нашел.
то есть, я совершенно не вижу причины скачка частоты и нарушения амплитуды.
поэтому я могу даже допустить появления резонанса механической системы.
но проверить каждое значение freq от 0 до 1023 - это практически не реально.
к тому же, из-за недостатка ОЗУ невозможно создать большие массивы, чтобы по массиву просмотреть все получаемые значения синуса.
посмотрел я экспоненту в массиве из 256 значений (4 варианта freq от 0 до 1023) - всё замечательно.
посмотрел для нескольких конкретных значений переменной descr1 в расчете кусочков синуса - тоже сбоев не нашел.
могу еще проверить через большие массивы в программе для компа, где ограничения размеров массивов практически нет.
если все таки есть такая причина, я думаю, что она должна проявиться и в программе на компе.

НО! нашел одно существенное упрощение в расчетах.
поскольку (1 - k) + k = 1, обе формулы расчета нарастания и спада синуса можно объединить смело. цикл получится такой:
//1 полуволна
for (uint16_t i = (descr1 * (1 - k)); i < (descr1 * (1 - k)) + descr1; i++) {
t=sin(1.5708 * i / descr1) * Amp; // считаем синус...
PWM1(t);
}
фактически это "сумма" обеих формул (нарастание + спад).
по прежнему descr1 * (1 - k) определяет начало синуса, а "длину" кусочка синуса определят величина descr1.
для второй полуволны точно эта же формула, только PWM2(t) вместо PWM1(t).

Добавлено after 3 minutes 53 seconds:
да, ещё я убедился, что в атмел студио можно не делать приведение типов данных, то есть, для t писать (uint8_t) не нужно, и для descr1 писать (uint16_t) тоже не нужно.

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

Пн апр 22, 2024 22:51:42

for (uint16_t i = (descr1 * (1 - k)); i < (descr1 * (1 - k)) + descr1; i++) {
t=sin(1.5708 * i / descr1) * Amp; // считаем синус...
PWM1(t);
}


здесь прям просится выкинуть из синуса деление на descr1... хотя, может, мне это лишь кажется.

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

Вт апр 23, 2024 15:38:37

выкинуть деление на descr1 вполне можно, так как переменная цикла может быть с плавающей точкой. тогда получится так:
for (float i = 1 - k; i < 2 - k; i += 1.0 / descr1) {
t=sin(1.5708 * i) * Amp; // считаем синус...
PWM1(t);
}
но частота без операции деления при этом немного возрастет, и придется немного увеличить коэффициент в расчете экспоненты.
и еще можно добавить смело знак равенства:
for (float i = 1 - k; i <= 2 - k; i += 1.0 / descr1) {

Добавлено after 2 hours 25 minutes 22 seconds:
и еще у меня есть одно предложение.
при малых значениях freq там получается для descr1 по несколько одинаковых значений. да и вообще не нужно иметь 1024 значения частоты.
я предлагаю число ступенек частоты сократить до 64. это получается так:
int freq = ADCread(7) / 16;
а формула для descr1 получится такая:
descr1 = 190 * exp(freq / 35.0);
при этом частота будет изменяться в 6 раз.

Добавлено after 23 minutes 20 seconds:
Varlakotam, после сокращения числа ступеней частоты я ожидаю, что уйдет тот участок значений descr1, где наблюдается срыв в работе, а после этого участка восстанавливается нормальная работа.
я бы даже сократил число ступеней частоты до 16. я думаю, что этого вполне хватило бы.
тогда будут такие формулы:
int freq = ADCread(7) / 64;
descr1 = 190 * exp(freq / 8.0);
при этом частота будет изменяться в 6,5 раз.

Добавлено after 2 hours 52 minutes 50 seconds:
прозевал я тогда, когда сказал про (1 - k) + k = 1.
там относительно 1 должно быть симметрично.
for (uint16_t i =descr * (1 - k); i <= descr * (1 + k); i++) {
t = sin(1.5708 * i / descr1) * Amp;
PWM1(t);
}
или с плавающей точкой:
for (float i = 1 - k; i <= 1 + k; i += 1.0 / descr1) {
t = sin(1.5708 * i) * Amp;
PWM1(t);
}

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

Ср апр 24, 2024 09:52:52

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

Добавлено after 1 hour 2 minutes 44 seconds:
еще поменяй местами провода на краях переменного резистора, тогда у тебя влево до упора будет минимальная частота и с поворотом частота будет расти.
и если там есть обрывы контакта, то сбой частоты должен быть в том же положении резистора.

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

Ср апр 24, 2024 16:56:32

Starichok51, спасибо! Резистор менял, они у меня даже не паянные, лет 40 лежали без дела. Со стороны железа всё проверено.
На выходных попробую формулы поменять.

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

Ср апр 24, 2024 18:52:38

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

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

Ср апр 24, 2024 19:00:39

Starichok51, именно это и собираюсь сделать- сократить число ступенек

Добавлено after 3 minutes 10 seconds:
поменял на for (float i = 1 - k; i <= 1 + k; i += 1.0 / descr1) {
t = sin(1.5708 * i) * Amp;
PWM1(t);колебания стали "сдвоенными"

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

Ср апр 24, 2024 19:34:54

что такое "сдвоенные"?

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

Ср апр 24, 2024 19:41:48

Было: тык-тык-тык...)))), стало: тык-тык.., тык-тык..., тык-тык)))).

Добавлено after 3 minutes 57 seconds:
Если по аналогии с морзянкой Было т - - - , стало и .., т.е .. .. .. ..

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

Ср апр 24, 2024 20:02:45

ладно, подождем сокращение числа ступенек.
Ответить