Talaan ng mga Nilalaman:
- Hakbang 1: Pagtukoy sa Mga Address ng Rehistro
- Hakbang 2: Mga Array at Mga Global Variable
- Hakbang 3: Ang "serial.begin" Function
- Hakbang 4: Ang "serial.available" Function
- Hakbang 5: Ang "serial.read" Function
- Hakbang 6: Ang "serial.write" Function
- Hakbang 7: Ang Pag-andar ng Pag-setup
- Hakbang 8: Ang Mga Pag-andar ng Loop at ISR
- Hakbang 9: Mga kable
- Hakbang 10: Pagsasama-sama sa Lahat
Video: Arduino Tone Generator Na Walang Library o Serial Function (Sa Mga Nakagambala): 10 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:14
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
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
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
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
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
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
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
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
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
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:
Pagprogram ng isang Arduino Paggamit ng Isa pang Arduino upang Maipakita ang isang Scrolling Text Nang Walang Library: 5 Mga Hakbang
Ang Programming ng isang Arduino Paggamit ng Isa pang Arduino upang Maipakita ang isang Scrolling Text Nang Walang Library: Ang Sony Spresense o Arduino Uno ay hindi ganoon kamahal at hindi nangangailangan ng maraming lakas. Gayunpaman, kung ang iyong proyekto ay may limitasyon sa kapangyarihan, espasyo, o kahit na badyet, baka gusto mong isaalang-alang ang paggamit ng Arduino Pro Mini. Hindi tulad ng Arduino Pro Micro, Arduino Pro Mi
Tumatakbo nang Walang isang Screen / Display (walang ulo) sa Raspberry Pi o Iba Pang Mga Linux / unix Batay na Mga Computer: 6 Hakbang
Tumatakbo nang Walang isang Screen / Display (walang ulo) sa Raspberry Pi o Iba Pang Mga Linux / unix Batay sa Mga Computer: Kapag ang karamihan sa mga tao ay bumili ng isang Raspberry PI, sa palagay nila kailangan nila ng isang computer screen. Huwag sayangin ang iyong pera sa mga hindi kinakailangang monitor ng computer at keyboard. Huwag sayangin ang iyong oras sa paglipat ng mga keyboard at monitor sa pagitan ng mga computer. Huwag magtali ng isang TV kapag hindi
AVR Microcontroller. Mga LED Flasher Gamit ang Timer. Nakagambala ang Mga timer. Timer CTC Mode: 6 na Hakbang
AVR Microcontroller. Mga LED Flasher Gamit ang Timer. Nakagambala ang Mga timer. Timer CTC Mode: Kamusta sa lahat! Ang timer ay isang mahalagang konsepto sa larangan ng electronics. Ang bawat elektronikong sangkap ay gumagana sa isang batayan sa oras. Nakakatulong ang base ng oras na ito upang mapanatili ang lahat ng trabaho na naka-synchronize. Ang lahat ng mga microcontroller ay gumagana sa ilang paunang natukoy na dalas ng orasan, ang
HC - 06 (Slave Module) Pagbabago ng "NAME" Nang Walang Paggamit "Monitor Serial Arduino" na "Madaling Gumana": Way na Walang Kasalanan!: 3 Hakbang
HC - 06 (Slave Module) Pagbabago ng "NAME" Nang Walang Paggamit "Monitor Serial Arduino" … na "Madaling Gumana": Way na Walang Kasalanan!: Pagkatapos ng " Mahabang Oras " sinusubukan ang Pagbabago ng Pangalan papunta sa HC - 06 (Module ng alipin), gamit ang " serial monitor ng Arduino, nang walang " Nagtagumpay ", Nakahanap ako ng isa pang madaling paraan at pagbabahagi ngayon! Magkaroon ng Mga Kasayahan sa Kasayahan
Zero Cost Laptop Cooler / Stand (Walang Pandikit, Walang Pagbabarena, Walang Nuts & Bolts, Walang Mga Screw): 3 Hakbang
Zero Cost Laptop Cooler / Stand (Walang Pandikit, Walang Pagbabarena, Walang Mga Nuts at Bolts, Walang Mga Screw): I-UPDATE: Pakiusap MABUTI VOTE PARA SA MY INSTRUCTABLE, THANKS ^ _ ^ GUSTO MO DIN PO KONG MAGBOTOT PARA SA AKING IBA PANG KONTEST ENTRY AT www.instructables.com/id/Zero-Cost-Aluminum-Furnace-No-Propane-No-Glue-/ O BAKA MAGBOTA PARA SA PINAKA MAHIGING KAIBIGAN