Пианино на микроконтроллере PIC18F4550

В данном проекте представлен пример простого аудио устройства с использованием PIC-микроконтроллера. При использовании только портов ввода/вывода, мы разработали простое пианино/синтезатор в 8-битном стиле. Для программирования 8-битного микроконтроллера PIC18F4550 используется PicPgm.

Мы решили использовать микроконтроллер PIC18F4550 исходя из размера памяти программ (32 КБ).

Для начала каждому порту необходимо присвоить следующие функции:

pins-i-o-cc3b3pia.png

Зеленые выводы на рисунке определены как входы, красные выводы как выходы.

Далее выводы определены, как указано ниже в программном коде:

entradas-saidas.png

Входы с b1 по b11 являются нажимными кнопками в схеме, в то время как вход режима – это переключатель, который отвечает за выбор рабочего режима работы. Выходы с l1 по l11 отвечают за подключение светодиодов. Каждый светодиод располагается вверху над соответствующей нажимной кнопкой и загорается, когда проигрывается соответствующая музыкальная нота. Аудио выход – это вывод контроллера, который подключается к динамику.

Принципиальная схема была разработана с помощью программного обеспечения с открытым исходным кодом KiCad:

mc216_sch.png

Затем был изготовлен макет печатной платы:

pcb.png

Также было создано 3-х мерное изображение готовой печатной платы:

dsc02104.png

Для изготовления устройства использовалась двухсторонняя печатная плата. Схема была напечатана на журнальной бумаге с помощью лазерного принтера, далее перенесена на печатную плату методом ЛУТ. Сначала необходимо перенести на одну сторону, далее засверлить несколько отверстий для выравнивания макета с другой стороной:

dsc02086.jpg

dsc02085.jpg

После этого печатная плата была опущена в раствор хлорного железа для вытравливания:

dsc02091.jpg

dsc02092.jpg

Остатки тонера необходимо удалить с помощью губки под потоком теплой воды:

dsc02096.jpg

dsc02095.jpg

Далее мы просверлили все необходимые отверстия и установили компоненты на свое место. Мы использовали компоненты из старых электронных устройств. Нажимные кнопки — из старого видеомагнитофона, светодиоды — из модема, а динамик — из старого будильника.

Готовая печатная плата имеет следующий вид:

dsc02157.jpg

dsc02158.jpg

Описание работы устройства:

dsc02102-cc3b3pia.jpg

В режиме Playing (Проигрывание), когда выбран mode=0 (режим=0), нажимные кнопки с b1 по b11 соответствуют клавишам “ пианино”:

b1 – A (440 Гц)
b2 – B (494 Гц)
b3 – C2 (261×2 Гц)
b4 – D2 (293×2 Гц)
b5 – E2 (329×2 Гц)
b6 – F2 (349×2 Гц
b7 – G2 (392×2 Гц)
b8 – A2 (440×2 Гц)
b9 – B2 (494×2 Гц)
b10 – C4 (261×4 Гц)
b11 – D4 (293×4 Гц)

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

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

Например, когда нажата кнопка b1, проигрывается нота A. Поэтому для создания звука, прямоугольный сигнал частотой 440 Гц подается на аудио выход. Мы знаем, что период сигнала составляет приблизительно 1/440 = 2272 микросекунд. Поэтому аудио выход имеет высокий уровень в первую половину времени (1136 микросекунд) и далее низкий уровень во вторую половину.

if (b1)
{
 audio=1;
 delay_us(1136);
 audio=0;
 delay_us(1136);
}

Также, кроме воспроизведения звука ноты A, зажигается соответствующий светодиод l1.

В режиме Memory (Память) каждая кнопка ассоциируется с конкретным музыкальным фрагментом, который воспроизводится при нажатии этой кнопки.

Каждый музыкальный фрагмент в памяти составляется из двух массивов, один для частот или музыкальных нот, и другой для временных интервалов. Данные массивы впоследствии считываются функцией Sound_Play(x,y) из используемого компилятора (микроC).

И наконец, кнопка b0  — это сброс всей схемы.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
U1 МК PIC 8-бит PIC18F4550 1
C1 Электролитический конденсатор 220 мкФ 1
R1-R5, R7-R14 Резистор 9 кОм 13
R6, R15 Резистор 220 Ом 2
D1 Светодиод Красный 1
D2-D12 Светодиод Зеленый 11
SW1-SW12 Кнопка тактовая TACT-64N-F 12 Или другая подобная
SW13 Переключатель 1
SP1 Динамик 1
Power IN P1 Разьем питания 1