Мелодии для tone

vganin
Offline
Зарегистрирован: 03.07.2019

Для ANDRIANO

разбирал, как мог Ваш код для floppy-HDD. будьте добры поправьте то что я понял. частоты для исполнительных механизмов все равно генерятся с помощью 16- битного таймера,но без использования tone().C дискретностью 40кгц формируется прерывание. Партия для каждого исполнительного механизма написана в файлах данных. Не понял как и где обрабатывается  прерывание, совсем не понял- как переключается 16 битный таймер между пинами.

Если потроллить, то без проблем, но можно и не отвечать.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Не совсем так. С помощью таймера генерится прерывание с частотой 40000 раз в секунду. В прерывании последовательно (развернутым циклом) просматриваются все 7 каналов и при необходимости пин канала перекидывается в противоположное состояние. Необходимость перекидывания определяется тем, закончился полупериод сигнала в данном канале или нет. Т.е. декрементируется счетчик, если счетчик ушел в 0, происходит перекидывание пина и загрузка в счетчик длительности противоположного полупериода. Полупериоды могут быть как равны между собой, так и отличаться на 1 - для более точного строя.

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

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

Т.е., грубо говоря, работа выглядит так:

- в основном цикле отслеживается время и в нужные моменты переключаются ноты, для чего изменяются переменные длин положительного и отрицательного полупериодов (выраженных в тактах частоты 40 Гц), а также инициализируются счетчики.

- в прерывании на 1 уменьшается счетчик, если он достиг 0, перекидывается нужный пин, а в счетчик заносится величина следующего полупериода.

Собственно, из 7 каналов первые три предназначены для floppy, а четыре последних - для HDD. То, что для HDD - как раз то, что Вам нужно: с этих пинов можно сразу снимать сигналы и микшировать их через резисторы. Для floppy немного сложнее - там еще нужно управлять сигналом направления шага - он Вам не нужен. 

Для начала попытайтесь тупо смикшировать между собой (через резисторы) пины pin_sound_0 - pin_sound_6. 

vganin
Offline
Зарегистрирован: 03.07.2019

Спасибо за комментарий. Уже 5 раз перечитываю и это выше моего понимания. Прошу собрать остатки Вашего терпения и ответить на несколько глупых вопросов. Меня сейчас так бросать нельзя.

1. Пока для HDD- звук(нота из базы данных) извлекается частотой ударов коромысла о барабан?

2.Раз тактируется все 40 кгц, то звуки не являются нотным станом, а являются ШИМ подключенный к чему то, могущему дребезжать.(я не уверен в этом вопросе, пока думаю-как это я могу зделать).

3. То что извлекает каретка floppy- это экспериментально подобранный звук типа гвоздь о стекло.

Еще раз спасибо за терпение. Я не программист , но только теперь понял разницу в мышленнии.

vganin
Offline
Зарегистрирован: 03.07.2019

Если долго смотреть на скетч, то кое что проясняется. Я не могу понять множество синтаксических конструкций и не могу их найти. Написание других отличается от учебника. Тяжко.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

sadman41 пишет:

vganin пишет:

   tone(biz1, melody1[Note],Duration);
   tone(biz2, melody2[Note],Duration);
   tone(biz3, melody3[Note],Duration);
   tone(biz4, melody4[Note],Duration);
   int pauseNotes = Duration * 1.30;
   delay(pauseNotes);

A я вот, хоть убейте, не пойму - это вообще должно работать?

Ибо:

Only one tone can be generated at a time. If a tone is already playing on a different pin, the call to tone() will have no effect. If the tone is playing on the same pin, the call will set its frequency.

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

asam
asam аватар
Онлайн
Зарегистрирован: 12.12.2018

vganin пишет:

Я не могу понять множество синтаксических конструкций и не могу их найти.Написание других отличается от учебника. Тяжко.

Просмотрел указанный код. Никаких конструкций не описанных в учебниках не заметил. Может вы не те учебники смотрите?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vganin пишет:

Меня сейчас так бросать нельзя.

Хорошо, хорошо... Только до суицида не доходите...

Цитата:

1. Пока для HDD- звук(нота из базы данных) извлекается частотой ударов коромысла о барабан?

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

Цитата:

2.Раз тактируется все 40 кгц, то звуки не являются нотным станом, а являются ШИМ подключенный к чему то, могущему дребезжать.(я не уверен в этом вопросе, пока думаю-как это я могу зделать).

Что такое "звуки не являются нотным станом" я не понимаю. И ШИМ точно не использую. Так что, скорее всего, Вы что-то не так поняли.

Цитата:

3. То что извлекает каретка floppy- это экспериментально подобранный звук типа гвоздь о стекло.

Нет. Если Вы обратили внимание на звуки, издаваемые дисководом при перемещении головки, они имеют ярко выраженную тональную окраску. Так вот, у меня дисковод банально "шагает" с дорожки на дорожку со звуковой частотой. Естественно, максимальная частота шагов механической конструкции ограничена, поэтому каналы дисководов возможно использовать только для сравнительно низкочастотных звуков.

 

У Вас наблюдается болезнь большинства новичков: вместо того, чтобы взять и попробовать самому, Вы задаете на форуме массу вопросов. Еще раз: откомпилируйте указанный проект как есть и запустите его, предварительно соединив 7 выводов контроллера с pin_sound_0 по pin_sound_6 резисторами номиналом от 1 до 100 кОм со входом УМЗЧ.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vganin пишет:

Если долго смотреть на скетч, то кое что проясняется. Я не могу понять множество синтаксических конструкций и не могу их найти. Написание других отличается от учебника. Тяжко.

Да, значительное количество стандартных функций Ардуино заменено на аналоги.

Стандартные функции универсальны и в большинстве случаев используют защиту от дурака, из-за чего весьма медлительны. Использованные мною аналоги не являются универсальными и не используют никакие проверки, поэтому работают в десятки и сотни раз быстрее. Еще раз повторю: контроллеры AVR слишком маломощные для звука, поэтому приходится использовать их на пределе возможностей.

vganin
Offline
Зарегистрирован: 03.07.2019

vganin
Offline
Зарегистрирован: 03.07.2019

ТУТ МОЖНО ПОСЛУШАТЬ звучание разных пинов через мосфет

https://cloud.mail.ru/public/51g2/3yjFHJA6B

https://cloud.mail.ru/public/3QmD/2UBgbWZpd

https://cloud.mail.ru/public/2qyc/5sJ13mRoK

https://cloud.mail.ru/public/3Xtb/3Xzj9ZjTB

Через мосфет звучание не сильно отличается от усилителя.

Почему то играет только начальный фрагмент. Как ни бился, не смог починить. Попутно вопрос- откуда у про-мини столько пинов. У меня нано только была. Номера звуковых пинов поменял. Может файл вывода от Архата теперь не подходит.

Не могу не задать вопро ANDRIANO, а то взорвусь. Может опять глупость, но если осталось терпение-прошу разжевать. Предположим нам нужна нота(ардуиновский меандр) 1000 ГЦ(штук в секунду). С помощью тактируемых прерываний мы формируем эти меандры 1000 штук, обработав 2000 прерываний(я пока так понял) или растягиваем все 40000 прерываний на эту ноту. Или вычисляем количество прерываний для необходимой длительности ноты, а потом равномерно заполняем(учитывая, что одно прерывание делает половинку меандра).

 

vganin
Offline
Зарегистрирован: 03.07.2019

Вот ссылка на работу с усилителем

https://cloud.mail.ru/public/3Uwd/Bq4L5UQE2

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. А на форум я и выкладывал только начальный фрагмент. Там на самом деле довольно много, поэтому пришлось обрезать. Но, чтобы понять что к чему, достаточно и этого фрагмента. Ну а "починить" - самому дописать все, что хочется услышать.

2. В массивах партитуры записаны метки времени (т.е. время, когда пора менять ноту) и период ноты в единицах периода прерываний т.е. в 25-мкс интервалах. Для частоты 1 кГц, очевидно, период будет равен 40. Полупериод, соответственно, 20 (второй полупериод - тоже 20, хотя, если бы период был, скажем, 51, то первый полупериод равнялся бы 25, а второй - 26).

Вот это число 20 и записывается в счетчик. Каждое прерывание счетчик декрементируется. Как только счетчик достигнет 0, происходит следующее:

- пин соответствующего голоса перебрасывается в противоположное состояние,

- в счетчик записывается величина второго полупериода,

после чего процесс повторяется, т.е. по прошествии еще 20 прерываний пин будет переброшен обратно, т.е. за 40 прерываний будет сформировано два полупериода выходной частоты каждый по 20 периодов, что и соответствует 1 кГц.

3. По поводу количества пинов ПроМини вопроса не понял.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

vganin, покупаешь 4 таких модуля https://aliexpress.ru/item/32959102437.html  и можешь уже организовывать аккордное звучание из 4 нот.

https://www.youtube.com/watch?v=5NsUpivK9OU  https://tsibrov.blogspot.com/2018/06/ad9833.html

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

qwone пишет:

vganin, покупаешь 4 таких модуля https://aliexpress.ru/item/32959102437.html  и можешь уже организовывать аккордное звучание из 4 нот.

https://www.youtube.com/watch?v=5NsUpivK9OU  https://tsibrov.blogspot.com/2018/06/ad9833.html

Проще и дешевле запрограммировать четыре 16-разрядных счетчика Меги на нужные частоты. А при некоторой ловкости - использовать и до 5 нот, если поднапрячь еще и оставшийся свободным 8-разрядный счетчик.

sadman41
Offline
Зарегистрирован: 19.10.2016

Квон, ты этого хочешь: https://youtu.be/axXrs55X9kE ?

vganin
Offline
Зарегистрирован: 03.07.2019

andriano пишет:

3. По поводу количества пинов ПроМини вопроса не понял.

На про-мини 13 цифровфх и 4 аналлоговых входа. У Вас 18 цифровых выходов. Хотел узнать -как

vganin
Offline
Зарегистрирован: 03.07.2019

Сейчас для вопрос стоит не Как сделать по другому, а разобраться с этим кодом. Ну я тут уже  всех утомил. Надо за букварь.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vganin пишет:

andriano пишет:

3. По поводу количества пинов ПроМини вопроса не понял.

На про-мини 13 цифровфх и 4 аналлоговых входа. У Вас 18 цифровых выходов. Хотел узнать -как

На ПроМини, как и на других платах, использующих 328 чип, 20 цифровых пинов. Причем, большинство из этих пинов имеют дополнительные аппаратные функции: реализация протоколов последовательного порта, SPI и I2C шин, ШИМ и аналоговых входов. Вот последние пины в Ардуино почему-то называются аналоговыми. На самом деле это обычные цифровые пины, просто с дополнительной функцией (как и у других цифровых пинов 328 контроллера).

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

vganin пишет:

Сейчас для вопрос стоит не Как сделать по другому, а разобраться с этим кодом. Ну я тут уже  всех утомил. Надо за букварь.

А что с этим кодом разбираться. Его надо полностью переписывать. А до переписывания надо еще и переосмыслить. А до переосмысливания надо еще научиться. А что бы научится надо толстые книги читать.

vganin
Offline
Зарегистрирован: 03.07.2019

qwone пишет:

vganin пишет:

Сейчас для вопрос стоит не Как сделать по другому, а разобраться с этим кодом. Ну я тут уже  всех утомил. Надо за букварь.

А что с этим кодом разбираться. Его надо полностью переписывать. А до переписывания надо еще и переосмыслить. А до переосмысливания надо еще научиться. А что бы научится надо толстые книги читать.

Ну просто добрейшей души человек. Спасибо за своевременный и ценный совет.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

vganin пишет:
Ну просто добрейшей души человек. Спасибо за своевременный и ценный совет.

Я даже это выложу, для разрыва шаблона.

// текст музыки
const uint8_t music[] PROGMEM = {
  '[', 'G', '2', 'B', '2', 'd', '2', ']',
  '[', 'G', 'B', ']',
  '[', 'G', 'B', 'd', ']',
  '\0'
};


sound.play(music);// запустить поигрыш

 

b707
Offline
Зарегистрирован: 26.05.2017

vganin пишет:

На про-мини 13 цифровфх и 4 аналлоговых входа. У Вас 18 цифровых выходов. Хотел узнать -как

забано вы считаете, давайте я вас проверю

"Цифровые пины" с 0 по 13 - это 14 выходов. "Аналоговые" с А0 по А5 - это еще 6

Итого цифровых портов -  14 +6= 20

vganin
Offline
Зарегистрирован: 03.07.2019

Тогда уж на мини 14 +8

Понятно, что я не туда попал и это не мой уровень (даже по дате регистрации на форуме). тут уж ничего не поделаешь, а вам, я думаю, форум мало что дает, разве повеселиться, ну знаниями поделиться- кто захочет.

b707
Offline
Зарегистрирован: 26.05.2017

vganin пишет:

Тогда уж на мини 14 +8

расшифруйте

b707
Offline
Зарегистрирован: 26.05.2017

vganin пишет:

а вам, я думаю, форум мало что дает, разве повеселиться, ну знаниями поделиться- кто захочет.

так форум для обучения и не предназначен, он для общения и приятного проведения времени. Иногда и в курилке можно много интересного узнать. если удачно собеседника разговорить, но вряд ли стоит рассчитывать получить серьезные знания по медицине, покуривая с хирургом в обеденный перерыв :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

vganin пишет:

Тогда уж на мини 14 +8

Нет.

У 328 чипа в планарном корпусе больше выводов, в частности, есть такие, которых нет в DIP-корпусе: А6 и А7. Но только, в отличие от остальных 20 пинов, эти - исключительно аналоговые входы, они не могут быть назначены цифровыми входами/выходами. Т.е. цифровых входов/выходов все равно 20.

vganin
Offline
Зарегистрирован: 03.07.2019

Где то ведь это все написано, а тут даже даташит у разных компаний-разный. На все нужно время, ну а человеку- что бы все и сразу. Какие мои годы- еще узнаем.

vganin
Offline
Зарегистрирован: 03.07.2019

b707 пишет:

vganin пишет:

а вам, я думаю, форум мало что дает, разве повеселиться, ну знаниями поделиться- кто захочет.

так форум для обучения и не предназначен, он для общения и приятного проведения времени. Иногда и в курилке можно много интересного узнать. если удачно собеседника разговорить, но вряд ли стоит рассчитывать получить серьезные знания по медицине, покуривая с хирургом в обеденный перерыв :)

Тут Вы в корень: "серьезные знания по медицине, покуривая с хирургом в обеденный перерыв". Ардуино- это игрушка( если посмотреть раздел "Проекты"). "Кому то шахматы-они вождям полезней, мне -бильярд, оттачивает глаз"как сказал Маяковский. Тренировка для ума, повышение общего образовательного уровня. Я то это все уже прошел(не ардуино конечно).Кому-что в этой жизни,

 и теперь больше в практическая сторона применения меня интересует.