Kazalo:

Ponovna uporaba zatiča vmesnika ATtiny84/85 SPI: 6 korakov
Ponovna uporaba zatiča vmesnika ATtiny84/85 SPI: 6 korakov

Video: Ponovna uporaba zatiča vmesnika ATtiny84/85 SPI: 6 korakov

Video: Ponovna uporaba zatiča vmesnika ATtiny84/85 SPI: 6 korakov
Video: Полный курс React Query за час | TanStack Query v4 для начинающих 2024, Julij
Anonim
Ponovna uporaba pin vmesnika ATtiny84/85 SPI
Ponovna uporaba pin vmesnika ATtiny84/85 SPI

Ta navodila so nadaljevanje navodil "ATtiny84/85 Odpravljanje napak v vezju s serijskim izhodom" in razširja konfiguracijo strojne in programske opreme, da bi rešila vprašanje ponovne uporabe aplikacijskih programov. Skupaj med tem in 1. delom, ki ga je mogoče poučiti, se obravnavajo/dokazujejo naslednje teme:

Tema ATtiny84 ATtiny85
Zaporedna komunikacija z uporabo razreda SoftwareSerial X X
Skupna raba zatičev med aplikacijo in prenosom X X
Pin Change prekinitev X
Zunanja prekinitev X
Spanje v načinu POWER_DOWN; zbudi se ob prekinitvi X
Rešitev za "večkrat definirano" napako vektorske povezave prekinitve, povezano s programsko opremo SoftwareSerial X
In-circuit spreminjanje, prenos, odpravljanje napak,… razvojni cikel za naprave ATtiny X X

Dodajanje strojne komponente V/I enemu nožicam, namenjenim programskemu vmesniku SPI, je včasih v redu, včasih ne. Na primer, dodajanje LED v MISO povzroči le utripanje LED med prenosom in je nato na voljo za aplikacijo. Vendar pa bo dodajanje piezo brenčalnika v MISO povzročilo grozljiv škripajoč zvok, ki mu bo sledil neuspešen prenos.

V tem navodilu je razloženo, kako z multiplekserjem 4x2: 1 "obnoviti" uporabo zatičev, dodeljenih signalom vmesnika MISO, MOSI in SCK vmesnika SPI, tako da jih zaščitite med prenosom. Ponovna uporaba zatiča RESET zahteva zamenjavo varovalke in tega pristopa ne zajema. Dvojna dodelitev nožic je dosežena z uporabo multiplekserja za preklapljanje med aplikacijskim in programskim vhodom, odvisno od tega, ali prenos poteka. Koda in sheme so vključeni tako za ATtiny84 kot za ATtiny85. Najprej je obravnavana konfiguracija ATiny84, saj ima dva V/I vhoda in se lahko uporabi za ponazoritev nekaterih dodatnih težav/rešitev. Po drobni razpravi 84 se za ATtiny85 razpravljajo o istih scenarijih.

1. korak: Potrebna strojna oprema

Slika
Slika

Večina zahtevane strojne opreme je bila navedena v prvem delu navodil, zato je spodaj navedena le nova strojna oprema.

Ime Možen vir Kako uporabljeno
4x2: 1 Multiplekser Mouser Vsebuje štiri 2-vhodna; 1-izhodna stikala, ki so mehanizem za skupno rabo signalov vmesnika SPI in aplikacijskih V/I.
Stikalo SPST Vsaka vrsta stikala (trenutna ali zapahnjena) bo delovala. Stikalo se uporablja za ponazoritev deljenja pinov za vnos aplikacije.
10K upor Spustni upor za stikalo SPST, da se izognete plavajočemu vhodu
Slika
Slika
Slika
Slika

Multiplekser je ključ do izolacije uporabe prenosa pin od uporabe aplikacije. Celotna funkcionalnost multipleksorja 4x2: 1 je dokaj enostavna, sestavljena iz 2 krmilnih signalov in 4 enako delujočih stikal. Obnašanje vsakega zatiča multiplekserja je obravnavano spodaj:

Pin Ime Funkcija
15 G Kot je razvidno iz tabele resničnosti, multiplekser deluje le, če je zatič za omogočanje G nizek. Ker nikoli ne želimo popolnoma onemogočiti multiplekserja, bo pin 15 priključen neposredno na ozemljitev.
2-4; 5-7; 9-11;12-14 A (vhod), B (vhod), Y (izhod) Obstajajo štirje 2-vhodni; 1-izhodna stikala, pri čemer je vsaka skupina 3 zatičev zaporedno oštevilčena po vrstnem redu A (vhod), B (vhod), Y (izhod) npr. za stikalo 1; nožica 2 = 1A; nožica 3 = 1B; pin 4 = 1Y.
1 Izberite Ko je izbira nizka, je stikalni vhod A priključen na pripadajoči izhodni zatič stikala, Y. Ko je izbira visoka, se namesto tega vhod stikala B poveže z izhodom. Stikala hkrati krmili signal Select in delujejo enako.
8 GND ozemljitev IC multiplekserja
16 VCC napajanje IC multiplekserja

2. korak: Pregled preskusnih primerov

Slika
Slika
Slika
Slika

Dva scenarija za ponovno uporabo nožic temeljita na tem, ali je pin vnos ali izhod aplikacije. Postopek ravnanja s katerim koli vnosom je vedno enak; tudi postopek za izhode aplikacij je enak ne glede na komponento strojne opreme. Kljub temu je razlaga lažja in upajmo jasnejša, če navedete posebne primere. Minimalistične postavitve za oba primera so prikazane zgoraj. Za podrobnejše nastavitve kasneje povezave postanejo malo gnezdo veveric, zato bi bilo morda koristno, da se vrnete na te čistejše diagrame.

RESET je popolna izbira za signal multiplekserja Select, saj je med prenosom nizek, po koncu prenosa pa se vrne visoko. Upoštevajte, da se lahko v vsakem primeru uporabi katero koli stikalo multiplekserja, saj se vsa stikala obnašajo enako. Prav tako noben od primerov ni "realen"; namesto tega so bili izbrani kot najbolj preprost način za ponazoritev izolacijskih tehnik

  1. Izhodni ohišje: LED izhod iz ATtiny84 pin 4 (SCK) je izoliran s stikalom multiplekserja 2

    • priključek multipleksorja 2A priključite na ozemljitev
    • priključek 2B multipleksorja priključite na pin 4 ATtiny85
    • priključite izhod 2Y na LED anodo

      • Pričakovani rezultati:

        • Med prenosom je LED izklopljen, saj je priključen na 2A, ozemljen
        • LED je priključen na izhodni pin 4 aplikacije po prenosu prek 2B in začne utripati
  2. Vhodni primer: Vhod stikala SPST na ATtiny84 pin 6 (MOSI) je izoliran s stikalom multiplekserja 3

    • Vodilna žica MOSI iz glave programatorja AVR se premakne na 3A
    • stikalni vhod 3B je priključen na izhod SPST
    • izhod 3Y je priključen na ATtiny84 pin 6

      • 3A, MOSI, je med prenosom priključen na pin 6
      • 3B, izhod SPST, je po prenosu priključen na pin 6

Primer 1 je uspešen, če LED ne utripa med prenosom programa in nato vsaki dve sekundi po nalaganju utripa po pričakovanjih pod nadzorom programa. Brez izolacije bi LED med prenosom utripala, saj je neposredno povezana s signalom SCK, ki spremeni stanje v sprejem/prenos podatkov ure.

Primer 2 je uspešen, če se signal MOSI med prenosom posreduje na ATtiny84, kar pomeni, da prenos ne uspe, in se LED odzove na vklop/izklop SPST po prenosu. Primer 2 preprečuje eno malo verjetno napako pri prenosu. Brez izolacije bo stikalo SPST povzročilo napako, če 1) uporabite stikalo z zapahom in 2) stikalo med prenosom pustite v položaju za vklop. Ko je stikalo ločeno od multiplekserja, pod nobenim pogojem ne more povzročiti napake pri prenosu. Malce odsek, a tolažba za nas starejše.

Ena od posledic uporabe multiplekserja je, da strojne komponente ni več mogoče priključiti neposredno na V/I pin mikrokrmilnika. To je nekoliko neprijetno, vendar omogoča, da komponenta med preskusom ostane na krovu skupaj z drugo strojno opremo aplikacije in se lahko po končanem preskusu premakne nazaj na ustrezno mesto.

Korak 3: ATtiny84 Primer 1 - Izolirajte izhod aplikacije

Slika
Slika

Ta korak opisuje nastavitev za skupno rabo izhodnega zatiča aplikacije s signalom za prenos. Uporabljeni primer je LED, pritrjena na pin 4 (SCK). Uporaba obstoječe LED kot primer omogoča poudarek na dodajanju multiplekserja v strojno in programsko okolje prvega dela.

  • Strojna oprema
    • Dodajte multiplekser na mizo na relativni lokaciji, prikazani na zgornjem diagramu frcanja. Multiplekser je nameščen proti sredini, da omogoči prostor za stikalo SPST, potrebno v primeru 2.
    • Razširite signal RESET na multiplekser z dodajanjem vodilne žice (predlagajte rumeno) od vtiča 11 ATtiny84 na pin 1 multiplekserja.
    • Preostala nastavitev strojne opreme je podana v 2. koraku

      • pin 2A multiplekserja priključite neposredno na ozemljitev
      • priključite pin 2B na ATtiny84 pin 4
      • priključite izhod 2Y na LED anodo

        • Pričakovani rezultati:

          • med prenosom je 2Y priključen na ozemljitev (2A), zato LED ne sveti
          • Po prenosu je 2Y priključen na ATtiny84 pin 4 - nadzor LED z aplikacijo
  • Programska oprema
    • Koda 1. dela se ponovno uporabi; na voljo v prvem delu in ni podvojeno tukaj
    • Naložite in prevedite program 1. dela v Arduino IDE
    • Priključite programer Tiny AVR v vrata USB na računalniku
    • Priključite kabel Adafruit USB v zaporedni kabel v druga vrata USB

      • Ustvarjena so vrata COM, ki so samodejno na voljo na seznamu vrat IDE
      • Zaženite okno COM
    • Prenesite prevedeno kodo v ATtiny84

Rezultati aplikacijskega programa so enaki kot pri prvem delu, saj je bila edina sprememba premik LED na "zaščiteno" mesto: LED utripa v presledkih 2 sekund; serijski izhod je enak. Edina razlika, ki bi se morala pojaviti, je, da LED med prenosom ne utripa več, saj je v tem času povezana z maso preko zatiča 2A multiplekserja.

Slika
Slika

Korak 4: Primer ATtiny84 2 - Izolirajte vnos aplikacije

Slika
Slika

Ta korak temelji na nastavitvi za prejšnji primer izolacije izhoda. Strojne spremembe vključujejo priključitev stikala SPST na priključek 6 ATINy84 (MOSI) prek multiplekserja. Tako so spremembe strojne opreme minimalne, vendar obstaja več programskih sprememb, ki stikalu SPST omogočajo upravljanje LED z uporabo prekinitve menjave nožic. Posodobljena koda je vključena na dnu tega razdelka. Kodo je treba kopirati v Arduino IDE; predlagajte, da ga shranite pod imenom Multiplexer_Input. (Opravičujem se za dolžino tega odseka, vendar je to srž namena poučevalca in menim, da se bolje bere kot monolit in ne kot vstavljanje umetnih prelomov.)

Nadgradnja Lokacija Namen
vključujejo "hacked" razred SoftwareSerial vključite razdelek Sedaj nadzoruje LED s stikalom SPST prek prekinitve menjave zatiča. Razred SoftwareSerial je treba spremeniti, ker sicer dodeli VSE vektorje prekinitve menjave nožic. To povzroči napako povezave "več definicij" za vektor (vrata 0), dodeljen stikalu SPST. Vdrto različico SoftwareSerial je treba postaviti v isti imenik kot program, tako da vpliva le na to aplikacijo.
Definicija vhodnega zatiča SPST vključi/razdelek definicije dodelitev vhoda SPST pin naprave. Pin je odvisen od naprave, zato je dodan v razdelke #ifdef ATtiny8x.
Način vhoda pin SPST nastavitvena funkcija Zatič SPST je konfiguriran kot VHOD
Konfigurirajte prekinitev pin SPST nastavitvena funkcija Vektor prekinitve je dodeljen vhodnemu zatiču SPST, tako da sprememba stanja stikala povzroči prekinitev. Registri konfiguracije in vrsta prekinitve so odvisni od naprave. Da bi bila koda čim bolj enostavna, se razlike obravnavajo v #if definiranem razdelku
Nastavite celotno serijsko sporočilo nastavitvena funkcija Sporočilo o celotnem zaporednem izhodu za nastavitev se spremeni tako, da odraža aplikacijo za vnos multiplekserja
Dodajte funkcijo ISR stikala SPST kodni odsek Doda se ISR za prekinitev menjave pin SPST. Koda je običajna, vendar je uporabljeni vektor specifičen za napravo in je opredeljen v odsekih, odvisnih od naprave, na vrhu programa. Za preverjanje, ali je ISR aktiviran, se stanje LED spremeni. Čeprav je v resnični aplikaciji ne-ne, se generira serijsko izhodno sporočilo, ki odraža novo stanje LED.
Spremenite obdelavo zanke funkcija zanke ISR zdaj nadzoruje vklop in izklop LED, tako da se funkcionalnost odstrani iz rutine zanke. Klic rutine spanja je dodan za ATtiny84 kot nekakšen "dodatek". Za to aplikacijo spanje ATtiny85 ne deluje; morda zaradi motenj razreda Serijska programska oprema, saj deluje z odstranjeno programsko opremo SoftwareSerial.
Dodajte rutino spanja kodni odsek Funkcija spanja ni potrebna za dokazovanje uporabe multiplekserja. Samo dodano, ker bi običajno radi počakali na vnos v načinu POWER_DOWN, da prihranimo energijo, namesto da bi še naprej tekali skozi programsko zanko, ne da bi naredili nič, dokler ne pride do vnosa.

Spremenite kodo razreda SoftwareSerial

Razred SoftwareSerial je treba spremeniti, tako da ne zaskoči vseh vrat za prekinitev pri menjavi zatičev. Koda razreda SoftwareSerial se nahaja na naslovu

C: / Program Files (x86) Arduino / hardware / arduino / avr / libraries / SoftwareSerial / src

Na PCINT0_vect poiščite v SoftwareSerial.cpp, da poiščete začetno mesto za spremembe kode. Dodajte naslednjo kodo tik pred obstoječo izjavo #if definirano (PCINT0_vect).

#if definirano (_ AVR_ATtiny84_)

#define MYPORT PCINT1_vect #elif defined (_ AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR (MYPORT) {SoftwareSerial:: handle_interrupt (); }

Zdaj komentirajte obstoječi blok kode, ki dodeljuje vektorje prekinitve vrat, kot je prikazano spodaj (samo dodajte simbole komentarjev začetnega in končnega bloka / * in * /):

/*

#če je definirano (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if definiran (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if definiran (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if definiran (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #endif */

Konfigurirajte strojno opremo

Stikalo SPST je pritrjeno na ATtiny84 pin 6 (MOSI), kot je opisano v 2. koraku. Postopek je zaradi udobja tukaj podvojen.

  • vhod stikala 3A priključite na kabel MOSI glave Tiny AVR programatorja
  • priključite 3B na izhodni zatič stikala SPST ON
  • priključite 3Y na ATtiny84 pin 6

    • REZULTATI:

      • 3A, MOSI, bo med prenosom povezan z ATtiny84 pin 6
      • 3B, izhod SPST, bo po prenosu nastavljen na pin 6

Zaženite program

Pred zagonom stikalo SPST postavite v izklopljen položaj. V nasprotnem primeru se LED prižge, ko je stikalo izklopljeno in obratno. Sledite postopku v 3. koraku, da naložite, prevedete in naložite aplikacijski vnosni program z uporabo Arduino IDE. Kot prej LED med prenosom ne sme utripati, zato bo edini pokazatelj, da je program zagnan in deluje, serijsko sporočilo na koncu nastavitvene rutine: SETUP Complete - Primer vnosa

Na tej točki program čaka na vnos iz stikala SPST. Če stikalo postavite v položaj ON, se LED prižge; vrnitev v položaj za izklop izključi LED. Izhodna sporočila potrjujejo, da je bil priklican ISR (ISR: Led HIGH, ISR: Led LOW). Upoštevajte, da je vrstni red serijskih sporočil GO GO SLEEP najprej čaka na spremembo stanja stikala; ko dobite stikalni vhod, se prikliče ISR, preklopi LED in dokumentira spremembo; nato se obdelava po klicu mirovanja prevzame, saj prekinitev prebudi procesor.

Slika
Slika

PROGRAM ZA TO NAVODLJIVO:

//************************************************************************

// 2. DEL: Skupna raba zatičkov za aplikacijo/prenos //. Spremeni kodo 1. dela za podporo ponovne uporabe zatičev //, dodeljenih programskemu vmesniku SPI //. "Skupna" koda za ATtiny85 in ATtiny84 // ************************************** ******************************** #include "SoftwareSerial.h" // Spremenjen Arduino SoftwareSerial class #include // While koda za obdelavo je pogosta, uporabljeni zatiči so specifični za napravo #če je definirano (_ AVR_ATtiny84_) || definirano (_ AVR_ATtiny84A_) #define ledPin 4 // Preklopljeno za vklop/izklop povezave Led #define rxPin 9 // Pin za serijski sprejem #define txPin 10 // Pin za serijski prenos #define SpstPin 6 // Vnos iz stikala SPST (MOSI) #define ISR_VECT PCINT0_vect // Stikalo SPST Pin spreminjanje prekinitvenega vektorja #elif definirano (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Vnos iz stikala SPST (INT0_VEZE) #define // stikalo SPST vektor prekinitve menjave pinov #else #error Ta projekt podpira samo ATiny84 in ATtiny85 #endif // Ustvari primerek razreda Serial Software, ki določa, katere // zatiče naprave je treba uporabiti za sprejem in prenos SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Inicializirajte procesne vire // ------------------- -------------------------------------------------- --- void setup () {mySerial.begin (9600); // Zakasnitev serijske obdelave (2000); // Dajte čas vmesnika Serial Com za dokončanje zagona. // drugače, prvi izhod verjetno manjka ali je popačen pinMode (ledPin, OUTPUT); // Konfiguriraj led pin za OUTPUT pinMode (SpstPin, INPUT); // Konfigurirajte zatič stikala SPST kot INPUT #if definirano (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // nastavite prekinitev menjave zatičev za upravljanje vhoda stikala na pin 6 (MOSI) GIMSK | = (1 <

5. korak: ATtiny85 Primer 1 - Izolirajte izhod aplikacije

Slika
Slika

Namesto izdelave podvojene strojne opreme za ATtiny85 je verjetno lažje začeti s končano konfiguracijo za ATtiny84 iz 4. koraka in zamenjati čip tiny84 s tiny85. Vsa potrebna strojna oprema je potem že na voljo. Če uporabljate ta pristop, poiščite tiny85 tako, da se nožici 3 in 4 poravnata s serijskim kablom tx in sprejmeta žice. Potem je treba samo premestiti vodilne žice vmesnika SPI, da se ujemajo z zahtevanimi lokacijami za ATtiny85.

Če začnete od začetka, sledite splošnim korakom iz 3. koraka in zgornjemu diagramu frcanja. Koda je enaka kot za ATtiny84 v 3. koraku z enakimi pričakovanimi rezultati - med prenosom ni utripanja; med delovanjem LED utripa v presledkih 2 sekund in sporočila serijskega izhoda sledijo stanju LED.

Slika
Slika

Korak 6: ATtiny85 Primer 2 - Izolirajte vnos aplikacije

Slika
Slika

Za nastavitev strojne opreme začnite s konfiguracijo iz 5. koraka in dodajte stikalo SPST, kot je prikazano na zgornjem diagramu frcanja. Pravzaprav sem uporabil kratko stikalo za različico tiny85 in to nekoliko olajša preverjanje. Upoštevajte, da je izhod stikala zasukan za 180 stopinj glede na konfiguracijo ATtiny84. Ta sprememba olajša usmerjanje priključnih žic, saj so vsi 3 signali SPI na isti strani za ATtiny85.

Uporabite isti program kot za ATtiny84 Korak 4. Pričakujemo enake splošne rezultate - LED se spremeni, ko je stikalo SPST vklopljeno/izklopljeno, sporočila o serijskem izhodu pa dokumentirajo spremembe. Sporočila GO TO SLEEP manjkajo, ker se funkcija spanja za ATtiny85 ne pokliče. Čeprav se uporablja isti program, obstajajo pomembne razlike pri izvajanju zaradi dejstva, da ima ATtiny85 samo en register vrat (vrata 0):

  1. SoftwareSerial zdaj za serijsko komunikacijo dodeli prekinitev za spremembo vhoda 0 vhodov (spomnite se, da smo lahko uporabili vrata 1 za ATtiny84.)
  2. Prekinitev stikala SPST je treba izvesti z zunanjim prekinitvijo 0 (INT0), saj prekinitev enega in edinega zatiča dodeli SoftwareSerial. To ponazarja dejstvo, da so prekinitve pri menjavi pinov in zunanje prekinitve logično neodvisne in jih je mogoče uporabiti v istem registru vrat.
  3. Z uporabo spremenjene različice SoftwareSerial se nič ne pridobi - obstajajo samo ena vrata in razred SoftwareSerial ga bo vzel. Vendar je bil spremenjeni razred še vedno uporabljen samo zato, da bi se izognili spremembam, ki niso neposredno povezane s ciljem tega koraka.

Priporočena: