Բովանդակություն:
- Քայլ 1: Գրանցման հասցեների սահմանում
- Քայլ 2: raանգվածներ և գլոբալ փոփոխականներ
- Քայլ 3. «Serial.begin» գործառույթը
- Քայլ 4. «Serial.available» գործառույթը
- Քայլ 5. «serial.read» գործառույթը
- Քայլ 6. «Սերիալ. Գրել» գործառույթը
- Քայլ 7: Կարգավորման գործառույթը
- Քայլ 8. Օղակի և ISR գործառույթները
- Քայլ 9: Լարերի տեղադրում
- Քայլ 10: Ամեն ինչ միասին դնել:
Video: Arduino տոնային գեներատոր `առանց գրադարանի կամ սերիական գործառույթների (ընդհատումներով). 10 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:50
Սա այն չէ, ինչին սովորաբար սովորեցնելու հնարավորություն կտայի, ես նախընտրում եմ իմ մետաղագործությունը, բայց քանի որ ես էլեկտրատեխնիկայի ուսանող եմ և պետք է դասեր անցնեմ միկրոկոնտրոլերների վրա (ներդրված համակարգերի դիզայն), ես մտածեցի, որ այն ուսուցանելու եմ իմ նախագծերից մեկը: Երբ ես ի սկզբանե պատրաստեցի նախագիծը և այս դասի մյուս անդամները, ես գտա, որ շատ քչերն են դասընթացներ, որոնք չեն օգտագործում arduino գրադարանի գործառույթները կամ սերիական գործառույթները, ինչը ևս մեկ պատճառ է, որ ես կարծում էի, որ սա լավ ուսանելի կլինի:
Այս կոդը նախատեսված է Atmega 2560 միկրոկառավարիչի համար, այնպես որ, եթե ցանկանում եք այն տեղադրել մեկ այլ տախտակի վրա, ապա պետք է փոխեք հասցեների գրանցամատյանները ծածկագրում ՝ հիմնվելով ձեր վերահսկիչների օգտագործողի ձեռնարկի վրա: Կոդի հիմնական գաղափարն այն է, որ երբ ստեղնաշարի վրա ստեղն մուտքագրեք սերիական մոնիտոր, arduino մեգան որոշակի հաճախականություն կտա ՝ ելնելով այն ստեղնից, որը սեղմում եք, իսկ «q» - ն այն վերականգնում է: Ես այնպես արեցի, որ «a» - ն դուրս գա A հարթ հաճախականությունից, իսկ «A» - ն ՝ A սուր հաճախականությունը, «b» - ն ՝ B հարթ, «c» - ն ՝ C հարթության համար, «C» - ն ՝ C- ի դեպքում և այլն: Ամբողջական ծածկագիրը վերբեռնվում է վերջում, բայց յուրաքանչյուր քայլը կբաժանի կոդը կտորների, այնպես որ ավելի հեշտ կլինի բացատրել:
Քայլ 1: Գրանցման հասցեների սահմանում
Այս քայլը հեշտ է, եթե դուք օգտագործում եք atmega 2560, պարզապես անհրաժեշտ է օգտագործել իմ օգտագործած հասցեները, չնայած եթե օգտագործում եք այլ չիպով տախտակ, ապա ձեզ հարկավոր է գտնել այս գրանցամատյաններից յուրաքանչյուրի հասցեները չիպսերի օգտագործողի ձեռնարկ: Վերին սահմանումները պարզապես հաստատուններ են, որոնք հետագայում կօգտագործվեն մեր գործառույթների համար: Մենք հասցեները նշում ենք որպես անկայուն անստորագիր, քանի որ չենք ցանկանում, որ կոմպիլյատորը խառնվի դրանց հետ:
Քայլ 2: raանգվածներ և գլոբալ փոփոխականներ
Այստեղ մենք ցանկանում ենք սահմանել Հաճախականության զանգված, որը կպարունակի բոլոր այն հաճախականությունները, որոնք պետք է թողարկի յուրաքանչյուր ստեղն: Այս արժեքները հաշվարկվում են իրական նոտաների հաճախականություններից, և անկեղծ ասած, ես մոռացել եմ, թե ինչպես եմ դրանք ստացել, բայց դրանք ճիշտ արժեքներն են, երբ դրանք ստուգել եմ օսլիլոսկոպով `համոզվելու համար: Մենք նաև սահմանում ենք նշումների զանգվածը, որը պարունակում է յուրաքանչյուր հնչերանգի համար սեղմելու բոլոր ստեղները, ինչպես նաև այն փոփոխականները, որոնք մեզ անհրաժեշտ կլինեն մեր հետագա գործառույթների համար:
Քայլ 3. «Serial.begin» գործառույթը
Մենք կանչում ենք մեր սովորական գործառույթը, որը կրկնում է «serial.begin» գործառույթը U0init (): Որպես մուտքագրում վերցնում է ցանկալի բաուդրատը և սկսում է սերիական պորտը այդ բաուդրատից:
Քայլ 4. «Serial.available» գործառույթը
Մենք կանվանենք «serial.available» U0kbhit () ընդօրինակող գործառույթը: Այն մուտքագրում չի պահանջում, բայց փոխարենը հայտնաբերում է, թե արդյոք ստեղնաշարի վրա փոփոխություն է կատարվել ՝ օգտագործելով RDA կարգավիճակի բիտը և փոփոխության հայտնաբերման դեպքում վերադարձնում է true:
Քայլ 5. «serial.read» գործառույթը
«Serial.read» գործառույթը ընդօրինակող գործառույթը կանվանենք U0getchar (), որը մուտք և ելք չի վերցնում ստեղնաշարի վրա կատարված ցանկացած փոփոխությունից, որը պահվում է UDR0 գրանցամատյանում:
Քայլ 6. «Սերիալ. Գրել» գործառույթը
Մենք կանչում ենք «serial.write» նմանակող գործառույթը U0putchar (), որը վերցնում է տվյալները UDR0 գրանցամատյանից, մինչ փոփոխությունը հայտնաբերվում և պահվում է, և ելքեր, որոնք վերադառնում են սերիական մոնիտոր:
Քայլ 7: Կարգավորման գործառույթը
Սա հիմնական տեղադրման գործառույթն է, որը կօգտագործի մեր «serial.begin» իմիտացիան ՝ սերիալային պորտը նախաստորագրելու համար, և կսկսի մեր բիթային կարգավորումները ժամաչափերի գրանցամատյանների համար և կդնի PB6- ը ՝ մեր հնչերանգները թողարկելու համար:
Քայլ 8. Օղակի և ISR գործառույթները
Եթե հանգույցը հայտնաբերվում է մեր «serial.available» գործառույթով, մեր «serial.read» գործառույթը պահում է այդ փոփոխությունները, և մեր «serial.write» գործառույթը այդ փոփոխությունը դնում է սերիական մոնիտորի վրա: Քանի դեռ i փոփոխականը փոքր է հաճախականության զանգվածի չափից, այն ելքը կդարձնի i- ի դիրքը այդ զանգվածում ՝ հաճախականությունը թողնելով այդ դիրքում: ISR- ն գործում է որպես զրոյացում, որտեղ, եթե հաճախականության զանգվածի դիրքը հավասար չէ 0 -ի (այլ կերպ ասած, եթե «q» - ն սեղմված չէ), այն դուրս կգա հաճախականությունից, բայց երբ «q» - ն սեղմված կլինի, այն կվերակայվի: Խնդրում ենք նկատի ունենալ. այս կոդը օգտագործում է ընդհատումներ, բայց դա կարող է արվել անջատված ընդհատումներով: Կոդ կտեղադրեմ առանց ընդհատումների, եթե դրա համար որևէ խնդրանք ստանամ, պարզապես կարծում եմ, որ ընդհատվող տարբերակը ավելի զվարճալի է:
Քայլ 9: Լարերի տեղադրում
Այս ծածկագրի էլեկտրամոնտաժը չափազանց հեշտ է, պարզապես PB6- ից ելքային մետաղալար դրեք տախտակի վրա, դրանով միացրեք ազդանշանը կամ բարձրախոսը և միացրեք այն նորից գետնին: Նշում. Եթե բարձրախոս եք օգտագործում, բարձրախոսից առաջ մի փոքր դիմադրություն դրեք: Եթե դուք պարզապես ցանկանում եք տեսնել ելքը, բայց չլսել այն, պարզապես միացրեք PB6- ը տատանումների կարմիր հոսանքին, իսկ սևը `գետնին:
Քայլ 10: Ամեն ինչ միասին դնել:
Այս քայլին ավելացրել եմ ամբողջական ծածկագիրը, քանի որ նախորդ քայլերում բացատրել եմ դրա բոլոր մասերը: Պարզապես անհրաժեշտ է ստեղնաշարի մուտքագրում տարբեր հաճախականությունների համար և այդ հաճախականությունը թողնում է PB6: Հուսով եմ ձեզ դուր եկավ IDE- ի հետ կոդավորելու այլ եղանակ կարդալը:
Բացի այդ, խնդրում ենք կողմ քվեարկեք Միկրոկոնտրերլերի մրցույթին: D
Խորհուրդ ենք տալիս:
Arduino- ի ծրագրավորում ՝ օգտագործելով մեկ այլ Arduino ՝ առանց գրադարանի ոլորվող տեքստ ցուցադրելու համար. 5 քայլ
Arduino- ի ծրագրավորում ՝ օգտագործելով մեկ այլ Arduino ՝ առանց գրադարանի ոլորվող տեքստ ցուցադրելու համար. Sony Spresense- ը կամ Arduino Uno- ն այդքան թանկ չեն և չեն պահանջում մեծ էներգիա: Այնուամենայնիվ, եթե ձեր նախագիծը սահմանափակումներ ունի էներգիայի, տարածքի կամ նույնիսկ բյուջեի վրա, գուցե ցանկանաք հաշվի առնել Arduino Pro Mini- ի օգտագործումը: Ի տարբերություն Arduino Pro Micro- ի, Arduino Pro Mi
RC5 Հեռակառավարման արձանագրության ապակոդավորիչ ՝ առանց գրադարանի ՝ 4 քայլ
RC5 Հեռակառավարման արձանագրության ապակոդավորիչ առանց գրադարանի. Rc5- ի վերծանումից առաջ մենք նախ քննարկում ենք, թե որն է rc5 հրամանը և որն է դրա կառուցվածքը: Այսպիսով, հիմնականում rc5 հրահանգը օգտագործվում է հեռակառավարման վահանակներում, որոնք օգտագործվում են հեռուստատեսություններում, cd նվագարկիչներում, d2h- ում, տնային կինոթատրոնի համակարգերում և այլն: այն ունի 13 կամ 14 բիթ ՝ դասավորված
Առանց էկրանի / ցուցադրման (առանց գլխի) աշխատելը Raspberry Pi- ի կամ Linux- ի վրա հիմնված այլ համակարգիչների վրա `6 քայլ
Առանց էկրանի / ցուցադրման (առանց գլխի) աշխատելը Raspberry Pi- ի կամ Linux- ի / unix- ի վրա հիմնված այլ համակարգիչների վրա. Երբ մարդկանց մեծ մասը գնում է Raspberry PI, նրանք կարծում են, որ իրենց անհրաժեշտ է համակարգչի էկրան: Մի վատնեք ձեր գումարը համակարգչի անհարկի մոնիտորների և ստեղնաշարերի վրա: Մի վատնեք ձեր ժամանակը համակարգիչների միջև ստեղնաշարեր և մոնիտորներ տեղափոխելով: Մի կապեք հեռուստացույց, երբ այն չկա
Պարզ տոնային գեներատոր ՝ 7 քայլ (նկարներով)
A Simple Tone Generator: Arduino Tone Generator- ը մի շարք անջատիչներ են, որոնք կիսում են ընդհանուր տերմինալը GND- ին, իսկ մնացած կապերը միացված են 2, 3, 4, 5, 6, 7, 8 և 9 Arduino թվային կապերին, ինչպես նաև բարձրախոսով: տեղադրված է GND- ի և թվային PIN 11 -ի միջև Arduino Uno- ից
Aptրոյական արժեք ունեցող նոութբուքի հովացուցիչ սարք / տակդիր (առանց սոսնձի, առանց հորատման, առանց ընկույզների և պտուտակների, առանց պտուտակների) ՝ 3 քայլ
Zero Cost Laptop Cooler / Stand (No Glue, No Drilling, No Nuts & Bolts, No Screws): UPDATE: PLEASE KINDLY VOTE FOR MY INSTRUCTABLE, THANKS ^ _ ^ YOU KEST MOTO LIKE Մուտք գործեք www.instructables.com/id/Zero-Cost-Alumin-Furnace-No-Propane-No-Glue-/ ԿԱՄ Գուցե քվեարկեք իմ լավագույն ընկերոջ համար