Поэтому на этот раз я выбрал ATTINY11-8. Объем ПЗУ там в 4 раза меньше, чем в мега48 - ровно 1024 Байт, а оперативной памяти и энергонезависимой флеш-памяти нет совсем.
В первой части наш контроллер издавал один звук на одной частоте. Я решил заставить его проигрывать мелодии. В результате получилась компактная программа размером 272 байта, под ноты осталось 752 байта (по 1 байту на ноту), то есть 752 ноты. Это почти 3 минуты звучания.
Ноты двух длительностей, 8-е и 16-е + две паузы 8 и 16. Всего 2 октавы.
Мелодии записываются через запятую в конце программы после директивы .db в виде констант: C - до, D - ре, E - ми, F - фа, G - соль, A - ля, B - си. Знаком диеза служит подчеркивание (_), ставится после ноты. Чтобы обозначить ноты второй октавы - после знака ноты и если есть диез после знака диеза ставится двойка (2).
Пример:
.db e2, d_2, e2, d_2, e2, b, d2, c2, a, p
Короткие (16-е) ноты и паузы предваряются иксом (x).
Пример:
.db xc2, xp
В каждой строчке количество значений должно быть четным.
Общее количество нот указывается перед мелодией (см. исходный код).
Так выглядит симуляция в Proteus ISIS:
В следующей части я попытаюсь на основе AVR создать секвенсор.
2 комментария:
Попробуем на досуге.
Довольно-таки интересно
Отправить комментарий