Sisällysluettelo:

ATtiny84/85 SPI -liitäntätapin uudelleenkäyttö: 6 vaihetta
ATtiny84/85 SPI -liitäntätapin uudelleenkäyttö: 6 vaihetta

Video: ATtiny84/85 SPI -liitäntätapin uudelleenkäyttö: 6 vaihetta

Video: ATtiny84/85 SPI -liitäntätapin uudelleenkäyttö: 6 vaihetta
Video: Programming ATtiny85/84 with Arduino Uno (ATTinyCore) 2024, Heinäkuu
Anonim
ATtiny84/85 SPI -liitäntätapin uudelleenkäyttö
ATtiny84/85 SPI -liitäntätapin uudelleenkäyttö

Tämä ohje on jatkoa "ATtiny84/85-piirin sisäinen virheenkorjaus sarjaliitännällä" -ohjeelle ja laajentaa kyseistä laitteisto- ja ohjelmistokokoonpanoa ratkaistakseen ongelman, joka koskee sovellusohjelman uudelleenkäyttöä ohjelmointien latauspisteistä. Kaiken kaikkiaan tämän ja opastettavan osan 1 välillä keskustellaan/esitetään seuraavat aiheet:

Aihe ATtiny84 ATtiny85
Sarjaliikenne SoftwareSerial -luokan avulla X X
Laitteen nastojen jakaminen sovelluksen ja latauksen välillä X X
Nastanvaihdon keskeytys X
Ulkoinen keskeytys X
Lepotila POWER_DOWN -tilassa; herää keskeytyksessä X
Kokeile SoftwareSerialiin liittyvää "moninkertaisesti määritettyä" keskeytysvektorilinkin virhettä X
Piirin sisäinen muokkaus, lataus, virheenkorjaus,… kehitysjakso ATtiny-laitteille X X

Laitteiston I/O -komponentin lisääminen johonkin SPI -ohjelmointirajapintaan omistetuista nastoista on joskus OK, joskus ei. Esimerkiksi LED -valon lisääminen MISO -laitteeseen saa LED -valon välkkymään latauksen aikana ja sitten se on sovelluksen käytettävissä. Pietsosummerin lisääminen MISO -laitteeseen johtaa kuitenkin hirvittävään huutavaan ääneen, jota seuraa latausvirhe.

Tässä ohjeessa selitetään, kuinka 4x2: 1 -multiplekserin avulla "palautetaan" SPI -rajapintaan MISO-, MOSI- ja SCK -signaaleille määritettyjen nastojen käyttö suojaamalla niitä latauksen aikana. RESET -nastan uudelleenkäyttö edellyttää sulakkeen vaihtoa, eikä tämä lähestymistapa kata sitä. Nastan kaksoismääritys suoritetaan käyttämällä multiplekseriä vaihtamaan sovellus- ja ohjelmointitulojen välillä sen mukaan, onko lataus käynnissä. Sekä ATtiny84 että ATtiny85 sisältävät koodit ja kaaviot. ATiny84 -kokoonpano käsitellään ensin, koska siinä on kaksi I/O -porttia, ja sitä voidaan käyttää havainnollistamaan joitakin muita ongelmia/ratkaisuja. Pienen84 keskustelun jälkeen samoista skenaarioista keskustellaan ATtiny85: n kohdalla.

Vaihe 1: Vaadittu laitteisto

Kuva
Kuva

Suurin osa vaadituista laitteista on lueteltu ohjeessa 1, joten alla luetellaan vain uusi laitteisto.

Nimi Mahdollinen lähde Kuinka käytetty
4x2: 1 multiplekseri Saalistaja Sisältää neljä 2-tulon 1-ulostulokytkintä, jotka ovat mekanismi, jolla SPI-rajapintasignaalit ja sovellus I/O-jaetaan.
SPST -kytkin Mikä tahansa kytkin (hetkellinen tai lukittu) toimii. Kytkintä käytetään havainnollistamaan nastan jakamista sovellustulolle.
10K vastus Vedä alas vastus SPST-kytkimelle, jotta vältetään kelluva tulo
Kuva
Kuva
Kuva
Kuva

Multiplekseri on avain tapin erottaa latauksen käyttö sovelluksen käytöstä. 4x2: 1-multiplekserin yleinen toiminta on melko suoraviivaista, ja se koostuu 2 ohjaussignaalista ja 4 identtisesti toimivasta kytkimestä. Kunkin multiplekseritapin käyttäytymistä käsitellään alla:

Kiinnitä Nimi Toiminto
15 G Kuten totuustaulukossa on esitetty, multiplekseri toimii vain, kun G -sallintatappi on alhainen. Koska emme koskaan halua poistaa multiplekseriä kokonaan käytöstä, nasta 15 kytketään suoraan maahan.
2-4; 5-7; 9-11;12-14 A (tulo), B (tulo), Y (lähtö) Kaksi tuloa on neljä; 1-lähtöiset kytkimet, joissa kukin 3-nastainen ryhmä on numeroitu peräkkäin järjestyksessä A (tulo), B (tulo), Y (lähtö), esim. kytkimelle 1; nasta 2 = 1A; nasta 3 = 1B; nasta 4 = 1Y.
1 Valitse Kun Valinta on alhainen, kytkimen tulo A on kytketty siihen liittyvään kytkimen ulostulonappiin, Y. Kun valinta on korkea, kytkintulo B kytketään sen sijaan lähtöön. Kytkimiä ohjataan samanaikaisesti Select -signaalilla ja ne toimivat identtisesti.
8 GND multiplekserin IC -maa
16 VCC multiplekserin IC -teho

Vaihe 2: Katsaus testitapauksiin

Kuva
Kuva
Kuva
Kuva

Kaksi skenaariota nastan uudelleenkäytöstä perustuvat siihen, onko nasta sovelluksen tulo vai lähtö. Tulojen käsittelymenettely on aina sama; myös sovelluslähtöjen menettely on sama laitteistokomponentista riippumatta. Siitä huolimatta selitys on helpompi ja toivottavasti selkeämpi, jos annetaan konkreettisia esimerkkejä. Kaksi tapausta koskevat minimalistiset asettelut on esitetty yllä. Tarkempia asetuksia varten myöhemmin yhteyksistä tulee vähän oravanpesiä, joten saattaa olla hyödyllistä palata näihin puhtaampiin kaavioihin.

RESET on täydellinen valinta multiplekserin valintasignaalille, koska se on alhainen latauksen aikana, mutta palaa korkealle, kun lataus on valmis. Huomaa, että mitä tahansa multiplekserikytkintä voidaan käyttää kummassakin tapauksessa, koska kaikki kytkimet toimivat samalla tavalla. Lisäksi kumpikaan esimerkki ei ole "realistinen"; ne valittiin sen sijaan yksinkertaisimmaksi tapaksi havainnollistaa eristystekniikoita

  1. Lähtökotelo: LED -lähtö ATtiny84 -nastasta 4 (SCK) eristetään multiplekserikytkimellä 2

    • kytke multiplekserin nasta 2A maahan
    • liitä multiplekserin nasta 2B ATtiny85 -nastaan 4
    • liitä lähtö 2Y LED -anodiin

      • Odotetut tulokset:

        • Merkkivalo ei pala latauksen aikana, koska se on kytketty 2A: n maahan
        • LED on liitetty sovelluksen lähtötappiin 4 lataamisen jälkeen 2B: n kautta ja alkaa vilkkua
  2. Syöttökotelo: SPST -kytkimen tulo ATtiny84 -nastaan 6 (MOSI) eristetään multiplekserikytkimellä 3

    • MOSI -johdin AVR -ohjelmointilaitteen otsikosta siirretään kohtaan 3A
    • kytkimen tulo 3B on kytketty SPST -lähtöön
    • lähtö 3Y on kytketty ATtiny84 -nastaan 6

      • 3A, MOSI, on kytketty nastaan 6 latauksen aikana
      • 3B, SPST -lähtö, on kytketty nastaan 6 latauksen jälkeen

Tapaus 1 on onnistunut, jos merkkivalo ei vilku ohjelman latauksen aikana ja vilkkuu sitten kahden sekunnin välein latauksen jälkeen odotetusti ohjelman hallinnassa. Ilman eristystä LED vilkkuu latauksen aikana, koska se on kytketty suoraan SCK -signaaliin, joka muuttaa tilan kellotietojen vastaanottamiseksi/lähettämiseksi.

Tapaus 2 onnistuu, jos MOSI -signaali välitetään edelleen ATtiny84 -laitteelle latauksen aikana, ts. Lataus ei epäonnistu ja LED reagoi SPST -kytkimeen päälle/pois latauksen jälkeen. Tapaus 2 estää yhden epätodennäköisen latausvirheen. Ilman eristystä SPST -kytkin aiheuttaa vian, jos 1) käytetään lukittua kytkintä ja 2) kytkin jätetään päällä -asentoon latauksen aikana. Kun kytkin on eristetty multiplekserillä, se ei voi aiheuttaa latausvirhettä missään olosuhteissa. Hieman venytys, mutta lohduttava meille vanhoille ihmisille.

Yksi seuraus multiplekserin käytöstä on, että laitteistokomponenttia ei voi enää liittää suoraan mikro -ohjaimen I/O -nastaan. Tämä on hieman hankalaa, mutta sallii komponentin jäädä leipälevylle testin aikana yhdessä muiden sovelluslaitteiden kanssa ja voidaan siirtää takaisin oikealle paikalleen, kun testi on valmis.

Vaihe 3: ATtiny84 Tapaus 1 - Sovelluslähdön eristäminen

Kuva
Kuva

Tämä vaihe kuvaa asennuksen sovelluksen ulostulonapin jakamiseksi lataussignaalin kanssa. Käytetty esimerkki on LED, joka on kiinnitetty nastaan 4 (SCK). Olemassa olevan LED -valon käyttö esimerkkinä mahdollistaa multiplekserin lisäämisen osan 1 laitteisto- ja ohjelmistoympäristöön.

  • Laitteisto

    • Lisää multiplekseri leipälevylle suhteellisessa paikassa, joka on esitetty yllä olevassa kaaviossa. Multiplekseri on sijoitettu kohti keskustaa, jotta tapaus 2 vaatii SPST -kytkimen.
    • Laajenna RESET -signaali multiplekseriin lisäämällä johdin (ehdottaa keltaista) ATtiny84 -nastasta 11 multiplekserin nastaan 1.
    • Loput laitteistoasetukset on annettu vaiheessa 2

      • kytke multiplekserin nasta 2A suoraan maahan
      • liitä nasta 2B ATtiny84 -nastaan 4
      • liitä lähtö 2Y LED -anodiin

        • Odotetut tulokset:

          • latauksen aikana 2Y on kytketty maahan (2A), joten LED ei pala
          • Latauksen jälkeen 2Y on kytketty ATtiny84 -nastaan 4 - sovelluksen LED -ohjaus
  • Ohjelmisto

    • Osan 1 koodi käytetään uudelleen; saatavana osasta 1 ohjeellinen eikä kopioitu täällä
    • Lataa ja käännä osa 1 -ohjelma Arduino IDE: hen
    • Liitä Tiny AVR -ohjelmoija tietokoneen USB -porttiin
    • Liitä Adafruit USB -sarjakaapeli toiseen USB -porttiin

      • COM -portti luodaan ja asetetaan automaattisesti saataville IDE -porttiluettelossa
      • Käynnistä COM -ikkuna
    • Lataa koottu koodi ATtiny84 -tietokoneeseen

Sovellusohjelman tulokset ovat samat kuin osassa 1, koska ainoa muutos oli LEDin siirtäminen "suojattuun" paikkaan: LED vilkkuu 2 sekunnin välein; sarjalähtö on sama. Ainoa ero, jonka pitäisi ilmetä, on se, että LED -valo ei enää vilku latauksen aikana, koska se on tänä aikana kytketty maahan multiplekseripistokkeen 2A kautta.

Kuva
Kuva

Vaihe 4: ATtiny84 Tapaus 2 - Eristä sovellustulo

Kuva
Kuva

Tämä vaihe perustuu edellisen lähdöneristyskotelon asetuksiin. Laitteiston muutokset koostuvat SPST -kytkimen liittämisestä ATtiny84 -nastaan 6 (MOSI) multiplekserin kautta. Joten laitteistomuutokset ovat vähäisiä, mutta on olemassa useita ohjelmistomuutoksia, joiden avulla SPST -kytkin voi ohjata LEDiä käyttämällä nastanvaihdon keskeytystä. Päivitetty koodi on tämän osion alareunassa. Koodi on kopioitava Arduino IDE: hen; ehdottaa sen tallentamista nimellä Multiplexer_Input. (Pahoittelen tämän jakson pituutta, mutta se on ohjeen tarkoitus ja se on mielestäni parempi monoliitti kuin keinotekoisten taukojen lisääminen.)

Päivittää Sijainti Tarkoitus
sisältää "hakkeroidun" SoftwareSerial -luokan sisältää osion LEDiä ohjataan nyt SPST -kytkimellä nastanvaihdon keskeytyksen avulla. SoftwareSerial -luokkaa on muutettava, koska muuten se varaa KAIKKI nastanvaihdon keskeytysvektorit. Tämä aiheuttaa "usean määritelmän" linkkivirheen SPST -kytkimelle määritetylle (portti 0) vektorille. Hakkeroitu SoftwareSerial -versio tulee sijoittaa samaan hakemistoon kuin ohjelma, jotta se vaikuttaa vain tähän sovellukseen.
SPST -tulonapin määritelmä sisältää/määritelmä -osion SPST -tulon määrittäminen laitteen nastalle. Nasta on laitekohtainen, joten se lisätään #ifdef ATtiny8x -osioon.
SPST -tulonapitila asetustoiminto SPST -nasta on määritetty tuloksi
Määritä SPST -pin keskeytys asetustoiminto Keskeytysvektori on osoitettu SPST -tulonapille niin, että kytkimen tilan muutos aiheuttaa keskeytyksen. Määritysrekisterit ja keskeytystyyppi ovat laitekohtaisia. Jotta koodi olisi mahdollisimman suoraviivainen, erot käsitellään #if -osiossa
Määritä sarjaviestit valmiiksi asetustoiminto Asennus valmis sarjalähtöviesti muutetaan vastaamaan Multiplexer Input -sovellusta
Lisää SPST -kytkin ISR -toiminto koodi -osio SPST -nastanvaihdon keskeytyksen ISR lisätään. Koodi on yleinen, mutta käytetty vektori on laitekohtainen ja määritellään ohjelman yläosassa olevista laitekohtaisista osista. Sen varmistamiseksi, että ISR on aktivoitu, LED -tilaa muutetaan. Vaikka ei-ei todellisessa sovelluksessa, generoidaan sarjalähtösanoma, joka heijastaa uutta LED-tilaa.
Muokkaa silmukan käsittelyä silmukka -toiminto ISR ohjaa nyt LED -valon sytyttämistä ja sammuttamista siten, että toiminnot poistetaan silmukkarutiinista. Puhelu lepotilaan lisätään ATtiny84: lle eräänlaisena "ylimääräisenä". Tässä sovelluksessa ATtiny85 -uni ei toimi; saattaa johtua Software Serial -luokan häiriöistä, koska se toimii ilman poistettua SoftwareSerialia.
Lisää unirutiini koodi -osio Lepotoiminto ei ole välttämätön osoittamaan multiplekserin käyttöä. Lisätty juuri siksi, että tavallisesti haluat odottaa tuloa POWER_DOWN -tilassa säästääksesi virtaa sen sijaan, että jatkaisit ohjelmasilmukan läpi tekemättä mitään ennen kuin tulo tapahtuu.

Muokkaa SoftwareSerial -luokan koodia

SoftwareSerial -luokka on muutettava, jotta se ei sotke kaikkia tapinvaihdon keskeytysportteja. SoftwareSerial -luokan koodi sijaitsee osoitteessa

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

Etsi koodi PCINT0_vect -ohjelmistosta SoftwareSerial.cpp löytääksesi koodimuutosten aloituspaikan. Lisää seuraava koodi välittömästi ennen olemassa olevaa #if define (PCINT0_vect) -lauseketta.

#if määritelty (_ AVR_ATtiny84_)

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

Kommentoi nyt olemassa oleva koodilohko, joka jakaa portin keskeytysvektorit alla kuvatulla tavalla (lisää vain aloitus- ja lopetuslohkon kommenttisymbolit / * ja * /):

/*

#if määritelty (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if määritelty (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if määritelty (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if määritelty (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #loppu Jos */

Määritä laitteisto

SPST -kytkin on kiinnitetty ATtiny84 -nastaan 6 (MOSI), kuten vaiheessa 2 esitetään. Menettely on kopioitu täällä mukavuuden vuoksi.

  • kytke kytkintulo 3A Tiny AVR -ohjelmointilaitteen MOSI -johtoon
  • liitä 3B SPST -kytkimen ON -ulostulonappiin
  • liitä 3Y ATtiny84 -nastaan 6

    • TULOKSET:

      • 3A, MOSI, portataan ATtiny84 -nastaan 6 latauksen aikana
      • 3B, SPST -lähtö, portataan nastaan 6 latauksen jälkeen

Suorita ohjelma

Aseta SPST -kytkin off -asentoon ennen juoksua. Muuten LED syttyy, kun kytkin sammutetaan ja päinvastoin. Lataa, käännä ja lataa sovelluksen syöttöohjelma Arduino IDE: n avulla vaiheen 3 ohjeiden mukaisesti. Kuten ennenkin, LED -valon ei pitäisi vilkkua latauksen aikana, joten ainoa merkki siitä, että ohjelma on käynnissä, on sarjaviesti asennustoimenpiteen lopussa: SETUP Complete - Syöttöesimerkki

Tässä vaiheessa ohjelma odottaa tuloa SPST -kytkimestä. Kytkimen asettaminen ON -asentoon saa LED -valon syttymään; palaaminen pois päältä -asentoon sammuttaa LED -valon. Lähtöviestit varmistavat, että ISR: ää kutsuttiin (ISR: Led HIGH, ISR: Led LOW). Huomaa sarjaviestien järjestys Mene nukkumaan ensin odottamaan kytkimen tilan muutosta; kun saat kytkintulon, ISR: ää käytetään, vaihtaa LED -valoa ja dokumentoi muutoksen; sitten käsittely käynnistyy lepotilan jälkeen, koska keskeytys herättää suorittimen.

Kuva
Kuva

TÄMÄN OHJEEN OHJELMA:

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

// OSA 2: Sovellus/lataa laitteen pin -jakaminen //. Muuttaa osan 1 koodia tukemaan SPI -ohjelmointirajapinnalle // määritettyjen nastojen // sovellusten uudelleenkäyttöä //. "Comon" koodi ATtiny85 ja ATtiny84 // *************************************** *********************************** Sisällytä "SoftwareSerial.h" // Muokattu Arduino SoftwareSerial -luokka #include // Vaikka käsittelykoodi on yleinen, käytetyt nastat ovat laitekohtaisia #jos määritelty (_ AVR_ATtiny84_) || define (_ AVR_ATtiny84A_) #define ledPin 4 // Kytketään kytketty Led päälle/pois (MOSI) #define ISR_VECT PCINT0_vect // SPST -kytkin Nastanvaihdon keskeytysvektori #elif määritetty (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // SPST -kytkimen tulo (INT0_def) // SPST -kytkin Nastanvaihdon keskeytysvektori #else #error Tämä projekti tukee vain ATiny84- ja ATtiny85 -projekteja, txPin); // ------------------------------------------------ ------------------------ // Alusta käsittelyresurssit // ------------------- -------------------------------------------------- --- void setup () {mySerial.begin (9600); // Aloita sarjakäsittelyn viive (2000); // Anna Serial Com -portille aikaa käynnistyä. // muuten 1. lähtö todennäköisesti puuttuu tai on sekava pinMode (ledPin, OUTPUT); // Määritä LED -nasta OUTPUT pinMode -asetukselle (SpstPin, INPUT); // Määritä SPST -kytkintappi INPUT #if määritellyksi (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // aseta nastanvaihdon keskeytys käsittelemään kytkimen tuloa nastassa 6 (MOSI) GIMSK | = (1 <

Vaihe 5: ATtiny85 -tapaus 1 - Sovelluslähdön eristäminen

Kuva
Kuva

Sen sijaan, että rakentaisit ATtiny85 -laitteistoon kaksoiskappaleen, on luultavasti helpompaa aloittaa ATtiny84: n valmiilla kokoonpanolla vaiheesta 4 ja korvata tiny84 -siru tiny85: llä. Kaikki tarvittavat laitteet ovat silloin saatavilla. Jos käytät tätä lähestymistapaa, etsi tiny85 niin, että nastat 3 ja 4 ovat linjassa sarjakaapelin tx kanssa ja vastaanottavat johdot. Tällöin on vain siirrettävä SPI -liitäntäjohdot vastaamaan niiden tarvittavia paikkoja ATtiny85: lle.

Jos aloitat tyhjästä, noudata vain vaiheen 3 yleisiä vaiheita ja yllä olevaa fritointikaaviota. Koodi on sama kuin ATtiny84: ssä vaiheessa 3, ja odotetut tulokset ovat samat - ei välkyntä latauksen aikana; käynnissä LED vilkkuu 2 sekunnin välein ja sarjalähtöviestit seuraavat LED -tilaa.

Kuva
Kuva

Vaihe 6: ATtiny85 -tapaus 2 - Sovellustulon eristäminen

Kuva
Kuva

Jos haluat asentaa laitteiston, aloita määrityksestä vaiheesta 5 ja lisää SPST -kytkin yllä olevan kaavion mukaisesti. Käytin itse asiassa hetkellistä kytkintä tiny85 -versiolle ja se helpottaa todentamista hieman. Huomaa, että kytkimen lähtö on käännetty 180 astetta ATtiny84 -kokoonpanosta. Tämä muutos helpottaa kytkentäjohtojen reitittämistä, koska kaikki 3 SPI -signaalia ovat samalla puolella ATtiny85: ssä.

Käytä samaa ohjelmaa kuin ATtiny84 -vaiheessa 4. Samat yleiset tulokset ovat odotettavissa - LED -valon tila vaihtuu, kun SPST -kytkin käännetään päälle/pois ja sarjalähtöviestit dokumentoivat muutokset. GO TO SLEEP -viestit puuttuvat, koska nukkumistoimintoa ei käytetä ATtiny85 -laitteessa. Vaikka samaa ohjelmaa käytetään, toteutuksessa on merkittäviä eroja sen vuoksi, että ATtiny85: llä on vain yksi porttirekisteri (portti 0):

  1. SoftwareSerial varaa nyt portin 0 nastanvaihdon keskeytyksen sarjaliikenteelle (Muista, että pystyimme käyttämään porttia 1 ATtiny84: lle.)
  2. SPST -kytkimen keskeytys on toteutettava ulkoisella keskeytyksellä 0 (INT0), koska SoftwareSerial varaa yhden ja ainoan nastamuutoksen keskeytyksen. Tämä havainnollistaa sitä kohtaa, että nastanvaihdon keskeytykset ja ulkoiset keskeytykset ovat loogisesti riippumattomia ja niitä voidaan käyttää samassa porttirekisterissä.
  3. Käyttämällä muutettua SoftwareSerial -versiota ei saada mitään - portteja on vain yksi ja SoftwareSerial -luokka tarttuu siihen. Muokattua luokkaa käytettiin kuitenkin vain välttääkseen muutoksen, joka ei suoraan liity tämän vaiheen tavoitteeseen.

Suositeltava: