Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 10.04.2012, 00:05  
EugeneRifan
Прохожий
 
Регистрация: 09.04.2012
Сообщений: 1
Сказал спасибо: 6
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
EugeneRifan на пути к лучшему
По умолчанию Синтезатор на PIC16f876

Здраствуйте уважаемые эксперты!
Прошу помочь в небольшом проекте, а имеaнно "пианино на PIC16F876"
Есть принципиальная электрическая схема
И блок-схема программы

Помогите пожалуйста реализовать функцию проигрования мелодии из памяти в которой она предварительно записана нажатием дополнительной клавиши (таковая не предусмотрена в исходной схеме)
Все детали тут https://docs.google.com/document/d/1...KYKYTeWnE/edit
Реклама:
EugeneRifan вне форума  
Непрочитано 10.04.2012, 00:56  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: Синтезатор на PIC16f876

Ну очевидно придется сохранять в памяти начальное значение таймера для формирования частоты и переменная для хранения длительности ноты. Лучше все это собрать в красивую структуру и с ней работать. В еепром может быть писать смысла мало - не так много информации. Но раз требуется, можно это сделать в прерывании по флагу занятости еепром или по таймеру.
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
EugeneRifan (11.04.2012)
Непрочитано 10.04.2012, 20:11  
Bumbarra
Вид на жительство
 
Регистрация: 16.09.2011
Сообщений: 343
Сказал спасибо: 10
Сказали Спасибо 171 раз(а) в 104 сообщении(ях)
Bumbarra на пути к лучшему
По умолчанию Re: Синтезатор на PIC16f876

Цитата:
С помощью данного синтезатора можно имитировать игру пианина в пределах одной октавы
Причем, именно пианинА. (Если правильно, то пианинО ) Такая вот очень странная пиёнина, в которой "Если нажаты сразу несколько кнопок, то частота звучания будет соответствовать среднеарифметической частоте нажатых клавиш". Это совсем не правильно. Лучше в тексте программы эту функцию убрать нафик, поскольку извлекаемый в таком случае "среднеарифметический" тон не будет иметь ничего общего с общепринятыми нотами.
Разница в частотах между двумя нотами, например, до и ре математически равна корню 12-й степени из 2 в квадрате. Кроме случая с нотами ми - фа и си - до- там разница равна корню 12-й степени из 2. Частота ноты ля должна быть кратна 440 Гц. Октава - это разница в 2 раза по частоте.

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

Если же автор проекта попытался вычислением среднеарифметической частоты имитировать звучание аккорда, то есть когда нажаты 3 и более клавиш, то это не правильно. В аккорде должны звучать одновременно три и более разных тона (частоты), соответствующих нажатым клавишам. Да и диапазон клавиатуры тогда всяко превысит одну октаву, да и потребуется все 12 клавиш в октаве - без них никак, октава делится на 12 равных интервалов с разницей между ними в корень 12-й степени из 2. Да и клавиши в аккорде нажимаются не "отфанаря", а строго определенные. (вон уважаемый st__1 дофига знает по этой теме, ыгыгыг)

Поэтому - я за то, чтобы убрать совсем такую затею со среднеарифметическим - упростится код, существенно разгрузятся вычисления. Лучше уж дописать фильтр нажатия клавиш, чтобы звучала какая-либо одна нота.

Насколько я понимаю, частота тона синтезируется методом изменения периода ШИМ регистром PR2, а скважность импульсов постоянна и равна 2.

EEPROM контроллера всего 256 байт.
По-хорошему, нужно бы сохранять значения не только длительности и ноты, но и паузы между нотами. Есть такие мелодии, где паузы просто необходимы. Например, когда одна и та же нота повторяется несколько раз через промежутки. Да хотя бы если вспомнить мелодию "в траве сидел кузнечик" - видно, что есть паузы между фразами.
Да и вообще, тогда воспроизводимая мелодия будет больше похожа на ту, что игралась пальцами.

Проигрывание мелодии не должно вызывать затруднений - ну просто еще одна кнопка на свободном порту с опросом состояния. В случае выявления нажатия - переход к чтению EEPROM с нулевого адреса, формированию длительности и высоты нот и паузы. Конец записанной мелодии определяется, когда очередной прочитанный байт будет содержать код ("стоп-байт"), сформированный после окончания записи последней ноты. Ну или по достижению последнего адреса EEPROM.
И не забыть блокировать реакцию на нажатия всех кнопок кроме одной (пуск-стоп) во время проигрывания записанной мелодии.

Итого, получается блокизаписи по 3 байта - высота ноты, ее длительность и длительность паузы между нотами.
Вот и выходит, что из 256 байт остается только 85. Но этого, думаю, для коротенькой мелодии всяко хватит. На крайняк, если 85 нот не достаточно, можно установить внешнюю память по последовательному интерфейсу - благо, свободны линии, по которым можно организовать SPI или I2C интерфейс.
Но это, имхо, излишне, ибо сам алгоритм утройства слишком уж примитивный и неправильный. Годится разве что натыкать "в траве сидел кузнечик".

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

Последний раз редактировалось Bumbarra; 10.04.2012 в 20:30.
Bumbarra вне форума  
Сказали "Спасибо" Bumbarra
EugeneRifan (11.04.2012)
Непрочитано 10.04.2012, 20:19  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,328
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Синтезатор на PIC16f876

Сообщение от Bumbarra Посмотреть сообщение
получается блокизаписи по 3 байта - высота ноты, ее длительность и длительность паузы между нотами.
Думается, что хватит и 2-х байтов, если принять, что пауза - это та же нота, только высотой = 0.
Ваще-то, предложенная система работает по принципу: при любом изменении состояния клавиш записывается текущее значение таймера и новое состояние клавиш. После этого начинается новый отсчёт таймера до следующего изменения клавиш. Тем самым длина паузы, т.е. все клавиши отпущены, записывается автоматически, как и обычная нота ...

Последний раз редактировалось Yurkin2007; 10.04.2012 в 20:24.
Yurkin2007 вне форума  
Сказали "Спасибо" Yurkin2007
EugeneRifan (11.04.2012)
Непрочитано 10.04.2012, 20:37  
Bumbarra
Вид на жительство
 
Регистрация: 16.09.2011
Сообщений: 343
Сказал спасибо: 10
Сказали Спасибо 171 раз(а) в 104 сообщении(ях)
Bumbarra на пути к лучшему
По умолчанию Re: Синтезатор на PIC16f876

А, ну в общем то да.. Записанное переполнение таймера 0xFF и нулевое состояние клавиш, в принципе то и будет стоп-байтом при воспроизведении.

И всё-таки я бы убрал из программы вычисление среднеарифметической частоты, если нажаты несколько клавиш - это не имеет ничего общего с реальными нотами, и тем более, с аккордами.
Зато добавил бы фильтр на одновременные нажатия

Последний раз редактировалось Bumbarra; 10.04.2012 в 20:41.
Bumbarra вне форума  
Сказали "Спасибо" Bumbarra
EugeneRifan (11.04.2012)
Непрочитано 10.04.2012, 21:23  
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: Синтезатор на PIC16f876

Сообщение от EugeneRifan Посмотреть сообщение
Прошу помочь в небольшом проекте, а имеaнно "пианино на PIC16F876"
Есть принципиальная электрическая схема
Да бросьте... никто свой мозг в этом колхоз-навозе мочить не будет... поверьте...
Хотите что-то получить стоящее (в вашем понимании) - делайте всё сами...
Сообщение от Bumbarra Посмотреть сообщение
уважаемый st__1 дофига знает по этой теме
А то...

EugeneRifan, загляните сюда... и сюда...
Там, благодаря tester'у... дай бог ему здоровья...есть всё, что вам надо... и схемы, и исходники, и теория, и практика... Нужно только лишь ваше желание...
st__1 вне форума  
Сказали "Спасибо" st__1
EugeneRifan (11.04.2012)
Непрочитано 11.04.2012, 16:48  
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,672
Сказал спасибо: 74
Сказали Спасибо 1,806 раз(а) в 654 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Синтезатор на PIC16f876

EugeneRifan, а может Вам стоит сделать MIDI-клавиатуру, а не "пианино"? Простыми алгоритмами и прямоугольной формой сигнала Вы все равно ничего хорошего не получите. А MIDI-клавиатура - это, по сути, просто передатчик команд синтезатору (или звуковой карте на компьютере). Достаточно просто реализуется, и результат не разочарует.
RECTO вне форума  
Сказали "Спасибо" RECTO
EugeneRifan (11.04.2012)
Непрочитано 11.04.2012, 19:19  
Bumbarra
Вид на жительство
 
Регистрация: 16.09.2011
Сообщений: 343
Сказал спасибо: 10
Сказали Спасибо 171 раз(а) в 104 сообщении(ях)
Bumbarra на пути к лучшему
По умолчанию Re: Синтезатор на PIC16f876

Нууу может и не так уж и просто то миди-клавиатура реализуется. Конечно, простейшая - она то просто. А вот полноценная...
Сам протокол миди не сложен. В простейшем случае 3 байта информации, передаваемых асинхронно последовательно - статусный байт, содержащий в старшем полубайте команду, в младшем полубайте канал; байт номера ноты или контроллера и байт значения скорости или значение контроллера.

Так что, придется формировать байт Velocity, предающий информацию о скорости нажатия клавиши. Клавиши полноценной миди-клавиатуры - аналоговые, а не простые кнопки с двумя состояниями. Многоканальные АЦП ...
Bumbarra вне форума  
Непрочитано 11.04.2012, 22:25  
RECTO
Супер-модератор
 
Регистрация: 09.06.2011
Сообщений: 2,672
Сказал спасибо: 74
Сказали Спасибо 1,806 раз(а) в 654 сообщении(ях)
RECTO на пути к лучшему
По умолчанию Re: Синтезатор на PIC16f876

Сообщение от Bumbarra Посмотреть сообщение
Нууу может и не так уж и просто то миди-клавиатура реализуется. Конечно, простейшая - она то просто. А вот полноценная...
Насколько я понял, изначально речь шла о не сложном устройстве, с простыми клавишами...
В общем-то, для любительского применения обычно бывает достаточно простой клавиатуры, с фиксированным значением Velocity.

Сообщение от Bumbarra Посмотреть сообщение
Так что, придется формировать байт Velocity, предающий информацию о скорости нажатия клавиши. Клавиши полноценной миди-клавиатуры - аналоговые, а не простые кнопки с двумя состояниями. Многоканальные АЦП ...
Совсем не обязательно. Параметр "Velocity" - это скорость нажатия клавиши. Поэтому есть другой, и достаточно простой путь сделать полноценные клавиши - снабдить их 2-мя контактами, и замерять время от размыкания одного контакта до замыкания другого. Чем меньше это время, тем больше Velocity.

Последний раз редактировалось RECTO; 11.04.2012 в 22:28.
RECTO вне форума  
 

Закладки

Метки
pic16f876, генерация звуков, синтезатор
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC16F876 Pavel55 Микроконтроллеры, АЦП, память и т.д 30 05.10.2011 19:18
PIC16F876 sderf Цифровые сигнальные процессоры 1 17.12.2010 19:12
Синтезатор kviper Автоматика и аппаратура связи 0 02.02.2007 16:23
pic16f876 алексей Микроконтроллеры, АЦП, память и т.д 1 30.12.2005 22:43
Pic16f876/3 Дима Микроконтроллеры, АЦП, память и т.д 7 04.08.2003 10:13


Часовой пояс GMT +4, время: 03:03.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot