С помощью данного синтезатора можно имитировать игру пианина в пределах одной октавы. 7 кнопок играют роль клавиш, каждая из которых соответствует своей ноте. Если нажаты сразу несколько кнопок, то частота звучания будет соответствовать среднеарифметической частоте нажатых клавиш. Во время игры мелодия записывается в EEPROM, и при нажатии специальной кнопки можно ее прослушать.
Принципиальная электрическая схема
Блок-схема программы
Если же была нажата одна (или несколько) клавиша, которая соответствует какой-либо ноте, то дальше работа устройства пойдет по алгоритму записи. Если есть свободной место в EEPROM, то туда будет записана длительность звучания предыдущей частоты (значение таймера) и новое состояние порта В. Если же свободного места больше нет, то светодиод VD8 гаснет и выставляется флаг “конец записи”, т.е. подпрограмма записи в EEPROM работать не будет. Затем определяется какие клавиши были нажаты и происходит суммирование их частот. Потом данная сумма делится на количество нажатых клавиш. Таким образом, находится среднеарифметическое значение новой частоты. Затем происходит сброс таймера, т.е. начало счета длительности звучания новой частоты и вызывается подпрограмма записи в EEPROM. Данная частота будет выводиться на динамик пока не произойдет следующее нажатие клавиш. Если произошло переполнение таймера, то генерируется прерывание. В подпрограмме прерываний также записывается в EEPROM состояние порта В, а в ячейку для длительности значение H’FF’ (переполнение таймера).
При воспроизведении сначала из EEPROM считывается количество комбинаций нажатых клавиш. Затем устанавливается флаг “воспроизведение”. Он нужен для подпрограммы прерываний. Затем искусственным путем вызывается прерывание. В начале подпрограммы прерываний при воспроизведении идет проверка на окончание, т.е. вся мелодия прозвучала или нет. Затем считываются комбинация нажатых клавиш и определяется новая частота. Потом считывается время звучания новой частоты и запись ее в таймер. При выходе из подпрограммы прерываний происходит зацикливание и ожидается переполнение таймера, которое вызовет новое прерывание, а следовательно, будет новая частота и новая длительность звучания.
В данном архиве (piano.zip) находятся: piano.hex — файл-прошивка для микроконтроллера; piano.asm — файл программы MpLab с подробнейшеми комментариями; piano.sch и piano.pcb — соответственно принципиальная схема и печатная плата в формате ACCEL EDA.