Talaan ng mga Nilalaman:

Arduino Tone Generator Na Walang Library o Serial Function (Sa Mga Nakagambala): 10 Hakbang
Arduino Tone Generator Na Walang Library o Serial Function (Sa Mga Nakagambala): 10 Hakbang

Video: Arduino Tone Generator Na Walang Library o Serial Function (Sa Mga Nakagambala): 10 Hakbang

Video: Arduino Tone Generator Na Walang Library o Serial Function (Sa Mga Nakagambala): 10 Hakbang
Video: Arduino MASTERCLASS | Full Programming Workshop in 90 Minutes! 2024, Nobyembre
Anonim
Arduino Tone Generator Na Walang Library o Serial Function (Na May Mga Nakagambala)
Arduino Tone Generator Na Walang Library o Serial Function (Na May Mga Nakagambala)

Hindi ito isang bagay na karaniwang ginagawa kong isang itinuturo, ginusto ko ang aking gawa sa metal, ngunit dahil ako ay isang mag-aaral sa elektrisidad na engineering at kailangang kumuha ng isang klase sa microcontrollers (Embedded Systems Design), naisip kong gumawa ako ng isang itinuturo sa isa sa mga proyekto ko. Nang orihinal kong ginawa ang proyekto at iba pa para sa klase na ito, nalaman ko na may kakaunti upang walang mga tutorial na hindi gumagamit ng mga function ng arduino library o serial function, na kung saan ay isa pang kadahilanan naisip ko na ito ay magiging isang mahusay na itinuro.

Ang code na ito ay idinisenyo para sa microcontroller ng Atmega 2560, kaya kung nais mong ipatupad ito sa ibang board kakailanganin mong baguhin ang mga rehistro ng address sa code batay sa manwal ng iyong mga gumagamit ng mga control. Ang pangunahing ideya sa likod ng code ay na sa tuwing magpasok ka ng isang susi sa keyboard sa serial monitor, ang arduino mega ay maglalabas ng isang tiyak na dalas batay sa kung anong susi ang pinindot mo, kasama ang pag-reset ng "q". Ginawa ko ito upang ang "a" ay maglalabas ng Isang patag na dalas at ang "A" ay maglalabas ng A matalim na dalas, "b" outputting B flat, "c" para sa C flat, "C" para sa C matalim, at iba pa. Ang buong code ay na-upload sa dulo, ngunit ang bawat hakbang ay masisira ang code sa mga piraso upang mas madaling ipaliwanag.

Hakbang 1: Pagtukoy sa Mga Address ng Rehistro

Pagtukoy sa Mga Address ng Rehistro
Pagtukoy sa Mga Address ng Rehistro

Madali ang hakbang na ito, kung gumagamit ka ng atmega 2560, kailangan mo lamang gamitin ang mga address na ginamit ko, kahit na kung gumamit ka ng isang board na may iba't ibang maliit na tilad, kakailanganin mong hanapin ang mga address para sa bawat isa sa mga rehistro na ito sa iyong manwal ng gumagamit ng chips. Ang mga kahulugan sa tuktok ay pare-pareho lamang na magagamit para sa aming mga pagpapaandar sa paglaon. Tinukoy namin ang mga address bilang pabagu-bago na hindi pinirmahan dahil hindi namin nais na gumalaw sa kanila ang tagatala.

Hakbang 2: Mga Array at Mga Global Variable

Mga array at Mga Global Variable
Mga array at Mga Global Variable
Mga array at Mga Global Variable
Mga array at Mga Global Variable
Mga array at Mga Global Variable
Mga array at Mga Global Variable

Dito nais naming tukuyin ang hanay ng Frequency na maglalaman ng lahat ng mga frequency na dapat na output ng bawat key. Ang mga halagang ito ay kinakalkula mula sa aktwal na mga frequency ng tala, at sa totoo lang nakalimutan ko kung paano ko nakuha ang mga ito, ngunit ang mga ito ang tamang halaga habang sinusubukan ko ang mga ito sa isang oscilloscope upang matiyak. Tinutukoy din namin ang array ng mga tala na naglalaman ng lahat ng mga key upang pindutin para sa bawat tono, pati na rin ang mga variable na kakailanganin namin para sa aming mga pag-andar sa paglaon.

Hakbang 3: Ang "serial.begin" Function

Ang
Ang

Tatawagan namin ang aming pasadyang pagpapaandar na kinokopya ng "serial.begin" na pagpapaandar na U0init (). Kinukuha ang ninanais na baudrate bilang input at sinisimulan ang serial port sa baudrate na iyon.

Hakbang 4: Ang "serial.available" Function

Ang
Ang

Tatawagan namin ang pagpapaandar na gumagaya sa "serial.available" U0kbhit (). Hindi ito kukuha ng pag-input ngunit sa halip ay nakita kung may pagbabago na ginawa sa keyboard gamit ang status ng RDA bit at bumalik nang totoo kapag may napansin na pagbabago.

Hakbang 5: Ang "serial.read" Function

Ang
Ang

Tatawagan namin ang pagpapaandar na gumagaya sa "serial.read" na function na U0getchar (), na hindi tumatagal ng pag-input at paglabas ng anumang pagbabago na ginawa sa keyboard, na nakaimbak sa rehistro ng UDR0.

Hakbang 6: Ang "serial.write" Function

Ang
Ang

Tatawagan namin ang pagpapaandar na gumagaya sa "serial.write" U0putchar (), na kumukuha ng data mula sa rehistro ng UDR0 habang ang isang pagbabago ay napansin at nakaimbak, at mga output na nagbabalik sa serial monitor.

Hakbang 7: Ang Pag-andar ng Pag-setup

Ang Pag-andar ng Pag-setup
Ang Pag-andar ng Pag-setup

Ito ang pangunahing pag-andar ng pag-setup na gagamitin ang aming "serial.begin" imitasyon upang pasimulan ang serial port, at isisimulan ang aming mga setting ng bit para sa mga rehistro ng timer at itakda ang PB6 upang i-output ang aming mga tono.

Hakbang 8: Ang Mga Pag-andar ng Loop at ISR

Ang Mga Pag-andar ng Loop at ISR
Ang Mga Pag-andar ng Loop at ISR

Gumagana ang loop tulad nito: kung ang isang pagbabago ay napansin sa aming "serial.available" na function, ang aming "serial.read" na function na nag-iimbak na nagbago, at ang aming "serial.write" na function na inilalagay ang pagbabago sa serial monitor. Hangga't ang isang variable i ay mas mababa kaysa sa laki ng frequency array, itatakda nito ang output na maging posisyon ng i sa array na iyon, na naglalabas ng dalas sa posisyon na iyon. Gumagana ang ISR bilang pag-reset, kung saan kung ang posisyon ng frequency array ay hindi katumbas ng 0 (sa madaling salita kung hindi pinindot ang "q"), maglalabas ito ng dalas, ngunit kapag pinindot ang "q" ay ii-reset ito. Mangyaring tandaan: ang code na ito ay gumagamit ng mga nakakagambala, ngunit maaari itong gawin nang hindi pinagana ang mga pagkagambala. Magpo-post ako ng code nang walang nakakagambala kung makakakuha ako ng anumang mga kahilingan para dito, sa palagay ko mas masaya ang nagagambalang bersyon.

Hakbang 9: Mga kable

Kable
Kable

Ang mga kable para sa code na ito ay napakadali, maglagay lamang ng isang output wire mula sa PB6 sa isang breadboard, ikonekta ang isang buzzer o speaker sa serye kasama nito, at ikonekta ito pabalik sa lupa. Tandaan: kung gumagamit ka ng isang nagsasalita, maglagay ng isang maliit na risistor bago ang nagsasalita. Kung nais mo lamang makita ang output ngunit hindi ito pakinggan, ikonekta lamang ang PB6 sa pulang tingga ng isang oscilloscope at ang itim na humantong sa lupa.

Hakbang 10: Pagsasama-sama sa Lahat

Idinagdag ko ang buong code sa hakbang na ito, dahil ipinaliwanag ko ang lahat ng mga bahagi nito sa mga nakaraang hakbang. Dadalhin lamang ang isang input ng keyboard para sa iba't ibang mga frequency at output na dalas sa PB6. Inaasahan kong nasiyahan ka sa pagbabasa ng ibang paraan upang mag-code sa IDE!

Gayundin, mangyaring iboto ito sa paligsahan ng Microcontroller: D

Inirerekumendang: