Мазмұны:

Микроконтроллер мата тон генераторы C-кодта: 8 қадам (суреттермен)
Микроконтроллер мата тон генераторы C-кодта: 8 қадам (суреттермен)

Бейне: Микроконтроллер мата тон генераторы C-кодта: 8 қадам (суреттермен)

Бейне: Микроконтроллер мата тон генераторы C-кодта: 8 қадам (суреттермен)
Бейне: Измерение частоты с помощью микроконтроллера 2024, Қараша
Anonim
Микроконтроллер мата тон генераторы C-кодта
Микроконтроллер мата тон генераторы C-кодта

Өткен жылдың қазан айының соңында carmitsu нұсқаушысы пайдаланушы маған түскі ас синхрондауын көргеннен кейін маған хабарлама жіберді. Оның хабарламасынан: Мен бастауыш мектепте музыка пәнінен сабақ беремін. Бізде диктофон музыкасы көп ойнайды. яғни балалар кішкене флейта ойнайды …… Менде бірнеше ерекше қажеттіліктері бар балалар бар, оларда қара түсті плакат тақтайшалары бар, оларда нота жазылған. Бұл студенттер нотада аты бар шеңберлерді итереді, ал қалған оқушылар ән айтады ….. Ерекше қажеттілікке ие балалардың көпшілігі мұны музыкамен жақсы және уақытында жасай алады. Мен іздеймін - бұл дыбыс генераторы, бұл балалар дыбыс жазғыштарда оқушылар ойнайтын алаңда ойнауы үшін. Мен тек бірнеше алаң болар едім. Мен олардың дөңгелек шеңберлерінің түбіне кішкене түймені бекітуге болады деп ойладым, сонда олар басылған кезде дыбыс кішкентай динамиктен шығады, олар есту үшін жеткілікті күшті болады. Анасы мұғалім болса және мектепті ұнатса, мен оған қалай қарсы тұра алар едім? Шынымды айтсам мен алмадым. Бұл жобаның шежіресі және оны өз қолыңызбен салу туралы нұсқаулық.

1 -қадам: Басы немесе неге мен аналогты ұстай алмадым

Басталуы немесе неге мен аналогты ұстай алмадым
Басталуы немесе неге мен аналогты ұстай алмадым

Жақсы нәрсе келесі беттен басталады. Егер мен жасаған бөлшектерді қалай қолданғанымды білгіңіз келсе, оқыңыз. Нақты таймер: Жобаны бергеннен кейін мен ойладым, мен бірден менің опера-ампер Forest Mims III кітабындағы пьезо тонус генераторы туралы ойладым. Барудың жақсы әдісі сияқты, бұл тек пьезо, 741 IC және жұп пассивті компоненттер. Ештеңе жоқ, дұрыс па? Оның 2 мәселесі бар, 1) қосқышты басқанда, дыбысты өзгертуге болады 2) баптау мүмкін емес. Біріншісін шығарудың кейбір технологияларымен жеңуге болады, бірақ мен оны басқа есептегішті қоспай қалай жасау керектігін білмедім. Бұл пьезо қолданумен байланысты мәселе болуы мүмкін. Екінші мәселе, сіз белгілі бір алаңға шығуға тырысқанда, қиын болды. 555 ше? Деректер кестесінде резисторлар мен конденсаторларға негізделген уақытты есептеу функциясы көрсетілген. Нақты дүние бөліктерінің нақты мәндерін теруді бастағанға дейін бұл өте жақсы, сол кезде сіз 440 Гц жиілікке жету қиынға соғатынын байқайсыз. Реттеу үшін кастрюльдерді қолдануға болады, бірақ уақыт өте келе олар жылжи бастайды. Бөлшектердің бағасы мен санының тез өсуіне байланысты құралды үнемі реттеп отырады, және менің әйелім осы жобаның түймесін басқанда 555-ті өлтірді. op-amps мен туылғанға дейін. Бөлшектері аз және нақты жазбалары бар шынымен де қарапайым жасау қаншалықты қиын болуы мүмкін? Мен ойлағаннан да қиын. Көптеген жобалар бұл жобаға өте күрделі. Synth дизайнерлері толқынның керемет формасына/тонына дайын. Бұл мектеп немесе мұғалімдер бюджеті үшін жеткілікті арзан болатын жобаға тікелей қайшы келеді. Пернетақтаны құру өте қарапайым, бұл тек резисторлар мен қуат немесе диодтар мен қуаттың жиынтығы. Бұл схеманың қалған бөлігі және электронды техниканың бастапқы деңгейінде біреуге қол жетімді компьютерлердің құны. Жобаны қайта айқындау: Осылайша, мен іске кіріспес бұрын жоба қайта анықталды. Маған бір уақытта түймені басу арқылы динамиктің түйреуішін ауыстырып қосатын нәрсе қажет болды. Мен ПХД құрастыруды және сатып алуды қаламадым. Бұл мүмкіндігінше аз компоненттерді қолдануы керек және жаңадан бастаушылар жиынтығы ретінде жиналуы керек еді. Бұл менің бетіме қарап тұрды. Дух !! Микроконтроллер! Микроконтроллер: Сонымен, Arduino модерндік қондырғылары мен Evil Mad Scientist қарапайым мақсатты тақтасын сатып алып, оларды бірнеше ай бойы менің үстелімде отыруға рұқсат бергеннен кейін менде тамаша кіріспе жоба болды. Мен екеуін біріктіру үшін қажет уақытты, кодты үйрену қисығын, шығындарды, қажетті қосымша бөлшектерді және оны қалағанымды орындауға мәжбүрлеп, мақсатты тақтаға орналастыруды қарастыра бастадым. Құны біркелкі болды, $ 15 плюс Arduino үшін $ 20 FTDI кабелі, $ 12 плюс $ 22 USBtinyISP бағдарламашысы. Мен C ++ -ны кішкентай колледжден білетінмін, мен микроконтроллерлер үшін С соншалықты жаман болмайтынын білдім, ал мен шамды жыпылықтаудан басқа, менің жинағымды дұрыс жинастырғаныма сенімдімін, менде Arduino тәжірибесі болмады. Екеуі де орнатылуы мүмкін. Бұл өте жоғары болды, сондықтан мен екеуінің аз бөлігін, мақсатты тақтаны таңдадым.

2 -қадам: Сізге не қажет Rev1

Сізге не қажет Rev1
Сізге не қажет Rev1

Қосалқы бөлшектердің құныUSBtinyISP AVR бағдарламашылар жинағы (USB SpokePOV Dongle) v2.0 $ 22.00 5-pk $ 2.75https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8-ohm Mini) $ 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 $ сонымен қатар күміс дәнекерлеуіштің айналасында жатуы керек (егер бұл балалардың қасында жүрсе, онда сіз қорғасынды пайдаланбауыңыз керек, ата -аналар мұндай нәрсеге таңқаларлықтай қарайды;)) Спирт спирті (қайта жылжыту ағыны) Егер сіз кейбір жерлерде ақша үнемдегіңіз келсе, RadioShack -тен бөлшектерді алудың қажеті жоқ. Мен мұны жасадым, себебі олар жақын және болжамды.

3 -қадам: Ассамблеяның айналуы 1

Ассамблеяның айналымы 1
Ассамблеяның айналымы 1
Ассамблеяның айналымы 1
Ассамблеяның айналымы 1

Бөлшектерді суретте көрсетілгендей біріктіріңіз. Дәнекерлеу кезіндегі ағыннан құтылу үшін, алкоголь мен флюс щеткасын қолданғаныңызға сенімді болыңыз. D1 және R1 сіз қалағандай болуы мүмкін, бұл жай ғана қуат шамы. C1 - бұл қуатты біршама үйлесімді етуге көмектесу. Мен 10uF қолдандым. Бұл схема кейінгі нұсқалар үшін бірдей, тек мата қосқыштары үшін түймелерді ауыстырыңыз. соңғы нұсқада мен PC4 пен PC5 қосқыштарын немесе 27 және 28 түйреуіштерді қостым.

4 -қадам: Сізге не қажет Rev 2

Сізге не қажет Rev 2
Сізге не қажет Rev 2

Негізінде, сіз Radio Shack түймелерін қолдан жасалған маталарға ауыстырасыз. Сізге қажет: матаның бірнеше түстері, немесе егер сіз әр жазбаның бір түсті болуын қаласаңыз. Сізге жақын мата дүкенінің көрпе бөлімі - бұл арзанға алудың ең жақсы жері. Тоқыма тоқсандары - 1,50 доллар, және сіз бір тоннан ажыратқыш ала аласыз. Өткізгіш матадан мен LessEMF -тен Flectron матасын ұсынамын, ол сымды матаға бекітуге арналған 12 «x54» данаEelelets үшін 20 доллар. Сіз оларды мата дүкендерінен арзанға ала аласыз. JoAnn құралы бар және $ 25 үшін сізге балға қажет. Сым, мен 22AWG қолдандым, егер сізде кішірек болса, ұсынамын. Түсті және өткізгіш матаны бір -біріне жабыстыру үшін біріктіру. Дүкеннен сұраңыз, сіз оны ауладан сатып ала аласыз. Бұл, бәлкім, жақсы жұмыс істейтін болар еді, бірақ мен сізден біреуді сұрауды ұсынамын, бірақ мен шынымен бос заттарды қолдандым, содан кейін тығыз тоқылған нәрсеге ауыстым. Мен сізге ең жақсы жұмыс істейтін нәрсені таппағанша бірнеше басқа нұсқаны қолдануға кеңес беремін. жылу сымдары бір -бірінен өтіп бара жатқанда, олар әлдеқайда жақсы болады.

5 -қадам: Ассамблеяның Rev 2

Ассамблея Rev 2
Ассамблея Rev 2
Ассамблея Rev 2
Ассамблея Rev 2
Ассамблея Rev 2
Ассамблея Rev 2

Түрлі-түсті матаны бір-бірінің үстіне қойып, төртбұрышты кесіңіз, ол мінсіз болуы шарт емес. Кез келген бүктемелерді алу үшін матаны үтіктеп, қайтадан бір -бірінің үстіне қойып, жиектері сәйкес келетініне көз жеткізіңіз. Жоғарғы және төменгі дөңгелектерді кесіңіз, сол және оң жақтарын түзу қалдырыңыз. Сіз тігіп болғаннан кейін қосқышты төңкересіз, сондықтан дөңгелектелген жақтарын тым дөңгелектемеңіз және аяқталғаннан кейін қосқышты оңай итеру үшін тегіс жақтарда жеткілікті биіктікте қалдырыңыз. Бірінші және соңғы қосқыштың тегіс жағын дөңгелектеңіз. Тігін машинаңызға өтіп, екі дөңгелекті бір -біріне қойыңыз, сонда жақсы жағы бір -біріне қарайды және жалпақ бөліктерге тігіс тігіңіз. тігілген, өткізгіш матадан квадраттарды кесіп, бір жағын біріктіреді. Сымды ұзындыққа дейін кесіңіз және бір ұшын алыңыз. сымдарды бір қабықтың айналасына дәнекерлеңіз. (дәнекер саңылауға жабысып қалмауы мүмкін) Матаның бір бұрышында кішкене тесікті кесіңіз де, матаны және сымды бекіту үшін қабықты ұрыңыз. балқытқыштан астарды алып тастаңыз және өткізгіш матаны түрлі -түсті матаның артына сақтандырыңыз. Барлық қосқыштар үшін қайталаңыз. Жұмысты жеңілдету үшін бір сым келесі сымның сымынан өткен кезде сымдарды қысу түтігін бірге қыздыруға болады. Коммутатордың ұзындығына матаның бір бөлігін алыңыз немесе оның ұзындығына өткізгіш матаның жолағын кесіңіз. Түсті қосқыштардан айырмашылығы, бұл бір ұзын бөлік. Байланысты орнату үшін түймелер басылатын болады. Кішкене тесікті кесіңіз және оған түсті қосқыштың шыңдары сияқты саңылауға сым бекітіңіз. Төменгі матаның артқы жағына сақтандырыңыз. Үстіңгі және астыңғы жағын өткізгіш матамен сыртқа қаратып тігіңіз, аула таяқшасын қолданып, оны тігілгеннен кейін төңкеріңіз. Патроннан бірнеше кішкене тесіктерді кесіңіз, мен таяқшаны қолдандым. шеңбер, содан кейін таяқшаны алып тастаңыз және кесіңіз. Оларды пішінге келтіріп, ажыратқыштарға салыңыз. Бұл өткізгіш матаны бір -бірінен бөліп тұрады, содан кейін ажыратқыштарды төңкеріп жатқанда, втулканы енгізу оңай болуы мүмкін. Мен кірістірген кезде мен қолданған заттар өте нашар жыртылды, мен әр түрлі батттарды алуым керек болды. Ақырында сымдарды мақсатты тақтаға байлаңыз, сонда бәрі дайын. Ұзын төменгі жолақ жерленеді.

6 -қадам: Сізге не қажет Rev 3

Сізге не қажет Rev3
Сізге не қажет Rev3

Rev 3 -те мен қосқыштарды сымнан тәуелсіз жасадым. Бұл біршама уақытты үнемдеді. Мен сондай -ақ дайын нәтиженің келбетін көбірек ұнатамын, міне, саған қажет жаңа бөлшектер: Snaps, оларды JoAnn's -тен ғана алдым. Олар 7 доллар тұратын қондырғы құралымен келді, мен оның орнына қысқыш құралдардың бірін ұсынар едім, себебі ортасында ілмектерді орнату үшін құралымды бөліп алуым керек болды. Тігін бұйымдары жақсы балама болар еді, бірақ оларды ұстауға көп уақыт кетеді. Өткізгіш жіп, Spark Fun сіздің тігін машинаңызға түсе алатын заттарға ие. Мен машинада баяу жүруге мәжбүр болдым, әйтпесе жіп үзіліп кетеді. Сіздің жүгірісіңіз әр түрлі болуы мүмкін

7 -қадам: Ассамблея Rev3

Ассамблея 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 -ды ұнатады және оны қолданудың еш жаман жері жоқ, тек менің ойымша, бұл қарапайым бағдарламаға көп қобалжу қосады. Сонымен қатар, мен С -ды білдім, Ардуиноны білмеймін. Мүмкін бір күні, егер уақыт болса.:) Код: {{{#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); // PORTD = (1 << PD0) шығысы үшін SPK орнатыңыз | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 << PD4); // Жоғары батырманы орнату 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); // SPK түйреуішін аудару TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^= (1 << PD6); // SPK түйреуішін аудару TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^= (1 << PD6); // SPK түйреуішін аудару TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^= (1 << PD6); // SPK түйреуішін аудару TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^= (1 << PD6); // SPK түйреуішін аудару TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^= (1 << PD6); // SPK түйреуішін аудару TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^= (1 << PD6); // SPK түйреуішін аудару TCNT2 = 0; }}}}}}} Шатырлар қайдан келеді? Кішкене математика қажет болды. Atmega 168 таймерінің сағаты 1 МГц жиілікте жұмыс істейді. Бұл аудио үшін өте жылдам, сондықтан біз алдын ала есептегішті /8 пайдалануымыз керек. Содан кейін бізге 1 цикл жасау үшін шығыс істікшені жоғары және төмен айналдыру қажет болғандықтан, дұрыс қадамды табу үшін жауапты 2 -ге бөлу керек. Формула келесідей: Pitch коды = (1000000/8)/(Мақсатты жиілік*2) A (440) үшін бұл біздің мақсат үшін 125000/880 = 142.045 немесе 142 болады, себебі мән бүтін сан болуы керек. Жазбалардың мақсатты жиіліктерін кез -келген жерден табуға болады және әдетте бәрі бірдей. Мен Ifs тобын пайдаланудың орнына іс туралы мәлімдеме қосқым келеді және динамиктің дыбыс деңгейін жақсарту үшін PWM қолданамын, бірақ әзірше бұл жұмыс істейді.

Ұсынылған: