Përmbajtje:

Arduino Tone Generator Pa Bibliotekë ose Funksione Seriale (Me Ndërprerje): 10 Hapa
Arduino Tone Generator Pa Bibliotekë ose Funksione Seriale (Me Ndërprerje): 10 Hapa

Video: Arduino Tone Generator Pa Bibliotekë ose Funksione Seriale (Me Ndërprerje): 10 Hapa

Video: Arduino Tone Generator Pa Bibliotekë ose Funksione Seriale (Me Ndërprerje): 10 Hapa
Video: Как использовать ESP32 WiFi и Bluetooth с Arduino IDE, полная информация с примерами и кодом. 2024, Nëntor
Anonim
Arduino Tone Generator Pa Bibliotekë ose Funksione Seriale (Me Ndërprerje)
Arduino Tone Generator Pa Bibliotekë ose Funksione Seriale (Me Ndërprerje)

Kjo nuk është diçka për të cilën zakonisht do të bëja një udhëzues, preferoj punën time metalike, por pasi jam student i inxhinierisë elektrike dhe duhet të marr një klasë për mikrokontrolluesit (Dizajni i Sistemeve të Embedded), mendova se do të bëja një udhëzues në një nga projektet e mia. Kur fillimisht bëra projektin dhe të tjerët për këtë klasë, zbulova se ka shumë pak ose aspak mësime që nuk përdorin funksionet e bibliotekës arduino ose funksionet serike, gjë që është një arsye tjetër që mendova se do të ishte një udhëzues i mirë.

Ky kod është krijuar për mikrokontrolluesin Atmega 2560, kështu që nëse doni ta zbatoni në një tabelë tjetër do t'ju duhet të ndryshoni regjistrat e adresave në kod bazuar në manualin e përdoruesit të kontrolluesve tuaj. Ideja themelore pas kodit është që sa herë që futni një çelës në tastierë në monitorin serik, arduino mega do të nxjerrë një frekuencë të caktuar bazuar në atë çelës që shtypni, me "q" ta rivendosni atë. Unë e bëra atë në mënyrë që "a" të nxjerrë frekuencën A të sheshtë dhe "A" do të nxjerrë frekuencën A të mprehtë, "b" të dalë B të sheshtë, "c" për C të sheshtë, "C" për C të mprehtë, etj. Kodi i plotë ngarkohet në fund, por çdo hap do ta zbërthejë kodin në copa, kështu që është më e lehtë të shpjegohet.

Hapi 1: Përcaktimi i Adresave të Regjistrit

Përcaktimi i Adresave të Regjistrit
Përcaktimi i Adresave të Regjistrit

Ky hap është i lehtë, nëse përdorni atmega 2560, ju vetëm duhet të përdorni adresat që kam përdorur, edhe pse nëse përdorni një tabelë me një çip të ndryshëm, do t'ju duhet të gjeni adresat për secilin nga këto regjistra në pajisjen tuaj manuali i përdorimit të patate të skuqura. Përkufizimet në krye janë vetëm konstante që do të përdoren për funksionet tona më vonë. Ne i specifikojmë adresat si të paqëndrueshme të panënshkruara sepse nuk duam që përpiluesi të ngatërrohet me to.

Hapi 2: Vargjet dhe variablat globale

Vargjet dhe variablat globale
Vargjet dhe variablat globale
Vargjet dhe variablat globale
Vargjet dhe variablat globale
Vargjet dhe variablat globale
Vargjet dhe variablat globale

Këtu duam të përcaktojmë grupin Frequency i cili do të përmbajë të gjitha frekuencat që secili çelës duhet të dalë. Këto vlera llogariten nga frekuencat aktuale të shënimeve, dhe sinqerisht harrova se si i mora, por ato janë vlerat e duhura pasi i testova në një oshiloskop për t'u siguruar. Ne po përcaktojmë gjithashtu grupin e shënimeve i cili përmban të gjithë çelësat për të shtypur për çdo ton, si dhe variablat që do të na duhen për funksionet tona të mëvonshme.

Hapi 3: Funksioni "serial.filloj"

E
E

Ne do të thërrasim funksionin tonë të personalizuar që përsërit funksionin "serial.begin" U0init (). Merr baudratin e dëshiruar si hyrje dhe fillon portën serike në atë baudrate.

Hapi 4: Funksioni "serial.disponueshëm"

E
E

Ne do të thërrasim funksionin që imiton "serial.available" U0kbhit (). Nuk merr hyrje, por përkundrazi zbulon nëse ka një ndryshim të bërë në tastierë duke përdorur bitin e statusit RDA dhe kthehet i vërtetë kur zbulohet një ndryshim.

Hapi 5: Funksioni "serial.read"

E
E

Ne do ta thërrasim funksionin që imiton funksionin "serial.read" U0getchar (), i cili nuk merr asnjë hyrje dhe dalje çfarëdo ndryshimi të bëhet në tastierë, i cili ruhet në regjistrin UDR0.

Hapi 6: Funksioni "serial.write"

E
E

Ne do të thërrasim funksionin që imiton "serial.write" U0putchar (), i cili merr të dhënat nga regjistri UDR0 ndërsa një ndryshim zbulohet dhe ruhet, dhe daljet që ndryshojnë përsëri në monitorin serik.

Hapi 7: Funksioni i konfigurimit

Funksioni i konfigurimit
Funksioni i konfigurimit

Ky është funksioni themelor i konfigurimit që do të përdorë imitimin tonë "serial.begin" për të inicializuar portin serik dhe do të inicializojë cilësimet tona të bitit për regjistrat e kohëmatësit dhe do të vendosë PB6 që të nxjerrë tonet tona.

Hapi 8: Funksionet Loop dhe ISR

Funksionet Loop dhe ISR
Funksionet Loop dhe ISR

Lak funksionon kështu: nëse zbulohet një ndryshim me funksionin tonë "serial.available", funksioni ynë "serial.read" ruan ato ndryshime dhe funksioni ynë "serial.write" e vendos atë ndryshim në monitorin serik. Për sa kohë që një ndryshore i është më e vogël se madhësia e grupit të frekuencës, ajo do të vendosë që dalja të jetë pozicioni i i në atë grup, duke nxjerrë frekuencën në atë pozicion. ISR funksionon si rivendosje, ku nëse pozicioni i grupit të frekuencës nuk është i barabartë me 0 (me fjalë të tjera nëse "q" nuk shtypet), ai do të nxjerrë frekuencën, por kur të shtypet "q" do të rivendoset. Ju lutemi vini re: ky kod përdor ndërprerje, por mund të bëhet me ndërprerje me aftësi të kufizuara. Unë do të postoj kodin pa ndërprerje nëse marr ndonjë kërkesë për të, thjesht mendoj se versioni i ndërprerjes është më argëtues.

Hapi 9: Instalimet elektrike

Instalime elektrike
Instalime elektrike

Lidhja për këtë kod është jashtëzakonisht e lehtë, thjesht vendosni një tel dalës nga PB6 në një dërrasë buke, lidhni një zile ose altoparlant në seri me të dhe lidheni atë përsëri në tokë. Shënim: nëse përdorni një altoparlant, vendosni një rezistencë të vogël para altoparlantit. Nëse thjesht doni të shihni daljen, por nuk e dëgjoni atë, thjesht lidhni PB6 me prizën e kuqe të një oshiloskopi dhe prizën e zezë në tokë.

Hapi 10: Vendosini të gjitha së bashku

I shtova kodin e plotë këtij hapi, pasi i kam shpjeguar të gjitha pjesët e tij në hapat e mëparshëm. Thjesht merr një hyrje të tastierës për frekuenca të ndryshme dhe e nxjerr atë frekuencë në PB6. Shpresoj se ju ka pëlqyer të lexoni një mënyrë tjetër për të koduar me IDE!

Gjithashtu, ju lutemi votoni për këtë në konkursin e Mikrokontrolluesit: D

Recommended: