Sisukord:
- Samm: määrake registriaadressid
- 2. samm: massiivid ja globaalsed muutujad
- 3. samm: funktsioon "serial.begin"
- Samm 4: funktsioon "serial.available"
- Samm: funktsioon "serial.read"
- 6. samm: funktsioon "serial.write"
- Samm: seadistusfunktsioon
- 8. samm: silmuse ja ISR funktsioonid
- 9. samm: juhtmestik
- Samm: pange see kõik kokku
Video: Arduino toonigeneraator ilma raamatukogu või jadafunktsioonita (katkestustega): 10 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:49
See pole midagi, mida ma tavaliselt juhendaksin, ma eelistan oma metallitööd, aga kuna olen elektrotehnikaüliõpilane ja pean läbima mikrokontrollerite klassi (Embedded Systems Design), mõtlesin, et teen juhendi üks minu projektidest. Kui ma algselt tegin projekti ja teisi selle klassi jaoks, leidsin, et väga vähe või üldse mitte õpetusi, mis ei kasuta arduino raamatukogu funktsioone ega jadafunktsioone, on veel üks põhjus, miks ma arvasin, et see oleks hea juhendatav.
See kood on loodud Atmega 2560 mikrokontrolleri jaoks, nii et kui soovite selle teisele tahvlile rakendada, peate oma kontrollerite kasutusjuhendi põhjal muutma koodis olevaid aadressiregistreid. Koodi põhiidee seisneb selles, et alati, kui sisestate seeriamonitorile klaviatuuri klahvi, väljastab arduino mega teatud sageduse vastavalt sellele, millist klahvi vajutate, ja "q" selle lähtestab. Ma tegin selle nii, et "a" väljastab lamedat sagedust A ja "A" teravate sagedust A, "b" väljastab B tasapinda, "c" C tasapinda, "C" C teravat jne. Kogu kood laaditakse üles lõpus, kuid iga samm lagundab koodi tükkideks, nii et seda on lihtsam selgitada.
Samm: määrake registriaadressid
See samm on lihtne, kui kasutate atmega 2560, peate lihtsalt kasutama minu kasutatavaid aadresse, kuigi kui kasutate erineva kiibiga tahvlit, peate leidma oma iga registri aadressid kiipide kasutusjuhend. Ülaosas olevad definitsioonid on lihtsalt konstandid, mida kasutatakse hiljem meie funktsioonide jaoks. Me määrame aadressid lenduvaks allkirjastamata, sest me ei taha, et kompilaator nendega jama teeks.
2. samm: massiivid ja globaalsed muutujad
Siin tahame määratleda sagedusmassiivi, mis sisaldab kõiki sagedusi, mida iga klahv peaks väljastama. Need väärtused on arvutatud tegelikest noodisagedustest ja ausalt öeldes unustasin, kuidas need sain, kuid need on õiged väärtused, kuna veendusin neid ostsilloskoobil. Samuti määratleme märkmete massiivi, mis sisaldab kõiki klahve, mida iga tooni jaoks vajutada, samuti muutujaid, mida vajame oma hilisemate funktsioonide jaoks.
3. samm: funktsioon "serial.begin"
Nimetame meie kohandatud funktsiooni, mis kordab funktsiooni "serial.begin" U0init (). See võtab sisendiks soovitud andmeedastuskiiruse ja käivitab jadaporti selle kiirusega.
Samm 4: funktsioon "serial.available"
Nimetame funktsiooni, mis imiteerib "serial.available", U0kbhit (). See ei võta sisendit, vaid tuvastab selle asemel, kas klaviatuuril on RDA olekubiti kasutades muudatusi tehtud, ja tagastab muudatuse tuvastamisel tõese väärtuse.
Samm: funktsioon "serial.read"
Funktsiooni, mis jäljendab funktsiooni "serial.read", nimetame U0getchar (), mis ei sisenda ega väljasta kõiki muudatusi, mis on tehtud UDR0 registrisse salvestatud klaviatuuril.
6. samm: funktsioon "serial.write"
Nimetame funktsiooni, mis imiteerib "serial.write", U0putchar (), mis võtab andmed UDR0 registrist, kui muudatus tuvastatakse ja salvestatakse, ning väljundid, mis muutuvad tagasi seeriamonitoriks.
Samm: seadistusfunktsioon
See on põhiline häälestusfunktsioon, mis kasutab jadapordi lähtestamiseks meie jäljendust "serial.begin" ja lähtestab taimeriregistrite bitiseaded ning seab PB6 meie toonid väljastama.
8. samm: silmuse ja ISR funktsioonid
Tsükkel toimib nii: kui meie "serial.available" funktsiooniga tuvastatakse muutus, salvestab meie funktsioon "serial.read" selle muutuse ja meie "serial.write" funktsioon paneb selle muudatuse jadamonitori. Niikaua kui muutuja i on väiksem kui sagedusmassiivi suurus, seab see väljundiks selle massiivi i positsiooni, andes sageduse sellesse asendisse. ISR toimib lähtestamisena, kus kui sagedusmassiivi positsioon ei ole võrdne 0 -ga (teisisõnu, kui "q" ei vajutata), väljastab see sageduse, kuid kui vajutatakse "q", lähtestab see. Pange tähele: see kood kasutab katkestusi, kuid seda saab teha katkestustega. Postitan koodi katkestusteta, kui saan selle kohta päringuid, lihtsalt arvan, et katkestusversioon on lõbusam.
9. samm: juhtmestik
Selle koodi ühendamine on äärmiselt lihtne, pange lihtsalt PB6 väljundkaabel leivaplaadile, ühendage sellega sumin või kõlar jadaga ja ühendage see uuesti maandusega. Märkus: kui kasutate kõlarit, pange kõlarite ette väike takisti. Kui soovite lihtsalt väljundit näha, kuid mitte kuulda, ühendage PB6 ostsilloskoobi punase juhtmega ja must juhe maandusega.
Samm: pange see kõik kokku
Lisasin sellele etapile täieliku koodi, kuna olen selle kõiki osi eelmistes sammudes selgitanud. See võtab lihtsalt klaviatuuri sisendi erinevatele sagedustele ja väljastab selle sageduse PB6 -le. Loodan, et teile meeldis IDE -ga teistmoodi koodide lugemine!
Samuti palun hääletage selle eest mikrokontrolleri konkursil: D
Soovitan:
Arduino Halli efekti andur katkestustega: 4 sammu
Arduino saaliefekti andur katkestustega: Tere kõigile, täna näitan teile, kuidas saate halli efekti anduri Arduinoga ühendada ja katkestusega kasutada. Videol kasutatud tööriistad ja materjalid (sidusreklaamija lingid): Arduino Uno: http : //s.click.aliexpress.com/e/biNyW0zKHalliefekti andurid: h
Arduino Synth / toonigeneraator: 5 sammu
Arduino Synth / Tone Generator: See on Synth / Tone Generator, mis kasutab Arduinole omast käsklust Tone. Sellel on 12 individuaalset klahvi, mida saab seadistada mängima mis tahes sagedusega ruutlaineid. Sellel on võimalus ühe nupuga kaheksandikku üles ja alla liikuda. Sellel on ka s
Navigeerige robot kingade anduritega, ilma GPS -iga, ilma kaardita: 13 sammu (koos piltidega)
Navigeerige robotil jalatsianduritega, ilma GPS-i, ilma kaardita: robot liigub eelnevalt programmeeritud teel ja edastab (üle Bluetoothi) oma tegeliku liikumisteabe telefoni reaalajas jälgimiseks. Arduino on eelnevalt programmeeritud teega ja oblu kasutatakse roboti liikumise tuvastamiseks. oblu edastab liikumisteavet
Toonigeneraator "Jimikky Kammal", kasutades Arduino Pro Mini: 5 sammu
Toonigeneraator "Jimikky Kammal" Arduino Pro Mini kasutamine: See on lihtne toonigeneraatoriprojekt, mis kasutab Arduino Pro Mini. Osa superhittloost " Jimikky Kammal " filmist " Velipadinte Pusthakam " on välja töötatud monotoonsena. Muusikalised noodid esinevad looduses sujuva ja veereva sinusona
Kuidas kuulata oma Itunes'i raamatukogu teleri või avasalvesti kaudu: 5 sammu
Kuidas kuulata oma Itunes'i raamatukogu teleri või avasalvesti kaudu: Okei, tegin selle 10 minutiga juhendatavaks. Nii lihtne see oligi! Sülearvuti oleks selle jaoks hea, kuid teleri lähedal asuv töölaud on ka okei. Kui teil on Airport Express, siis lisan teile inimestele sammu. (Märkus: mul ei ole lennujaama ekspressi, nii et kui ma