Sisällysluettelo:
- Vaihe 1: Rekisteriosoitteiden määrittäminen
- Vaihe 2: Taulukot ja globaalimuuttujat
- Vaihe 3: "serial.begin" -toiminto
- Vaihe 4: "Sarja. Käytettävissä" -toiminto
- Vaihe 5: "Serial.read" -toiminto
- Vaihe 6: "serial.write" -toiminto
- Vaihe 7: Asennustoiminto
- Vaihe 8: Silmukka- ja ISR -toiminnot
- Vaihe 9: Johdotus
- Vaihe 10: Yhdistä kaikki
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-13 06:57
Tämä ei ole asia, johon yleensä tekisin opastettavan, mieluummin metallityöni, mutta koska olen sähkötekniikan opiskelija ja minun on suoritettava luokka mikrokontrollereista (Embedded Systems Design), ajattelin tehdä opastettavan yksi projekteistani. Kun tein alun perin projektin ja muut tälle luokalle, huomasin, että on hyvin vähän tai ei lainkaan opetusohjelmia, jotka eivät käytä arduino -kirjaston toimintoja tai sarjatoimintoja, mikä oli toinen syy, miksi ajattelin, että tämä olisi hyvä opettavainen.
Tämä koodi on suunniteltu Atmega 2560 -mikro -ohjaimelle, joten jos haluat ottaa sen käyttöön toisella kortilla, sinun on muutettava koodirekisterit ohjaimesi käyttöoppaan perusteella. Koodin perusajatus on, että aina kun näppäilet näppäimistön näppäimen sarjamonitoriin, arduino mega lähettää tietyn taajuuden sen mukaan, mitä näppäintä painat, ja "q" nollaa sen. Tein sen niin, että "a" lähettää A -tasaisen taajuuden ja "A" antaa A -terävän taajuuden, "b" antaa B -tason, "c" C -tasaisen, "C" C -terävän ja niin edelleen. Koko koodi ladataan lopussa, mutta jokainen vaihe hajottaa koodin osiin, jotta se on helpompi selittää.
Vaihe 1: Rekisteriosoitteiden määrittäminen
Tämä vaihe on helppo, jos käytät atmega 2560 -laitetta, sinun on vain käytettävä käyttämiäni osoitteita, mutta jos käytät eri sirulla varustettua levyä, sinun on löydettävä kunkin rekisterin osoitteet sirujen käyttöopas. Yläosassa olevat määritelmät ovat vain vakioita, joita käytetään toiminnoissamme myöhemmin. Määritämme osoitteet epävakaiksi allekirjoittamattomiksi, koska emme halua kääntäjän sekoittavan niihin.
Vaihe 2: Taulukot ja globaalimuuttujat
Tässä haluamme määritellä taajuusryhmän, joka sisältää kaikki taajuudet, jotka kukin avain antaa. Nämä arvot lasketaan todellisista nuotin taajuuksista, ja rehellisesti unohdin, miten sain ne, mutta ne ovat oikeat arvot, kun testasin niitä oskilloskoopilla varmistaakseni. Määrittelemme myös nuottijoukon, joka sisältää kaikki kunkin näppäimen painettavat näppäimet sekä muuttujat, joita tarvitsemme myöhempiin toimintoihimme.
Vaihe 3: "serial.begin" -toiminto
Kutsumme mukautettua toimintoamme, joka toistaa "serial.begin" -funktion U0init (). Se ottaa halutun siirtonopeuden syötteeksi ja käynnistää sarjaportin kyseisellä siirtonopeudella.
Vaihe 4: "Sarja. Käytettävissä" -toiminto
Kutsumme toimintoa, joka jäljittelee "serial.available" U0kbhit (). Se ei syötä, vaan havaitsee sen sijaan, onko näppäimistöllä tehty muutos RDA -tilabitin avulla, ja palauttaa arvon true, kun muutos havaitaan.
Vaihe 5: "Serial.read" -toiminto
Kutsumme funktiota, joka jäljittelee "serial.read" -toimintoa U0getchar (), joka ei syötä eikä lähetä mitään muutoksia näppäimistöön, joka on tallennettu UDR0 -rekisteriin.
Vaihe 6: "serial.write" -toiminto
Kutsumme toimintoa, joka jäljittelee "serial.write" U0putchar (): aa, joka ottaa tiedot UDR0 -rekisteristä, kun muutos havaitaan ja tallennetaan, ja antaa lähtöjä, jotka muuttuvat takaisin sarjamonitoriksi.
Vaihe 7: Asennustoiminto
Tämä on perusasetustoiminto, joka käyttää "serial.begin" -imitoitamme sarjaportin alustamiseen ja alustaa ajastinrekisterien bittiasetuksemme ja asettaa PB6: n lähettämään äänemme.
Vaihe 8: Silmukka- ja ISR -toiminnot
Silmukka toimii näin: jos muutos havaitaan "serial.available" -toiminnolla, "serial.read" -toiminto tallentaa muutokset, ja "serial.write" -toiminto tuo muutoksen sarjamonitoriin. Niin kauan kuin muuttuja i on pienempi kuin taajuusryhmän koko, se asettaa ulostulon i: n asemaan kyseisessä taulukossa ja antaa taajuuden kyseisessä paikassa. ISR toimii kuittauksena, jossa jos taajuusryhmän sijainti ei ole 0 (toisin sanoen, jos "q" ei paineta), se lähettää taajuuden, mutta kun "q" painetaan, se nollautuu. Huomaa: tämä koodi käyttää keskeytyksiä, mutta se voidaan tehdä keskeytysten ollessa poissa käytöstä. Lähetän koodin keskeytyksettä, jos saan sitä koskevia pyyntöjä, mielestäni keskeytysversio on vain hauskempi.
Vaihe 9: Johdotus
Tämän koodin johdotus on erittäin helppoa, yksinkertaisesti liitä lähtöjohto PB6: sta leipälevyyn, kytke summeri tai kaiutin sarjaan ja kytke se takaisin maahan. Huomautus: jos käytät kaiutinta, aseta pieni vastus kaiuttimen eteen. Jos haluat vain nähdä ulostulon, mutta et kuule sitä, kytke PB6 oskilloskoopin punaiseen johtoon ja musta johto maahan.
Vaihe 10: Yhdistä kaikki
Lisäsin täyden koodin tähän vaiheeseen, koska olen selittänyt sen kaikki osat aiemmissa vaiheissa. Se tarvitsee vain näppäimistötulon eri taajuuksille ja lähettää taajuuden PB6: lle. Toivottavasti nautit lukemasta eri tapaa koodata IDE: n kanssa!
Äänestä myös tätä mikrokontrollerikilpailussa: D