Turinys:
- 1 veiksmas: registro adresų apibrėžimas
- 2 žingsnis: masyvai ir visuotiniai kintamieji
- 3 žingsnis: funkcija „serial.begin“
- 4 veiksmas: funkcija „serial.available“
- 5 veiksmas: funkcija „serial.read“
- 6 veiksmas: funkcija „serial.write“
- 7 žingsnis: sąrankos funkcija
- 8 žingsnis: ciklo ir ISR funkcijos
- 9 žingsnis: laidų prijungimas
- 10 žingsnis: surinkite viską kartu
Video: „Arduino“tonų generatorius be bibliotekos ar serijinių funkcijų (su pertraukomis): 10 žingsnių
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Tai nėra kažkas, ko paprastai norėčiau pamokyti, man labiau patinka metalo dirbiniai, bet kadangi esu elektrotechnikos studentas ir turiu lankyti mikrovaldiklių klasę (įterptųjų sistemų projektavimas), maniau, kad padarysiu pamoką vienas iš mano projektų. Kai iš pradžių sukūriau projektą ir kitus šios klasės mokinius, pastebėjau, kad yra labai mažai pamokų, kuriose nenaudojamos „arduino“bibliotekos funkcijos ar serijinės funkcijos, o tai dar viena priežastis, dėl kurios maniau, kad tai būtų gera pamoka.
Šis kodas skirtas „Atmega 2560“mikrovaldikliui, todėl, jei norite jį įdiegti kitoje plokštėje, turėsite pakeisti kodo adresų registrus pagal savo valdiklių vartotojo vadovą. Pagrindinė kodo idėja yra ta, kad kiekvieną kartą, kai įvesite klaviatūros klavišą į serijinį monitorių, „arduino mega“išves tam tikrą dažnį pagal tai, kokį klavišą paspausite, o „q“jį iš naujo nustatys. Aš padariau taip, kad „a“skleistų A plokščią dažnį, o „A“- aštrų dažnį, „b“išves B plokščią, „c“- C plokščią, „C“- C aštrų ir pan. Pabaigoje įkeliamas visas kodas, tačiau kiekvienas žingsnis suskaidys kodą į dalis, kad būtų lengviau paaiškinti.
1 veiksmas: registro adresų apibrėžimas
Šis žingsnis yra lengvas, jei naudojate „atmega 2560“, jums tereikia naudoti mano naudojamus adresus, nors jei naudojate plokštę su kitu lustu, turėsite rasti kiekvieno iš šių registrų adresus savo lustų vartotojo vadovas. Viršuje esančios apibrėžtys yra tik konstantos, kurios vėliau bus naudojamos mūsų funkcijoms atlikti. Mes nurodome adresus kaip nepastovius nepasirašytus, nes nenorime, kad kompiliatorius su jais susimaišytų.
2 žingsnis: masyvai ir visuotiniai kintamieji
Čia norime apibrėžti dažnių masyvą, kuriame bus visi dažniai, kuriuos kiekvienas raktas turėtų išvesti. Šios vertės yra apskaičiuotos pagal faktinius natų dažnius ir, tiesą sakant, pamiršau, kaip juos gavau, tačiau tai yra tinkamos vertės, nes išbandžiau jas osciloskopu. Mes taip pat apibrėžiame užrašų masyvą, kuriame yra visi kiekvieno tono klavišai, kuriuos reikia paspausti, taip pat kintamuosius, kurių mums reikės vėlesnėms funkcijoms.
3 žingsnis: funkcija „serial.begin“
Mes vadinsime savo pasirinktinę funkciją, kuri atkartoja funkciją „serial.begin“U0init (). Jis naudoja norimą duomenų perdavimo spartą ir paleidžia nuoseklųjį prievadą tuo greičiu.
4 veiksmas: funkcija „serial.available“
Funkciją, kuri imituoja, vadinsime „serial.available“U0kbhit (). Jis nereikalauja įvesties, o nustato, ar klaviatūroje buvo atliktas pakeitimas naudojant RDA būsenos bitą, ir grąžina tikrąją reikšmę, kai aptinkamas pakeitimas.
5 veiksmas: funkcija „serial.read“
Funkciją, kuri imituoja „serial.read“funkciją, vadinsime U0getchar (), kuri neima jokių įėjimų ir išvedimų, nesvarbu, kokie pakeitimai bus atlikti klaviatūroje, kuri saugoma UDR0 registre.
6 veiksmas: funkcija „serial.write“
Funkciją, kuri imituoja „serial.write“, vadinsime U0putchar (), kuri paima duomenis iš UDR0 registro, kol aptinkamas ir saugomas pakeitimas, ir išvedami į serijinį monitorių.
7 žingsnis: sąrankos funkcija
Tai yra pagrindinė sąrankos funkcija, kuri naudos mūsų „serial.begin“imitaciją serijiniam prievadui inicijuoti ir inicijuos mūsų laikmačio registrų bitų nustatymus ir nustatys PB6, kad išvestų mūsų tonus.
8 žingsnis: ciklo ir ISR funkcijos
Ciklas veikia taip: jei pakeitimas aptinkamas naudojant funkciją „serial.available“, mūsų funkcija „serial.read“išsaugo tą pasikeitimą, o funkcija „serial.write“tą pakeitimą įtraukia į serijinį monitorių. Kol kintamasis i yra mažesnis už dažnių masyvo dydį, jis nustatys išvestį kaip i padėtį toje masyvoje, išvesdamas dažnį toje vietoje. ISR veikia kaip atstatymas, kur, jei dažnių masyvo padėtis nėra lygi 0 (kitaip tariant, jei nespaudžiamas „q“), jis išves dažnį, tačiau paspaudus „q“jis atstatomas. Atkreipkite dėmesį: šis kodas naudoja pertraukimus, tačiau tai galima padaryti išjungus pertraukas. Skelbsiu kodą be pertraukų, jei gausiu užklausų, tiesiog manau, kad pertraukimo versija yra įdomesnė.
9 žingsnis: laidų prijungimas
Šio kodo prijungimas yra labai lengvas, tiesiog prijunkite išvesties laidą iš PB6 į duonos lentą, serijiniu būdu prijunkite garsinį signalą ar garsiakalbį ir vėl prijunkite prie žemės. Pastaba: jei naudojate garsiakalbį, prieš garsiakalbį įdėkite nedidelį rezistorių. Jei norite tik pamatyti išvestį, bet negirdėti, tiesiog prijunkite PB6 prie raudono osciloskopo laido ir juodą prie žemės.
10 žingsnis: surinkite viską kartu
Prie šio veiksmo pridėjau visą kodą, nes visas jo dalis paaiškinau ankstesniuose veiksmuose. Tam tereikia įvesti skirtingų dažnių klaviatūrą ir išvesti tą dažnį į PB6. Tikimės, kad jums patiko skaityti kitokį kodavimo būdą naudojant IDE!
Taip pat prašau balsuoti už tai mikrokontrolerio konkurse: D
Rekomenduojamas:
Funkcijų generatorius: 12 žingsnių (su paveikslėliais)
Funkcijų generatorius: šioje instrukcijoje aprašomas funkcijų generatoriaus, pagrįsto „Maxims“analoginis integruotas grandynas MAX038, dizainas. Funkcijų generatorius yra labai naudingas įrankis elektronikos keistuoliams. Jis reikalingas rezonansinių grandinių derinimui, audito testavimui
Nešiojamas funkcijų generatorius „WiFi“ir „Android“: 10 žingsnių
Nešiojamas funkcijų generatorius „WiFi“ir „Android“: beveik XX amžiaus pabaigoje atsirado įvairių technologinių naujovių, ypač ryšių srityje; bet ne tik. Mums, vartotojams, vartotojams ir inžinieriams paaiškėjo, kad sparčiai vystosi elektroniniai prietaisai, kurie gali padaryti mūsų gyvenimą
Nešiojamas funkcijų generatorius „Arduino“: 7 žingsniai (su paveikslėliais)
Nešiojamasis funkcijų generatorius „Arduino“: Funkcijų generatorius yra labai naudingas įrankis, ypač kai svarstome išbandyti savo grandinės reakciją į tam tikrą signalą. Šioje instrukcijoje aprašysiu mažo, lengvai naudojamo, nešiojamo funkcijų generatoriaus kūrimo seką. Savybės
„Pasidaryk pats“funkcijų generatorius (ICL8038) 0 Hz - 400 Khz: 11 žingsnių
„Pasidaryk pats“funkcijų generatorius (ICL8038) 0 Hz - 400 Khz: Funkcijų generatoriai yra labai naudingas įrankis elektronikos stende, tačiau tai gali būti gana brangu, tačiau turime daug galimybių jį pigiai sukurti. Šiame projekte naudojame ICl8038
„Arduino Synth“/ tonų generatorius: 5 žingsniai
„Arduino Synth / Tone Generator“: Tai yra „Synth / Tone Generator“, kuris naudoja komandą „Tone“, kuri yra gimtoji „Arduino“. Jame yra 12 atskirų klavišų, kuriuos galima nustatyti bet kokio dažnio kvadratinių bangų atkūrimui. Jis turi galimybę kilti aukštyn ir žemyn oktavomis mygtuku. Jame taip pat yra s