Kazalo:

Bralna stikala z ATtiny2313: 9 koraki
Bralna stikala z ATtiny2313: 9 koraki

Video: Bralna stikala z ATtiny2313: 9 koraki

Video: Bralna stikala z ATtiny2313: 9 koraki
Video: LDmicro 3: PIC16F628A и Arduino Nano (программирование лестничной логики ПЛК микроконтроллера с помощью LDmicro) 2024, Julij
Anonim
Bralna stikala z ATtiny2313
Bralna stikala z ATtiny2313

Obstaja več navodil, ki obravnavajo izhode iz ATtiny2313 in podobnih naprav AVR. Na primer, https://www.instructables.com/id/Ghetto-Programming%3a-Getting-started-with-AVR-micro/, https://www.instructables.com/id/Drive-a-Stepper- Motor z mikroprocesorjem AVR/. Ko sem delal na najnovejšem iz The Real Elliota, ki je pokazal, kako krmiliti koračne motorje, sem ugotovil, da bi bilo zelo koristno, če bi lahko zagnali nadomestne odseke kode v istem programu, tako da mi ni bilo treba reprogramirati vsakega ATtiny2313 čas, ko sem želel preizkusiti rahlo spremembo kode (na primer polovični korak ali zagon koraka v obratni smeri). Medtem ko je preprosto pisati kodo z uporabo switch/case stavka, ki omogoča izbiro nadomestnih različic, je potreben neki način izbire primera. To pomeni, da je treba za nadzor ohišja prebrati nekakšno vhodno napravo. Na srečo ima ATtiny2313 veliko V/I zatičev in je dobro zasnovan za branje vhodov s stikal. Ta Instructable bo pokazal, kako brati vnose in sprejemati odločitve glede na njihovo stanje. Ker bi bilo samo to precej dolgočasno instrukcijsko, bom razložil preprost način uporabe časovnika/števca ATtiny2313 za pogon majhnega zvočnika kot piska. Na voljo bo tudi majhna digresija o preprostih tehnikah odpravljanja napak.

Korak: Vhodna naprava

Vhodna naprava
Vhodna naprava
Vhodna naprava
Vhodna naprava

Ta Instructable temelji na odličnem delu The Real Elliot in uporablja razvojni sistem ATtiny2313 Ghetto, ki ga opisuje. Podatkovni list ATtiny2313 podjetja Atmel je najboljša referenca za vse funkcije, vendar ni nujno, da je berljiv. https://www.atmel.com/dyn/products/datasheets.asp?family_id=607 (Link vsebuje vse podatkovne liste AVR, poiščite 2313.) Na sliki je prikazan preprost niz vhodnih stikal. To je preprosto paket štirih stikal za vklop/izklop; znana tudi kot enopolna stikala z enim metom (SPST). Običajno je ena povezava ali pol vsakega stikala vezana na ozemljitev, druga pa visoko vlečena skozi upor za omejevanje toka (10 K ali več). Na pol z uporom je priključen vhod mikrokrmilnika. Če je stikalo odprto, bo mikrokrmilnik prebral vhod kot HI. Če je stikalo zaprto, bo mikrokrmilnik prebral vhodni LO. Za podrobnosti glejte shemo. ATtiny2313 poenostavi stvari, tako da na vhodno/izhodnih zatičih nudi programirljive vlečne upore, ko so konfigurirani kot vhodi. To pomeni, da imajo lahko stikala preprosto en pol, vezan na ozemljitev (LO), drugi pol pa priključen na vhod procesorja. Prvi primer prikazuje samo dve stikali. Stikala se preberejo in konfigurirajo z naslednjo kodo. Konfigurirajte stikala kot vhode: (Koda ni potrebna; to je privzeto.) Vklopite vlečne upore: PORTB = _BV (PB0) | _BV (PB1); Preberite vhode: but1 = ~ PINB & 0x03; Upoštevajte uporabo inverzije in maskiranja, da dobite pravilno vrednost.

2. korak: Utripajoče luči za signal

Ti dve stikali bomo uporabili za utripanje LED, ki ga je mogoče programirati večkrat. LED diode, ki jih bomo uporabili, bodo utripajoče luči, ki jih je slavil The Real Elliot. Stikala 1 in 2 bosta obravnavani kot dve binarni števki, zato lahko kombinacija predstavlja številke 0, 1, 2 in 3. Naš program bo prebral dve stikali in ustrezno številokrat utripal LED, vendar le, če je stikalo nastavitve so se spremenile. Stikala se odklopijo 500 milisekund (niso optimizirana). Algoritem odpovedi je precej preprost. Stikala se preberejo in odčitavanje se zabeleži. Če se razlikuje od vrednosti oldBut (zadnja shranjena vrednost), se program odloži za 500 milisekund in stikala se ponovno preberejo. Če je vrednost enaka kot prej prebrana, se bo vrednost oldBut posodobila in LED bo utripala tolikokrat, kot to nakazuje binarna vrednost obeh stikal. Upoštevajte inverzijo vrednosti, saj stikalo, ki je "vklopljeno", bere LO. Stikala bodo neprestano skenirana za nadaljnje spremembe. Prosimo, preberite prejšnje Instructables podjetja The Real Elliot, če želite izvedeti več o blinkenlights. Oglejte si ta https://www.ganssle.com/debouncing.pdf, če želite izvedeti več o odklopu stikal. Tukaj je koda ATtiny2313 za ta primer. Med delovanjem bo ta program dvakrat utripal LED na PB4 (fizični pin 8), da pokaže, da je inicializiran. Nato bo prebral stikala ena in dva ter enkrat do trikrat utripal, odvisno od nastavitve stikala, kadar koli jih spremenite. Ko se stikala ne spreminjajo, bo LED počasi utripala. Če želite zagnati to kodo, ustvarite nov imenik (če želite, ga poimenujte "Basic") in vanj naložite naslednjo datoteko kode C in datoteko make. Preimenujte Makefile1.txt v samo Makefile. S programom WinAVR prevedite program in ga naložite v svoj ATtiny2313.

3. korak: Manjša odmik pri odpravljanju napak

Če ste kot jaz (in vsak drugi programer na svetu), ste verjetno doživeli čase, ko koda brez napak, ki ste jo skrbno vnesli in sestavili, ne naredi tega, kar pričakujete. Mogoče preprosto ne naredi ničesar! Kaj je torej problem? Kako boste izvedeli? Na srečo obstaja več pristopov k temu, da stvari delujejo. (Pridobite to knjigo za odlično obravnavo teme odpravljanja napak. Http://www.debuggingrules.com/) Rad bi ponudil nekaj preprostih predlogov, ki se nanašajo na temo odpravljanja napak v aplikacijah mikrokrmilnikov. Prvi korak je, da nadgradite kaj veš. Če ste enkrat prižgali blinkenlight, ga znova uporabite, da vidite, kje ste v programu. Všeč mi je, da LED dvakrat utripa, da označi začetek programa. Kodo lahko vnesete tako, da to storite na začetku programa. Ko veste, da s strojno opremo ni nič narobe, ustvarite funkcijo za utripanje. Tukaj je funkcija, ki jo uporabljam./* -------------------------------------------- ------------------------------ ** blinkEm-funkcijo utripanja LED z uporabo PD4 ** PD4 je treba konfigurirati kot izhod. ** ------------------------------------------------ ---------------------*/void blinkEm (uint8_t count) {while (count> 0) {PORTD = _BV (PD4); _dey_ms (1000); PORTD = ~ _BV (PD4); _dey_ms (1000); štetje--; }} Zdaj je možno to funkcijo uporabljati na različnih točkah kode kot signal, da se je koda do zdaj izvršila. Če veste, da se koda izvaja, pomeni, da lahko natančno preučite vsak razdelek, ki se je izvajal, vendar ni naredil, kar ste pričakovali, da bi našli napake. Spreminjanje ene stvari naenkrat je ključna tehnika za odpravljanje napak (opisano v zgornji referenci). Ta klasična metoda deluje skupaj z "deli in osvoji": otroški koraki za postopno dodajanje funkcionalnosti. Morda se zdi to počasen pristop, vendar ni tako počasi, kot bi poskušali odpraviti napake na velikem delu nedelujoče kode hkrati.

4. korak: Več napak

Velikokrat želimo preveriti del kode tako, da preskočimo večino vrstic v njem, nato pa jih omogočimo eno za drugo, ko preverimo, ali vsaka deluje. Običajno to naredimo tako, da "komentiramo" vrstice, ki jih želimo preskočiti. Razširitev te tehnike je izrezati in prilepiti blok kode, komentirati izvirnik (da ga ne izgubimo) in odsekati kopijo. C ima štiri preproste načine za komentiranje vrstic. Če postavite "//" pred vrstico, to vrstico komentirate. Z zapiranjem ene ali več vrstic v "/*" in "*/" boste komentirali celoten odsek. Za učinkovito delovanje te metode v kodnem bloku ne sme biti drugega "*/" (razen končnega). Učinkovita disciplina je torej uporaba // za komentarje znotraj blokov kode in konstrukcija / * * / za bloke komentarjev in komentiranje odsekov kode. Komentar postavite na "#if 0". in zaključite razdelek z "#endif". Več selektivnega nadzora je možno z uporabo "#ifdef (identifikator)" na začetku bloka in "#endif" na koncu. Če želite, da se blok sestavi, uporabite "#define (identifier)" prej v programu. Upoštevajte, da so narekovaji samo za poudarek in niso vključeni. Združevanje teh tehnik bi moralo biti koristen pristop k odpravljanju napak v programih ATtiny2313. Ta orodja se vam bodo morda zdela uporabna, ko nadaljujemo skozi ta navodila.

5. korak: Uporaba časovnika/števca 0 za piske

Uporaba časovnika/števca 0 za piske
Uporaba časovnika/števca 0 za piske

ATtiny2313 ima dva močna vira časovnika/števca: enega 8-bitnega in enega 16-bitnega. Ti so lahko konfigurirani kot frekvenčni generatorji, krmilniki za modulacijo s spremenljivo širino impulza in izhodni primerjalni registri. Celotna funkcionalnost teh je opisana na 49 straneh podatkovnega lista. Vendar bomo uporabili preprost primer. Uporabljal se bo le Timer/Counter 0 (8-bitni), ki se bo uporabljal samo kot generator frekvenc. Frekvenca bo preusmerjena na majhen zvočnik, da se odda pisk. Časovnik/števec 0 je v celoti opisan na straneh 66 do 83 podatkovnega lista ATtiny2313. Natančno branje tega gradiva vam bo omogočilo popolno razumevanje časa/števca 0. Na srečo je za ustvarjanje želenega zvočnega signala dovolj preprost način, Clear Timer on Compare (CTC).

Za način, ki ga bomo uporabili, je delovanje časovnika/števca neposredno. Ko je izbran signal ure, se števec zažene pri nič in poveča vsak impulz ure. Ko vrednost števca doseže vrednost v registru primerjave izhodov (TOP), se števec ponastavi na nič in štetje se začne znova. Izhodni bit, povezan s časovnikom/števcem, se preklopi, da proizvede kvadratni val. To neposredno poganja zvočni pretvornik za piskanje. Majhen zvočni pretvornik TDK oddaja pisk. Primerna enota je Digikey 445-2530-ND, TDK SD1209T3-A1 (uporabil sem zgodnjo različico tega). To je 3 -voltna različica; pričakovano bo delovala tudi 5 -voltna različica. To vozim neposredno z izhodnih vrat Attiny2313 in zdi se, da deluje v redu. Sparkfun ima podobno napravo.

6. korak: Konfiguriranje časovnika/števca 0

Način CTC lahko uporabite za preklapljanje izhoda OC0A na Pin 2, vrata B (fizični pin 14). Če želite omogočiti izhod na tem zatiču, mora biti DDRB ustrezno nastavljen. Koda C za to je tako kot nastavitev izhoda za utripajočo luč. DDRB = _BV (PB2); // Vrata B2 so izhodni. Naslednji korak je oddajanje urnega signala in nalaganje izhodnega primerjalnega registra za izdelavo valovne oblike kot frekvence. Enačba za nastalo frekvenco je podana v podatkovnem listu (stran 72). Spodaj bodo opisani izrazi v enačbi. Tukaj je enačba: fOC0A = fclk_I/O/2*N*(1+OCR0A) Kjer je fOC0A: = izhodna frekvenca fclk_I/O: = frekvenca urnega vira N: = faktor predčasovnika ure OCR0A: = vrednost v izhodnem primerjalnem registru za Timer/ Števec 0A. Frekvenca vira ure, fclk_I/OTo je frekvenca sistemske ure. Privzeta vrednost je 1MHz. Bitovi CS00, CS01 in CS02 TCCR0B nadzorujejo to izbiro. Ker ti biti izberejo tudi vrednost N, je opisano v nadaljevanju. Vrednost predrazmerja, NN je vrednost, ki se uporablja za deljenje ali predstopiranje sistemske ure. Bitovi CS00, CS01 in CS02 TCCR0B nadzorujejo to izbiro. Tabela 41 na strani 81 podatkovnega lista ATtiny2313 opisuje kombinacije. Ker je zaželena frekvenca blizu 1 kHz, se nastavita bita CS00 in CS01 TCCR0B. Upoštevajte, da nastavitev vseh treh bitov na 0, s čimer ne izberete nobenega vira ure, učinkovito ustavi izhod. To je metoda, ki se bo uporabila za zagon in ustavitev piska. Vrednost TOP, OCR0ATa vrednost je TOP vrednost za števec, ki je naložen v register za primerjavo izhodov za časovnik/števec 0A. Ko je ta vrednost dosežena, se števec ponastavi na nič in štetje se bo začelo znova, dokler ne dosežete TOP in se cikel ne ponovi. TOP se zlahka spremeni, zato je frekvenco piska enostavno spremeniti. Ker je zaželena frekvenca blizu 1 kHz, je TOP nastavljen na 7. (Upoštevajte, da je bil predkaler nastavljen na 8, TOP pa na 63. Isti rezultat - vaša izbira.) Izhodna frekvenca, fOC0AUporaba enačbe za izračun rezultatov izhodne frekvence v: fOC0A = 1, 000, 000 /2 * 64 * (1+7) fOC0A = 977Hz Dovolj blizu! Tu je koda za nalaganje registra primerjave izhodov in registra števca časovnika 0B. Če želite razumeti, kako se uporabljajo, si oglejte dejansko programsko kodo. OCR0A = 7; // Časovna vrednost TCCR0B = _BV (CS01) | _BV (CS00); // Izberi notranjo uro & predrazmer = 8 TCCR0B = 0; // noben vir ure ne izklopi tona Nastavitev načina časa/števca Kot zadnjo podrobnost bomo določili želeni način časovnika/števca z nastavitvijo ustreznih bitov v registru časovnika/števca 0A. Način CTC je izbran z nastavitvijo bita WGM01, kot je opisano v tabeli 40, stran 79 podatkovnega lista. Ker želimo, da izhod preklaplja vsak cikel, je treba nastaviti bit COM0A0, kot je opisano v tabeli 34 na strani 77. Tu je koda: TCCR0A = _BV (COM0A0) | _BV (WGM01); // Način preklopa CTC

7. korak: Uporaba štirih stikal

Ko izvajamo piskalec, razširimo strojno in programsko opremo na štiri stikala. Ker je izhod števca časovnika 0A na vratih B, pin 2, ne moremo preprosto priključiti več stikal zaporedno na vrata B. Enostavna rešitev bi bila uporaba vrat D, vendar pustimo ta vrata na voljo za druge funkcije (morda koračni motor). Priključimo torej dodatna stikala na PB3 in PB4. Branje stikal je večinoma nespremenjeno. Vrednost maske se spremeni v 0x1B (00011011 binarno), da se prikrije bit 2 skupaj s 5, 6 in 7. Še en trik se uporabi za ustvarjanje 4-bitnega binarnega števila. Premaknite bita 3 in 4 v desno za en bit ter ju združite z bitoma 0 in 1 v 4 -bitno binarno število. To je standardna sintaksa C za premikanje in združevanje bitov, vendar začetnikom morda ni dobro znana. but1a = (but1 & 0x03) | ((but1 & 0x18) >> 1); // but1 ima stikalo za branje Med delovanjem bo program dvakrat utripal in dvakrat zapiskal, da signalizira inicializacijo. Vsakič, ko se stikala spremenijo, se zapiska številka, ki jo predstavljajo. Ko se stikala ne spremenijo, bo LED utripala. Če želite zagnati to kodo, ustvarite nov imenik (po želji ga poimenujte Beep) in vanj naložite naslednjo datoteko kode C in datoteko make. Preimenujte Makefile2.txt v samo Makefile. S programom WinAVR prevedite program in ga naložite v svoj Attiny2313.

8. korak: Uporaba stikala/ohišja Construct

Zadnji korak je "samo programska oprema": Kot smo obljubili, bomo izvedli konstrukcijo stikala/ohišja. Čeprav ta primer prikazuje samo dve nadomestni dejanji, bi moralo biti zelo jasno, kako s to konstrukcijo izbrati enega od več nadomestnih kodnih razdelkov. Med delovanjem ta program spremlja stikala in če pride do spremembe, bo zapisal ustrezno številko, če je liha; utripal bo, če je številka soda. Ne naredi ničesar, razen če se stikalo spremeni.

Če želite zagnati to kodo, ustvarite nov imenik (če želite, ga pokličite Switch) in vanj naložite naslednjo datoteko kode C in datoteko make. Preimenujte Makefile3.txt v samo Makefile. S programom WinAVR prevedite program in ga naložite v svoj Attiny2313.

9. korak: Zaključek

Zaključek
Zaključek

Torej to je to! Zdaj veste, kako uporabljati stikala za nadzor izvajanja programa, tako da jih preberete in izberete dejanje glede na nastavitev stikala. Prav tako veste, kako ustvariti pisk in se tudi naučili nekaj strategije odpravljanja napak.

Če želite preizkusiti svoje razumevanje, poskusite zadnji program spremeniti tako, da bo piskal z visokim tonom, če je slišen, če je liho, piskajte z nizkim tonom, in če ne pride do spremembe stikal, utripajte neprekinjeno z LED. nazaj v razdelek o odpravljanju napak za pomoč.

Priporočena: