Мазмуну:

C-коддогу микроконтроллер кездеме тон генератору: 8 кадам (сүрөттөр менен)
C-коддогу микроконтроллер кездеме тон генератору: 8 кадам (сүрөттөр менен)

Video: C-коддогу микроконтроллер кездеме тон генератору: 8 кадам (сүрөттөр менен)

Video: C-коддогу микроконтроллер кездеме тон генератору: 8 кадам (сүрөттөр менен)
Video: Как развести плату с микроконтроллером, SMT сборка, прошивка 2024, Июль
Anonim
C-коддогу микроконтроллер кездеме тон генератору
C-коддогу микроконтроллер кездеме тон генератору

Өткөн жылдын октябрь айынын аягында, carmitsu колдонуучусу менин түшкү кутумдун синтезин көргөндөн кийин мага билдирүү жөнөткөн. Анын билдирүүсүнөн: Мен башталгыч класстарда музыкадан сабак берем. Биз диктофон музыкасын көп ойнойбуз. башкача айтканда, балдар кичинекей флейта чертишет ……. Менде бир нече өзгөчө муктаждыктары бар балдар бар, аларда кара түстөгү плакаттарды колдонуп, аларда нотанын аты бар. Бул окуучулар нота аттары бар чөйрөлөрдү түртүшөт, ошол эле учурда калган окуучулар ыр ойноп жатышат ….. Өзгөчө муктаждыкка ээ болгон балдардын көбү муну музыка менен жакшы жана өз убагында аткара алышат. Мен издеп жаткан нерсе - бул балдар үн жазгычтарында студенттер ойногондор менен бирдей аянтта ойношу үчүн абдан жөнөкөй үн генераторун куруу. Мен бир нече гана кадам болмокмун. Мен алардын тегерек тегерегинин түбүнө кандайдыр бир кичинекей баскычты жабыштыра алам деп ойлогом, ошондо алар басканда үн кичинекей колонкадан чыгып кетет, алар угушу үчүн. Мугалим болгон апам бар жана мектепти жакшы көрөм, мен кантип каршы тура алам? Чынын айтсам мен кыла албадым. Бул долбоордун хроникасы жана өзүңүздү кантип куруу боюнча нускамалар.

1 -кадам: Башталышы же эмне үчүн мен аналогго жабыша албадым

Башталышы же эмне үчүн мен аналогго жабыша албадым
Башталышы же эмне үчүн мен аналогго жабыша албадым

Жакшы нерселер кийинки беттен башталат. Эгерде мен жасаган бөлүктөрүмдү кантип колдонуп бүткөнүмдү билгиңиз келсе, анда окуңуз. Чыныгы таймер: Долбоорду бергенден кийин, мен дароо менин op-amps Forest Mims III китебинен пьезо тонунун генератору жөнүндө ойлондум. Баруунун жакшы жолу окшойт, бул жөн гана пьезо, 741 IC жана жубу пассивдүү компоненттер. Эч нерсе эмес, туурабы? Ооба, анын 2 көйгөйү бар, 1) которгучту басканыңызда, үндү өзгөртүүгө болот 2) жөндөө мүмкүн эмес. Биринчиден, кээ бир дебун технологиясы менен жеңсе болот, бирок мен башка эсептегичти кошпостон муну кантип жасоону билчү эмесмин. Бул пьезо колдонуу менен да көйгөй болушу мүмкүн. Экинчи маселе, сиз белгилүү бир чайырга кирүүгө аракет кыла баштаганыңызда, туура эмес болуп калды. 555 ше? Маалыматтар баракчасы резисторлорго жана конденсаторлорго негизделген убакытты түшүрүү функциясын көрсөтөт. Чыныгы дүйнөлүк бөлүктөрдүн чыныгы баалуулуктарын тере баштаганыңызга чейин, бул 440 Гц чыңалуусун басуу бир аз кыйын боло баштайт. Аны тууралоо үчүн казандарды колдонсоңуз болот, бирок убакыттын өтүшү менен алар жылып кетет. Дайыма шайманды тюнинг, тетиктердин наркынын жана санынын тез өсүшүнүн үстүнө түзүлөт, ал эми жубайым бул долбоор үчүн 555ти өлтүрүп, баскычты басканда кадамды өзгөртөт. op-amps мен төрөлгөнгө чейин. Бир нече бөлүктөрү жана конкреттүү жазуулары бар, чынында эле жөнөкөй нерсени жасоо канчалык кыйын болушу мүмкүн? Мен ойлогондон да кыйын. Ал жердеги долбоорлордун көбү бул долбоор үчүн өтө татаал. Synth дизайнерлери кемчиликсиз толкун формасына/тонуна даяр. Бул түздөн -түз мектеп же мугалимдердин бюджети үчүн жетиштүү арзан болушу керек болгон долбоорго карама -каршы келет. Клавиатураны куруу жетишерлик оңой, бул жөн гана резисторлордун жана кубаттуулуктун бир тобу же диоддор менен кубаттуулуктун бир тобу. Бул схеманын калган бөлүгү жана жеке компьютерлердин баасы электрониканын баштапкы деңгээлинде кимдир бирөө үчүн колунан келе баштайт. Долбоорду кайра аныктоо: Ошентип, мен чындап эле ишке кирише электе, долбоор кайра аныкталды. Мага бир баскычты басуу менен спикердин пинин алмаштыра турган нерсе керек болчу. Мен ПХБны иштеп чыгууну жана сатып алууну каалабадым. Бул мүмкүн болушунча аз компоненттерди колдонушу керек жана башталгычтар үчүн чогултулушу керек болчу. Бул менин жүзүмдү карады. Дух !! Микроконтроллер! Микроконтроллер: Ошентип, Заманбап түзмөктөр Bare Bones Arduino комплектин да, жаман жинди илимпоздун жөнөкөй максаттуу тактасын да сатып алып, аларды бир нече ай бою менин столума отургузуп койгондон кийин, менде эң сонун киришүү долбоору болду. Мен экөөнү тең чогултуу үчүн керектүү убакытты, коддун үйрөнүү ийригин, бааны, керектүү кошумча бөлүктөрдү жана аны мен каалагандай кылып, максаттуу тактага жайгаштыра баштадым. Баасы бирдей эле, $ 15 жана Arduino үчүн $ 20 FTDI кабели, $ 12 плюс $ 22 USBtinyISP программисти. Мен кичинекей колледжден эле C ++ ды билчүмүн жана микроконтроллерлер үчүн C анчалык деле жаман эмес экенин түшүндүм, ал эми менин комплектти туура чогултканымды текшерүү үчүн жарыкты күйгүзүүдөн башка менде Arduino тажрыйбасы жок болчу. Экөөнү тең орнотсо болот. Бул абдан көп ыргытуу болчу, ошондуктан мен экөөнүн азыраак бөлүктөрүн, максаттуу тактаны чечтим.

2 -кадам: Сизге эмне керек Rev 1

Сизге эмне керек Rev 1
Сизге эмне керек Rev 1

Бөлүктөрү CostUSBtinyISP AVR Программисттер Капчыгы (USB SpokePOV Dongle) v2.0 $ 22.00https://www.adafruit.com/index.php? Main_page = product_info & cPath = 16 & products_id = 46 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

Ассамблея 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 баскычтарын колго жасалган кездемелер үчүн алмаштырып жатасыз. Сизге керек: Бир нече түстүү кездеме, же ар бир нота бирдей түстө болушун кааласаңыз. Эң жакын кездеме дүкөнүңүздүн төшөө бөлүмү муну арзан алуу үчүн эң жакшы жер. Квилинг чейректери 1,50 доллар жана сиз бир. Conductive кездемеден бир тонна өчүргүчтөрдү ала аласыз, мен LessEMFтен Flectron кездемесин сунуштайм, ал кездемени зымга жабыштыруу үчүн 12 "x54" pieceEyelets үчүн 20 доллар. Аларды көпчүлүк кездеме дүкөндөрүнөн арзан ала аласыз. JoAnnдын куралы бар жана $ 2 үчүн Сизге балка керек болот. Wire, мен 22AWG колдондум, эгерде сизде кичине болсо, сунуштайм. Фузинг, түстүү жана өткөргүч кездемени бири -бирине жабыштырып алуу үчүн. Дүкөндөн сураңыз, балким аны короодон сатып алсаңыз болот. Бул, балким, жакшы иштейт, бирок мен сизден кимдир бирөөдөн сурап көрүүнү сунуштайм, бирок мен чындыгында бош нерселерди колдондум, андан кийин катуураак токулган нерсеге өттүм. Мен сизге эң жакшы иштегенди тапканга чейин бир нече башка нерсени сынап көрүүнү сунуштайм. Жылуулук зымдары бири -биринен өткөндө чогуу кысылат жана алар бир топ жакшыраак калышат.

5 -кадам: Ассамблея Аян 2

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

Көп түстүү кездемени бири-биринин үстүнө коюп, төрт бурчтук кылып кесип алыңыз, ал идеалдуу болушу шарт эмес. Кез келген бүктөмдү алуу үчүн кездемени үтүктөп, үстүнө кайра катмарлап коюңуз жана четтери дал келгенин текшериңиз. Үстүн жана астын тегеректеп кесип, сол жана оң жактарын түз калтырбаңыз. Сиз тигилгенден кийин которгучту тескери буруп жатасыз, андыктан тегеректелген капталдарын өтө тегерек кылбаңыз жана бүтүргөнүңүздө которгучту оңой эле басуу үчүн жалпак капталдарында жетишерлик бийиктик калтырыңыз. Биринчи жана акыркы которгучтун тегиз тарабын тегеректеп алыңыз. Тигүүчү машинаңызга өтүңүз жана эки тегерекчени бириктирип коюңуз, ошондо жакшы жагы бири -бирине карайт жана жалпак бөлүктөргө тигиш тигет. тигилген, өткөргүч кездемеден төрт бурчтуктарды кесип, бир жагын эритүү. Зымды узун кылып кесип, бир четин сыйрып алыңыз. зымды бир көздүн тегерегине ширетүү. (ширеткичи илмекке жабышпай калышы мүмкүн) Бир кездемедеги кичинекей тешикти кесип, кездемени жана зымды бекитүү үчүн көзөнөктү чукуңуз. эриткичтен колдоону алып салуу жана түстүү кездеменин артына өткөрүүчү кездемени эритүү. Бардык которгучтар үчүн кайталаңыз. Нерселерди жеңилдетүү үчүн, сиз бир зым кийинки switch. Get өткөргүч зым өткөн сайын чогуу түтүк зымдарды жылытуу ала аласыз же кездеменин бир бөлүгүн алмаштыргыч топтому узундугу жана өткөргүч кездеменин тилкесин узундугу кесип. Түстүү өчүргүчтөрдөн айырмаланып, бул бир узун бөлүк. Бул баскычтар туташуу үчүн тийип турган нерсе болот. Кичинекей тешикти кесип, ага түстүү которгучтун чокулары сыяктуу көзөнөк менен зым тагыңыз. Төмөнкү кездеменин арткы бөлүгүнө тигиле. Өткөргүч кездеменин үстү менен астын тигип, тигилгенден кийин топтомун оодаруу үчүн короо таягын колдонуңуз. Ватингдеги бир нече кичинекей тешиктерди кесиңиз, мен таякчаны колдондум тегерек, анан жөн эле таякчаны алып салып, кесип алыңыз. Аларды формага келтирип, өчүргүчтөргө салыңыз. Өткөргүч ткандарды бөлүп караган нерсе - бул өчүргүчтөрдү кийин эмес, тескери буруп жатканыңызда, баттонду киргизүү оңой болушу мүмкүн. Мен киргизип жатканда, мен колдонгон нерселер абдан начар болуп калды, мен ар кандай batting. Finally максаттуу тактасына чейин зымдарды илип, баары даяр. Узун түбүндөгү тилке жер болот.

6 -кадам: Эмне керек Rev 3

Сизге эмне керек Rev 3
Сизге эмне керек Rev 3

Rev 3тө мен өчүргүчтөрдү зымга көз карандысыз кылдым. Бул бир топ убакытты үнөмдөдү. Даяр болгон жыйынтыктын көрүнүшү мага дагы жагат. Ошентип, бул жерде сизге керектүү жаңы бөлүктөр: Snaps, Жөн эле JoAnn'ден алдым. Алар 7 долларга жаман эмес орнотуу куралы менен келишкен. Орнуна тетиктерди орнотуу үчүн шайманымды бөлүп алышым керек эле, анын ордуна кычкачтардын бирин сунуштайм. Тигүү тигүү жакшы альтернатива болмок, бирок аларды кармоо үчүн көп убакыт талап кылынат. Өткөрүүчү жип, Spark Fun сиздин тигүүчү машинаңызга кире турган нерселерге ээ. Мен машинамда чындап жай барышым керек болчу, болбосо жип үзүлүп кетет. Сиздин километражыңыз ар кандай болушу мүмкүн

7 -кадам: Ассамблея Аян 3

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

Бул оңдоо курулганга чейинки убакыты боюнча акыркыга караганда бир топ жакшы болчу. Мындан тышкары, алынуучу өчүргүчтөргө ээ болуу менин акыл -эсимди бир нече жолу сактап калды. Бул жууркандын төрттөн бири гана бүктөлгөн. Үстүнө баттандын катмарын коюп, тигүү үчүн тешик калтырыңыз. Тешиктен нерсени түртүп коюңуз жана сизде негизинен жаздыктын түрү бар. Мен аны төшөдүм, ошондуктан иштөө оңой болду. Жөнөкөй жипти колдонуңуз жана жаңылыңыз. Мен бул боюнча бриллиант жасадым, бирок, мүмкүн, кийинки жолу мен ажыдаарды артка же салкын нерсеге коём. Эми, өчүргүчтөргө. Мага бул дизайн жагат, анткени сиз муну алдын ала жасай аласыз жана өзүңүз каалаган нерсени колдоно аласыз. Картон, кагаз же кездеменин сыныктарын колдонуу менен баштаңыз жана андан алмуруттун формасын кесип алыңыз. Муну ар бир которгуч үчүн үстүнкү жана астынкы бөлүктөрдү кесүү үчүн колдонмо катары колдонуңуз. Мен ар бир түбүнө бир түстү, чокуларына башка түстү кесип салдым, бирок сиз чыгармачыл болуп, каалаганыңызды кыла аласыз. Колдонмону өчүргүчтүн ичине оңой жайгашып турган лолипоп формасына түшүрүңүз. "Таякты" узартыңыз, ошондо ал "алмуруттун" четине оролот. Биригүүчү жана өткөрүүчү кездемеден форманы кесип, өткөргүч кездеменин бир жагын эритиниз. Бириктирүүчү материалдан колдоону алып салыңыз жана аны кездеменин үстүнө жана үстүндө турган кездеменин түбүнө чейин бириктириңиз. Кошумча битти үстүнө ороп коюңуз. Тигүүчү машинаңызга өтүңүз жана үстүнкү жана астыңкы кездеменин ортосуна тешиктерди салыңыз. Өткөргүч кездеменин сыртына тигип, которгучтун "таяк" бөлүгүн аттап өтүңүз. Мен жогорку өткөргүч кездемени түбүнө чейин кыска кылып тигүү мүмкүн экенин түшүндүм. Өткөргүч кездемеден тигилбегени жакшы. Кысмаларды тиркеңиз жана которуу жасалды. Эркектин бардык түбүнө/GND туташуулары үчүн жана аялдардын чокуларынын баардык чокуларын колдонууну оңой көрдүм. Бул бардык өчүргүчтөрдү алмаштырат. Мен калдыктарымды алып, чоң эриткичтерди чоң өткөргүч кездемеге бириктирдим жана аларды подкладка катары колдонгон кичинекей тик бурчтуктарды кесүү үчүн колдондум. Өчүргүчтөрүңүздү төшөп, подкладдарды базага бириктирип, аларга линия тигип, чукуңуз. Мен колдонгон тигүүчү машинанын буту чукул жерге жакын болууга жаккан жок, ошондуктан муну эстен чыгарбаңыз жана өзүңүзгө бир аз орун бериңиз. Менин тигүүчү машинама кире турган өткөргүч жип болгондуктан, мен жөн эле подкладтан подкастка жана артка линия тигип койгом. Мен жай барышым керек же жип үзүлмөк, бирок колго тигүүдөн бир тонна ылдамыраак болчу. Боб менен ийненин өткөргүч жиптеринин жардамы менен мен чындыгында жакшы бекем байланышка ээ болдум. Бул нерселер жинди сыяктуу болуп кетет, бирок кичинекей кол өнөрчүлүк клейси же Эльмерс муну тазалайт. Сызыктарды бири -биринен алыс кармаганга аракет кылыңыз жана сизде эч кандай маселе болбошу керек. Акыркы жыйын: Бардык өчүргүчтөрүңүздү тактаңыз, тактаны туташтырыңыз, кодду жүктөңүз жана бүттү. Мен тактан тактайга жетүү үчүн зымды колдондум, анан зымды колго тигип койдум. Кийинки версия үчүн, тактайды бош турган манжалар ажыратып албашы үчүн, аны пластик кутуга салып, базага бекитип коем.

8 -кадам: Код

Code
Code

Эгерде сиз мурда эч качан чипти программалабасаңыз, бул бир аз татаал иш. Бул шаймандардын тайгалак экенине жардам бербейт жана көпчүлүк учурда бир эле операцияны бир нече жолу аткарууга туура келет. Мен эмне болуп жатканын түшүнүү үчүн тапкан эки мыкты булак 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); // SPORT чыгаруу үчүн SPK коюңуз PORTD = (1 << PD0) | (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); // Flip SPK Pin TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^= (1 << PD6); // Flip SPK Pin TCNT2 = 0; }}}}}}} Чайырлар кайдан келет? Кичине математика керек болчу. Atmega 168деги таймер сааты 1МГцте иштейт. Бул аудио үчүн өтө тез, ошондуктан биз prescaler /8 колдонушубуз керек. Андан кийин биз 1 циклди жасоо үчүн чыгуучу пинди жогору жана төмөн айлантуу керек болгондуктан, туура кадамды ойлоп табуу үчүн, жоопту 2ге бөлүшүбүз керек. Формула мындай көрүнөт, Pitch кодун коюуга = (1000000/8)/(Максаттуу жыштык*2) A (440) үчүн бул биздин максаттар үчүн 125000/880 = 142.045 же 142 болмок, анткени маани бүтүн сан болушу керек. Эскертүүлөрдүн максаттуу жыштыктарын интернеттин каалаган жеринен тапса болот жана жалпысынан баары бирдей. Мен дагы эле Ifs тобун колдонуунун ордуна иштин арызын кошкум келет жана динамиктин үнүн жана үнүн жакшыраак көзөмөлдөө үчүн PWMди колдонгум келет, бирок азырынча бул иштейт.

Сунушталууда: