Съдържание:

Генератор на тон на микроконтролер в C-код: 8 стъпки (със снимки)
Генератор на тон на микроконтролер в C-код: 8 стъпки (със снимки)

Видео: Генератор на тон на микроконтролер в C-код: 8 стъпки (със снимки)

Видео: Генератор на тон на микроконтролер в C-код: 8 стъпки (със снимки)
Видео: LDmicro 11: Serial LCD Temperature Controller (Microcontroller PLC Ladder Programming with LDmicro) 2024, Ноември
Anonim
Генератор на тон на микроконтролер в C-код
Генератор на тон на микроконтролер в C-код

В края на октомври миналата година потребителят на instructables carmitsu ми изпрати съобщение, след като видя синтезатора на моята кутия за обяд. От посланието му: Преподавам музика в началното училище. Пускаме много записваща музика. т.е. децата свирят на малки флейти … … Имам няколко деца със специални нужди, които могат да използват тези черни плакати с кръгове, на които има името на бележката. Тези ученици натискат кръговете с имена на ноти, а останалите ученици свирят песен ….. Повечето деца със специални нужди могат да направят това доста добре и навреме с музиката. Това, което искам да направя, е да изградя много прост звуков генератор, така че тези деца да могат да свирят на една и съща терена като тези, които се играят от учениците на техните рекордери. Бих бил само на няколко терена. Мислех, че мога да прикача някакъв малък бутон в долната част на кръглите им кръгове, така че когато те ги натиснат, звукът да излезе от малък високоговорител, достатъчно силен, за да чуят. Да имам майка, която е учителка и да е харесала училище, как бих могъл да устоя? Честно казано не бих могъл. Това е почти хроника на проекта и инструкции как да създадете свой собствен.

Стъпка 1: Началото или защо не можах да се придържам към аналоговия

Началото или защо не можах да се придържам към аналоговия
Началото или защо не можах да се придържам към аналоговия

Добрите неща започват на следващата страница. Ако искате да знаете как в крайна сметка използвах частите, които направих, прочетете нататък. Истинският таймер: След като помислих за проекта, веднага се сетих за генератора на пиезо тонове от моята книга за операционни усилватели Forest Mims III. Изглежда като добър начин, това е просто пиезо, 741 IC и няколко пасивни компонента. Няма голяма работа нали? Ами има 2 проблема, 1) когато натиснете превключвателя, е възможно да промените височината на звука 2) е адски почти невъзможно да се настрои. Първото вероятно би могло да бъде преодоляно с известна технология за деблокиране, въпреки че не знаех как да го направя, без да добавя друг брояч. Това може да бъде и проблем с използването на пиезо. Вторият въпрос просто стана тромав, когато започнахте да се опитвате да ударите определена височина. Ами 555? Информационният лист показва функция за забавяне на времето въз основа на резистори и кондензатори. Което е чудесно, докато не започнете да въвеждате действителни стойности на части от реалния свят, тогава ще откриете, че удрянето на 440Hz височина започва да става малко трудно. Можете да използвате подреждащи саксии, за да го настроите, но с течение на времето те са склонни да се движат. Постоянното настройване на инструмента, съставено на върха на бързото увеличаване на цената и количеството на частите, и съпругата ми, която промени терена, когато натисна бутона, уби 555 за този проект. Оп-усилвател: Няма проблем, хората правят синтезатори оп-усилватели още преди да се родя. Колко трудно би могло да бъде да се направи наистина проста, с малко части и конкретни бележки? По -трудно, отколкото си мислех. Повечето от дизайните там са твърде сложни за този проект. Дизайнерите на синтезатор търсят перфектната форма/тон на вълната. Това е в пряк конфликт с проект, който би трябвало да е достатъчно евтин за училищния или учителския бюджет. Изграждането на клавиатура е достатъчно лесно, това е само куп резистори и мощност или куп диоди и мощност. Това е останалата част от дизайна на схемата и цената на персонализираните печатни платки, които започват да излизат извън контрол за някой на начално ниво на електрониката. Предефиниране на проекта: Така че проектът беше предефиниран, преди дори наистина да започна. Имах нужда от нещо, което да може да превключва щифта на високоговорителя навреме с натискане на бутон. Не исках да проектирам и купувам печатна платка. Това трябваше да използва възможно най -малко компоненти и да се сглоби като комплект за начинаещи. През цялото време ме гледаше в лицето. Да !! Микроконтролер! Микроконтролер: След като закупих както Arduino комплект за модерни устройства Bare Bones, така и Simple Target Board на Evil Mad Scientist и ги оставих да седят на бюрото ми в продължение на месеци, без да се използват, имах перфектния уводен проект. Започнах да разглеждам времето, необходимо за събирането на двете, кривата на обучение за кода, разходите, необходимите допълнителни части и да го накарам да направи това, което искам, и се спрях на целевата дъска. Цената беше доста равномерна, $ 15 плюс $ 20 FTDI кабел за Arduino, $ 12 плюс $ 22 програмист USBtinyISP. Вече знаех C ++ от малкия колеж, който бих могъл да издържа, и реших, че C за микроконтролерите няма да е толкова лош, докато освен мигането на лампа, за да съм сигурен, че съм събрал правилно комплекта си, нямах опит с Arduino. И двете могат да бъдат монтирани. Това беше доста повдигане, така че реших за по -малкото части от двете, целевата дъска.

Стъпка 2: Какво ви трябва Rev 1

Какво ви трябва Rev 1
Какво ви трябва Rev 1

Цена на частиUSBtinyISP AVR Programmer Kit (USB SpokePOV Dongle) v2.0 $ 22.00https://www.adafruit.com/index.php? Main_page = product_info & cPath = 16 & products_id = 46Evil Mad Scientist labs ATmegaXX8 Mini Dev Kits $ 12Headers, 6-пинов, 6-пинов 5-pk $ 2.75https://evilmadscience.com/tinykitlist/74-atmegaxx8 Говорител (8-омов мини) $ 2.79https://www.radioshack.com/product/index.jsp? ProductId = 2062406SPST Нормално отворени моментни превключватели (използвахме 5) $ 3,49 (4 опаковки) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Поставка за батерии $ 1,79https://www.radioshack.com/product/index.jsp? ProductId = 2102735SPST Submini Slide Switch (опция за превключвател за захранване) $ 2,69 (2 пакета) https://www.radioshack.com/product/index.jsp?productId=2062490LED и резистор (по избор, ако искате лампа за захранване) $ трябва да е безплатна ако те лежат наоколоWire $ също трябва да лежи Сребърна спойка (ако това е близо до деца, вероятно не трябва да използвате олово, родителите стават доста странни за такива неща;)) Разтриване на алкохол (за да move flux) Ако искате на някои места да спестите пари, не е нужно да получавате части от RadioShack. Направих го, защото са близки и предвидими.

Стъпка 3: Монтаж Rev 1

Монтаж Rev 1
Монтаж Rev 1
Монтаж Rev 1
Монтаж Rev 1

Сглобете частите си, както е показано. Не забравяйте да използвате алкохол и четка за флюс, когато приключите, за да се отървете от всеки поток от запояване. Схемата е по -долу за тези, които го предпочитат. D1 и R1 могат да бъдат каквото искате, това е само лампа за захранване. C1 просто помага да се направи мощността малко по -последователна. Използвах 10uF. Тази схема е същата за по -късните версии, просто сменете бутоните за превключватели от плат. в последната редакция добавих превключватели към PC4 и PC5 или пинове 27 и 28.

Стъпка 4: Какво ви трябва Rev 2

Какво ви трябва Rev 2
Какво ви трябва Rev 2

Така че основно замествате бутоните на Radio Shack за ръчно изработени тъкани. Нуждаете се от: Няколко цвята плат или един цвят, ако искате всяка бележка в същия цвят. Разделът за ватиране на най -близкия ви магазин за тъкани е най -доброто място да получите това евтино. Quilting quart са $ 1,50 и можете да получите един тон превключватели от един. Проводим плат, предлагам тъканта Flectron от LessEMF това е $ 20 за парче 12 "x54" Eyelets за закрепване на проводника към тъканта. Можете да ги получите в повечето магазини за тъкани евтино. JoAnn има инструмента и 25 за $ 2 За това ще ви е необходим чук. Кабел, използвах 22AWG, предлагам по -малък, ако го имате. Сливане, за да се слепи цветната и проводима материя. Попитайте в магазина и вероятно можете да го купите до двора. Вероятно това ще работи добре, въпреки че предлагам да попитате някого Batting, първо използвах наистина хлабави неща, след което преминах към нещо по -стегнато. Предлагам ви просто да опитате няколко различни, докато намерите какво работи най -добре. Термосвиващите се тръби, това направи цялото нещо много по -управляемо. термосвиваеми проводници заедно, докато преминават един през друг и те ще останат много по -добре.

Стъпка 5: Монтаж Rev 2

Монтаж Rev 2
Монтаж Rev 2
Монтаж Rev 2
Монтаж Rev 2
Монтаж Rev 2
Монтаж Rev 2

Поставете многоцветната тъкан една върху друга и изрежете квадрат, не е задължително да е перфектен. Изгладете плата, за да извадите гънките, поставете ги един върху друг отново и се уверете, че всички ръбове съвпадат. Изрежете всички ръбове, които не са. Изрежете горния и долния кръг, оставяйки лявата и дясната страна прави. Ще обърнете превключвателя след шиене, така че не правете заоблените страни твърде кръгли и оставете достатъчно височина на плоските страни, за да натиснете превключвателя лесно, когато приключите. Закръглете плоската страна на първия и последния превключвател. Пристъпете към шевната машина и сложете два от кръговете заедно, така че добрата страна да е обърната един към друг, и зашийте шев върху плоските части. зашит, изрежете квадратчета от проводящата тъкан и обезопасете едната страна. Нарежете жицата на дължина и отстранете единия край. запоявайте жицата около един от капсите. (спойката вероятно няма да се залепи за отвора) Изрежете малка цепка в тъканта в единия ъгъл и забийте отвора, за да прикрепите тъканта и телта. отстранете подложката от стопяването и поставете проводящата тъкан към задната част на цветната тъкан. Повторете за всички превключватели. За да улесните нещата, можете да затоплите тръбите заедно, когато един проводник премине през проводника за следващия превключвател. Вземете или направете парче плат по дължината на комплекта превключватели и изрежете лента от проводяща тъкан по дължината му. За разлика от цветните превключватели, това е едно дълго парче. Бутоните ще докоснат това за осъществяване на връзката. Изрежете малък процеп и прикрепете към него проводник с отвор, като цветните превключватели. Залепете го към задната част на долната тъкан. Зашийте горната и долната част заедно с проводящата тъкан навън, използвайте дворна пръчка, за да обърнете комплекта, след като е зашит. Изрежете няколко малки дупки в вата, използвах клечка, за да получа кръг, след което просто извадете клечката и направете разреза. Нарежете ги за оформяне и ги поставете в превключвателите. Това е това, което държи проводящата тъкан отделно. Може да е по -лесно да поставите вата, докато обръщате превключвателите, вместо след това. Нещата, които използвах, се разкъсаха доста лошо, докато ги вкарвах и трябваше да получа различни ватове. Дългата долна лента ще се смила.

Стъпка 6: Какво ви трябва Rev 3

Какво ви трябва Rev 3
Какво ви трябва Rev 3

В Rev 3 направих превключвателите независими от окабеляването. Това спести много време. Харесва ми и външният вид на готовия резултат, така че ето новите части, от които се нуждаете: Снимки, Току -що ги взех от JoAnn's. Те дойдоха с инструмент за инсталиране, който не беше лош за $ 7, вместо това бих предложил един от инструментите за клещи, тъй като трябваше да разглобя инструмента си, за да инсталирам скобите в средата. Шиенето би било добра алтернатива, въпреки че отнема повече време за залепване. Проводимата нишка, Spark Fun има неща, които могат да отидат във вашата шевна машина. Трябваше да вървя много бавно в машината си, иначе нишката щеше да се скъса. Пробегът ви може да варира

Стъпка 7: Монтаж Rev 3

Монтаж Rev 3
Монтаж Rev 3
Монтаж Rev 3
Монтаж Rev 3
Монтаж Rev 3
Монтаж Rev 3
Монтаж Rev 3
Монтаж Rev 3

Тази ревизия беше много по -добра от последната по отношение на времето до изграждането. Плюс това, сменяемите превключватели ми спасиха здравия разум повече от веднъж. Започнете, като направите основата. Това е само една ватирана четвърт, сгъната наполовина. Поставете слой ватин отгоре и зашийте, оставяйки дупка, за да го обърнете. Избутайте вещта през дупката и по принцип имате нещо като възглавница. Ватирах го, така че беше по -лесно да работя. Използвайте обикновена нишка и ядрете. Направих диаманти на този, но може би следващия път ще сложа дракон отзад или нещо готино. Сега, към превключвателите. Харесва ми този дизайн, защото можете да направите много от тях предварително и просто да използвате това, което искате. започнете с използване на парче картон, хартия или плат и изрежете от него форма на круша. Използвайте това като ръководство за изрязване на горната и долната част за всеки превключвател. Изрязах по един цвят за всяко дъно и различен цвят за върховете, но можете да бъдете креативни и да правите каквото искате. Нарежете ръководството си до форма на близалка, която лесно ще се побере в превключвателя. Удължете "пръчката", така че да може да се увие над ръба на "крушата". Изрежете формата от топящата се и проводяща тъкан и предпазете едната страна на проводимата тъкан. Отстранете подложката от стопяващия материал и я поставете до горната част на тъканта, която ще бъде отдолу, и отдолу от тъканта, която ще бъде отгоре. Увийте допълнителната част отгоре. Преминете към вашата шевна машина и поставете ватин с дупки между горната и долната тъкан. Зашийте извън проводящата тъкан и прескочете частта "превръзка" на превключвателя. Открих, че е възможно да пришиете горната проводима материя към дъното, създавайки къса. По -добре е да не шиете през проводящата тъкан. Прикрепете щраквания и превключването е готово. Открих, че е по -лесно да използвам мъжката закопчалка за всички долни/GND връзки и женската за всички върхове. Това прави всички превключватели взаимозаменяеми. Взех си парчетата, разтопих големи парчета стопяване към големи парчета проводима тъкан и ги използвах за изрязване на по -малките правоъгълници, които използвах като подложки. Поставете грубо превключвателите си и поставете подложките в основата с достатъчно място, за да пришиете линия към тях и да щракнете. Кракът на шевната машина, който използвах, не се отнасяше любезно към това, че е много близо до щракването, така че имайте това предвид и си дайте малко място. Тъй като получих проводима нишка, която може да влезе в моята шевна машина, просто шиех линия от подложка до подложка и обратно. Трябваше да вървя бавно или конецът ще се скъса, но беше с един тон по -бързо от ръчното шиене. Също така с проводима резба на калерчето и иглата, имам наистина добра стабилна връзка. Нещата се разбиват като луди, но малко занаятчийско лепило или Елмърс изчиства това. Опитайте се да държите линиите далеч една от друга и не би трябвало да имате проблеми. Окончателно сглобяване: Включете всичките си превключватели, свържете платката, заредете кода и сте готови. Използвах тел, за да стигна от дъската до подложката и след това просто заших жицата към основата на ръка. За следващата версия ще монтирам дъската в пластмасова кутия със скоби, за да я прикрепя към основата, така че пръстите на празен ход да не я разкъсват.

Стъпка 8: Код

Код
Код

Ако никога преди не сте програмирали чип, това е донякъде обезсърчаваща задача. Не помага, че инструментите са люспести и през повечето време трябва да извършите една и съща операция няколко пъти. Двата най -добри ресурса, които открих, за да разбера какво се случва, са страницата за USBtinyISP, https://www.ladyada.net/make/usbtinyisp/ и курса за срив при програмиране на играчката за шум, http:/ /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); // Set Button High PORTC = (1 << PC4) | (1 << PC6); TCCR2B = (1 << CS21); // Настройване на таймер докато (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); if (btnState0) {if (TCNT2> = 190) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} ако (btnState1) {ако (TCNT2> = 179) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} ако (btnState2) {ако (TCNT2> = 159) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} ако (btnState3) {ако (TCNT2> = 142) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} ако (btnState4) {ако (TCNT2> = 126) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} ако (btnState5) {ако (TCNT2> = 119) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} ако (btnState6) {ако (TCNT2> = 106) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }}}}}}} Откъде идват терените? Трябваше малко математика. Часовникът на таймера на atmega 168 работи на 1MHz. Това е твърде бързо за аудио, така че трябва да използваме предусилвателя /8. След това, тъй като трябва да обърнем изходния щифт високо, а след това ниско, за да направим 1 цикъл, трябва да разделим отговора на 2, за да излезем с правилната стъпка. Формулата изглежда така, Pitch за въвеждане на код = (1000000/8)/(Целева честота*2) За A (440) това би било 125000/880 = 142.045 или 142 за нашите цели, тъй като стойността трябва да е цяло число. Целевите честоти на бележките могат да бъдат намерени почти навсякъде онлайн и като цяло са еднакви. Все още искам да добавя изявление за случай, вместо да използвам куп Ifs и да използвам PWM за по -добър контрол на силата на звука и височината на високоговорителя, но засега това работи.

Препоръчано: