разбирал, как мог Ваш код для floppy-HDD. будьте добры поправьте то что я понял. частоты для исполнительных механизмов все равно генерятся с помощью 16- битного таймера,но без использования tone().C дискретностью 40кгц формируется прерывание. Партия для каждого исполнительного механизма написана в файлах данных. Не понял как и где обрабатывается прерывание, совсем не понял- как переключается 16 битный таймер между пинами.
Если потроллить, то без проблем, но можно и не отвечать.
Не совсем так. С помощью таймера генерится прерывание с частотой 40000 раз в секунду. В прерывании последовательно (развернутым циклом) просматриваются все 7 каналов и при необходимости пин канала перекидывается в противоположное состояние. Необходимость перекидывания определяется тем, закончился полупериод сигнала в данном канале или нет. Т.е. декрементируется счетчик, если счетчик ушел в 0, происходит перекидывание пина и загрузка в счетчик длительности противоположного полупериода. Полупериоды могут быть как равны между собой, так и отличаться на 1 - для более точного строя.
Т.е. таймер между пинами не переключается: таймер лишь генерит прерывания, а внутри прерываний программно переключаются пины.
В основном цикле отслеживается темп и вовремя переключаются ноты - т.е. изменяются длительности полупериодов, используемые в прерывании.
Т.е., грубо говоря, работа выглядит так:
- в основном цикле отслеживается время и в нужные моменты переключаются ноты, для чего изменяются переменные длин положительного и отрицательного полупериодов (выраженных в тактах частоты 40 Гц), а также инициализируются счетчики.
- в прерывании на 1 уменьшается счетчик, если он достиг 0, перекидывается нужный пин, а в счетчик заносится величина следующего полупериода.
Собственно, из 7 каналов первые три предназначены для floppy, а четыре последних - для HDD. То, что для HDD - как раз то, что Вам нужно: с этих пинов можно сразу снимать сигналы и микшировать их через резисторы. Для floppy немного сложнее - там еще нужно управлять сигналом направления шага - он Вам не нужен.
Для начала попытайтесь тупо смикшировать между собой (через резисторы) пины pin_sound_0 - pin_sound_6.
Спасибо за комментарий. Уже 5 раз перечитываю и это выше моего понимания. Прошу собрать остатки Вашего терпения и ответить на несколько глупых вопросов. Меня сейчас так бросать нельзя.
1. Пока для HDD- звук(нота из базы данных) извлекается частотой ударов коромысла о барабан?
2.Раз тактируется все 40 кгц, то звуки не являются нотным станом, а являются ШИМ подключенный к чему то, могущему дребезжать.(я не уверен в этом вопросе, пока думаю-как это я могу зделать).
3. То что извлекает каретка floppy- это экспериментально подобранный звук типа гвоздь о стекло.
Еще раз спасибо за терпение. Я не программист , но только теперь понял разницу в мышленнии.
Если долго смотреть на скетч, то кое что проясняется. Я не могу понять множество синтаксических конструкций и не могу их найти. Написание других отличается от учебника. Тяжко.
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.
А я грешным делом уже начал на форум грешить, что функцию тоне описали неверно и, что может использовать более одного таймера )))
Хорошо, хорошо... Только до суицида не доходите...
Цитата:
1. Пока для HDD- звук(нота из базы данных) извлекается частотой ударов коромысла о барабан?
Нет, коромысло играет роль диффузора динамика. Конечно, не слишком эффективно, но - как может. Поэтому каналы HDD целесообразно использовать для высоких нот.
Цитата:
2.Раз тактируется все 40 кгц, то звуки не являются нотным станом, а являются ШИМ подключенный к чему то, могущему дребезжать.(я не уверен в этом вопросе, пока думаю-как это я могу зделать).
Что такое "звуки не являются нотным станом" я не понимаю. И ШИМ точно не использую. Так что, скорее всего, Вы что-то не так поняли.
Цитата:
3. То что извлекает каретка floppy- это экспериментально подобранный звук типа гвоздь о стекло.
Нет. Если Вы обратили внимание на звуки, издаваемые дисководом при перемещении головки, они имеют ярко выраженную тональную окраску. Так вот, у меня дисковод банально "шагает" с дорожки на дорожку со звуковой частотой. Естественно, максимальная частота шагов механической конструкции ограничена, поэтому каналы дисководов возможно использовать только для сравнительно низкочастотных звуков.
У Вас наблюдается болезнь большинства новичков: вместо того, чтобы взять и попробовать самому, Вы задаете на форуме массу вопросов. Еще раз: откомпилируйте указанный проект как есть и запустите его, предварительно соединив 7 выводов контроллера с pin_sound_0 по pin_sound_6 резисторами номиналом от 1 до 100 кОм со входом УМЗЧ.
Если долго смотреть на скетч, то кое что проясняется. Я не могу понять множество синтаксических конструкций и не могу их найти. Написание других отличается от учебника. Тяжко.
Да, значительное количество стандартных функций Ардуино заменено на аналоги.
Стандартные функции универсальны и в большинстве случаев используют защиту от дурака, из-за чего весьма медлительны. Использованные мною аналоги не являются универсальными и не используют никакие проверки, поэтому работают в десятки и сотни раз быстрее. Еще раз повторю: контроллеры AVR слишком маломощные для звука, поэтому приходится использовать их на пределе возможностей.
Через мосфет звучание не сильно отличается от усилителя.
Почему то играет только начальный фрагмент. Как ни бился, не смог починить. Попутно вопрос- откуда у про-мини столько пинов. У меня нано только была. Номера звуковых пинов поменял. Может файл вывода от Архата теперь не подходит.
Не могу не задать вопро ANDRIANO, а то взорвусь. Может опять глупость, но если осталось терпение-прошу разжевать. Предположим нам нужна нота(ардуиновский меандр) 1000 ГЦ(штук в секунду). С помощью тактируемых прерываний мы формируем эти меандры 1000 штук, обработав 2000 прерываний(я пока так понял) или растягиваем все 40000 прерываний на эту ноту. Или вычисляем количество прерываний для необходимой длительности ноты, а потом равномерно заполняем(учитывая, что одно прерывание делает половинку меандра).
1. А на форум я и выкладывал только начальный фрагмент. Там на самом деле довольно много, поэтому пришлось обрезать. Но, чтобы понять что к чему, достаточно и этого фрагмента. Ну а "починить" - самому дописать все, что хочется услышать.
2. В массивах партитуры записаны метки времени (т.е. время, когда пора менять ноту) и период ноты в единицах периода прерываний т.е. в 25-мкс интервалах. Для частоты 1 кГц, очевидно, период будет равен 40. Полупериод, соответственно, 20 (второй полупериод - тоже 20, хотя, если бы период был, скажем, 51, то первый полупериод равнялся бы 25, а второй - 26).
Вот это число 20 и записывается в счетчик. Каждое прерывание счетчик декрементируется. Как только счетчик достигнет 0, происходит следующее:
- пин соответствующего голоса перебрасывается в противоположное состояние,
- в счетчик записывается величина второго полупериода,
после чего процесс повторяется, т.е. по прошествии еще 20 прерываний пин будет переброшен обратно, т.е. за 40 прерываний будет сформировано два полупериода выходной частоты каждый по 20 периодов, что и соответствует 1 кГц.
3. По поводу количества пинов ПроМини вопроса не понял.
Проще и дешевле запрограммировать четыре 16-разрядных счетчика Меги на нужные частоты. А при некоторой ловкости - использовать и до 5 нот, если поднапрячь еще и оставшийся свободным 8-разрядный счетчик.
3. По поводу количества пинов ПроМини вопроса не понял.
На про-мини 13 цифровфх и 4 аналлоговых входа. У Вас 18 цифровых выходов. Хотел узнать -как
На ПроМини, как и на других платах, использующих 328 чип, 20 цифровых пинов. Причем, большинство из этих пинов имеют дополнительные аппаратные функции: реализация протоколов последовательного порта, SPI и I2C шин, ШИМ и аналоговых входов. Вот последние пины в Ардуино почему-то называются аналоговыми. На самом деле это обычные цифровые пины, просто с дополнительной функцией (как и у других цифровых пинов 328 контроллера).
Сейчас для вопрос стоит не Как сделать по другому, а разобраться с этим кодом. Ну я тут уже всех утомил. Надо за букварь.
А что с этим кодом разбираться. Его надо полностью переписывать. А до переписывания надо еще и переосмыслить. А до переосмысливания надо еще научиться. А что бы научится надо толстые книги читать.
Сейчас для вопрос стоит не Как сделать по другому, а разобраться с этим кодом. Ну я тут уже всех утомил. Надо за букварь.
А что с этим кодом разбираться. Его надо полностью переписывать. А до переписывания надо еще и переосмыслить. А до переосмысливания надо еще научиться. А что бы научится надо толстые книги читать.
Ну просто добрейшей души человек. Спасибо за своевременный и ценный совет.
Понятно, что я не туда попал и это не мой уровень (даже по дате регистрации на форуме). тут уж ничего не поделаешь, а вам, я думаю, форум мало что дает, разве повеселиться, ну знаниями поделиться- кто захочет.
а вам, я думаю, форум мало что дает, разве повеселиться, ну знаниями поделиться- кто захочет.
так форум для обучения и не предназначен, он для общения и приятного проведения времени. Иногда и в курилке можно много интересного узнать. если удачно собеседника разговорить, но вряд ли стоит рассчитывать получить серьезные знания по медицине, покуривая с хирургом в обеденный перерыв :)
У 328 чипа в планарном корпусе больше выводов, в частности, есть такие, которых нет в DIP-корпусе: А6 и А7. Но только, в отличие от остальных 20 пинов, эти - исключительно аналоговые входы, они не могут быть назначены цифровыми входами/выходами. Т.е. цифровых входов/выходов все равно 20.
Где то ведь это все написано, а тут даже даташит у разных компаний-разный. На все нужно время, ну а человеку- что бы все и сразу. Какие мои годы- еще узнаем.
а вам, я думаю, форум мало что дает, разве повеселиться, ну знаниями поделиться- кто захочет.
так форум для обучения и не предназначен, он для общения и приятного проведения времени. Иногда и в курилке можно много интересного узнать. если удачно собеседника разговорить, но вряд ли стоит рассчитывать получить серьезные знания по медицине, покуривая с хирургом в обеденный перерыв :)
Тут Вы в корень: "серьезные знания по медицине, покуривая с хирургом в обеденный перерыв". Ардуино- это игрушка( если посмотреть раздел "Проекты"). "Кому то шахматы-они вождям полезней, мне -бильярд, оттачивает глаз"как сказал Маяковский. Тренировка для ума, повышение общего образовательного уровня. Я то это все уже прошел(не ардуино конечно).Кому-что в этой жизни,
и теперь больше в практическая сторона применения меня интересует.
Для ANDRIANO
разбирал, как мог Ваш код для floppy-HDD. будьте добры поправьте то что я понял. частоты для исполнительных механизмов все равно генерятся с помощью 16- битного таймера,но без использования tone().C дискретностью 40кгц формируется прерывание. Партия для каждого исполнительного механизма написана в файлах данных. Не понял как и где обрабатывается прерывание, совсем не понял- как переключается 16 битный таймер между пинами.
Если потроллить, то без проблем, но можно и не отвечать.
Не совсем так. С помощью таймера генерится прерывание с частотой 40000 раз в секунду. В прерывании последовательно (развернутым циклом) просматриваются все 7 каналов и при необходимости пин канала перекидывается в противоположное состояние. Необходимость перекидывания определяется тем, закончился полупериод сигнала в данном канале или нет. Т.е. декрементируется счетчик, если счетчик ушел в 0, происходит перекидывание пина и загрузка в счетчик длительности противоположного полупериода. Полупериоды могут быть как равны между собой, так и отличаться на 1 - для более точного строя.
Т.е. таймер между пинами не переключается: таймер лишь генерит прерывания, а внутри прерываний программно переключаются пины.
В основном цикле отслеживается темп и вовремя переключаются ноты - т.е. изменяются длительности полупериодов, используемые в прерывании.
Т.е., грубо говоря, работа выглядит так:
- в основном цикле отслеживается время и в нужные моменты переключаются ноты, для чего изменяются переменные длин положительного и отрицательного полупериодов (выраженных в тактах частоты 40 Гц), а также инициализируются счетчики.
- в прерывании на 1 уменьшается счетчик, если он достиг 0, перекидывается нужный пин, а в счетчик заносится величина следующего полупериода.
Собственно, из 7 каналов первые три предназначены для floppy, а четыре последних - для HDD. То, что для HDD - как раз то, что Вам нужно: с этих пинов можно сразу снимать сигналы и микшировать их через резисторы. Для floppy немного сложнее - там еще нужно управлять сигналом направления шага - он Вам не нужен.
Для начала попытайтесь тупо смикшировать между собой (через резисторы) пины pin_sound_0 - pin_sound_6.
Спасибо за комментарий. Уже 5 раз перечитываю и это выше моего понимания. Прошу собрать остатки Вашего терпения и ответить на несколько глупых вопросов. Меня сейчас так бросать нельзя.
1. Пока для HDD- звук(нота из базы данных) извлекается частотой ударов коромысла о барабан?
2.Раз тактируется все 40 кгц, то звуки не являются нотным станом, а являются ШИМ подключенный к чему то, могущему дребезжать.(я не уверен в этом вопросе, пока думаю-как это я могу зделать).
3. То что извлекает каретка floppy- это экспериментально подобранный звук типа гвоздь о стекло.
Еще раз спасибо за терпение. Я не программист , но только теперь понял разницу в мышленнии.
Если долго смотреть на скетч, то кое что проясняется. Я не могу понять множество синтаксических конструкций и не могу их найти. Написание других отличается от учебника. Тяжко.
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.А я грешным делом уже начал на форум грешить, что функцию тоне описали неверно и, что может использовать более одного таймера )))
Я не могу понять множество синтаксических конструкций и не могу их найти.Написание других отличается от учебника. Тяжко.
Просмотрел указанный код. Никаких конструкций не описанных в учебниках не заметил. Может вы не те учебники смотрите?
Меня сейчас так бросать нельзя.
1. Пока для HDD- звук(нота из базы данных) извлекается частотой ударов коромысла о барабан?
2.Раз тактируется все 40 кгц, то звуки не являются нотным станом, а являются ШИМ подключенный к чему то, могущему дребезжать.(я не уверен в этом вопросе, пока думаю-как это я могу зделать).
3. То что извлекает каретка floppy- это экспериментально подобранный звук типа гвоздь о стекло.
У Вас наблюдается болезнь большинства новичков: вместо того, чтобы взять и попробовать самому, Вы задаете на форуме массу вопросов. Еще раз: откомпилируйте указанный проект как есть и запустите его, предварительно соединив 7 выводов контроллера с pin_sound_0 по pin_sound_6 резисторами номиналом от 1 до 100 кОм со входом УМЗЧ.
Если долго смотреть на скетч, то кое что проясняется. Я не могу понять множество синтаксических конструкций и не могу их найти. Написание других отличается от учебника. Тяжко.
Стандартные функции универсальны и в большинстве случаев используют защиту от дурака, из-за чего весьма медлительны. Использованные мною аналоги не являются универсальными и не используют никакие проверки, поэтому работают в десятки и сотни раз быстрее. Еще раз повторю: контроллеры AVR слишком маломощные для звука, поэтому приходится использовать их на пределе возможностей.
ТУТ МОЖНО ПОСЛУШАТЬ звучание разных пинов через мосфет
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 прерываний на эту ноту. Или вычисляем количество прерываний для необходимой длительности ноты, а потом равномерно заполняем(учитывая, что одно прерывание делает половинку меандра).
Вот ссылка на работу с усилителем
https://cloud.mail.ru/public/3Uwd/Bq4L5UQE2
1. А на форум я и выкладывал только начальный фрагмент. Там на самом деле довольно много, поэтому пришлось обрезать. Но, чтобы понять что к чему, достаточно и этого фрагмента. Ну а "починить" - самому дописать все, что хочется услышать.
2. В массивах партитуры записаны метки времени (т.е. время, когда пора менять ноту) и период ноты в единицах периода прерываний т.е. в 25-мкс интервалах. Для частоты 1 кГц, очевидно, период будет равен 40. Полупериод, соответственно, 20 (второй полупериод - тоже 20, хотя, если бы период был, скажем, 51, то первый полупериод равнялся бы 25, а второй - 26).
Вот это число 20 и записывается в счетчик. Каждое прерывание счетчик декрементируется. Как только счетчик достигнет 0, происходит следующее:
- пин соответствующего голоса перебрасывается в противоположное состояние,
- в счетчик записывается величина второго полупериода,
после чего процесс повторяется, т.е. по прошествии еще 20 прерываний пин будет переброшен обратно, т.е. за 40 прерываний будет сформировано два полупериода выходной частоты каждый по 20 периодов, что и соответствует 1 кГц.
3. По поводу количества пинов ПроМини вопроса не понял.
vganin, покупаешь 4 таких модуля https://aliexpress.ru/item/32959102437.html и можешь уже организовывать аккордное звучание из 4 нот.
https://www.youtube.com/watch?v=5NsUpivK9OU https://tsibrov.blogspot.com/2018/06/ad9833.html
vganin, покупаешь 4 таких модуля https://aliexpress.ru/item/32959102437.html и можешь уже организовывать аккордное звучание из 4 нот.
https://www.youtube.com/watch?v=5NsUpivK9OU https://tsibrov.blogspot.com/2018/06/ad9833.html
Квон, ты этого хочешь: https://youtu.be/axXrs55X9kE ?
3. По поводу количества пинов ПроМини вопроса не понял.
На про-мини 13 цифровфх и 4 аналлоговых входа. У Вас 18 цифровых выходов. Хотел узнать -как
Сейчас для вопрос стоит не Как сделать по другому, а разобраться с этим кодом. Ну я тут уже всех утомил. Надо за букварь.
3. По поводу количества пинов ПроМини вопроса не понял.
На про-мини 13 цифровфх и 4 аналлоговых входа. У Вас 18 цифровых выходов. Хотел узнать -как
Сейчас для вопрос стоит не Как сделать по другому, а разобраться с этим кодом. Ну я тут уже всех утомил. Надо за букварь.
Сейчас для вопрос стоит не Как сделать по другому, а разобраться с этим кодом. Ну я тут уже всех утомил. Надо за букварь.
Ну просто добрейшей души человек. Спасибо за своевременный и ценный совет.
На про-мини 13 цифровфх и 4 аналлоговых входа. У Вас 18 цифровых выходов. Хотел узнать -как
забано вы считаете, давайте я вас проверю
"Цифровые пины" с 0 по 13 - это 14 выходов. "Аналоговые" с А0 по А5 - это еще 6
Итого цифровых портов - 14 +6= 20
Тогда уж на мини 14 +8
Понятно, что я не туда попал и это не мой уровень (даже по дате регистрации на форуме). тут уж ничего не поделаешь, а вам, я думаю, форум мало что дает, разве повеселиться, ну знаниями поделиться- кто захочет.
Тогда уж на мини 14 +8
расшифруйте
а вам, я думаю, форум мало что дает, разве повеселиться, ну знаниями поделиться- кто захочет.
так форум для обучения и не предназначен, он для общения и приятного проведения времени. Иногда и в курилке можно много интересного узнать. если удачно собеседника разговорить, но вряд ли стоит рассчитывать получить серьезные знания по медицине, покуривая с хирургом в обеденный перерыв :)
Тогда уж на мини 14 +8
У 328 чипа в планарном корпусе больше выводов, в частности, есть такие, которых нет в DIP-корпусе: А6 и А7. Но только, в отличие от остальных 20 пинов, эти - исключительно аналоговые входы, они не могут быть назначены цифровыми входами/выходами. Т.е. цифровых входов/выходов все равно 20.
Где то ведь это все написано, а тут даже даташит у разных компаний-разный. На все нужно время, ну а человеку- что бы все и сразу. Какие мои годы- еще узнаем.
а вам, я думаю, форум мало что дает, разве повеселиться, ну знаниями поделиться- кто захочет.
так форум для обучения и не предназначен, он для общения и приятного проведения времени. Иногда и в курилке можно много интересного узнать. если удачно собеседника разговорить, но вряд ли стоит рассчитывать получить серьезные знания по медицине, покуривая с хирургом в обеденный перерыв :)
Тут Вы в корень: "серьезные знания по медицине, покуривая с хирургом в обеденный перерыв". Ардуино- это игрушка( если посмотреть раздел "Проекты"). "Кому то шахматы-они вождям полезней, мне -бильярд, оттачивает глаз"как сказал Маяковский. Тренировка для ума, повышение общего образовательного уровня. Я то это все уже прошел(не ардуино конечно).Кому-что в этой жизни,
и теперь больше в практическая сторона применения меня интересует.