Sv1ca-4.ru

Строй журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Pic16f753 уменьшить ток подсветки

Музыкальная шкатулка на PIC16F753

Меня в свое время очень впечатлил этот пост о создании светомузыкального устройства на микроконтроллере в подарок любимой. И однажды пришло мое время сделать такой подарок. Учитывая отличия от автора упомянутого проекта в навыках и инструментарии; будучи сильно ограничен во времени подготовки (3-4 дня), я пошел другим путем и разработал свое музыкальное устройство для установки в купленную в сувенирном магазине шкатулку. Оно отличается более простой схемой и легкостью изготовления. В статье описываются подробности моего проекта и их мотивация. Осторожно, фотографии (всего около 1Мб).

Схема


Как видите, деталей очень мало. Питание в диапазоне +3..+4.8В от трех батареек типа AAA подходит без применения стабилизаторов как микроконтроллеру D1 (PIC16F753), так и усилителю DA1 (TDA7052A). Данная микросхема усилителя является уникальной в своем роде, потому что среди своих аналогов она требует минимальное количество внешних элементов. Применение усилителя мощности необходимо: при попытке подключить выход микроконтроллера напрямую к динамику, достаточную громкость получить не удастся.

Для работы усилителя необходим конденсатор C1 емкостью 220мкФ. Без конденсатора нельзя: если внутреннее сопротивление источника питания недостаточно мало, то звучать будет тихо и с сильными искажениями. Также необходим конденсатор C4 для развязки аудиосигнала по постоянному току. Подстроечным резистором R2 регулируется громкость. R1 ограничивает диапазон регулировки. Совместно с конденсатором C3 он также образует фильтр низких частот. В принципе C3 можно не ставить. Я поначалу так и хотел сделать, но потом мне показалось, что для уменьшения искажений звука лучше убрать из него ультразвуковые частоты, поставив C3.

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

Пару слов о выборе микроконтроллера. Самый главный критерий — диапазон напряжения питания. Когда батарея почти разряжена, напряжение на ней проседает до 3В (по 1В на элемент). В свежем же состоянии напряжение может подниматься до +4.8В и даже более. К сожалению, более современные 16-битные микроконтроллеры, имеющие высокую скорость и много памяти, обычно требуют питание в диапазоне +2.7..+3.6В. Чтобы понизить напряжение, пришлось бы применять стабилизатор, причем не любой, а с малым падением напряжения (Low Drop-out), учитывая напряжение на батарее под конец ее службы. Я решил не усложнять. Из контроллеров фирмы Microchip (с ними у меня больше всего опыта и имеется программатор), поэтому, подходят только 8-битные. Также можно было бы использовать 16-битные из серии PIC24F. В следующей музыкальной шкатулке я, наверное, так и сделаю. Все-таки PIC16F753 очень уж тесноват как по скорости, так и по объему памяти. Но зато у него имеется встроенный 9-битный ЦАП, что очень подходит для синтеза звука.

Для простоты и надежности я также решил не использовать какие-либо схемы управления питанием и энергосбережением. Простой выключатель (на схеме не показан) разрывает цепь батареи, и все.

Сборка

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

Печатную плату я не делал. Дома нет для этого условий, а на заводе заказывать — слишком долго и дорого. Поэтому собирал схему на макетной плате. Удалось вырезать лобзиком кусок платы по размерам шкатулки. Размеры и форма предопределили компоновку деталей. Вот фотка на промежуточных стадиях сборки:

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

Вид с обратной стороны платы. Как видите, длинные или пересекающиеся соединения выполнены проводом МГТФ, а короткие — обрезанными ножками от конденсаторов и резисторов. После проверки работоспособности схемы на тестовой прошивке можно приступать к разработке и отладке основной программы. Подробнее о ней ниже.

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

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

Прорезаем ножиком дырку для выключателя. Шилом протыкаются дырочки над динамиком. Далее приклеиваем выключатель к картонке и динамик на штатное место платы:

Окончательный вид открытой шкатулки:

Программа для PIC и подготовка музыки

1. Синтез звука

Имея 9-битный ЦАП, в принципе, можно получить достаточно сложный звуковой сигнал, однако в случае PIC16F753 возможности ограничены из-за малого размера памяти программ микроконтроллера — всего 2048 слов. Как показывает опыт, даже простая программа-проигрыватель, написанная на ассемблере и оптимизированная по размеру кода, занимает около 1000 слов, так что для нот остается совсем немного. И совсем ничего не остается для хранения сэмплов при использовании такого метода синтеза звука, как Wavetable. Использованию же таких мощных методов, как FM-синтез, препятствует недостаточная скорость процессора и отсутствие в нем аппаратного умножителя. Поэтому остается только синтез прямоугольников — симметричных, либо с переменной скважностью. Второй вариант дает некоторое разнообразие тембров — см., например, сборник «This is Tritone 2» (также имеется на Youtube). Этот метод я и реализовал в шкатулке. Удалось реализовать полифонический звук: 4 независимых звуковых канала. Можно управлять громкостью каждого канала.

Находим частоту, соответствующую нужной ноте, по формуле равномерной темперации: f = 440*2^(n/12), где n — номер ноты в полутонах, n=0 соответствует «ля» первой октавы. Так как у нас 4 канала, то нужно одновременно генерировать 4 сигнала и суммировать их перед выводом. Наиболее распространенное решение — использовать для всех каналов общую частоту дискретизации. При этом процессор через равные промежутки времени вычисляет выходной отсчет для каждого канала. Полученные значения суммируются и подаются на ЦАП.

Желаемые периоды прямоугольных сигналов, в общем случае, не являются кратными периоду дискретизации. Скажем, для ноты «ля» второй октавы у нас n=12, f=880 Гц. При частоте дискретизации Fs=27777.8Гц каждый период сигнала должен длиться

31.57 выходных отсчетов, что нереализуемо. Здесь есть три выхода:

  1. Округлить период до целого числа отсчетов. При этом получаемый период будет отличаться от заданного, т.е. музыка будет фальшивить.
  2. Варьировать длительность периода в пределах плюс-минус одного отсчета так, чтобы средний период получаемого сигнала был равен 1/f. С точки зрения теории обработки сигналов это эквивалентно интерполяции методом ближайшего соседа. В результате в звуке возникают существенные негармонические искажения, в спектре появляются пики на посторонних частотах. На слух сигнал просто становится «грязным».
  3. Провести интерполяцию по Шеннону. Этот подход исключает фальшь и дает наилучшее качество звука, но в 8-битных микроконтроллерах неприемлем из-за сложности вычислений.

Так что на практике можно выбирать между вариантами 1) и 2). Оба они используются при программном синтезе многоканальной музыки на 1-битном звуковом выходе в таких компьютерах, как ZX Spectrum. Я лично предпочитаю вариант 1). При достаточно высокой частоте дискретизации, на не слишком высоких нотах, округление частоты незначительно, и фальшь практически незаметна.

Частота дискретизации должна быть дольной от тактовой частоты процессора и достаточно низкой, чтобы процессор успел провести все необходимые вычисления для каждого выходного отсчета. С другой стороны, она должна быть по возможности высокой, чтобы уменьшить фальшь и расширить диапазон воспроизводимых нот. Для работы программы-плеера необходима таблица с периодами каждой ноты. Для расчета этой таблицы и вычисления отклонения получаемых частот сигнала от желаемых была написана

2. Архитектура прошивки

У PIC16F753 имеется три таймера, но только таймер 2 можно запрограммировать на генерацию прерываний с заданным периодом. С его помощью получаем прерывания на частоте дискретизации звука, т.е. каждые 72 такта процессора. Процедура обработки прерываний вычисляет очередное значение для вывода на ЦАП. Чтобы избежать искажений звука, необходимо обновлять уровень на ЦАП через строго равные промежутки времени. Так как вычисления могут занимать различное время в зависимости от состояния программы, здесь есть два варианта. Первый — «подравнять» все ветки вычислений, чтобы они исполнялись за одинаковое число тактов. Второй — сразу вывести в ЦАП значение, рассчитанное во время обработки предыдущего прерывания, а потом уже рассчитать значение для вывода в следующем прерывании. Я избрал второй путь. При этом процедура обработки прерывания выполняется каждый раз за разное время, но зато между прерываниями остается в среднем больше процессорного времени для фоновых вычислений.

По прерываниям работает генерация стационарных сигналов — прямоугольников неизменной частоты, скважности и амплитуды. Эти параметры хранятся в соответствующих ячейках памяти. При работе прошивки прерывания никогда не запрещаются. Это обеспечивает отсутствие в звуке каких-либо неоднородностей и разрывов, за исключением моментов переключения параметров генерации. Получается такой же режим работы, как если бы в системе был звуковой чип, наподобие Atari Pokey или AY-3-8910: эти чипы тоже формируют на каждом канале стационарные сигналы до тех пор, пока процессор не изменит значения параметров во внутренних регистрах этих чипов.

Обновление параметров генерации осуществляется процедурами, работающими в фоновом режиме (т.е. между прерываниями). Здесь я задействовал таймер-1 для обеспечения периодичности вызова процедуры обновления параметров — 50Гц. Такая же или близкая частота используется для этих целей в музыкальных проигрывателях на 8-битных компьютерах.

В остальном архитектура прошивки определяется представлением музыки в памяти. Я пошел по принципу трекерной музыки, по которым в основном создавалась музыка на 8-битных компьютерах. Не буду вдаваться здесь в детали, материалов на эту тему много в интернете.

3. Подготовка музыки

Чип-музыку надо в чем-то редактировать, и на сегодняшний день один из наиболее легких путей — это использовать Open Modplug Tracker. Нужно подготовить несколько сэмплов, которые звучат хотя бы приблизительно похоже на звучание чипа, и создать с их помощью музыку в трекере, используя не более 4 каналов. При этом также нельзя пользоваться спецэффектами трекера, кроме тех, которые реализованы в нашем чип-плеере. В результате создается трекерный файл в формате .it. Я также написал программу-конвертор, которая конвертирует ноты из it-файла в формат, распознаваемый моей прошивкой PIC16F753. Конвертор ругается, если встретит в it-файле ноты за пределами диапазона или неподдерживаемые прошивкой команды. Инструменты из it-файла полностью игнорируются конвертором. Они нужны только для контроля звучания музыки во время редактирования.

Читать еще:  Bbk 32lex 5037 t2c уменьшить ток подсветки

Сэмплы прямоугольников различной скважности, которые нужны во время редактирования музыки, я сгенерировал специальными программами на Матлабе. Но это было проделано давно в рамках другого проекта — конверсия музыки с ZX Spectrum, так что сейчас я просто взял инструменты из тех старых модулей и сделал на их базе музыку для шкатулки.

В результате работы конвертора создается текстовый файл в формате ассемблера PIC. Его содержимое нужно скопировать в конец исходника прошивки и скомпилировать. В результате получится прошивка в виде hex-файла с нужной музыкой.

К сожалению, у меня нет таланта композитора или аранжировщика, поэтому удалось лишь завести кусок известной вещи В. Моцарта. Часть возможностей плеера при этом даже осталась неиспользованной. Было бы несложно добавить в плеер шумовые эффекты и многое другое, но опять-таки, где взять человека, который сможет на них сделать красивое звучание?

Если среди читателей найдутся желающие и способные создавать красивую чип-музыку для шкатулок и тому подобных музыкальных поделок на микроконтроллерах — буду рад сотрудничеству.

Универсальный программатор PIC-контроллеров

Тимофей Носов ICQ# 770008
E-mail ntv1978 (at) mail.ru
www . miliamper . narod . ru

По данной статье нам поступило большое количество писем с вопросами, замечаниями, благодарностями. Всем авторам выражаем большую признательность за теплые слова и бесценные материалы. Если вы решите самостоятельно повторить программатор EXTRA — PIC , мы надеемся, что эта статья поможет вам убедиться в правильности решения и отбросить все сомнения.

В статье рассматривается программатор EXTRA-PIC, данные о котором получены из открытых источников на www .5 v . ru (DOC Rev.1.03.00). Список поддерживаемых микросхем, при использовании с программой IC-PROG v1.05D:

PIC- контроллеры фирмы Microchip: PIC12C508, PIC12C508A, PIC12C509, PIC12C509A, PIC12CE518, PIC12CE519, PIC12C671, PIC12C672, PIC12CE673, PIC12CE674, PIC12F629, PIC12F675, PIC16C433, PIC16C61, PIC16C62A, PIC16C62B, PIC16C63, PIC16C63A, PIC16C64A, PIC16C65A, PIC16C65B, PIC16C66, PIC16C67, PIC16C71, PIC16C72, PIC16C72A, PIC16C73A, PIC16C73B, PIC16C74A, PIC16C74B, PIC16C76, PIC16C77, PIC16F72, PIC16F73, PIC16F74, PIC16F76, PIC16F77, PIC16C84, PIC16F83, PIC16F84, PIC16F84A, PIC16F88, PIC16C505*, PIC16C620, PIC16C620A, PIC16C621, PIC16C621A, PIC16C622, PIC16C622A, PIC16CE623, PIC16CE624, PIC16CE625, PIC16F627, PIC16F628, PIC16F628A, PIC16F630*, PIC16F648A, PIC16F676*, PIC16C710, PIC16C711, PIC16C712, PIC16C715, PIC16C716, PIC16C717, PIC16C745, PIC16C765, PIC16C770*, PIC16C771*, PIC16C773, PIC16C774, PIC16C781*, PIC16C782*, PIC16F818, PIC16F819, PIC16F870, PIC16F871, PIC16F872, PIC16F873, PIC16F873A, PIC16F874, PIC16F874A, PIC16F876, PIC16F876A, PIC16F877, PIC16F877A, PIC16C923*, PIC16C924*, PIC18F242, PIC18F248, PIC18F252, PIC18F258, PIC18F442, PIC18F448, PIC18F452, PIC18F458, PIC18F1220, PIC18F1320, PIC18F2320, PIC18F4320, PIC18F4539, PIC18F6620*, PIC18F6720*, PIC18F8620*, PIC18F8720*

Примечание: микроконтроллеры, помеченные звездочкой (*) подключаются к программатору только через разъем ICSP.

Последовательная память EEPROM I2C (IIC): X24C01, 24C01A, 24C02, 24C04, 24C08, 24C16, 24C32, 24C64, AT24C128, M24C128, AT24C256, M24C256, AT24C512.

Расположение выводов ICSP у PIC-контроллеров.

Внимание! Материал только для общей справки. Обязательно убедитесь, что указанное расположение выводов соответствует выбранному вами микроконтроллеру. Для этого, обратитесь к Data Sheets и Programming Specifications на соответствующий микроконтроллер.

Пояснение: Вывод PGM рекомендуется «притягивать» к общему проводу (GND), через резистор номиналом 1К.
Для справки: микроконтроллеры с 14-контактным корпусом вставляется частью ножек в соответствующую 8-контактную панель.

Рисунок печатной платы (облегченный вариант) (скачать в Sprint Layout ).

Рисунок печатной платы (полная версия) (скачать в Sprint Layout ).

Фотография собранного программатора (облегченный вариант)

Далее мы приводим альтернативные рисунки печатных плат программатора EXTRA — PIC (авторство установить не удалось)

Вариант 1 (скачать в Sprint Layout ).

Вариант 2 (скачать в Sprint Layout ).

Отдельного внимания заслуживает печатная плата разработанная нашим другом markomar2005 (at) yandex.ru , которая разведена под «маркер».

Вариант от MARKO (скачать в Sprint Layout).

Считаем необходимым разместить здесь фотографии программаторов наших благодарных читателей. Если вы достигли результатов, не стесняйтесь — высылайте фотографии, мы с радостью их здесь разместим.

Автор il86md (at) mail.ru

Автор sound65 (at) rambler.ru он же greeze (at) inbox.ru

Альтернативный вариант (+ сменные модули) от markomar2005 (at) yandex.ru

Вариант от alex_vw (at) mail.ru

Пошаговая инструкция или «Как прошить PIC -контроллер»

Введение. Данная инструкция составлена на примере прошивки микросхемы PIC16F876A для сборки универсального многоканального АЦП.

  1. Соберите программатор (в т.ч. распаяйте удлинительный шнур мама-папа для COM -порта и подготовьте блок питания на напряжение не менее15В).
  2. Скачайте программу IC-PROG отсюда или с http://www.ic-prog.com/ (733 кб).
  3. Распакуйте программу в отдельный каталог. В образовавшемся каталоге должны находиться три файла:
  • icprog.exe – файл оболочки программатора;
  • icprog.sys – драйвер, необходимый для работы под Windows NT, 2000, XP. Этот файл всегда должен находиться в каталоге программы;
  • icprog.chm – файл помощи (Help file).

4. Настройте программу.

Для Windows95, 98, ME

Для Windows NT, 2000, XP

(Только для Windows XP):
Правой кнопкой щёлкните на файле icprog.exe.
«Свойства» >> вкладка «Совместимость» >>
Установите «галочку» на «Запустить программу в режиме совместимости с:» >> выберите «Windows 2000«.

«Настройки» >> «Программатор«.

Проверьте установки, выберите используемый вами COM-порт, нажмите «Ok«.

Далее, «Настройки» >> «Опции» >> выберите вкладку «Общие» >> установите «галочку» на пункте «Вкл. NT/2000/XP драйвер» >> Нажмите «Ok» >>
если драйвер до этого не был установлен в системе, в появившемся окне «Confirm» нажмите «Ok«. Драйвер установится, и оболочка программатора перезапустится.

Примечание:

Для очень «быстрых» компьютеров возможно потребуется увеличить параметр «Задержка Ввода/Вывода«. Увеличение этого параметра увеличивает надёжность программирования, однако, увеличивается и время, затрачиваемое на программирование микросхемы.

«Настройки» >> «Опции» >> выберите вкладку «I2C» >> установите «галочки» на пунктах:

«Включить MCLR как VCC» и «Включить запись блоками«. Нажмите «Ok«.

Программа готова к работе.

  • Если у вас нет файла с прошивкой – подготовьте его:
    • откройте стандартную программу «Блокнот»;
    • вставьте в документ текст прошивки (со странички УМ-АЦП1);
    • сохраните под любым именем, например, prohivka .txt (расширение *.txt или *.hex).
  • Далее в IC-PROG Файл >>Открыть файл (! не путать с Открыть файл данных) >> найти наш файл с прошивкой (если у нас файл с расширением *. txt , то в типе файлов выберите AnyFile *.*). Окошко «Программного кода» должно заполнится информацией.
  • Нажимаем кнопку «Программировать микросхему» – (загорается красный светодиод).
  • Ожидаем завершения программирования (около 30 сек.).
  • Для контроля нажимаем «Сравнить микросхему с буфером» – .
  • Вот и всё. Я тоже думал, что это что-то невероятное. Попробуйте – и у вас получится.

    Музыкальная шкатулка на PIC16F753

    Меня в свое время очень впечатлил этот пост о создании светомузыкального устройства на микроконтроллере в подарок любимой. И однажды пришло мое время сделать такой подарок. Учитывая отличия от автора упомянутого проекта в навыках и инструментарии; будучи сильно ограничен во времени подготовки (3-4 дня), я пошел другим путем и разработал свое музыкальное устройство для установки в купленную в сувенирном магазине шкатулку. Оно отличается более простой схемой и легкостью изготовления. В статье описываются подробности моего проекта и их мотивация. Осторожно, фотографии (всего около 1Мб).

    Схема


    Как видите, деталей очень мало. Питание в диапазоне +3..+4.8В от трех батареек типа AAA подходит без применения стабилизаторов как микроконтроллеру D1 (PIC16F753), так и усилителю DA1 (TDA7052A). Данная микросхема усилителя является уникальной в своем роде, потому что среди своих аналогов она требует минимальное количество внешних элементов. Применение усилителя мощности необходимо: при попытке подключить выход микроконтроллера напрямую к динамику, достаточную громкость получить не удастся.

    Для работы усилителя необходим конденсатор C1 емкостью 220мкФ. Без конденсатора нельзя: если внутреннее сопротивление источника питания недостаточно мало, то звучать будет тихо и с сильными искажениями. Также необходим конденсатор C4 для развязки аудиосигнала по постоянному току. Подстроечным резистором R2 регулируется громкость. R1 ограничивает диапазон регулировки. Совместно с конденсатором C3 он также образует фильтр низких частот. В принципе C3 можно не ставить. Я поначалу так и хотел сделать, но потом мне показалось, что для уменьшения искажений звука лучше убрать из него ультразвуковые частоты, поставив C3.

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

    Пару слов о выборе микроконтроллера. Самый главный критерий — диапазон напряжения питания. Когда батарея почти разряжена, напряжение на ней проседает до 3В (по 1В на элемент). В свежем же состоянии напряжение может подниматься до +4.8В и даже более. К сожалению, более современные 16-битные микроконтроллеры, имеющие высокую скорость и много памяти, обычно требуют питание в диапазоне +2.7..+3.6В. Чтобы понизить напряжение, пришлось бы применять стабилизатор, причем не любой, а с малым падением напряжения (Low Drop-out), учитывая напряжение на батарее под конец ее службы. Я решил не усложнять. Из контроллеров фирмы Microchip (с ними у меня больше всего опыта и имеется программатор), поэтому, подходят только 8-битные. Также можно было бы использовать 16-битные из серии PIC24F. В следующей музыкальной шкатулке я, наверное, так и сделаю. Все-таки PIC16F753 очень уж тесноват как по скорости, так и по объему памяти. Но зато у него имеется встроенный 9-битный ЦАП, что очень подходит для синтеза звука.

    Для простоты и надежности я также решил не использовать какие-либо схемы управления питанием и энергосбережением. Простой выключатель (на схеме не показан) разрывает цепь батареи, и все.

    Сборка

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

    Печатную плату я не делал. Дома нет для этого условий, а на заводе заказывать — слишком долго и дорого. Поэтому собирал схему на макетной плате. Удалось вырезать лобзиком кусок платы по размерам шкатулки. Размеры и форма предопределили компоновку деталей. Вот фотка на промежуточных стадиях сборки:

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

    Вид с обратной стороны платы. Как видите, длинные или пересекающиеся соединения выполнены проводом МГТФ, а короткие — обрезанными ножками от конденсаторов и резисторов. После проверки работоспособности схемы на тестовой прошивке можно приступать к разработке и отладке основной программы. Подробнее о ней ниже.

    Читать еще:  Сила тока для кабелей ввг

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

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

    Прорезаем ножиком дырку для выключателя. Шилом протыкаются дырочки над динамиком. Далее приклеиваем выключатель к картонке и динамик на штатное место платы:

    Окончательный вид открытой шкатулки:

    Программа для PIC и подготовка музыки

    1. Синтез звука

    Имея 9-битный ЦАП, в принципе, можно получить достаточно сложный звуковой сигнал, однако в случае PIC16F753 возможности ограничены из-за малого размера памяти программ микроконтроллера — всего 2048 слов. Как показывает опыт, даже простая программа-проигрыватель, написанная на ассемблере и оптимизированная по размеру кода, занимает около 1000 слов, так что для нот остается совсем немного. И совсем ничего не остается для хранения сэмплов при использовании такого метода синтеза звука, как Wavetable. Использованию же таких мощных методов, как FM-синтез, препятствует недостаточная скорость процессора и отсутствие в нем аппаратного умножителя. Поэтому остается только синтез прямоугольников — симметричных, либо с переменной скважностью. Второй вариант дает некоторое разнообразие тембров — см., например, сборник «This is Tritone 2» (также имеется на Youtube). Этот метод я и реализовал в шкатулке. Удалось реализовать полифонический звук: 4 независимых звуковых канала. Можно управлять громкостью каждого канала.

    Находим частоту, соответствующую нужной ноте, по формуле равномерной темперации: f = 440*2^(n/12), где n — номер ноты в полутонах, n=0 соответствует «ля» первой октавы. Так как у нас 4 канала, то нужно одновременно генерировать 4 сигнала и суммировать их перед выводом. Наиболее распространенное решение — использовать для всех каналов общую частоту дискретизации. При этом процессор через равные промежутки времени вычисляет выходной отсчет для каждого канала. Полученные значения суммируются и подаются на ЦАП.

    Желаемые периоды прямоугольных сигналов, в общем случае, не являются кратными периоду дискретизации. Скажем, для ноты «ля» второй октавы у нас n=12, f=880 Гц. При частоте дискретизации Fs=27777.8Гц каждый период сигнала должен длиться

    31.57 выходных отсчетов, что нереализуемо. Здесь есть три выхода:

    1. Округлить период до целого числа отсчетов. При этом получаемый период будет отличаться от заданного, т.е. музыка будет фальшивить.
    2. Варьировать длительность периода в пределах плюс-минус одного отсчета так, чтобы средний период получаемого сигнала был равен 1/f. С точки зрения теории обработки сигналов это эквивалентно интерполяции методом ближайшего соседа. В результате в звуке возникают существенные негармонические искажения, в спектре появляются пики на посторонних частотах. На слух сигнал просто становится «грязным».
    3. Провести интерполяцию по Шеннону. Этот подход исключает фальшь и дает наилучшее качество звука, но в 8-битных микроконтроллерах неприемлем из-за сложности вычислений.

    Так что на практике можно выбирать между вариантами 1) и 2). Оба они используются при программном синтезе многоканальной музыки на 1-битном звуковом выходе в таких компьютерах, как ZX Spectrum. Я лично предпочитаю вариант 1). При достаточно высокой частоте дискретизации, на не слишком высоких нотах, округление частоты незначительно, и фальшь практически незаметна.

    Частота дискретизации должна быть дольной от тактовой частоты процессора и достаточно низкой, чтобы процессор успел провести все необходимые вычисления для каждого выходного отсчета. С другой стороны, она должна быть по возможности высокой, чтобы уменьшить фальшь и расширить диапазон воспроизводимых нот. Для работы программы-плеера необходима таблица с периодами каждой ноты. Для расчета этой таблицы и вычисления отклонения получаемых частот сигнала от желаемых была написана

    Для каждой ноты программа вычисляет период сигнала в отсчетах на выбранной частоте дискретизации, округляет его до целого и производит обратный пересчет в номер ноты. В этих логарифмических единицах и оценивается отклонение, график которого выводится на экран:

    Можно поэкспериментировать, меняя частоту дискретизации, то есть количество тактов процессора, приходящихся на один ее период. Эмпирически я подобрал коэффициент 72, который дает минимально достижимые отклонения нот в заданном диапазоне.

    2. Архитектура прошивки

    У PIC16F753 имеется три таймера, но только таймер 2 можно запрограммировать на генерацию прерываний с заданным периодом. С его помощью получаем прерывания на частоте дискретизации звука, т.е. каждые 72 такта процессора. Процедура обработки прерываний вычисляет очередное значение для вывода на ЦАП. Чтобы избежать искажений звука, необходимо обновлять уровень на ЦАП через строго равные промежутки времени. Так как вычисления могут занимать различное время в зависимости от состояния программы, здесь есть два варианта. Первый — «подравнять» все ветки вычислений, чтобы они исполнялись за одинаковое число тактов. Второй — сразу вывести в ЦАП значение, рассчитанное во время обработки предыдущего прерывания, а потом уже рассчитать значение для вывода в следующем прерывании. Я избрал второй путь. При этом процедура обработки прерывания выполняется каждый раз за разное время, но зато между прерываниями остается в среднем больше процессорного времени для фоновых вычислений.

    По прерываниям работает генерация стационарных сигналов — прямоугольников неизменной частоты, скважности и амплитуды. Эти параметры хранятся в соответствующих ячейках памяти. При работе прошивки прерывания никогда не запрещаются. Это обеспечивает отсутствие в звуке каких-либо неоднородностей и разрывов, за исключением моментов переключения параметров генерации. Получается такой же режим работы, как если бы в системе был звуковой чип, наподобие Atari Pokey или AY-3-8910: эти чипы тоже формируют на каждом канале стационарные сигналы до тех пор, пока процессор не изменит значения параметров во внутренних регистрах этих чипов.

    Обновление параметров генерации осуществляется процедурами, работающими в фоновом режиме (т.е. между прерываниями). Здесь я задействовал таймер-1 для обеспечения периодичности вызова процедуры обновления параметров — 50Гц. Такая же или близкая частота используется для этих целей в музыкальных проигрывателях на 8-битных компьютерах.

    В остальном архитектура прошивки определяется представлением музыки в памяти. Я пошел по принципу трекерной музыки, по которым в основном создавалась музыка на 8-битных компьютерах. Не буду вдаваться здесь в детали, материалов на эту тему много в интернете.

    3. Подготовка музыки

    Чип-музыку надо в чем-то редактировать, и на сегодняшний день один из наиболее легких путей — это использовать Open Modplug Tracker. Нужно подготовить несколько сэмплов, которые звучат хотя бы приблизительно похоже на звучание чипа, и создать с их помощью музыку в трекере, используя не более 4 каналов. При этом также нельзя пользоваться спецэффектами трекера, кроме тех, которые реализованы в нашем чип-плеере. В результате создается трекерный файл в формате .it. Я также написал программу-конвертор, которая конвертирует ноты из it-файла в формат, распознаваемый моей прошивкой PIC16F753. Конвертор ругается, если встретит в it-файле ноты за пределами диапазона или неподдерживаемые прошивкой команды. Инструменты из it-файла полностью игнорируются конвертором. Они нужны только для контроля звучания музыки во время редактирования.

    Сэмплы прямоугольников различной скважности, которые нужны во время редактирования музыки, я сгенерировал специальными программами на Матлабе. Но это было проделано давно в рамках другого проекта — конверсия музыки с ZX Spectrum, так что сейчас я просто взял инструменты из тех старых модулей и сделал на их базе музыку для шкатулки.

    В результате работы конвертора создается текстовый файл в формате ассемблера PIC. Его содержимое нужно скопировать в конец исходника прошивки и скомпилировать. В результате получится прошивка в виде hex-файла с нужной музыкой.

    К сожалению, у меня нет таланта композитора или аранжировщика, поэтому удалось лишь завести кусок известной вещи В. Моцарта. Часть возможностей плеера при этом даже осталась неиспользованной. Было бы несложно добавить в плеер шумовые эффекты и многое другое, но опять-таки, где взять человека, который сможет на них сделать красивое звучание?

    Если среди читателей найдутся желающие и способные создавать красивую чип-музыку для шкатулок и тому подобных музыкальных поделок на микроконтроллерах — буду рад сотрудничеству.

    Исходники

    Полный исходный текст прошивки, программы-конвертора музыки, а также it-файл с той музыкой, которую я использовал в данной шкатулке, можно скачать с Github.

    ↑ Управление кнопкой

    • Короткое нажатие вызывает смену шкалы. Шкалы меняются по кругу («1023», «511», «343», «256» или «204»). На индикаторе загорается максимальное значение шкала на 0,5 секунды, а затем высвечивается значение входного напряжения.
    • Длительное (0,5 – 1 сек) нажатие перемещает запятую вправо по кругу (после первого, второго знака или без запятой).
    • Если кнопка удерживается при включении 0,5 — 2 сек, то измеритель ожидает 3 секунды, пока установятся режимы блока питания и записывает величину паразитного тока в память. При этом нагрузка от блока питания не должна быть подключена.
    Если эту коррекцию надо изменить, то операцию можно повторить.
    Если коррекцию надо убрать, то кнопку надо удерживать при включении более 3 секунд.

    Частотомер на PIC16F628А своими руками

    Одним из приборов-помощников радиолюбителя должен быть частотомер. С его помощью легко обнаружить неисправность генератора, измерить и подстроить частоту. Генераторы очень часто встречаются в схемах. Это приемники и передатчики, часы и частотомеры, металлоискатели и различные автоматы световых эффектов…

    Особенно удобно пользоваться частотомером для подстройки частоты, например при перестройки радиостанций, приёмников или настройки металлоискателя.

    Читать еще:  Прибор для проверки тока в кабеле

    Один из таких несложных наборов я недорого приобрёл на сайте китайского магазина здесь: GEARBEST.com

    Набор содержит:

    • 1 x PCB board (печатная плата);
    • 1 x микроконтроллер PIC16F628A;
    • 9 x 1 кОм резистор;
    • 2 x 10 кОм резистор;
    • 1 x 100 кОм резистор;
    • 4 x диоды;
    • 3 x транзисторы S9014, 7550, S9018;
    • 4 x конденсаторы;
    • 1 x переменный конденсатор;
    • 1 x кнопка;
    • 1 x DC разъём;
    • 1 x 20МГц кварц;
    • 5 x цифровые индикаторы.

    Описание частотомера

    • Диапазон измеряемых частот: от 1 Гц до 50 МГц;
    • Позволяет измерять частоты кварцевых резонаторов;
    • Точность разрешение 5 (например 0,0050 кГц; 4,5765 МГц; 11,059 МГц);
    • Автоматическое переключение диапазонов измерения частоты;
    • Режим энергосбережения (если нет изменения показаний частоты — автоматически выключается дисплей и на короткое время включается;
    • Для питания Вы можете использовать интерфейс USB или внешний источник питания от 5 до 9 В;
    • Потребляемый ток в режиме ожидания — 11 мА

    Схема содержит небольшое количество элементов. Установка проста — все компоненты впаиваются согласно надписям на печатной плате.

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

    Принципиальная схема частотомера

    Напряжение на выводах микроконтроллера

    1. 4,0
    2. 4,0
    3. 0,3
    4. 5,0
    5. 0,98
    6. 0,98
    7. 0,98
    8. 0,98
    9. 0,98
    10. 0,98
    11. 5
    12. 1,26
    13. 2,13
    14. 4
    15. 4,12

    Генератор для проверки кварцев

    Приступаем к сборке

    Высыпаем на стол содержимое пакета. Внутри находятся печатная плата, сопротивления, конденсаторы, диоды, транзисторы, разъемы, микросхема с панелькой и индикаторы.

    Ну и вид на весь набор в полностью разложенном виде.

    Теперь можно перейти к собственно сборке данного конструктора, а заодно попробовать разобраться, на сколько это сложно.

    Я начинал сборку с установки пассивных элементов: резисторов, конденсаторов и разъёмов. При монтаже резисторов следует немного узнать об их цветовой маркировке из предыдущей статьи. Дело в том, что резисторы очень мелкие, а при таких размерах цветовая маркировка очень плохо читается (чем меньше площадь закрашенного участка, тем сложнее определить цвет) и поэтому также посоветую просто измерить сопротивление резисторов при помощи мультиметра. И результат будем знать и за одно его исправность.

    Конденсаторы маркируются также как и резисторы.
    Первые две цифры — число, третья цифра — количество нулей после числа.
    Получившийся результат равен емкости в пикофарадах.
    Но на этой плате есть конденсаторы, не попадающие под эту маркировку, это номиналы 1, 3 и 22 пФ.
    Они маркируются просто указанием емкости так как емкость меньше 100 пФ, т.е. меньше трехзначного числа.

    Резисторы и керамические конденсаторы можно впаивать любой стороной — здесь полярности нет.

    Выводы резисторов и конденсаторов я загибал, чтобы компонент не выпал, лишнее откусывал, а затем опаивал паяльником.

    Немного рассмотрим такой компонент, как — подстроечный конденсатор. Это конденсатор, ёмкость которого можно изменять в небольших пределах (обычно 10-50пФ). Это элемент тоже неполярный, но иногда имеет значение как его впаивать. Конденсатор содержит шлиц под отвертку (типа головки маленького винтика), который имеет электрическое соединение с одним из выводов. Чтобы было меньше влияния отвертки на параметры цепи, надо впаивать его так, чтобы вывод соединенный со шлицом, соединялся с общей шиной платы.

    Разъемы — сложная часть в плане пайки. Сложная не точностью или малогабаритностью компонента, а наоборот, иногда место пайки тяжело прогреть, плохо облуживается. Потому нужно ножки разъёмов дополнительно почистить и облудить.

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

    Далее впаиваем транзисторы, диоды и индикаторы. В отличии от резисторов и конденсаторов здесь нужно впаивать правильно, согласно рисунку и надписям на плате.

    Длительность пайки каждой ножки не должна превышать 2 сек! Между пайками ножек должно пройти не менее 3 сек на остывание.

    Ну вот собственно и всё!

    Теперь осталось смыть остатки канифоли щёткой со спиртом.

    Осталось правильно вставить микросхему в свою «кроватку» и подключить питание к схеме.

    Питание должно быть В пределах от 5 до 9 В — постоянное стабилизированное без пульсаций. (В схеме нет ни одного эл.конденсатора по питанию.)

    Не забудьте у микросхемы есть с торца ключ — он располагается у вывода №1! Не следует полагаться на надпись названия микросхемы — она может быть написана и к верх ногами.

    При подключении питания и отсутствия сигнала на входе высвечивается .

    Первым делом нашёл кучу кварцев и начал проверять. Следует отметить, что частота кварца, например 32,768 кГц не может быть измерена, т.к. измерение ограничивается в диапазоне от 1 МГц.

    Можно измерить, например 48 МГц, но следует иметь ввиду, что будет измерены гармонические колебания кварцевого генератора. Так 48 МГц будет измерена основная частота 16 МГц.

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

    Режим программирования частотомера позволяет вычесть четыре основные запрограммированные ПЧ частоты 455 кГц; 3,9990 МГц; 4,1943 МГц; 4,4336 МГц; 10,700 Гц, а также любую собственную частоту.

    Таблица алгоритма програмирования

    Чтобы войти в режим программирования (Prog) нужно нажать и удерживать кнопку в течении 1-2 сек.

    Затем нажимаем кнопку и поочередно пролистываем меню:

    «Quit» — «Выход» : прерывает режим программирования, ничего не сохраняя.

    «Add» — «Добавление» : сохранение измеренной частоты и в дальнейшем эта частота будет складываться с измеряемыми частотами.

    «Sub» — «Вычитание» : сохранение измеренной частоты и в дальнейшем она будет вычитаться с измеряемыми частотами.

    «Zero«- «Ноль» — обнуляет все ранее запрограммированные значения.

    «table» — «Таблица«: в этой таблице можно выбрать основные запрограммированные частоты 455 кГц; 3,9990 МГц; 4,1943 МГц; 4,4336 МГц; 10,700 Гц. После выбора записи (длительное нажатие), вы вернетесь в «Главное меню» и выберите пункт «Add» — «добавить» или «Sub» — «убавить«.

    «PSave» / «NoPSV«: включает / отключает режим энергосбережения. Дисплей отключается если нет изменения частоты некоторое время.

    Если показания сильно отличаются, то возможно включена предустановка. Чтобы её отключить войдите в режим программирования и затем нажимая кнопку выберите «Zero» и удерживайте пока не начнёт мигать, затем отпустите её.

    Интересный обучающий конструктор. Собрать частотомер под силу даже начинающему радиолюбителю.

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

    Конструктор приятно порадовал, я считаю его хорошей базой как в получении опыта сборки и наладки электронного устройства, так и в опыте работы с немало важным для радиолюбителя прибором — частотомером.

    Доработка частотомера

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

    Можно спаять один из предложенных ниже.

    Сопротивление R6 на верхней и R9 на нижней схеме подбирается в зависимости от напряжения питания и устанавливается на его левом выводе 5 В. При питании 5 В сопротивление можно не ставить.

    … или простой, на одном транзисторе:

    Номиналы сопротивлений указаны при питании 5В. Если у Вас питание усилителя другим напряжением, то подберите номинал R2,3 чтобы на коллекторе транзистора было половина питания.

    Схема похожего частотомера с входным каскадом усилителя.

    Вторая доработка. Для увеличения измеряемого потолка частоты можно собрать к частотомеру делитель частоты. Например, схемы ниже:

    Надеюсь, что обзор данного конструктора-частотомера был интересен и полезен. Удачи!

    Ещё схемы драйверов

    Ниже размещу немного информации по схемам и по ремонту от меня (автора блога СамЭлектрик.ру)

    Светодиодный прожектор Навигатор, рассмотренный в статье Про ремонт светодиодных прожекторов (ссылку уже давал в начале статьи).

    Схема стандартная, выходной ток меняется за счет номиналов элементов обвязки и мощности трансформатора:

    LED Driver MT7930 Typical. Схема электрическая принципиальная типовая для светодиодного прожектора

    Схема взята из даташита на эту микросхему, вот он:

    • LED Driver MT 7930. Typical application / Описание, типовая схема включения и параметры микросхемы для драйверов светодиодных модулей и матриц., pdf, 661.17 kB, скачан: 3362 раз./

    В даташите подробно расписано, что и как надо поменять, чтобы получить нужный выходной ток драйвера.

    Вот более развернутая схема драйвера, приближенная к реальности:

    LED Driver MT7930. Схема электрическая принципиальная

    Видите слева от схемы формулу? Она показывает, от чего зависит выходной ток. Прежде всего, от резистора Rs, который стоит в истоке транзистора и состоит из трех параллельных резисторов. Эти резисторы, а заодно и транзистор выгорают.

    Имея схему, можно приниматься за ремонт драйвера.

    Но и без схемы можно сразу сказать, что в первую очередь надо обратить внимание на:

    • входные цепи,
    • диодный мост,
    • электролиты,
    • силовой транзистор,
    • пайку.

    Далее надо проверить поступление питания на микросхему, которое подается в два захода – сначала от диодного моста, потом (после нормального запуска) – с обмотки обратной связи выходного трансформатора.

    Сам я именно подобные драйвера ремонтировал несколько раз. Иногда помогала только полная замена микросхемы, транзистора и почти всей обвязки. Это очень трудозатратно и экономически неоправданно. Как правило – это гораздо проще и дешевле – покупал и устанавливал новый Led Driver, либо отказывался от ремонта вообще.

    Программирование микроконтроллеров + фирменные средства

    Существует солидная группа фирменных программаторов для микроконтроллеров семейства PIC. Наиболее известные аппаратные средства:

    • REAL ICE
    • Pickit 1-2-3
    • IC PROG
    • ICD 2-3-4

    Характерные отличия отмеченных программаторов – устройства обладают не просто классическими функциями чтения/записи. Фирменным программаторам присущ целый ряд расширенных функций, включая полный контроль содержимого памяти и стёка.

    На основе информации: Uolsinectis

    КРАТКИЙ БРИФИНГ

    Zetsila — публикации материалов, интересных и полезных для социума. Новости технологий, исследований, экспериментов мирового масштаба. Социальная мультитематическая информация — СМИ .

    голоса
    Рейтинг статьи
    Ссылка на основную публикацию
    ВсеИнструменты
    Adblock
    detector