Sisukord:

Mikrokontrolleri kangast toonigeneraator C-koodis: 8 sammu (piltidega)
Mikrokontrolleri kangast toonigeneraator C-koodis: 8 sammu (piltidega)

Video: Mikrokontrolleri kangast toonigeneraator C-koodis: 8 sammu (piltidega)

Video: Mikrokontrolleri kangast toonigeneraator C-koodis: 8 sammu (piltidega)
Video: Как просто научиться программировать микроконтроллеры PIC и AVR / Бегущие огни за 8 минут! 2024, Juuli
Anonim
Mikrokontrolleri kangatooni generaator C-koodis
Mikrokontrolleri kangatooni generaator C-koodis

Eelmise aasta oktoobri lõpus saatis juhendatav kasutaja carmitsu mulle pärast lõunakasti süntesaatori nägemist sõnumi. Tema sõnumist: õpetan muusikat põhikoolis. Mängime palju plokkflöödimuusikat. st lapsed mängivad väikseid flööte …… Mul on mitu erivajadustega last, kes saavad kasutada neid musti plakatitahvleid ringidega, millel on noodi nimi. Need õpilased suruvad ringidele märkmete nimedega samal ajal, kui ülejäänud õpilased mängivad laulu….. Enamik erivajadustega lapsi saab seda muusikaga üsna hästi ja õigel ajal teha. Ma soovin ehitada väga lihtsa heligeneraatori, et need lapsed saaksid mängida sama helikõrgust kui need, mida õpilased oma salvestajatega mängivad. Ma oleksin vaid mõned väljakud. Mõtlesin, et võin nende ümmarguste ringide põhja külge kinnitada mingi väikese nupu, et nende peale vajutades kostaks heli väikesest kõlarist, piisavalt valjusti, et nad kuuleksid. Kuidas ma saaksin vastu panna, kui mul oleks õpetaja ja kool meeldiks? Ausalt öeldes ma ei suutnud. See on peaaegu projekti kroonika ja juhised selle kohta, kuidas seda ise luua.

Samm: algus või miks ma ei suutnud analoogiga kinni pidada

Algus või miks ma ei suutnud analoogi juurde jääda
Algus või miks ma ei suutnud analoogi juurde jääda

Head asjad algavad järgmiselt lehelt. Kui soovite teada, kuidas ma lõpuks osi kasutasin, siis lugege edasi. Tõeline taimer: Pärast projekti mõtlemist mõtlesin kohe oma op-amps Forest Mims III raamatust pärit pieso toonigeneraatorile. Tundus hea võimalus minna, see on lihtsalt pieso, 741 IC ja paar passiivset komponenti. Pole suurt asja jah? Sellel on 2 probleemi, 1) kui vajutate lülitit, on võimalik helikõrgust muuta 2) häälestamine on kuradi võimatu. Esimese võiks tõenäoliselt ületada mõne tagasilöögitehnoloogiaga, kuigi ma ei teadnud, kuidas seda teha ilma teist loendurit lisamata. Probleem võib olla ka pieso kasutamisel. Teine probleem muutus raskeks, kui hakkasite proovima teatud piirkonda lüüa. Aga 555? Andmelehel on näidatud takistitel ja kondensaatoritel põhinev ajavõtmise funktsioon. See on suurepärane, kuni hakkate sisestama reaalmaailma osade tegelikke väärtusi, siis leiad, et 440 Hz helikõrguse tabamine muutub pisut keeruliseks. Selle häälestamiseks võite kasutada viimistluspotte, kuid aja jooksul kipuvad need liikuma. Instrumendi pidev häälestamine, mis on koostatud osade maksumuse ja koguse kiire kasvu kõrval, ja mu naine, kes nupule vajutades muutsid helikõrgust, tappis selle projekti jaoks 555. Op-amp: Pole probleemi, inimesed on teinud süntesaatoreid op-amps juba enne minu sündi. Kui raske võiks olla tõeliselt lihtsa, väheste osade ja konkreetsete märkmetega koostamine? Raskem kui arvasin. Enamik kavandeid on selle projekti jaoks väga keerulised. Synthi disainerid on täiusliku lainekuju/tooni jaoks väljas. See on otseselt vastuolus projektiga, mis peaks kooli või õpetajate eelarve jaoks olema piisavalt odav. Klaviatuuri ehitamine on piisavalt lihtne, see on lihtsalt hunnik takisteid ja võimsust või hunnik dioode ja võimsust. See on ülejäänud vooluahela disain ja kohandatud trükkplaatide maksumus, mis hakkab elektroonika alguses kellegi käest minema. Projekti uuesti määratlemine: Nii et projekt määratleti uuesti enne, kui ma isegi päriselt tööle hakkasin. Vajasin midagi, mis suudaks õigel ajal ühe nupuvajutusega kõlaripistiku ümber lülitada. Ma ei tahtnud PCB -d kujundada ja osta. See pidi kasutama võimalikult vähe komponente ja olema kokku pandud algajate komplektina. See vaatas mulle kogu aeg näkku. Duh !! Mikrokontroller! Mikrokontroller: Nii et pärast nii kaasaegsete seadmete Bare Bones Arduino komplekti kui ka Evil Mad Scientist Simple Target Boardi ostmist ja lastes neil mitu kuud minu laual istuda, kui neid ei kasutata, oli mul täiuslik sissejuhatav projekt. Hakkasin vaatama aega, mis kulub mõlema kokkupanemiseks, koodi õppekõverat, maksumust, vajalikke lisaosi ja panen selle tegema seda, mida tahan ja asusin sihtlauale. Maksumus oli üsna tasane, 15 dollarit pluss 20 -dollarine FTDI -kaabel Arduino jaoks, 12 dollarit pluss 22 -dollarine USBtinyISP programmeerija. Ma teadsin juba väikesest kolledžist C ++, mida ma seista suudan, ja arvasin, et mikrokontrollerite C poleks nii hull, samas kui mul ei vilgunud tuld, et veenduda, et ma oma komplekti õigesti kokku panen, ei olnud mul Arduino kogemust. Mõlemaid saaks paigaldada. See oli üsna viskamine, nii et otsustasin nende kahe osa vähem, sihtlaua.

2. samm: mida vajate 1. rev

Mida vajate Rev 1
Mida vajate Rev 1

UsbtinyISP AVR programmeerimiskomplekt (USB SpokePOV-dongle) v2.0 $ 22.00 5-pk $ 2.75https://evilmadscience.com/tinykitlist/74-atmegaxx8Speaker (8-oomine Mini) 5) 3,49 dollarit (4 pakki) https://www.radioshack.com/product/index.jsp?productId=2062539"AAA "Akuhoidik 1,79 dollarit Submini liuglüliti (toitelüliti jaoks valikuline) 2,69 dollarit (2-pakk) https://www.radioshack.com/product/index.jsp?productId=2062490LED ja takisti (valikuline, kui soovite toitelampi) $ peaks olema tasuta kui nad lamavad, peaks ka traat $ lamama. liikumisvoog) Kui soovite mõnest kohast raha säästa, ei pea te RadioShackilt osi hankima. Ma tegin seda, sest nad on lähedased ja etteaimatavad.

3. samm: kokkupanek Rev 1

Assamblee versioon 1
Assamblee versioon 1
Assamblee versioon 1
Assamblee versioon 1

Pange osad kokku, nagu näidatud. Kasutage kindlasti hõõrumispiiritust ja vooluharja, kui olete valmis, et vabaneda jootmise voost. Skeemiline on allpool neile, kes seda eelistavad. D1 ja R1 võivad olla kõik, mida soovite, see on lihtsalt toitelamp. C1 on mõeldud selleks, et muuta võimsus veidi ühtlasemaks. Kasutasin 10uF. See skeem on sama ka hilisemate versioonide puhul, lihtsalt vahetage kangalülitite nupud välja. viimases revisjonis lisasin PC4 ja PC5 lülitid või tihvtid 27 ja 28.

Samm 4: Mida vajate Rev 2

Mida vajate Rev 2
Mida vajate Rev 2

Põhimõtteliselt vahetate Radio Shacki nupud käsitsi valmistatud kangaste vastu. Teil on vaja: mitut värvi kangast või ühte värvi, kui soovite, et iga märkus oleks sama värvi. Teie lähima kangapoe teppimisosa on parim koht selle odavalt hankimiseks. Teppimisveerandid on 1,50 dollarit ja saate ühest lülitist tonni välja. Juhtiv kangas, soovitan LessEMF -i Flectroni kangast, see on 20 dollarit 12 "x54" tüki jaoks. Aasad traadi kinnitamiseks kangale. Enamikus kangapoodides saate neid odavalt osta. JoAnnil on tööriist ja 25 dollarit 2 dollari eest. Selleks vajate haamrit. Juhe, ma kasutasin 22AWG -d, soovitan väiksemat, kui teil see on. Liimimine, et saada värviline ja juhtiv kangas kokku. Küsige poest ja tõenäoliselt saate seda õue osta. See toimiks ilmselt hästi, kuigi soovitan teil kelleltki vatiinilt küsida, ma kasutasin algul tõesti lahtist kraami ja vahetasin siis midagi tihedamat kudumist. Ma soovitan teil lihtsalt proovida paar erinevat, kuni leiate, mis kõige paremini töötab. Kuumuta kahaneb torud, see muutis kogu asja palju paremini hallatavaks. Kuumuta kaablid üksteisest möödudes kokku ja need püsivad palju paremini.

5. samm: kokkupanek Rev 2

Assamblee versioon 2
Assamblee versioon 2
Assamblee versioon 2
Assamblee versioon 2
Assamblee versioon 2
Assamblee versioon 2

Asetage mitmevärviline kangas üksteise peale ja lõigake välja ruut, see ei pea olema täiuslik. Triikige kangast, et kõik voldid välja tuleks, asetage need uuesti üksteise peale ja veenduge, et servad klapivad. Lõika kõik servad, mis seda ei tee. Lõika ülemine ja alumine ring, jättes vasaku ja parema külje sirgeks. Pärast õmblust hakkate lülitit ümber pöörama, nii et ärge tehke ümardatud külgi liiga ümmarguseks ja jätke lamedatele külgedele piisavalt kõrgust, et lüliti hõlpsalt läbi lükata, kui olete lõpetanud. Ümardage esimese ja viimase lüliti tasane külg. Liikuge õmblusmasina juurde ja pange kaks ringi kokku nii, et hea külg jääks üksteise poole ja õmbleks tasapinnalistele osadele õmblus. Kui nuppude ülaosa on õmmelda, lõigata juhtivast kangast välja ruudud ja sulatada üks külg. Lõika traat pikkuseks ja eemalda selle üks ots. jootke traat ühe aasa ümber. (joodis ei kleepu tõenäoliselt aasa külge) eemaldage sulavkaitselt alus ja ühendage juhtiv kangas värvilise kanga tagaküljega. Korrake kõigi lülitite puhul. Asjade lihtsustamiseks võite juhtmeid kuumutada kokku, kui üks traat järgmise lüliti juhtmest üle läheb. Hankige või tehke riidetükk lülituskomplekti pikkuseks ja lõigake juhtivast kangast riba pikkuseks. Erinevalt värvilistest lülititest on see üks pikk tükk. Seda nupud puudutavad ühenduse loomiseks. Lõigake väike pilu ja kinnitage sellele aasaga traat, nagu värvilised lüliti ülaosad. Sulatage see alumise kanga tagaküljele. Õmble ülemine ja alumine osa koos juhtiva kangaga väljapoole, kasutage õmbluspulka, et pärast selle õmblemist komplekti ümber pöörata. Lõika vatiinist mõned väikesed augud, kasutasin söögipulka ring, seejärel eemaldage söögipulk ja tehke lõige. Lõika need kuju ja sisestage need lülititesse. See hoiab juhtivat kangast lahus. Löögi ümberpööramise ajal võib olla lihtsam vatiini sisestada. Asjad, mida ma kasutasin, lõhkusid selle sisestamise ajal päris halvasti ja pidin saama erineva löömise. Lõpuks ühendage juhtmed sihtplaadile ja olete kõik valmis. Pikk alumine riba lihvitakse.

6. samm: mida vajate 3. versiooni

Mida vajate Rev 3
Mida vajate Rev 3

Rev 3. tegin lülitid juhtmestikust sõltumatuks. See säästis tonni aega. Mulle meeldib ka lõpptulemuse välimus palju rohkem. Niisiis, siin on vajalikud uued osad: Snaps, just said need JoAnnilt. Nendega oli kaasas paigaldustööriist, mis ei maksnud paha 7 dollari eest. Ma soovitaksin selle asemel ühte tangitööriista, kuna pidin keskele paigaldamiseks oma tööriista lahti võtma. Õmblusmaterjalid oleksid hea alternatiiv, kuigi nende kinnipidamine võtab kauem aega. Juhtiv niit, Spark Fun sisaldab asju, mis võivad teie õmblusmasinasse minna. Pidin oma masinas tõesti aeglaselt minema või muidu lõng katki läheb. Teie läbisõit võib varieeruda

Samm 7: kokkupanek Rev 3

Assamblee versioon 3
Assamblee versioon 3
Assamblee versioon 3
Assamblee versioon 3
Assamblee versioon 3
Assamblee versioon 3
Assamblee versioon 3
Assamblee versioon 3

See ülevaade oli ehitamise aja poolest palju parem kui eelmine. Lisaks, eemaldatavate lülitite kasutamine päästis mu meelerahu rohkem kui üks kord. Alustage, tehes aluse. See on vaid üks pooleks volditud tepimisveerand. Peal asetage vatiinikiht ja õmble, jättes selle ümberpööramiseks augu. Lükake asi läbi augu ja põhimõtteliselt on teil padja tüüpi asi. Teppisin selle nii, et sellega oli lihtsam töötada. Kasutage tavalist niiti ja minge pähkliteks. Ma tegin sellel teemante, kuid võib -olla järgmine kord panen draakoni tagasi või midagi lahedat. Nüüd lülitite juurde. Mulle meeldib see disain, sest põhimõtteliselt saate neid palju ette valmistada ja lihtsalt kasutada seda, mida soovite. alustage vanaraua papist, paberist või kangast ja lõigake sellest pirnikuju. Kasutage seda juhisena iga lüliti ülemise ja alumise osa lõikamiseks. Ma lõikasin ühe värvi iga põhja jaoks ja teise värvi ülemise osa jaoks, kuid võite olla loominguline ja teha seda, mida soovite. Lõika oma juhend alla pulgakommikuju, mis sobib hõlpsalt lüliti sisse. Pikendage "pulka", nii et see saaks mähkida üle "pirni" serva. Lõika kuju sulanduvast ja juhtivast kangast välja ning sulata juhtiva kanga üks külg. Eemaldage sulamismaterjalilt alus ja ühendage see kanga ülaosaga, mis jääb põhjale, ja kanga põhja, mis asetseb peal. Keerake lisatükk ümber ülaosa. Minge oma õmblusmasina juurde ja pange ülemise ja alumise kanga vahele aukudega vatiin. Õmble juhtivat kangast väljapoole ja jäta lüliti "pulga" osa vahele. Leidsin, et ülemist juhtivat kangast on võimalik õmmelda põhja külge, luues lühikese. Parem on mitte juhtivat kangast läbi õmmelda. Kinnitage klambrid ja lüliti on valmis. Leidsin, et isaslõpsu on lihtsam kasutada kõigi põhja-/GND -ühenduste jaoks ja naissoost kõigi ülemiste külgede jaoks. See muudab kõik lülitid vahetatavaks. Ahel: Ümmarguste lõikamistega on see, et teil on palju lisabitte. Võtsin oma jäägid, sulatasin suured sulatustükid suurte elektrit juhtiva kanga tükkideks ja lõikasin nende abil välja väiksemad ristkülikud, mida kasutasin padjadena. Pange oma lülitid ligikaudu välja ja ühendage padjad aluse külge, et oleks piisavalt ruumi, et õmmelda neile joon ja klõpsata. Õmblusmasina jalg, mida ma kasutasin, ei võtnud lahkelt napsu lähedal, nii et pidage seda meeles ja andke endale ruumi. Kuna sain õmblusmasinasse juhtiva niidi, õmblesin lihtsalt joone padjalt padjale ja tagasi. Pidin aeglaselt edasi minema või niit katkeb, kuid see oli tonni kiirem kui käsitsi õmblemine. Ka pooli ja nõela juhtiva niidiga sain tõeliselt hea kindla ühenduse. Kraam läheb hulluks, kuid väike käsitööliim või Elmers puhastab selle kohe. Püüdke hoida read üksteisest kaugel ja teil ei tohiks probleeme tekkida. Lõplik kokkupanek: klõpsake kõik lülitid sisse, ühendage plaat, laadige kood ja oletegi valmis. Kasutasin traadilt plaadilt padjale ja siis õmblesin traadi lihtsalt käsitsi aluse külge. Järgmise versiooni jaoks paigaldan tahvli plastkarpidesse, millel on klambrid, et see aluse külge kinnitada, et tühikäigul sõrmed seda lahti ei tõmbaks.

8. samm: kood

Kood
Kood

Kui te pole kunagi varem kiipi programmeerinud, on see mõnevõrra hirmutav ülesanne. Ei aita ka see, et tööriistad on helbed ja enamasti tuleb sama toimingut teha mitu korda. Kaks parimat ressurssi, mida olen leidnud toimuva mõistmiseks, on USBtinyISP leht https://www.ladyada.net/make/usbtinyisp/ ja müramänguasja programmeerimise kiirkursus http:/ /blog.makezine.com/archive/2008/05/noise_toy_crashcourse_in.html Need peaksid alustama.

Paljudele inimestele meeldib Arduino selle kodeerimise jaoks ja selle kasutamisel pole midagi halba, välja arvatud see, et ma tunnen, et see lisab tavaliselt lihtsale programmile palju punnitust. Samuti teadsin ma C -d ja ei tea Arduinot. Võib -olla ühel päeval, kui on aega.:) Kood: {{{#include // SPK sisselülitamiseks kasutage nööpnõela /// Typedefs /////////// typedef unsigned char u8; int main (tühine) {u8 btnState0; u8 btnRiik1; u8 btnState2; u8 btnState3; u8 btnState4; u8 btnState5; u8 btnState6; DDRB = (1 << DDB6); // Määra SPK väljundile PORTD = (1 << PD0) | (1 << PD1) | (1 << PD2) | (1 << PD3) | (1 PD4); // Määra nupp kõrgeks PORTC = (1 << PC4) | (1 <PC6); TCCR2B = (1 <CS21); // Seadista taimer samas (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); // Pööra SPK tihvti TCNT2 = 0; }} if (btnState1) {if (TCNT2> = 179) {PORTB ^= (1 << PD6); // Pööra SPK tihvti TCNT2 = 0; }} if (btnState2) {if (TCNT2> = 159) {PORTB ^= (1 << PD6); // Pööra SPK tihvti TCNT2 = 0; }} if (btnState3) {if (TCNT2> = 142) {PORTB ^= (1 << PD6); // Pööra SPK tihvti TCNT2 = 0; }} if (btnState4) {if (TCNT2> = 126) {PORTB ^= (1 << PD6); // Pööra SPK tihvti TCNT2 = 0; }} if (btnState5) {if (TCNT2> = 119) {PORTB ^= (1 << PD6); // Pööra SPK tihvti TCNT2 = 0; }} if (btnState6) {if (TCNT2> = 106) {PORTB ^= (1 << PD6); // Pööra SPK tihvti TCNT2 = 0; }}}}}}} Kust kohad tulevad? Natuke oli vaja matemaatikat. Atmega 168 taimerikell töötab sagedusel 1 MHz. See on heli jaoks liiga kiire, nii et peame kasutama eelskalerit /8. Kuna 1 tsükli tegemiseks peame väljundtihvti kõrgele ja madalale pöörama, peame õige helikõrguse leidmiseks jagama vastuse kahega. Valem näeb välja selline: Pitch koodi sisestamiseks = (1000000/8)/(sihtsagedus*2) A (440) puhul oleks see meie jaoks 125000/880 = 142,045 või 142, kuna väärtus peab olema täisarv. Märkmete sihtsagedusi võib leida peaaegu kõikjalt Internetist ja need on üldiselt ühesugused. Tahan endiselt lisada juhtumilause, selle asemel, et kasutada hunnikut If -sid ja kasutada PWM -i kõlari helitugevuse ja helikõrguse paremaks juhtimiseks, kuid praegu see toimib.

Soovitan: