Насколько масштабен мой проект - я сам не знаю....
Мне просто нравится программировать и Хаммонд я люблю...
Все предыдущие проекты я делал на 8-битных контроллерах семейств PIC16F и Atmega... Программировал на Ассемблере (так получилось, я начинал изучать Ассемблер на КР580ВМ80А и Z80, еще на бумаге вручную по справочнику), С мне был не интересен, да и нужды в нем не было - на Асме все работает заметно быстрее и код получается компактнее, для PIC16F и Atmega это весьма актуально. Думаю, что на С мой Moog просто невозможен - там все очень впритирочку - и размер кода, и быстродействие. То же касается первого варианта Хаммондовского звукогенератора - запаса по быстродействию на Atmega8 практически не осталось, вся генерация шла в прерывании, а паузы едва хватало на принятие управляющих кодов (частота основной и амплитуды всех гармоник для трех каналов).
Ну, естественно, я решил, что 32-битный проц на 48МГц будет быстрее 8-битного на 16МГц ровно в 12 раз!
И тут меня ожидало некоторое разочарование... Я-то (наивный!) думал, что освоить еще один Асм - задачка для меня несложная... А вот не вышло. Система команд совершенно иная, чем на привычных мне 8-битных, да еще и никак не получалось запустить под IAR проект на Асме, а проконсультироваться было просто не у кого - все ж на С программируют... (ну, на сегодняшний день я, конечно, на Асме для STM могу помигать светодиодом
, но сложную прогу написать по-прежнему не получится). Пришлось осваивать С... Кому-то смешно, но я и сейчас его знаю хреновенько
- пишу свои проги в Асмовской манере: проверка простых условий, минимум переходов и вызовов, работа с регистрами периферии напрямую...
Ну, в общем, долго ли, коротко ли, но был написан первый вариант Хаммонда для STM32F030С8Т6. Для начала прога просто опрашивала клавиатуру и выдавала звук, интерфейса пока не было (позже появился двухстрочный символьный дисплей 1602). Самое смешное - звук был действительно похож на орган (на тот самый Велтмайстер
, в частности) - ну, это был еще не Хаммонд... Выводил звук я на 12-битный ЦАП MCP4921. Было к тому несколько причин (одна из которых - у меня он был в наличии и имелся опыт работы с ним). Разрядность, конечно, маловата, но дальше предполагалась аналоговая фильтрация. В процессе вылез один дефект - ЦАП-то хороший, но на главном переходе (типа из 0х7FF в 0х800) давал помеху, этак с 4 младших разряда... На полном сигнале (12 бит) - незаметно, а вот если звучит одна нота да не на всех гармониках - очень даже слышно. Как ни странно, помогла замена проца на STM32F051С8Т6 - он почти такой же, но имеет встроенный 12-битный ЦАП, свободный от этого недостатка, к тому же более быстрый (не нужно слать данные по SPI). Концепция вырисовывалась следующая - процессорный модуль генерирует чистый звук органа (он же опрашивает клавиатуру, кнопки и потенциометры интерфейса и выводит индикацию на дисплей), а дальше звук обрабатывается аналоговым образом - проходит перегруз (регулируемый, конечно ), имитацию Лесли (ну какой же Хаммонд без Лесли!
) - и все. Имитатором Лесли (и настройкой перегруза) управляет тот же проц - по задумке все настройки предполагалось записывать в память в виде пресета, для чего была предусмотрена еще и микросхема флешь-памяти (в STM нет отдельной флешь-памяти данных, что довольно неудобно).
[