Sisukord:

ATtiny84/85 SPI liidese tihvti korduvkasutamine: 6 sammu
ATtiny84/85 SPI liidese tihvti korduvkasutamine: 6 sammu

Video: ATtiny84/85 SPI liidese tihvti korduvkasutamine: 6 sammu

Video: ATtiny84/85 SPI liidese tihvti korduvkasutamine: 6 sammu
Video: ATTiny85 with MCP23S08 Port Extender 2024, November
Anonim
ATtiny84/85 SPI liidese tihvti taaskasutus
ATtiny84/85 SPI liidese tihvti taaskasutus

See juhend on järg juhendile "ATtiny84/85 vooluahela silumine jadaväljundiga" ja laiendab seda riist- ja tarkvara konfiguratsiooni, et lahendada programmide allalaadimisnõelte rakendusprogrammi taaskasutamise probleem. Kokku arutatakse/demonstreeritakse selle ja juhendatava 1. osa vahel järgmisi teemasid:

Teema 84 ATtiny85
Sarjaühendus klassi SoftwareSerial abil X X
Seadme nööpnõelte jagamine rakenduse ja allalaadimise vahel X X
Pin muutmise katkestus X
Väline katkestus X
Unerežiim POWER_DOWN; katkestamisel ärgata X
Programmiga SoftwareSerial seotud "korruta määratletud" katkestusvektori lingi tõrge X
ATtiny seadmete ahelasisene muutmine, allalaadimine, silumine ja arendustsükkel X X

Riistvara I/O komponendi lisamine ühele SPI programmeerimisliidesele mõeldud tihvtile on mõnikord OK, mõnikord mitte. Näiteks LED -i lisamine MISO -le põhjustab LED -i vilkumise allalaadimise ajal ja seejärel on see rakenduse jaoks saadaval. Kui aga piesosummer MISO -sse lisada, tekib jube kriuksuv heli, millele järgneb allalaadimise ebaõnnestumine.

Selles juhendis selgitatakse, kuidas kasutada 4x2: 1 multiplekserit SPI -liidesele MISO, MOSI ja SCK signaalidele määratud tihvtide kasutamise "taastamiseks", kaitstes neid allalaadimise ajal. RESET -tihvti taaskasutamine nõuab kaitsme vahetamist ja see lähenemisviis ei hõlma seda. Tihvtide kahekordne määramine toimub multiplekseri abil rakenduse ja programmeerimissisendi vahel vahetamiseks sõltuvalt sellest, kas allalaadimine on pooleli. Kood ja skeemid on lisatud nii ATtiny84 kui ka ATtiny85 jaoks. Esmalt käsitletakse ATiny84 konfiguratsiooni, kuna sellel on kaks I/O porti ja seda saab kasutada mõnede täiendavate probleemide/lahenduste illustreerimiseks. Pärast tillukest84 arutelu arutatakse samu stsenaariume ATtiny85 puhul.

Samm: nõutav riistvara

Pilt
Pilt

Enamik nõutavat riistvara oli loetletud 1. osas, mis on juhendatav, nii et allpool on loetletud ainult uus riistvara.

Nimi Võimalik allikas Kuidas kasutada
4x2: 1 multiplekser Mouser Sisaldab nelja 2-sisendilist 1-väljundlülitit, mis on SPI-liidese signaalide ja rakenduse I/O-de jagamise mehhanism.
SPST lüliti Igasugune lüliti (hetkeline või lukustatud) töötab. Lülitit kasutatakse rakenduse sisendi pin -jagamise illustreerimiseks.
10K takisti Tõmmatav takisti SPST-lüliti jaoks, et vältida ujuvat sisendit
Pilt
Pilt
Pilt
Pilt

Multiplekser on võti pin -allalaadimise kasutamise eraldamiseks rakenduste kasutamisest. 4x2: 1 multiplekseri üldine funktsionaalsus on üsna sirgjooneline ja koosneb kahest juhtsignaalist ja neljast identselt toimivast lülitist. Allpool käsitletakse iga multiplekseri tihvti käitumist:

Kinnita Nimi Funktsioon
15 G Nagu tõetabelis näidatud, töötab multiplekser ainult siis, kui G -lubatav tihvt on madal. Kuna me ei taha kunagi multiplekserit täielikult keelata, ühendatakse tihvt 15 otse maandusega.
2-4; 5-7; 9-11;12-14 A (sisend), B (sisend), Y (väljund) Seal on neli 2-sisendit; 1-väljundlülitid, kus iga 3-kontaktiline rühm on järjestikku nummerdatud järjekorras A (sisend), B (sisend), Y (väljund) nt. lüliti 1 jaoks; tihvt 2 = 1A; tihvt 3 = 1B; tihvt 4 = 1Y.
1 Valige Kui valik on madal, on lüliti sisend A ühendatud vastava lüliti väljundtihvtiga Y. Kui valik on kõrge, on lüliti sisend B ühendatud väljundiga. Lüliteid juhitakse samaaegselt valimissignaaliga ja need toimivad identselt.
8 GND multiplekseri IC maandus
16 VCC multiplekseri IC toide

2. etapp: testjuhtumite ülevaade

Pilt
Pilt
Pilt
Pilt

Tihvtide taaskasutamise kaks stsenaariumi põhinevad sellel, kas tihvt on rakenduse sisend või väljund. Sisendi käsitlemise protseduur on alati sama; ka rakenduse väljundite protseduur on sõltumatu riistvarakomponendist identne. Sellegipoolest on selgitus lihtsam ja loodetavasti selgem, kui tuua konkreetseid näiteid. Eespool on näidatud kahe juhtumi minimalistlikud paigutused. Hilisemate üksikasjalike seadistuste jaoks muutuvad ühendused natuke oravate pesaks, seega võib olla kasulik vaadata tagasi nende puhtamate skeemide juurde.

RESET on ideaalne valik multiplekseri valimise signaali jaoks, kuna see on allalaadimise ajal madal, kuid läheb allalaadimise lõppedes kõrgele. Pange tähele, et ükskõik millist multiplekserlülitit saab kasutada mõlemal juhul, kuna kõik lülitid käituvad identselt. Samuti pole kumbki näide "realistlik"; need valiti selle asemel kõige lihtsamaks viisiks isoleerimismeetodite illustreerimiseks

  1. Väljundkarp: LED -väljund ATtiny84 kontaktist 4 (SCK) isoleeritakse multiplekserlüliti 2 abil

    • ühendage multiplekseri tihvt 2A maandusega
    • ühendage multiplekseri tihvt 2B ATtiny85 tihvtiga 4
    • ühendage väljund 2Y LED -anoodiga
      • Oodatud tulemused:

        • LED ei põle allalaadimise ajal, kuna see on ühendatud 2A, maandusega
        • Pärast 2B kaudu allalaadimist rakenduse väljundpoldile 4 kinnitatud LED hakkab vilkuma
  2. Sisendjuhtum: SPST -lüliti sisend ATtiny84 pin 6 (MOSI) isoleeritakse multiplekserlüliti 3 abil

    • AVR -i programmeerija päisest pärit MOSI juhttraat viiakse asendisse 3A
    • lüliti sisend 3B on ühendatud SPST väljundiga
    • väljund 3Y on ühendatud ATtiny84 kontaktiga 6

      • 3A, MOSI, on allalaadimise ajal ühendatud tihvtiga 6
      • 3B, SPST väljund, on pärast allalaadimist ühendatud tihvtiga 6

Juhtum 1 on edukas, kui LED ei vilgu programmi allalaadimise ajal ja seejärel vilgub iga kahe sekundi järel pärast allalaadimist ootuspäraselt programmi kontrolli all. Ilma eraldamiseta vilguks LED allalaadimise ajal, kuna see on ühendatud otse SCK signaaliga, mis muudab oleku kella andmete vastuvõtmiseks/edastamiseks.

Juhtum 2 on edukas, kui MOSI -signaal edastatakse allalaadimise ajal ATtiny84 -le, s.t allalaadimine ei õnnestu ja LED reageerib pärast allalaadimist SPST -lülitile. Juhtum 2 hoiab ära ühe ebatõenäolise allalaadimistõrke. Ilma eraldamiseta põhjustab SPST -lüliti tõrke, kui 1) kasutatakse lukustatud lülitit ja 2) lüliti jäetakse allalaadimise ajal sisselülitatud asendisse. Kui multiplekser on isoleeritud, ei saa lüliti mingil juhul põhjustada allalaadimistõrkeid. Natuke veniv, kuid lohutav meile, vanadele inimestele.

Üks multiplekseri kasutamise tagajärg on see, et riistvarakomponenti ei saa enam otse ühendada mikrokontrolleri I/O kontaktiga. See on mõnevõrra ebamugav, kuid võimaldab komponendil koos muu rakenduse riistvaraga katse ajal leivaplaadile jääda ning pärast testi lõppu saab selle oma õigesse kohta tagasi viia.

3. samm: ATtiny84 juhtum 1 - eraldage rakenduse väljund

Pilt
Pilt

See samm kirjeldab rakenduse väljundpinna allalaadimissignaaliga jagamise seadistamist. Kasutatud näide on tihvti 4 külge kinnitatud LED (SCK). Olemasoleva LED -i kasutamine näitena võimaldab rõhutada multiplekseri lisamist 1. osa riist- ja tarkvarakeskkonda.

  • Riistvara
    • Lisage multiplekser leivaplaadile ülaltoodud praadimisskeemil näidatud kohas. Multiplekser on paigutatud keskpunkti, et võimaldada ruumi SPST -lüliti jaoks, mida on vaja juhtumis 2.
    • Laiendage RESET -signaali multiplekserile, lisades juhtme (soovitame kollast) ATtiny84 tihvt 11 -st multiplekseri tihvti 1 külge.
    • Ülejäänud riistvara seadistamine toimub sammu 2 kohaselt

      • ühendage multiplekseri tihvt 2A otse maandusega
      • ühendage tihvt 2B ATtiny84 tihvtiga 4
      • ühendage väljund 2Y LED -anoodiga
        • Oodatud tulemused:

          • allalaadimise ajal on 2Y ühendatud maandusega (2A), nii et LED jääb põlema
          • Pärast allalaadimist ühendatakse 2Y ATtiny84 pin 4 -ga - rakenduse LED -juhtimine
  • Tarkvara
    • 1. osa koodi kasutatakse uuesti; saadaval 1. osast juhendatav, mitte siin dubleeritud
    • Laadige ja kompileerige 1. osa programm Arduino IDE -s
    • Ühendage Tiny AVR programmeerija arvuti USB -porti
    • Ühendage Adafruit USB -jadakaabel teise USB -pordiga
      • Luuakse COM -port ja see tehakse automaatselt kättesaadavaks IDE -portide loendis
      • Käivitage COM -aken
    • Laadige kompileeritud kood alla ATtiny84 -le

Rakendusprogrammi tulemused on samad, mis 1. osas, kuna ainus muudatus oli LED -i viimine "kaitstud" kohta: LED vilgub 2 -sekundilise intervalliga; jadaväljund on sama. Ainus erinevus, mis peaks ilmnema, on see, et LED ei vilgu allalaadimise ajal enam, kuna selle aja jooksul on see maaga ühendatud multiplekseri tihvti 2A kaudu.

Pilt
Pilt

4. samm: ATtiny84 juhtum 2 - eraldage rakenduse sisend

Pilt
Pilt

See samm põhineb eelmise väljundisolatsiooni juhtumi seadistustel. Riistvara muudatused seisnevad SPST -lüliti kinnitamises multiplekseri kaudu ATtiny84 pin 6 (MOSI) külge. Seega on riistvara muudatused minimaalsed, kuid on mitmeid tarkvara muudatusi, mis võimaldavad SPST -lülitil LED -i juhtida, kasutades tihvtide vahetamise katkestust. Värskendatud kood on selle jaotise allosas. Kood tuleks kopeerida Arduino IDE -sse; soovitame selle salvestada nime Multiplexer_Input all. (Vabandan selle lõigu pikkuse pärast, kuid see on juhendatava eesmärgi tuum ja arvan, et see loeb paremini monoliidina, mitte kunstlike pauside lisamise asemel.)

Värskenda Asukoht Eesmärk
hulka "häkkinud" SoftwareSerial klass sektsiooni lisada LED -i juhib nüüd SPST -lüliti tihvtide vahetamise katkestuse kaudu. SoftwareSerial klassi tuleb muuta, sest muidu eraldab see KÕIK tihvtide vahetamise katkestusvektorid. See põhjustab SPST -lülitile määratud (pordi 0) vektori "mitme määratlusega" lingi tõrke. Häkkinud SoftwareSeriali versioon tuleks paigutada programmiga samasse kataloogi, nii et see mõjutab ainult seda rakendust.
SPST sisendpoldi määratlus kaasata/määratluse osa SPST sisendi määramine seadme tihvtile. Nõel on seadmepõhine, nii et see lisatakse sektsiooni #ifdef ATtiny8x.
SPST sisendpinge režiim seadistusfunktsioon SPST tihvt on konfigureeritud sisendiks
SPST -pin katkestuse seadistamine seadistusfunktsioon Katkestusvektor on määratud SPST sisendpoldile nii, et lüliti oleku muutmine põhjustab katkestuse. Konfiguratsiooniregistrid ja katkestuste tüüp on seadmepõhised. Koodi võimalikult lihtsaks muutmiseks käsitletakse erinevusi jaotises #if
Seadistuse täielik jadateade seadistusfunktsioon Seadistuse täielik jadaväljundi teade on muudetud kajastamaks rakendust Multiplexer Input
Lisage SPST -lüliti ISR -funktsioon koodi sektsioon Lisatakse SPST tihvti vahetamise katkestuse ISR. Kood on tavaline, kuid kasutatav vektor on seadmepõhine ja see on määratletud programmi ülaosas olevatest seadmesõltuvates jaotistes. ISR -i aktiveerimise kontrollimiseks muudetakse LED -i olekut. Kuigi tegelikus rakenduses on ei-ei, genereeritakse jadaväljundi teade, mis peegeldab uut LED-olekut.
Muuda silmuste töötlemist silmusfunktsioon ISR kontrollib nüüd LED -i sisse- ja väljalülitamist, et funktsionaalsus silmuse rutiinist eemaldada. ATtiny84 -le lisatakse unerežiimile kõne "lisana". Selle rakenduse puhul ATtiny85 uni ei tööta; võib -olla tingitud tarkvara seeria klassi häiretest, kuna see töötab eemaldatud tarkvaraga.
Lisage unerežiim koodi sektsioon Unefunktsioon ei ole multiplekseri kasutamise demonstreerimiseks vajalik. Lihtsalt lisatud, kuna sooviks tavaliselt oodata POWER_DOWN -režiimis sisendit, et säästa energiat, selle asemel, et jätkata programmitsükli läbimist ja mitte midagi teha, kuni sisend tekib.

Muutke SoftwareSerial klassi koodi

SoftwareSerial klassi tuleb muuta nii, et see ei takistaks kõiki tihvtide vahetamise katkestusporte. SoftwareSerial klassi kood asub aadressil

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

Koodimuudatuste alguskoha leidmiseks otsige lehte PCINT0_vect programmist SoftwareSerial.cpp. Lisage järgmine kood vahetult enne olemasolevat lauset #if defineeritud (PCINT0_vect).

#if defineeritud (_ AVR_ATtiny84_)

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

Nüüd kommenteerige olemasolevat koodiplokki, mis eraldab pordi katkestusvektorid, nagu allpool näidatud (lisage lihtsalt alguse ja lõpu ploki kommentaari sümbolid / * ja * /):

/*

#if defineeritud (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if defineeritud (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if defineeritud (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if defineeritud (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #endif */

Seadistage riistvara

SPST -lüliti on kinnitatud ATtiny84 kontakti 6 (MOSI) külge, nagu on kirjeldatud 2. etapis. Mugavuse huvides on protseduur siin dubleeritud.

  • ühendage lüliti sisend 3A Tiny AVR programmeerija päise MOSI juhtmega
  • ühendage 3B SPST lüliti ON väljundpoldiga
  • ühendage 3Y ATtiny84 tihvtiga 6

    • TULEMUSED:

      • 3A, MOSI, suunatakse allalaadimise ajal ATtiny84 pin 6 -le
      • 3B, SPST väljund, suletakse pärast allalaadimist pin 6 -le

Käivitage programm

Enne jooksmist pange SPST -lüliti väljalülitatud asendisse. Vastasel korral süttib LED lüliti väljalülitamisel ja vastupidi. Rakenduse sisendprogrammi Arduino IDE abil laadimiseks, kompileerimiseks ja allalaadimiseks järgige 3. sammu. Nagu varemgi, ei tohiks LED allalaadimise ajal vilkuda, nii et ainus märge selle kohta, et programm on valmis ja töötab, on seadistamisprotseduuri lõpus olev jadateade: SETUP Complete - sisendnäide

Sel hetkel ootab programm SPST -lüliti sisendit. Kui lüliti lülitatakse asendisse ON, süttib LED; väljalülitatud asendisse lülitamine lülitab LED välja. Väljundsõnumid kontrollivad ISR -i käivitamist (ISR: Led HIGH, ISR: Led LOW). Pange tähele, et jadasõnumite järjekord on GO TO SLEEP, oodates kõigepealt lüliti oleku muutmist; lüliti sisendi saamisel kutsutakse esile ISR, lülitatakse LED sisse ja dokumenteeritakse muutus; töötlemine kiireneb pärast unekõnet, kuna katkestus äratab protsessori.

Pilt
Pilt

SELLE JUHENDI PROGRAMM:

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

// 2. OSA: Rakendus/allalaadimisseadme pin -jagamine //. Muudab 1. osa koodi, et toetada rakenduste SPI programmeerimisliidesele // määratud tihvtide korduvkasutamist //. "Comon" kood ATtiny85 ja ATtiny84 // *************************************** ********************************* #sisalda "SoftwareSerial.h" // Muudetud Arduino SoftwareSerial klass #include // Kuigi töötlemiskood on tavaline, kasutatud tihvtid on seadmespetsiifilised #kui see on määratletud (_ AVR_ATtiny84_) || defineeritud (_ AVR_ATtiny84A_) #define ledPin 4 // Ühendatud sisselülitamiseks Led sisse/välja lülitatud #define rxPin 9 // Sarja vastuvõtmiseks kasutatav tihvt #define txPin 10 // Sarjaülekandeks kasutatav tihvt #define SpstPin 6 // SPST -lüliti sisend (MOSI) #define ISR_VECT PCINT0_vect // SPST lüliti Pin muutmise katkestusvektor #elif defineeritud (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // SPST lüliti sisend (INT0_de) // SPST lüliti Nööpnõelte vahetamise katkestusvektor #else #error See projekt toetab ainult ATiny84 ja ATtiny85 See projekt toetab #endif // Loo Tarkvara jadaklassi eksemplar, mis määrab, millist seadet // tihvte kasutatakse tarkvara vastuvõtmiseks ja edastamiseks SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Töötlusressursside lähtestamine // ------------------- -------------------------------------------------- --- void setup () {mySerial.begin (9600); // Seeriatöötluse viivitus (2000); // Andke Serial Com pordile käivitamise lõpuleviimiseks aega. // muidu on esimene väljund tõenäoliselt puudu või moonutatud pinMode (ledPin, OUTPUT); // LED -pin konfigureerimine OUTPUT pinMode jaoks (SpstPin, INPUT); // SPST lüliti tihvti seadistamine INPUTiks #kui see on määratletud (_ AVR_ATtiny84_) || [_AVR_ATtiny84A_] // seadistage tihvtide vahetamise katkestus, et käidelda lüliti sisendit tihvti 6 (MOSI) GIMSK | = (1 <

5. samm: ATtiny85 juhtum 1 - eraldage rakenduse väljund

Pilt
Pilt

Selle asemel, et ehitada ATtiny85 jaoks korduv riistvaraseade, on tõenäoliselt lihtsam alustada ATtiny84 valmis konfiguratsiooniga 4. sammust ja asendada tiny84 kiip tiny85 -ga. Kogu vajalik riistvara on siis juba saadaval. Kui kasutate seda lähenemisviisi, leidke tiny85 nii, et tihvtid 3 ja 4 oleksid jadakaabliga tx ühel joonel ja võtaksid vastu juhtmeid. Siis jääb üle vaid SPI liidese juhtmete ümberpaigutamine, et need sobiksid ATtiny85 jaoks vajalike asukohtadega.

Kui alustate nullist, järgige lihtsalt 3. sammu üldisi samme ja ülaltoodud fritseerimisskeemi. Kood on sama, mida kasutati ATtiny84 puhul 3. etapis ja oodatakse samu tulemusi - allalaadimise ajal ei vilgu; töötamise ajal vilgub LED 2 -sekundilise intervalliga ja jadaväljundi teated järgivad LED -olekut.

Pilt
Pilt

6. samm: ATtiny85 juhtum 2 - isoleerige rakenduse sisend

Pilt
Pilt

Riistvara seadistamiseks alustage konfiguratsioonist alates 5. sammust ja lisage SPST -lüliti, nagu on näidatud ülaloleval joonisel. Tegelikult kasutasin tillukese 85 versiooni jaoks hetkelist lülitit ja see muudab kontrollimise veidi lihtsamaks. Pange tähele, et lüliti väljundit pööratakse ATtiny84 konfiguratsioonist 180 kraadi. See muudatus hõlbustab ühendamisjuhtmete juhtimist, kuna kõik 3 SPI signaali on ATtiny85 jaoks samal küljel.

Kasutage sama programmi nagu ATtiny84 4. samm. Oodatakse samu üldisi tulemusi - LED muutub olekus, kui SPST -lüliti on sisse/välja lülitatud ja jadaväljundi teated dokumenteerivad muudatusi. GO to SLEEP sõnumid puuduvad, kuna unerežiimi funktsioone ATtiny85 puhul ei kasutata. Kuigi kasutatakse sama programmi, on rakendamisel märkimisväärseid erinevusi, mis tulenevad asjaolust, et ATtiny85 -l on ainult üks pordiregister (port 0):

  1. SoftwareSerial eraldab nüüd jadaühenduseks pordi 0 kontakti vahetamise katkestuse (tuletage meelde, et saime ATtiny84 jaoks kasutada pordi 1).
  2. SPST lüliti katkestus tuleb rakendada välise katkestusega 0 (INT0), kuna SoftwareSerial eraldab ühe ja ainsa tihvtide vahetamise katkestuse. See illustreerib asjaolu, et tihvtide vahetamise katkestused ja välised katkestused on loogiliselt sõltumatud ja neid saab kasutada samas pordiregistris.
  3. Muudetud SoftwareSerial versiooni kasutamisel ei saavutata midagi - seal on ainult üks port ja SoftwareSerial klass haarab selle kinni. Kuid muudetud klassi kasutati siiski ainult selleks, et vältida muudatusi, mis ei ole otseselt seotud selle sammu eesmärgiga.

Soovitan: