Sisällysluettelo:

Lukukytkimet ATtiny2313: 9 askeleella
Lukukytkimet ATtiny2313: 9 askeleella

Video: Lukukytkimet ATtiny2313: 9 askeleella

Video: Lukukytkimet ATtiny2313: 9 askeleella
Video: GeoGebra: Syöttökenttä ja liukukytkin 2024, Marraskuu
Anonim
Lukukytkimet ATtiny2313: n avulla
Lukukytkimet ATtiny2313: n avulla

ATtiny2313: n ja vastaavien AVR -laitteiden lähtöjä on käsitelty useita Instructables -ohjelmia. Esimerkiksi https://www.instructables.com/id/Ghetto-Programming%3a-Getting-started-with-AVR-micro/, https://www.instructables.com/id/Drive-a-Stepper- Moottori ja AVR-mikroprosessori/. Työskennellessäni viimeisen The Real Elliotin kanssa, joka näytti askelmoottoreiden ohjaamisen, huomasin, että olisi todella hyödyllistä pystyä suorittamaan vaihtoehtoisia koodiosia samassa ohjelmassa, joten minun ei tarvinnut ohjelmoida jokaista ATtiny2313 uudelleen Halusin kokeilla pientä koodivaihtelua (kuten puolivaihe tai askeleen ajaminen taaksepäin). Vaikka koodin kirjoittaminen kytkin-/tapauslausekkeen avulla on helppoa vaihtoehtoisten muunnelmien valitsemiseksi, tapauksen valitseminen tarvitaan jollain tavalla. Tämä tarkoittaa, että jonkinlainen syöttölaite on luettava kotelon hallitsemiseksi. Onneksi ATtiny2313: ssa on runsaasti I/O-nastoja, ja se on hyvin suunniteltu kytkimien tulojen lukemiseen. Tämä opastettava opastaa syötteiden lukemiseen ja niiden tilaan perustuvien päätösten tekemiseen. Koska pelkästään tämä tekisi melko tylsän Instructable, selitän yksinkertaisen tavan käyttää ATtiny2313: n ajastin/laskuri -ominaisuutta pienen kaiuttimen käyttämiseen äänimerkkinä. Yksinkertaisia virheenkorjaustekniikoita on myös pieni.

Vaihe 1: Syöttölaite

Syöttölaite
Syöttölaite
Syöttölaite
Syöttölaite

Tämä Instructable perustuu The Real Elliotin erinomaiseen työhön ja käyttää hänen kuvaamaansa ATtiny2313 Ghetto -kehitysjärjestelmää. Atmelin ATtiny2313 -tietolomake on kaikkien toimintojen lopullinen viite, mutta sitä ei välttämättä ole helppo lukea. https://www.atmel.com/dyn/products/datasheets.asp?family_id=607 (Linkissä on kaikki AVR -tietolomakkeet, etsi 2313.) Kuvassa on yksinkertainen tulokytkinsarja. Tämä on yksinkertaisesti neljän päälle/pois -kytkimen paketti; tunnetaan myös nimellä yksinapaiset yhden heiton kytkimet (SPST). Tyypillisesti jokaisen kytkimen yksi liitäntä tai napa on sidottu maahan, kun taas toinen liitäntä vedetään korkealle virranrajoitusvastuksen (noin 10K) läpi. Mikro -ohjaimen tulo on kytketty napaan vastuksen kanssa. Jos kytkin on auki, mikro -ohjain lukee tulon HI: nä. Jos kytkin on kiinni, mikro -ohjain lukee tulon LO. Katso lisätietoja kaaviosta. ATtiny2313 yksinkertaistaa asioita tarjoamalla ohjelmoitavia vetovastauksia I/O-nastoihin, kun ne on määritetty tuloiksi. Tämä tarkoittaa, että kytkimissä voi yksinkertaisesti olla yksi napa sidottu maahan (LO) ja toinen napa kytketty prosessorin tuloon. Ensimmäinen esimerkki näyttää vain kaksi kytkintä. Kytkimet luetaan ja konfiguroidaan seuraavalla koodilla. Konfiguroi kytkimet tuloiksi: (Koodia ei tarvita; tämä on oletus.) Kytke vetovastus päälle: PORTB = _BV (PB0) | _BV (PB1); Lue syötteet: but1 = ~ PINB & 0x03; Huomaa kääntämisen ja peittämisen käyttö saadaksesi oikean arvon.

Vaihe 2: Vilkkuu merkkivaloa

Käytämme näitä kahta kytkintä LED -valon vilkkumiseen ohjelmoitavan monta kertaa. LEDit, joita käytämme, ovat The Real Elliotin kuuluisia vilkkuja. Kytkimiä 1 ja 2 käsitellään kahdena binäärilukuna, joten yhdistelmä voi edustaa numeroita 0, 1, 2 ja 3. Ohjelmamme lukee kaksi kytkintä ja vilkuttaa LEDiä tarvittavan määrän kertoja, mutta vain jos asetukset ovat muuttuneet. Kytkimet poistetaan käytöstä 500 millisekunnin ajan (ei optimoitu). Palautusalgoritmi on melko yksinkertainen. Kytkimet luetaan ja lukema merkitään muistiin. Jos se on eri kuin vanhaBut -arvo (viimeksi tallennettu arvo), ohjelma viivästyy 500 millisekuntia ja kytkimet luetaan uudelleen. Jos arvo on sama kuin aiemmin luettu, oldBut -arvo päivitetään ja merkkivalo vilkkuu kahden kytkimen binääriarvon sisältämien kertojen lukumäärän. Huomaa arvon kääntäminen, koska "päällä" oleva kytkin lukee LO. Kytkimiä skannataan jatkuvasti lisämuutosten varalta. Katso The Real Elliotin aikaisemmat Instructables -ohjeet saadaksesi lisätietoja vilkkuvaloista. Katso tästä https://www.ganssle.com/debouncing.pdf saadaksesi lisätietoja poistokytkimistä. Tässä on tämän esimerkin ATtiny2313 -koodi. Käytössä tämä ohjelma vilkuttaa PB4: n (fyysinen nasta 8) LEDiä kahdesti osoittaakseen, että se on alustettu. Se lukee sitten kytkimet yksi ja kaksi ja vilkkuu 1-3 kertaa kytkimen asetuksesta riippuen aina, kun niitä muutetaan. Kun kytkimet eivät muutu, merkkivalo vilkkuu hitaasti. Jos haluat suorittaa tämän koodin, luo uusi hakemisto (kutsu sitä "Basic", jos haluat) ja lataa seuraava C -kooditiedosto ja makefile siihen. Nimeä Makefile1.txt vain Makefile -tiedostoksi. Käännä ohjelma WinAVR: n avulla ja lataa se ATtiny2313 -laitteeseesi.

Vaihe 3: Pieni poikkeama virheenkorjauksessa

Jos olet kuten minä (ja kaikki muut ohjelmoijat maailmassa), olet todennäköisesti kokenut aikoja, jolloin huolellisesti kirjoittamasi ja koottu "virheetön" koodi ei tee sitä, mitä odotat sen tekevän. Ehkä se ei yksinkertaisesti tee mitään! Joten mikä on ongelma? Miten aiot ottaa selvää? Onneksi on useita tapoja saada asiat toimimaan. (Hanki tämä kirja, jotta voit käsitellä erinomaisesti virheenkorjauksen aihetta. Http://www.debuggingrules.com/) Haluaisin tarjota muutamia yksinkertaisia ehdotuksia, jotka liittyvät mikro -ohjainsovellusten virheenkorjaukseen. mitä tiedät. Jos olet saanut vilkkua toimimaan kerran, käytä sitä uudelleen nähdäksesi missä olet ohjelmassasi. Pidän siitä, että LED -valo välähtää kahdesti ilmoittaakseen ohjelman alkamisesta. Voit laittaa koodin tekemään tämän aluksi ohjelman alussa. Kun tiedät, että laitteistossasi ei ole mitään vikaa, luo vilkkuva toiminto. Tässä on käyttämäni toiminto. /-------------------------------------------------- ------------------------------ ** blinkEm-LED-valon vilkkutoiminto PD4: n avulla ** PD4 on konfiguroitava lähtöön. ** ------------------------------------------------ ---------------------*/void blinkEm (uint8_t count) {while (count> 0) {PORTD = _BV (PD4); _viive_ms (1000); PORTD = ~ _BV (PD4); _viive_ms (1000); Kreivi--; }} Tätä toimintoa on nyt mahdollista käyttää koodin eri kohdissa signaalina siitä, että koodi on toiminut niin pitkälle. Kun tiedät koodin olevan käynnissä, voit tutkia huolellisesti jokaisen osan, joka on suoritettu, mutta ei tehnyt sitä, mitä odotit, löytääksesi virheitä. Yhden asian muuttaminen kerrallaan on myös keskeinen tekniikka virheenkorjauksessa (kuvattu yllä olevassa viitteessä). Tämä klassinen menetelmä toimii yhdessä "jaa ja valloita": vauvan askeleiden lisääminen toiminnallisuuden lisäämiseksi. Tämä saattaa tuntua hitaalta lähestymistavalta, mutta se ei ole läheskään yhtä hidasta kuin yrittää korjata suuri osa ei-toimivasta koodista kerralla.

Vaihe 4: Lisää virheenkorjausta

Monta kertaa haluamme tarkistaa koodin osan ohittamalla suurimman osan sen riveistä ja ottamalla ne käyttöön yksi kerrallaan, kun tarkistamme kunkin toimivan. Yleensä teemme tämän "kommentoimalla" rivit, jotka haluamme ohittaa. Tämän tekniikan laajennus on leikata ja liittää koodilohko, kommentoida alkuperäinen (jotta emme menetä sitä) ja hakata kopio. C: llä on neljä helppoa tapaa kommentoida rivejä. "//" -merkin asettaminen rivin eteen kommentoi kyseistä riviä. Jos lisäät yhden tai useamman rivin "/*" - ja "*/" -kohtiin, kommentoit koko osion. Jotta tämä menetelmä toimisi tehokkaasti, koodilohkossa ei saa olla muita "*/" -merkkejä (paitsi loppuosa). Joten tehokas kurinalaisuus on käyttää // -kommentteja koodilohkoissa olevissa kommenteissa ja varata / * * / -rakenne kommenttilohkoille ja koodiosien kommentoimiseksi. Laita "#if 0" lohkon alkuun kommentoidaksesi ja osion päättäminen "#endif". Lisää valikoivampi ohjaus on mahdollista käyttämällä "#ifdef (identifier)" lohkon alussa ja "#endif" lopussa. Jos haluat, että lohko kootaan, käytä "#define (identifier)" -ohjelman aiemmin. Huomaa, että lainausmerkit ovat vain korostusta varten, eikä niitä sisällytetä. Näiden tekniikoiden yhdistämisen pitäisi olla hyödyllinen lähestymistapa ATtiny2313 -ohjelmien virheenkorjaukseen. Näistä työkaluista voi olla hyötyä, kun käsittelemme tätä ohjekirjaa.

Vaihe 5: Ajastimen/laskurin 0 käyttö piippauksille

Ajastimen/laskurin 0 käyttö piippauksille
Ajastimen/laskurin 0 käyttö piippauksille

ATtiny2313: ssa on kaksi tehokasta ajastin/laskuriresurssia: yksi 8-bittinen ja yksi 16-bittinen. Nämä voidaan konfiguroida taajuusgeneraattoreiksi, muuttuvan pulssileveyden modulointisäätimiksi ja lähtövertailurekisteriksi. Näiden toimintoja on kuvattu tiedotteen 49 sivulla. Käytämme kuitenkin yksinkertaista tapausta. Vain ajastinta/laskuria 0 (8-bittinen) käytetään ja sitä käytetään yksinkertaisesti taajuusgeneraattorina. Taajuus ohjataan pieneen kaiuttimeen piippauksen tuottamiseksi. Ajastin/laskuri 0 on kuvattu täysin ATtiny2313 -tietolomakkeen sivuilla 66-83. Tämän materiaalin huolellinen lukeminen antaa täyden ymmärryksen aika/laskurista 0. Onneksi melko yksinkertainen tila, Clear Timer on Compare (CTC), on kaikki mitä tarvitaan halutun äänimerkin tuottamiseen.

Käytettävässä tilassa ajastimen/laskurin toiminta on suoraviivaista. Kun kellosignaali on valittu, laskuri alkaa nollasta ja lisää jokaista kellopulssia. Kun laskurin arvo saavuttaa tulosten vertailurekisterin (TOP) arvon, laskuri nollautuu ja laskenta alkaa uudelleen. Ajastimeen/laskuriin liittyvä lähtöbitti vaihdetaan neliöaaltolähdön tuottamiseksi. Tämä ohjaa äänianturia suoraan antamaan äänimerkin. Pieni TDK -äänianturi antaa äänimerkin. Sopiva yksikkö on Digikey 445-2530-ND, TDK SD1209T3-A1 (käytin tämän varhaista versiota). Tämä on 3 voltin versio; Myös 5 voltin versio toimii. Ajoin tämän suoraan Attiny2313: n lähtöportista ja se näyttää toimivan hyvin. Sparkfunilla on samanlainen laite.

Vaihe 6: Ajastimen/laskurin määrittäminen 0

CTC -tilaa voidaan käyttää OC0A -lähdön vaihtamiseen nasta 2, portti B (fyysinen nasta 14). Jotta lähtö voidaan ottaa käyttöön tässä nastassa, DDRB on asetettava oikein. C -koodi tälle on aivan kuin välähdyksen asettaminen vilkkuvalolle. DDRB = _BV (PB2); // Portti B2 on lähtö. Seuraava vaihe on antaa kellosignaali ja ladata lähtövertailurekisteri aaltomuodon tuottamiseksi taajuutena. Tuloksena olevan taajuuden yhtälö on esitetty tietolomakkeessa (sivu 72). Yhtälön termit kuvataan alla. Tässä on yhtälö: fOC0A = fclk_I/O/2*N*(1+OCR0A) Missä fOC0A: = lähtötaajuus fclk_I/O: = kellon lähteen taajuus N: = kellon esiasteikko OCR0A: = arvo lähtövertailurekisterissä ajastimelle/ Laskuri 0A Kellolähteen taajuus, fclk_I/O Tämä on järjestelmän kellon taajuus. Oletusarvo on 1 MHz. TCCR0B: n bitit CS00, CS01 ja CS02 ohjaavat tätä valintaa. Koska nämä bitit valitsevat myös arvon N, se kuvataan seuraavassa. TCCR0B: n bitit CS00, CS01 ja CS02 ohjaavat tätä valintaa. Taulukko 41 sivulla 81 ATtiny2313 -tietolomakkeessa kuvaa yhdistelmiä. Koska halutaan taajuus lähellä 1 kHz, TCCR0B: n bitit CS00 ja CS01 asetetaan. Huomaa, että kaikkien kolmen bitin asettaminen 0: ksi, jolloin ei valita kellolähdettä, pysäyttää lähdön tehokkaasti. Tätä menetelmää käytetään piippauksen käynnistämiseen ja lopettamiseen. Kun tämä arvo saavutetaan, laskuri nollataan ja laskenta alkaa uudelleen, kunnes TOP on saavutettu ja sykli toistuu. TOP on helposti muokattavissa, joten äänimerkin taajuutta on helppo muuttaa. Koska halutaan taajuus, joka on lähellä 1 kHz, TOP on asetettu arvoon 7. (Huomaa, että esiasetin olisi voinut olla 8 ja TOP 63. Sama tulos - valintasi.) Lähtötaajuus, fOC0A in: fOC0A = 1000, 000 /2 * 64 * (1+7) fOC0A = 977 Hz Sulje tarpeeksi! Tässä on koodi, jolla voit ladata lähtövertailurekisterin ja ajastinlaskurin rekisterin 0B. Katso varsinainen ohjelmakoodi ymmärtääksesi kuinka niitä käytetään. OCR0A = 7; // Aika -arvo TCCR0B = _BV (CS01) | _BV (CS00); // Valitse sisäinen kello & esiasteikko = 8 TCCR0B = 0; // mikään kellolähde ei sammuta ääntä Aika-/laskuritila -asetuksen asettaminen Viimeisenä yksityiskohtana määritämme haluamasi ajastin-/laskuritila asettamalla sopivat bitit ajastin/laskurin ohjausrekisteriin 0A. CTC -tila valitaan asettamalla bitti WGM01, kuten taulukon 40 sivulla 79 on kuvattu. Koska haluamme ulostulon vaihtavan jokaista sykliä, myös bitti COM0A0 on asetettava taulukossa 34 kuvatulla tavalla sivulla 77. Tässä on koodi: TCCR0A = _BV (COM0A0) | _BV (WGM01); // CTC -vaihtotila

Vaihe 7: Neljän kytkimen käyttö

Kun otamme käyttöön äänimerkin, laajennamme laitteistomme ja ohjelmistomme käsittelemään neljää kytkintä. Koska ajastinlaskurin 0A lähtö on portissa B, nasta 2, emme voi yksinkertaisesti kytkeä lisää kytkimiä peräkkäin porttiin B. Helppo ratkaisu olisi käyttää porttia D, mutta pidämme portin käytettävissä muille toiminnoille (ehkä askelmoottori). Kytketään siis lisäkytkimet PB3: een ja PB4: ään. Kytkimien lukeminen on enimmäkseen muuttumatonta. Maskin arvoksi muutetaan 0x1B (00011011 binaarinen), jotta se peittää bitin 2 sekä 5, 6 ja 7. Vielä yksi temppu käytetään 4-bittisen binääriluvun luomiseen. Siirrä bitit 3 ja 4 oikealle yhdelle bitille ja yhdistä ne bittien 0 ja 1 kanssa 4 -bittiseksi binääriluvuksi. Tämä on vakio C -syntaksi bittien siirtämiseen ja yhdistämiseen, mutta aloittelija ei ehkä tunne niitä hyvin. but1a = (but1 & 0x03) | ((but1 & 0x18) >> 1); // but1: llä on kytkimen lukema Toiminnassa ohjelma vilkkuu kahdesti ja piippaa kahdesti signaalin alustuksesta. Aina kun kytkimiä vaihdetaan, niiden edustama numero piippaa. Kun kytkimet eivät muutu, LED vilkkuu. Jos haluat suorittaa tämän koodin, luo uusi hakemisto (kutsu sitä piippaukseksi, jos haluat) ja lataa seuraava C -kooditiedosto ja makefile siihen. Nimeä Makefile2.txt vain Makefile -tiedostoksi. Käännä ohjelma WinAVR: n avulla ja lataa se Attiny2313 -laitteeseesi.

Vaihe 8: Kytkimen/kotelon rakenteen käyttäminen

Viimeinen vaihe on "vain ohjelmisto": Kuten luvattiin, toteutamme kytkimen/kotelon rakenteen. Vaikka tämä esimerkki näyttää vain kaksi vaihtoehtoista toimintoa, pitäisi olla hyvin selvää, kuinka tätä rakennetta käytetään valitsemaan yksi useista vaihtoehtoisista koodiosista. Toiminnassa tämä ohjelma valvoo kytkimiä ja jos muutoksia tapahtuu, se piippaa oikean numeron, jos se on pariton; se vilkkuu, jos numero on parillinen. Se ei tee mitään, ellei kytkin vaihda.

Jos haluat suorittaa tämän koodin, luo uusi hakemisto (kutsu sitä Switchiksi, jos haluat) ja lataa seuraava C -kooditiedosto ja makefile siihen. Nimeä Makefile3.txt vain Makefile -tiedostoksi. Käännä ohjelma WinAVR: n avulla ja lataa se Attiny2313 -laitteeseesi.

Vaihe 9: Johtopäätös

Johtopäätös
Johtopäätös

Joten se siitä! Nyt tiedät, miten voit hallita ohjelman suorittamista kytkimillä lukemalla ne ja valitsemalla toiminnon kytkinasetuksen perusteella. Osaat myös luoda äänimerkin ja olet oppinut myös virheenkorjausstrategian.

Jos haluat testata ymmärrystäsi, yritä muuttaa viimeistä ohjelmaa piippaamaan korkealla äänenvoimakkuudella, jos se on parillinen, piippaa matala ääni, jos se on pariton, ja vilkkumaan jatkuvasti, jos kytkimet eivät muutu. takaisin vianetsintäosioon saadaksesi apua.

Suositeltava: