Tartalomjegyzék:

ATtiny84/85 SPI interfész csapok újrafelhasználása: 6 lépés
ATtiny84/85 SPI interfész csapok újrafelhasználása: 6 lépés

Videó: ATtiny84/85 SPI interfész csapok újrafelhasználása: 6 lépés

Videó: ATtiny84/85 SPI interfész csapok újrafelhasználása: 6 lépés
Videó: Использование плат Digispark Attiny85 Mini Arduino: Урок 108 2024, November
Anonim
ATtiny84/85 SPI interfész tű újrafelhasználása
ATtiny84/85 SPI interfész tű újrafelhasználása

Ez az utasítás az "ATtiny84/85 áramkörön belüli hibakeresés soros kimenettel" utasítás utókövetése, és kiterjeszti ezt a hardver- és szoftverkonfigurációt, hogy megoldja a program letöltési csapok alkalmazásprogram által történő újrafelhasználásának problémáját. Összességében ez és az 1. utasítás között a következő témák kerülnek megvitatásra/bemutatásra:

Téma ATtiny84 ATtiny85
Soros kommunikáció a SoftwareSerial osztály használatával x x
Az eszköz csapjainak megosztása az alkalmazás és a letöltés között x x
Tűcsere megszakítás x
Külső megszakítás x
Alvás POWER_DOWN módban; megszakításkor felébred x
A SoftwareSerial-hoz kapcsolódó "többszörösen meghatározott" megszakításvektor-hivatkozási hiba kiküszöbölése x
Áramkörön belüli módosítás, letöltés, hibakeresés,… fejlesztési ciklus az ATtiny eszközökhöz x x

Hardver I/O komponens hozzáadása az SPI programozási felülethez rendelt egyik tűhöz néha rendben van, néha nem. Például egy LED hozzáadása a MISO -hoz csak azt eredményezi, hogy a LED villog a letöltés során, majd elérhető az alkalmazás számára. Ha azonban piezo -zümmögőt ad hozzá a MISO -hoz, akkor szörnyű sikító hangot kap, majd letöltési hiba következik.

Ez az oktatható utasítás elmagyarázza, hogyan lehet 4x2: 1 multiplexert használni az SPI interfészhez rendelt MISO, MOSI és SCK jelek használatának "helyreállításához" a letöltés során. A RESET csap újrafelhasználása biztosítékcserét igényel, és ez a megközelítés nem vonatkozik rá. A csapok kettős hozzárendelése a multiplexer segítségével történik az alkalmazás és a programozási bemenetek közötti váltáshoz, attól függően, hogy a letöltés folyamatban van -e. Az ATtiny84 és az ATtiny85 kódja és sematikája is benne van. Az ATiny84 konfigurációval foglalkozunk először, mivel két I/O porttal rendelkezik, és néhány további probléma/megoldás szemléltetésére használható. A tiny84 megbeszélést követően ugyanazokat a forgatókönyveket tárgyaljuk az ATtiny85 esetében is.

1. lépés: Szükséges hardver

Kép
Kép

A szükséges hardverek nagy része felsorolásra került az 1. utasítható részben, így csak az új hardver szerepel az alábbiakban.

Név Lehetséges forrás Hogyan használt
4x2: 1 multiplexer Mouser Négy 2 bemenetű, 1 kimenetű kapcsolót tartalmaz, amelyek az SPI interfész jelei és az alkalmazás I/O megosztásának mechanizmusa.
SPST kapcsoló Bármilyen típusú kapcsoló (pillanatnyi vagy reteszelt) működni fog. A kapcsoló az alkalmazásbemenet pin -megosztásának illusztrálására szolgál.
10K ellenállás Lehúzható ellenállás az SPST kapcsolóhoz, hogy elkerülje a lebegő bemenetet
Kép
Kép
Kép
Kép

A multiplexer a kulcsa annak, hogy elkülönítsük a pin letöltés használatát az alkalmazás használatától. A 4x2: 1 multiplexer általános funkcionalitása meglehetősen egyszerű, 2 vezérlőjelet és 4 azonos működésű kapcsolót tartalmaz. Az egyes multiplexer csapok viselkedését az alábbiakban tárgyaljuk:

Név Funkció
15 G Amint azt az igazságtáblázat mutatja, a multiplexer csak akkor működik, ha a G engedélyező csap alacsony. Mivel soha nem akarjuk teljesen letiltani a multiplexert, a 15 -ös csap közvetlenül a földhöz lesz csatlakoztatva.
2-4; 5-7; 9-11;12-14 A (bemenet), B (bemenet), Y (kimenet) Négy 2-bemenet van; 1 kimenetű kapcsolók, mindegyik 3 tűs csoport egymást követő sorszámozásával A (bemenet), B (bemenet), Y (kimenet) pl. kapcsolóhoz 1; 2. tüske = 1A; 3. csap = 1B; 4. tüske = 1Y.
1 Válassza a lehetőséget Ha a Kiválasztás alacsony, az A kapcsolóbemenet a hozzá tartozó kapcsoló kimeneti tűhöz, Y. Ha a kiválasztás magas, a B kapcsolóbemenet a kimenethez van csatlakoztatva. A kapcsolókat a Select jel egyidejűleg vezérli, és azonos módon működnek.
8 GND multiplexer IC föld
16 VCC multiplexer IC táp

2. lépés: A tesztesetek áttekintése

Kép
Kép
Kép
Kép

A csapok újrafelhasználásának két forgatókönyve azon alapul, hogy a csap alkalmazás bemenet vagy kimenet. Bármely bemenet kezelési eljárása mindig ugyanaz; az alkalmazáskimenetek eljárása is azonos a hardverkomponensektől függetlenül. Ennek ellenére a magyarázat könnyebb és remélhetőleg világosabb, ha konkrét példákat adunk. A két eset minimalista elrendezései a fentiekben láthatók. A későbbiekben a részletes beállításokhoz a kapcsolatok kissé mókusok fészkekké válnak, ezért hasznos lehet visszatérni ezekhez a tisztább diagramokhoz.

A RESET a tökéletes választás a multiplexer Select jelhez, mivel a letöltés alatt alacsony, de a letöltés befejezésekor magas. Ne feledje, hogy bármely multiplexer kapcsoló mindkét esetben használható, mivel minden kapcsoló azonos módon viselkedik. Továbbá egyik példa sem "reális"; helyette az izolációs technikák szemléltetésének legegyszerűbb módját választották

  1. Kimeneti tok: A LED kimenet az ATtiny84 4. tűből (SCK) 2 -es multiplexer kapcsolóval izolálható

    • csatlakoztassa a 2A multiplexer csapot a földhöz
    • csatlakoztassa a 2B multiplexer csapot az ATtiny85 4. tűhöz
    • csatlakoztassa a 2Y kimenetet a LED anódhoz

      • Várható eredmények:

        • A LED nem világít a letöltés alatt, mivel csatlakoztatva van a 2A, földhöz
        • A 2B -n keresztüli letöltés után a LED csatlakozik az alkalmazás kimeneti 4. tűjéhez, és villogni kezd
  2. Bemeneti tok: Az SPST kapcsoló bemenete az ATtiny84 6 -os tűre (MOSI) 3 -as multiplexer kapcsolóval van elkülönítve

    • Az AVR programozó fejlécéből származó MOSI vezeték a 3A -ra kerül
    • A 3B kapcsoló bemenet az SPST kimenethez van csatlakoztatva
    • A 3Y kimenet az ATtiny84 6. tűhöz van csatlakoztatva
      • A 3A, MOSI, letöltés közben csatlakozik a 6 -os érintkezőhöz
      • 3B, SPST kimenet, letöltés után csatlakozik a 6. tűhöz

Az 1. eset sikeres, ha a LED nem villog a program letöltése közben, majd a letöltés után két másodpercenként villog, ahogy azt a programvezérlés szerint elvárták. Elszigetelés nélkül a LED villogni fog a letöltés során, mivel közvetlenül az SCK jelhez van csatlakoztatva, amely állapotát órás adatok fogadására/küldésére változtatja.

A 2. eset sikeres, ha a MOSI jelet a letöltés során továbbítja az ATtiny84 -re, azaz a letöltés nem sikertelen, és a LED válaszol az SPST be-/kikapcsolására a letöltés után. A 2. eset megakadályoz egy valószínűtlen letöltési sikertelenséget. Elszigetelés nélkül az SPST kapcsoló meghibásodást okoz, ha 1) reteszelt kapcsolót használ, és 2) a kapcsolót bekapcsolt állapotban hagyja a letöltés során. Ha a multiplexer elszigeteli, a kapcsoló semmilyen körülmények között nem okozhat letöltési hibát. Kicsit húzós, de megnyugtató nekünk, öregeknek.

A multiplexer használatának egyik következménye, hogy a hardverkomponens már nem csatlakoztatható közvetlenül a mikrokontroller I/O érintkezőjéhez. Ez némileg kényelmetlen, de lehetővé teszi, hogy a komponens a teszt alatt a kenyérsütő táblán maradjon a többi alkalmazás hardverrel együtt, és a teszt befejeztével visszahelyezhető a megfelelő helyre.

3. lépés: ATtiny84 1. eset - Az alkalmazás kimenetének elkülönítése

Kép
Kép

Ez a lépés leírja az alkalmazás kimeneti csapjának letöltési jellel való megosztásának beállítását. Az alkalmazott példa a 4 -es csaphoz (SCK) rögzített LED. A meglévő LED példaként való használata lehetővé teszi a multiplexer hozzáadását az 1. rész hardver- és szoftverkörnyezetéhez.

  • Hardver

    • Adja hozzá a multiplexert a kenyértáblához a fenti fritázási diagramon látható relatív helyen. A multiplexer középen van elhelyezve, hogy helyet biztosítson a 2. esetben szükséges SPST kapcsolónak.
    • Hosszabbítsa ki a RESET jelet a multiplexerre úgy, hogy az ATtiny84 11 -es tűből az 1 -es multiplexer -csatlakozóhoz vezetékes vezetéket (sárgát javasol) ad hozzá.
    • A fennmaradó hardverbeállítás a 2. lépésben megadottak szerint történik

      • csatlakoztassa a 2A multiplexer csapot közvetlenül a földhöz
      • csatlakoztassa a 2B tűt az ATtiny84 4. tűhöz
      • csatlakoztassa a 2Y kimenetet a LED anódhoz

        • Várható eredmények:

          • letöltés közben a 2Y földhöz van csatlakoztatva (2A), így a LED nem világít
          • Letöltés után a 2Y csatlakoztatva van az ATtiny84 4 -es érintkezőhöz - alkalmazás LED -vezérléshez
  • Szoftver

    • Az 1. rész kódja újra felhasználásra kerül; az 1. részből tanulható, nem pedig itt másolható
    • Töltse le és fordítsa le az 1. rész programot az Arduino IDE -ben
    • Csatlakoztassa a Tiny AVR programozót a számítógép USB -portjához
    • Csatlakoztassa az Adafruit USB -soros kábelt egy második USB -porthoz

      • Létrejön egy COM port, amely automatikusan elérhetővé válik az IDE portlistában
      • Indítsa el a COM ablakot
    • Töltse le az összeállított kódot az ATtiny84 -re

Az alkalmazásprogram eredményei ugyanazok, mint az 1. résznél, mivel az egyetlen változás az volt, hogy a LED -t "védett" helyre helyezték: A LED 2 másodperces időközönként villog; a soros kimenet ugyanaz. Az egyetlen különbség, aminek be kell következnie, hogy a LED már nem villog a letöltés során, mivel ezalatt a 2A multiplexer tüskén keresztül csatlakozik a földhöz.

Kép
Kép

4. lépés: ATtiny84 2. eset - Elkülönítse az alkalmazásbemenetet

Kép
Kép

Ez a lépés az előző kimeneti leválasztási eset beállításaira épül. A hardvermódosítások során SPST kapcsolót kell csatlakoztatni az ATtiny84 pin 6 (MOSI) csatlakozóhoz a multiplexeren keresztül. Tehát a hardverváltozások minimálisak, de számos szoftvermódosítás lehetővé teszi, hogy az SPST kapcsoló vezérelje a LED -et egy tűcsere megszakítás segítségével. A frissített kód a szakasz alján található. A kódot be kell másolni az Arduino IDE -be; javasolja a mentést Multiplexer_Input néven. (Elnézést kérek a szakasz hossza miatt, de ez az utasítás lényege, és úgy gondolom, hogy ez inkább monolitként olvasható, mint mesterséges szünetek beillesztése.)

Frissítés Elhelyezkedés Célja
tartalmazza a "feltört" SoftwareSerial osztályt részt tartalmazza A LED -et most az SPST kapcsoló vezérli egy tűcsere megszakításon keresztül. A SoftwareSerial osztályt módosítani kell, mivel különben az ÖSSZES PIN cserét megszakító vektort kiosztja. Ez "többszörös definíciós" hivatkozási hibát okoz az SPST kapcsolóhoz rendelt (0. port) vektorhoz. A feltört SoftwareSerial verziót ugyanabban a könyvtárban kell elhelyezni, mint a programot, hogy csak ezt az alkalmazást érintse.
SPST bemeneti csap definíció tartalmazza/definíció részt az SPST bemenet hozzárendelése a készülékhez. A csap eszközspecifikus, ezért hozzáadódik az #ifdef ATtiny8x szakaszhoz.
SPST bemeneti pin mód beállítási funkció Az SPST érintkező bemenetként van konfigurálva
Konfigurálja az SPST pin megszakítást beállítási funkció A megszakítási vektor hozzá van rendelve az SPST bemeneti csaphoz, így a kapcsoló állapotának megváltoztatása megszakítást okoz. A konfigurációs regiszterek és a megszakítás típusa eszközspecifikus. Annak érdekében, hogy a kód a lehető legegyszerűbb legyen, a különbségeket egy #if meghatározott szakaszon belül kezeljük
A teljes soros üzenet beállítása beállítási funkció A telepítés befejezett soros kimenete üzenet megváltozik, hogy tükrözze a Multiplexer Input alkalmazást
Adja hozzá az SPST kapcsoló ISR funkcióját kód szakasz Hozzáadásra kerül az SPST tűcsere megszakítás ISR -je. A kód gyakori, de a használt vektor eszközspecifikus, és a program tetején lévő eszközfüggő szakaszokban van definiálva. Annak ellenőrzése érdekében, hogy az ISR aktiválva van -e, a LED állapota megváltozik. Bár egy valódi alkalmazásban nem-nem, egy soros kimeneti üzenet jön létre, amely tükrözi az új LED állapotot.
A ciklusfeldolgozás módosítása hurok funkció Az ISR mostantól vezérli a LED be- és kikapcsolását, hogy a funkcionalitás eltávoluljon a hurokrutinból. Az alvási rutin hívása hozzáadódik az ATtiny84 -hez, mint egyfajta "extra". Ehhez az alkalmazáshoz az ATtiny85 alvás nem működik; talán a Software Serial osztály interferenciája miatt, mivel az eltávolított SoftwareSerial esetén működik.
Adjon hozzá alvási rutinot kód szakasz Az alvó funkció nem szükséges a multiplexer használatának bemutatásához. Csak azért adtuk hozzá, mert általában várni akar egy bemenetre POWER_DOWN üzemmódban, hogy energiát takarítson meg, és nem folytatja a programhurok futását, és semmit sem tesz, amíg be nem lép.

Módosítsa a SoftwareSerial osztálykódot

A SoftwareSerial osztályt úgy kell megváltoztatni, hogy az ne csapja le az összes tűcsere megszakító portot. A SoftwareSerial osztály kódja a címen található

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

Keresse meg a PCINT0_vect fájlt a SoftwareSerial.cpp fájlban, és keresse meg a kódváltozások kezdőhelyét. Adja hozzá a következő kódot közvetlenül a meglévő #if meghatározott (PCINT0_vect) utasítás előtt.

#if meghatározott (_ AVR_ATtiny84_)

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

Most kommentálja a meglévő kódblokkot, amely kiosztja a portmegszakítási vektorokat az alábbiak szerint (csak adja hozzá a kezdő és befejező blokk megjegyzés szimbólumokat / * és * /):

/*

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

Konfigurálja a hardvert

Az SPST kapcsoló az ATtiny84 6. tűhöz (MOSI) van csatlakoztatva a 2. lépésben leírtak szerint. Az eljárás megkettőződik itt a kényelem érdekében.

  • csatlakoztassa a 3A kapcsolóbemenetet a Tiny AVR programozó fejléc MOSI vezetékéhez
  • csatlakoztassa a 3B -t az SPST kapcsoló ON kimeneti csapjához
  • csatlakoztassa a 3Y -t az ATtiny84 6. tűhöz

    • EREDMÉNYEK:

      • A 3A, MOSI, a letöltés során át lesz vezetve az ATtiny84 6. pin -hez
      • 3B, SPST kimenet, a letöltés után a 6 -os érintkezőre kerül

Futtassa a programot

Futás előtt állítsa az SPST kapcsolót kikapcsolt helyzetbe. Ellenkező esetben a LED akkor világít, amikor a kapcsolót kikapcsolják, és fordítva. Kövesse a 3. lépésben leírt eljárást az alkalmazásbeviteli program betöltéséhez, fordításához és letöltéséhez az Arduino IDE használatával. A korábbiakhoz hasonlóan a LED -nek nem szabad villognia a letöltés során, így a program futásának egyetlen jelzése a sorrendi üzenet lesz a telepítési rutin végén: SETUP Complete - Bemeneti példa

Ekkor a program az SPST kapcsoló bemenetére vár. Ha a kapcsolót ON állásba helyezi, a LED bekapcsol; visszakapcsolás kikapcsolt helyzetbe kikapcsolja a LED -et. A kimenő üzenetek igazolják, hogy az ISR -t meghívták (ISR: Led HIGH, ISR: LED LOW). Figyelje meg, hogy a soros üzenetek sorrendje GO GO SLEEP, először a kapcsoló állapotváltozására várva; amikor kap egy kapcsoló bemenetet, az ISR meghívásra kerül, átkapcsolja a LED -et és dokumentálja a változást; majd a feldolgozás felveszi az alvó hívást követően, mivel a megszakítás felébreszti a processzort.

Kép
Kép

PROGRAM AZ INSTRUKCIÓHOZ:

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

// 2. RÉSZ: Alkalmazás/letöltés eszköz pin megosztása //. Módosítja az 1. rész kódját, hogy támogassa az SPI programozási felülethez // rendelt csapok // alkalmazásbeli újrafelhasználását. "Comon" kód ATtiny85 és ATtiny84 // *************************************** ********************************** #include "SoftwareSerial.h" // Módosított Arduino SoftwareSerial osztály #include // Míg a feldolgozási kód gyakori, a használt csapok eszközspecifikusak #ha meghatározott (_ AVR_ATtiny84_) || definiált (_ AVR_ATtiny84A_) #define ledPin 4 // Kapcsolt kapcsoló be- és kikapcsolása #define rxPin 9 // Soros vételhez használt pin #define txPin 10 // Soros átvitelhez használt pin (MOSI) #define ISR_VECT PCINT0_vect // SPST kapcsoló Csapváltás megszakítás vektor #elif definiálva (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Bemenet az SPST kapcsolóról (INT0_ve) // SPST kapcsoló Csapváltás megszakítás vektor #else #error Ez a projekt támogatja az ATiny84 és ATtiny85 projekteket., txPin); // ------------------------------------------------ ------------------------ // Inicializálja a feldolgozási erőforrásokat // ------------------- -------------------------------------------------- --- void setup () {mySerial.begin (9600); // Soros feldolgozás indítása késleltetés (2000); // Adjon időt a Serial Com portnak az indítás befejezéséhez. // máskülönben az 1. kimenet valószínűleg hiányzik vagy elrontott pinMode (ledPin, OUTPUT); // LED tű konfigurálása OUTPUT pinMode (SpstPin, INPUT); // Az SPST kapcsolócsap konfigurálása INPUT #if definiálva (_ AVR_ATtiny84_) || [_AVR_ATtiny84A_] // állítsa be a csapváltás megszakítását a kapcsolóbemenet kezelésére a 6. tűn (MOSI) GIMSK | = (1 <

5. lépés: ATtiny85 1. eset - Az alkalmazás kimenetének elkülönítése

Kép
Kép

Ahelyett, hogy duplikált hardverbeállítást készítene az ATtiny85 számára, valószínűleg könnyebb az ATtiny84 kész konfigurációjával kezdeni a 4. lépéstől, és kicserélni a tiny84 chipet a tiny85 -re. Az összes szükséges hardver már rendelkezésre áll. Ha ezt a módszert alkalmazza, keresse meg a tiny85 -öt úgy, hogy a 3. és 4. érintkező egy vonalba kerüljön a tx soros kábellel, és fogadja a vezetékeket. Ezután már csak az SPI interfész vezetékének áthelyezéséről van szó, hogy megfeleljen az ATtiny85 számára előírt helyeknek.

Ha a nulláról kezdi, kövesse a 3. lépés általános lépéseit és a fenti fritting diagramot. A kód ugyanaz, mint az ATtiny84 esetében a 3. lépésben, és ugyanazok az eredmények várhatóak - nem villódzik a letöltés során; futás közben a LED 2 másodpercenként villog, és a soros kimeneti üzenetek követik a LED állapotát.

Kép
Kép

6. lépés: ATtiny85 2. eset - Elkülönítse az alkalmazásbemenetet

Kép
Kép

A hardver beállításához kezdje a konfigurációval az 5. lépéstől, és adja hozzá az SPST kapcsolót a fenti fritázási diagramnak megfelelően. Valójában egy pillanatnyi kapcsolót használtam a tiny85 verzióhoz, és ez kissé megkönnyíti az ellenőrzést. Vegye figyelembe, hogy a kapcsoló kimenete 180 fokkal el van forgatva az ATtiny84 konfigurációtól. Ez a módosítás megkönnyíti a bekötési vezetékek vezetését, mivel mind a 3 SPI jel ugyanazon az oldalon található az ATtiny85 esetében.

Ugyanazt a programot használja, mint az ATtiny84 4. lépésnél. Ugyanazok az általános eredmények várhatók - a LED állapot változik, amikor az SPST kapcsoló be/ki van kapcsolva, és a soros kimeneti üzenetek dokumentálják a változásokat. Hiányoznak a GO TO SLEEP üzenetek, mivel az ATtiny85 nem használja az alvó funkciót. Annak ellenére, hogy ugyanazt a programot használják, a megvalósításban jelentős különbségek vannak, mivel az ATtiny85 csak egy portregiszterrel rendelkezik (0. port):

  1. A SoftwareSerial most kiosztja a 0 -as portváltás megszakítását a soros kommunikációhoz (Emlékezzünk vissza, hogy az ATtiny84 portot használhattuk.)
  2. Az SPST kapcsoló megszakítását 0 külső megszakítással (INT0) kell megvalósítani, mivel az egyetlen érintkezőváltás megszakítást a SoftwareSerial osztja ki. Ez jól szemlélteti azt a pontot, hogy a tűcsere megszakítások és a külső megszakítások logikailag függetlenek, és ugyanazon portregiszterben használhatók.
  3. A módosított SoftwareSerial verzió használatával semmi sem érhető el - csak egy port van, és a SoftwareSerial osztály megragadja. A módosított osztályt azonban továbbra is csak azért használtuk, hogy elkerüljük a változást, amely nem közvetlenül kapcsolódik ennek a lépésnek a céljához.

Ajánlott: