Оглавление:

Тональный генератор микроконтроллера в C-коде: 8 шагов (с изображениями)
Тональный генератор микроконтроллера в C-коде: 8 шагов (с изображениями)

Видео: Тональный генератор микроконтроллера в C-коде: 8 шагов (с изображениями)

Видео: Тональный генератор микроконтроллера в C-коде: 8 шагов (с изображениями)
Видео: Как работает компьютер? Шины адреса, управления и данных. Дешифрация. Взгляд изнутри! 2024, Ноябрь
Anonim
Тональный генератор микроконтроллера на языке C
Тональный генератор микроконтроллера на языке C

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

Шаг 1. Начало или почему я не мог придерживаться аналогового

Начало или почему я не мог придерживаться аналогового
Начало или почему я не мог придерживаться аналогового

Хорошее начинается на следующей странице. Если вы хотите знать, как я в конечном итоге использовал те детали, которые использовал, читайте дальше. Настоящий таймер: после некоторых размышлений над проектом я сразу же подумал о пьезо-тональном генераторе из моей книги по операционным усилителям Forest Mims III. Казалось бы, неплохой вариант, это просто пьезо, микросхема 741 и пара пассивных компонентов. Ничего страшного, правда? У него есть 2 проблемы: 1) когда вы нажимаете переключатель, можно изменить высоту звука 2) чертовски почти невозможно настроить. Первое, вероятно, можно было бы преодолеть с помощью какой-нибудь технологии устранения дребезга, хотя я не знал, как это сделать, не добавляя еще один счетчик. Это также может быть проблемой при использовании пьезо. Вторая проблема стала громоздкой, когда вы начали пытаться выбить определенную высоту. А как насчет 555? В таблице данных показана функция задержки на основе резисторов и конденсаторов. Это здорово, пока вы не начнете вводить фактические значения реальных частей мира, тогда вы обнаружите, что достижение высоты тона 440 Гц становится немного трудным. Вы можете использовать горшочки для обрезки, чтобы настроить его, но со временем они начинают двигаться. Постоянная настройка инструмента, скомпилированная на вершине быстрого увеличения стоимости и количества деталей, и моя жена, изменяющая высоту звука, когда она нажимала кнопку, убила 555 для этого проекта. OP-amp: Нет проблем, люди делали синтезаторы с операционные усилители еще до моего рождения. Насколько сложно сделать действительно простой, с несколькими частями и конкретными нотами? Сложнее, чем я думал. Большинство дизайнов для этого проекта слишком сложны. Дизайнеры синтезаторов стремятся к идеальной форме волны / тембру. Это прямо противоречит проекту, который должен быть достаточно дешевым для бюджета школы или учителей. Создать клавиатуру достаточно просто, это просто набор резисторов и питания или набор диодов и питание. Это остальная часть схемы и стоимость нестандартных печатных плат, которая начинает выходить из-под контроля для тех, кто на начальном уровне электроники. Переопределение проекта: Итак, проект был переопределен еще до того, как я действительно начал работать. Мне нужно было что-то, что могло бы переключать штифт динамика вовремя, одним нажатием кнопки. Я не хотел разрабатывать и покупать печатную плату. Он должен был использовать как можно меньше компонентов и собираться как комплект для начинающих. Он все время смотрел мне в лицо. Да !! Микроконтроллер! Микроконтроллер: Итак, после покупки набора Modern Devices Bare Bones Arduino и платы Evil Mad Scientist Simple Target Board и позволяя им сидеть на моем столе в течение нескольких месяцев без использования, у меня был идеальный вводный проект. Я начал смотреть на время, необходимое для того, чтобы собрать и то, и другое, на кривую обучения для кода, стоимость, необходимые дополнительные части и заставить его делать то, что я хочу, и остановился на целевой плате. Стоимость была довольно равномерной: 15 долларов плюс 20 долларов за кабель FTDI для Arduino, 12 долларов плюс 22 доллара за программатор USBtinyISP. Я уже знал C ++ еще в маленьком колледже, где я мог стоять, и решил, что C для микроконтроллеров будет не так уж и плохо, в то время как, кроме мигания светом, чтобы убедиться, что я правильно собрал свой комплект, у меня не было опыта Arduino. Оба могли быть установлены. Это была довольно сложная задача, поэтому я решил выбрать меньшее из двух частей, а именно целевую доску.

Шаг 2: Что вам нужно Ред. 1

Что вам нужно Ред. 1
Что вам нужно Ред. 1

Комплект для программирования AVR USBtinyISP (USB SpokePOV Dongle) v2.0 22,00 долл. Http://www.adafruit.com/index.php? Main_page = product_info & cPath = 16 & products_id = 46 5 шт. За 2,75 долл. 5) 3,49 доллара США (4 упаковки) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Держатель батареи 1,79 доллара США https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Ползунковый переключатель Submini (опционально для выключателя питания) 2,69 долл. США (2 шт. В упаковке) https://www.radioshack.com/product/index.jsp?productId=2062490 Светодиод и резистор (необязательно, если вам нужен световой индикатор питания) $ должно быть бесплатно если они валяются, проволока $ тоже должна лежать вокруг Серебряный припой (если он идет где-то рядом с детьми, вам, вероятно, не следует использовать свинец, родители довольно странно относятся к подобным вещам;)) Медицинский спирт (для повторного move flux) Если вы хотите, чтобы в каких-то местах можно было сэкономить деньги, вам не обязательно покупать детали в RadioShack. Я сделал, потому что они близки и предсказуемы.

Шаг 3: Сборка Ред. 1

Сборка Ред. 1
Сборка Ред. 1
Сборка Ред. 1
Сборка Ред. 1

Соберите части вместе, как показано. Обязательно используйте медицинский спирт и щетку для флюса, когда закончите, чтобы избавиться от флюса от пайки. Схема ниже для тех, кто предпочитает это. D1 и R1 могут быть какими угодно, это просто индикатор питания. C1 предназначен только для того, чтобы сделать мощность более стабильной. Я использовал 10 мкФ. Эта схема такая же, как и в более поздних версиях, просто замените кнопки переключателями на матрице. в последней ревизии я добавил переключатели на PC4 и PC5 или пины 27 и 28.

Шаг 4: Что вам нужно Ред. 2

Что вам нужно Rev 2
Что вам нужно Rev 2

По сути, вы меняете кнопки Radio Shack на сделанные вручную из ткани. Вам нужно: несколько цветов ткани или один цвет, если вы хотите, чтобы все ноты были одного цвета. Отделение квилтинга в ближайшем магазине тканей - лучшее место, где можно купить это дешево. Четвертинки для квилтинга стоят 1,50 доллара, и вы можете получить тонну переключателей из одного. Проводящая ткань, я предлагаю ткань Flectron от LessEMF, это 20 долларов за кусок 12 "x 54" Проушины для прикрепления провода к ткани. Их можно дешево купить в большинстве тканевых магазинов. У Джоанн есть инструмент и 25 долларов за 2 доллара. Для этого вам понадобится молоток. Проволока, я использовал 22AWG, я предлагаю меньшего размера, если он у вас есть. Сплавление, чтобы цветная и проводящая ткань склеивалась. Спросите в магазине, и вы, вероятно, сможете купить его во дворе. Это, вероятно, сработает нормально, хотя я предлагаю вам спросить кого-нибудь. Ватин, сначала я использовала очень свободную ткань, а затем перешла на более плотную вязку. Я предлагаю вам просто попробовать несколько разных, пока не найдете то, что работает лучше всего. Термоусадочные трубки, это сделало все намного более управляемым. термоусадочные провода вместе, когда они проходят друг с другом, и они останутся намного лучше.

Шаг 5: Сборка, ред. 2

Сборка Ред. 2
Сборка Ред. 2
Сборка Ред. 2
Сборка Ред. 2
Сборка Ред. 2
Сборка Ред. 2

Положите разноцветную ткань друг на друга и вырежьте квадрат, он не обязательно должен быть идеальным. Прогладьте ткань, чтобы разгладить складки, снова уложите их друг на друга и убедитесь, что все края совпадают. Обрежьте все края, которые не подходят. Обрежьте верхнюю и нижнюю части по кругу, оставив левую и правую стороны прямыми. Вы собираетесь перевернуть переключатель после шитья, поэтому не делайте закругленные стороны слишком круглыми и оставьте достаточно высоты на плоских сторонах, чтобы легко протолкнуть переключатель, когда вы закончите. Скруглите плоскую сторону первого и последнего переключателя. Подойдите к швейной машине и сложите два круга вместе так, чтобы хорошая сторона была обращена друг к другу, и пришейте шов на плоских частях. сшиваем, вырезаем из токопроводящей ткани квадраты и свариваем с одной стороны. Отрежьте проволоку до нужной длины и зачистите один конец. припаиваем провод вокруг одной из петель. (припой вряд ли будет прилипать к проушине) Вырежьте небольшой прорезь в ткани в одном углу и ударьте по проушине молотком, чтобы прикрепить ткань и проволоку. снимите подложку с термозакрепления и приклейте проводящую ткань к обратной стороне цветной ткани. Повторите для всех переключателей. Чтобы упростить задачу, вы можете термоусадить провода вместе каждый раз, когда один провод проходит мимо провода следующего переключателя. Возьмите или сделайте кусок ткани по длине набора переключателей и отрежьте полоску проводящей ткани по длине. В отличие от цветных переключателей, это одна длинная деталь. Это будет то, к чему прикасаются кнопки, чтобы установить соединение. Вырежьте небольшую прорезь и прикрепите к ней проволоку с петелькой, как цветные топы выключателей. Приклейте его к изнанке нижней ткани. Сшейте верх и низ вместе проводящей тканью наружу, используйте дворовую палку, чтобы перевернуть комплект после того, как он сшит. Вырежьте несколько небольших отверстий в ватине, я использовала палочку для еды, чтобы получить круг, затем просто удалите палочку для еды и сделайте разрез. Вырежьте их по форме и вставьте в переключатели. Это то, что разделяет проводящую ткань. Возможно, будет проще вставить ватин, когда вы переворачиваете переключатели, а не после. То, что я использовал, довольно сильно порвалось, когда я вставлял его, и мне пришлось получить другой бит. Наконец, подключите провода к целевой плате, и все готово. Длинная нижняя полоса будет отшлифована.

Шаг 6: Что вам нужно Ред. 3

Что вам нужно Ред. 3
Что вам нужно Ред. 3

В Rev 3 я сделал переключатели независимыми от проводки. Это сэкономило массу времени. Мне также намного больше нравится внешний вид готового результата. Итак, вот новые детали, которые вам нужны: Snaps, только что полученные от JoAnn's. У них был неплохой установочный инструмент за 7 долларов. Я бы предложил вместо него один из плоскогубцев, так как мне пришлось разобрать инструмент, чтобы установить защелки посередине. Пришивание будет хорошей альтернативой, хотя для этого требуется больше времени. Проводящая нить Spark Fun может поместиться в вашу швейную машину. Я должен был работать очень медленно на моей машине, иначе нить оборвется. Ваш пробег может отличаться

Шаг 7: Сборка, ред. 3

Сборка Ред. 3
Сборка Ред. 3
Сборка Ред. 3
Сборка Ред. 3
Сборка Ред. 3
Сборка Ред. 3
Сборка Ред. 3
Сборка Ред. 3

Эта ревизия была намного лучше предыдущей с точки зрения времени до постройки. К тому же съемные переключатели не раз спасали мне рассудок. Начните с создания основы. Это всего лишь одна четвертинка для квилтинга, сложенная пополам. Сверху положите слой ватина и прострочите, оставив отверстие, чтобы вывернуть его. Протолкните вещь через отверстие, и вы получите вещь типа подушки. Я стегала его, чтобы с ним было легче работать. Используйте простую резьбу и сходите с ума. Я сделал ромбики на этом, но, может быть, в следующий раз я поставлю дракона обратно или что-нибудь крутое. А теперь перейдем к переключателям. Мне нравится этот дизайн, потому что вы можете сделать тонну этого заранее и просто использовать то, что хотите. Начните с обрезки картона, бумаги или ткани и вырежьте из него форму груши. Используйте это как ориентир, чтобы вырезать верх и низ каждого переключателя. Я вырезал один цвет для каждого дна и разный цвет для верха, но вы можете проявить творческий подход и делать то, что хотите. Сократите свое руководство до формы леденца на палочке, которая легко поместится внутри переключателя. Удлините «палку», чтобы она могла обернуться через край «груши». Вырежьте форму из плавящейся и проводящей ткани и сплавляйте одну сторону проводящей ткани. Снимите подкладку с термозакрепляющего материала и приклейте ее к верхней части ткани, которая будет внизу, и к нижней части ткани, которая будет наверху. Оберните лишнюю насадку сверху. Подойдите к швейной машине и положите ватин с дырками между верхней и нижней тканью. Прострочите снаружи проводящей ткани и пропустите «липкую» часть переключателя. Я обнаружил, что можно пришить верхнюю проводящую ткань к низу, создавая короткое замыкание. Через токопроводящую ткань лучше не прошивать. Присоедините защелки и переключатель готов. Я обнаружил, что проще использовать штыревую защелку для всех нижних / GND соединений, а женскую - для всех верхних частей. Это делает все переключатели взаимозаменяемыми. Схема: Особенность резки патронов в том, что у вас есть много дополнительных битов. Я взял свои обрезки, соединил большие куски сплавления с большими кусками проводящей ткани и использовал их, чтобы вырезать меньшие прямоугольники, которые я использовал в качестве подушечек. Примерно разложите переключатели и прикрепите контактные площадки к основанию, оставив достаточно места, чтобы пришить к ним шнур и сделать щелчок. Лапка швейной машины, которую я использовал, не одобряла того, что она находится очень близко к кнопке, так что имейте это в виду и дайте себе немного места. Так как у меня была токопроводящая нить, которая могла идти в мою швейную машину, я просто прошила леску от подушечки к подушечке и обратно. Мне нужно было идти медленно, иначе нить порвалась, но это было на тонну быстрее, чем при шитье вручную. Также с токопроводящей нитью на шпульке и игле я получил действительно хорошее прочное соединение. Материал изнашивается как сумасшедший, но небольшой клей для рукоделия или Элмерс это исправят. Старайтесь держать линии подальше друг от друга, и у вас не должно возникнуть никаких проблем. Окончательная сборка: установите все переключатели, подключите плату, загрузите код и готово. Я использовал проволоку, чтобы протянуть ее от платы к контактной площадке, а затем просто вручную пришил проволоку к основанию. Для следующей версии смонтирую плату в пластиковую коробку с защелками, чтобы прикрепить ее к основанию, чтобы холостые пальцы не разводили ее.

Шаг 8: Код

Код
Код

Если вы никогда раньше не программировали чип, это довольно сложная задача. Не помогает то, что инструменты работают ненадежно и в большинстве случаев вам приходится выполнять одну и ту же операцию несколько раз. Два лучших ресурса, которые я нашел для понимания того, что происходит, - это страница USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ и ускоренный курс по программированию шумовой игрушки, https://www.ladyada.net/make/usbtinyisp/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Они должны помочь вам начать работу.

Многим людям нравится Arduino за это кодирование, и нет ничего плохого в том, чтобы использовать его, за исключением того, что я чувствую, что это добавляет много раздувания к обычно простой программе. Кроме того, я знал C и не знал Arduino. Может, когда-нибудь, если будет время.:) Код: {{{#include // Используйте булавку для включения SPK /// Typedefs ////////// typedef unsigned char u8; int main (void) {u8 btnState0; u8 btnState1; u8 btnState2; u8 btnState3; u8 btnState4; u8 btnState5; u8 btnState6; DDRB = (1 << DDB6); // Устанавливаем SPK для вывода PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Установить кнопку высокого уровня PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Устанавливаем таймер while (1) {btnState0 = ~ PINC & (1 << PC5); btnState1 = ~ PINC & (1 << PC4); btnState2 = ~ PIND & (1 << PD0); btnState3 = ~ PIND & (1 << PD1); btnState4 = ~ PIND & (1 << PD2); btnState5 = ~ PIND & (1 << PD3); btnState6 = ~ PIND & (1 << PD4); если (btnState0) {если (TCNT2> = 190) {ПОРТБ ^ = (1 << PD6); // Перевернуть контакт SPK TCNT2 = 0; }} if (btnState1) {если (TCNT2> = 179) {PORTB ^ = (1 << PD6); // Перевернуть контакт SPK TCNT2 = 0; }} if (btnState2) {если (TCNT2> = 159) {PORTB ^ = (1 << PD6); // Перевернуть контакт SPK TCNT2 = 0; }} if (btnState3) {если (TCNT2> = 142) {PORTB ^ = (1 << PD6); // Перевернуть контакт SPK TCNT2 = 0; }} if (btnState4) {если (TCNT2> = 126) {PORTB ^ = (1 << PD6); // Перевернуть контакт SPK TCNT2 = 0; }} if (btnState5) {если (TCNT2> = 119) {PORTB ^ = (1 << PD6); // Перевернуть контакт SPK TCNT2 = 0; }} if (btnState6) {если (TCNT2> = 106) {PORTB ^ = (1 << PD6); // Перевернуть контакт SPK TCNT2 = 0; }}}}}}} Откуда берутся передачи? Требовалось немного математики. Часы таймера atmega 168 работают на частоте 1 МГц. Это слишком быстро для звука, поэтому мы должны использовать предварительный делитель / 8. Затем, поскольку нам нужно перевернуть выходной контакт вверх, а затем в низкий, чтобы сделать 1 цикл, нам нужно разделить ответ на 2, чтобы получить правильный шаг. Формула выглядит так: Шаг для ввода кода = (1000000/8) / (Целевая частота * 2) Для A (440) это будет 125000/880 = 142,045 или 142 для наших целей, поскольку значение должно быть целым числом.. Целевые частоты нот можно найти где угодно в Интернете и, как правило, все одинаковы. Я все еще хочу добавить оператор case вместо использования кучи If и использовать PWM для лучшего управления громкостью и высотой звука динамика, но на данный момент это работает.

Рекомендуемые: