Obsah:

Opětovné použití kolíku rozhraní ATtiny84/85 SPI: 6 kroků
Opětovné použití kolíku rozhraní ATtiny84/85 SPI: 6 kroků

Video: Opětovné použití kolíku rozhraní ATtiny84/85 SPI: 6 kroků

Video: Opětovné použití kolíku rozhraní ATtiny84/85 SPI: 6 kroků
Video: Schinderův tábor 2012 ( Schindlerův seznam ) 2024, Červenec
Anonim
Opakované použití kolíku rozhraní ATtiny84/85 SPI
Opakované použití kolíku rozhraní ATtiny84/85 SPI

Tento instruktáž navazuje na instruktáž „ATtiny84/85 In-circuit Debugging with Serial Output“a rozšiřuje konfiguraci hardwaru a softwaru tak, aby řešila problém opětovného použití programovacích stahovacích pinů aplikačním programem. Mezi touto a instruktabilní částí 1 jsou diskutována/demonstrována následující témata:

Téma ATtiny84 ATtiny85
Sériová komunikace pomocí třídy SoftwareSerial X X
Sdílení pinů zařízení mezi aplikací a stažením X X
Pin Změnit přerušení X
Externí přerušení X
Spánek v režimu POWER_DOWN; probuzení na přerušení X
Řešení pro "vektorově definovanou" chybu vektorového přerušení spojenou se SoftwareSerial X
Cyklus úpravy, stahování, ladění, … vývojového cyklu pro zařízení ATtiny X X

Přidání hardwarové I/O komponenty na jeden z pinů vyhrazených pro programovací rozhraní SPI je někdy v pořádku, někdy ne. Například přidání LED do MISO způsobí, že LED bliká během stahování a poté je k dispozici pro aplikaci. Přidání piezoelektrického bzučáku do MISO však bude mít za následek hrozný skřípavý zvuk následovaný selháním stahování.

Tento instruktáž vysvětluje, jak pomocí multiplexeru 4x2: 1 „obnovit“využití pinů přiřazených signálům MISO, MOSI a SCK rozhraní SPI jejich ochranou během stahování. Opětovné použití kolíku RESET vyžaduje výměnu pojistky a tento přístup se na něj nevztahuje. Duální přiřazení pinů se provádí pomocí multiplexeru pro přepínání mezi vstupy aplikace a programováním v závislosti na tom, zda probíhá stahování. Kód a schémata jsou zahrnuty pro ATtiny84 i ATtiny85. Konfigurace ATiny84 je adresována jako první, protože má dva I/O porty a lze ji použít k ilustraci některých dalších problémů/řešení. Po diskusi tiny84 jsou stejné scénáře diskutovány pro ATtiny85.

Krok 1: Požadovaný hardware

obraz
obraz

Většina požadovaného hardwaru byla uvedena v části 1 s pokyny, takže níže je uveden pouze nový hardware.

název Možný zdroj Jak se používá
Multiplexer 4x2: 1 Myší lovec Obsahuje čtyři přepínače se 2 vstupy a 1 výstupem, což je mechanismus, kterým jsou sdíleny signály rozhraní SPI a aplikační I/O.
Přepínač SPST Jakýkoli typ přepínače (dočasný nebo se západkou) bude fungovat. Přepínač slouží k ilustraci sdílení pinů pro vstup aplikace.
10K odpor Stahovací odpor pro přepínač SPST, aby se zabránilo plovoucímu vstupu
obraz
obraz
obraz
obraz

Multiplexer je klíčem k izolaci používání stahování pinů od používání aplikace. Celková funkčnost multiplexeru 4x2: 1 je poměrně přímočará a skládá se ze 2 řídicích signálů a 4 identicky fungujících přepínačů. Chování každého pinu multiplexeru je popsáno níže:

Kolík název Funkce
15 G Jak je uvedeno v tabulce pravdy, multiplexor funguje pouze tehdy, když je pin pro povolení G nízký. Protože nikdy nechceme multiplexer úplně deaktivovat, pin 15 bude připojen přímo k zemi.
2-4; 5-7; 9-11;12-14 A (vstup), B (vstup), Y (výstup) K dispozici jsou čtyři 2 vstupy; Přepínače 1 výstupu s každou skupinou 3 pinů číslovaných postupně v pořadí A (vstup), B (vstup), Y (výstup), např. pro spínač 1; kolík 2 = 1A; kolík 3 = 1B; kolík 4 = 1 rok.
1 Vybrat Když je Select nízká, je spínač A připojen k příslušnému spínacímu výstupnímu pinu Y. Když je volba vysoká, je místo toho připojen k výstupu spínačový vstup B. Přepínače jsou ovládány současně signálem Select a fungují identicky.
8 GND multiplexer IC uzemnění
16 VCC napájení IC multiplexeru

Krok 2: Přehled testovacích případů

obraz
obraz
obraz
obraz

Dva scénáře opětovného použití pinů jsou založeny na tom, zda je pin vstupem nebo výstupem aplikace. Postup při zpracování jakéhokoli vstupu je vždy stejný; také postup pro aplikační výstupy je identický bez ohledu na hardwarovou komponentu. I přesto je vysvětlení jednodušší a doufejme jasnější, pokud jsou uvedeny konkrétní příklady. Minimalistická rozvržení pro dva případy jsou uvedena výše. Pro podrobnější nastavení se připojení později stanou trochu veverkovým hnízdem, takže by mohlo být užitečné se vrátit k těmto čistším diagramům.

RESET je perfektní volbou pro signál Select multiplexeru, protože je během stahování nízký, ale po dokončení stahování se vrací zpět na vysokou úroveň. Všimněte si toho, že pro oba případy lze použít jakýkoli multiplexní přepínač, protože všechny přepínače se chovají identicky. Také žádný z příkladů není „realistický“; místo toho byli vybráni jako nejjednodušší způsob, jak ilustrovat izolační techniky

  1. Výstupní skříň: LED výstup z ATtiny84 pin 4 (SCK) je izolován pomocí multiplexního přepínače 2

    • připojte pin 2A multiplexeru k zemi
    • připojte pin 2B multiplexeru ke kolíku ATtiny85 4
    • připojte výstup 2Y k LED anodě

      • Očekávané výsledky:

        • LED dioda během stahování nesvítí, protože je připojena k uzemnění 2A
        • LED dioda připojená k výstupnímu kolíku aplikace 4 po stažení přes 2B a začne blikat
  2. Vstupní pouzdro: Vstup přepínače SPST na pin ATtiny84 6 (MOSI) je izolován pomocí přepínače multiplexeru 3

    • Vodič MOSI ze záhlaví programátoru AVR je přesunut na 3A
    • spínačový vstup 3B je připojen k výstupu SPST
    • výstup 3Y je připojen ke kolíku 6 ATtiny84

      • 3A, MOSI, je během stahování připojen ke kolíku 6
      • 3B, výstup SPST, je po stažení připojen na pin 6

Případ 1 je úspěšný, pokud kontrolka LED během stahování programu nebliká a poté bliká každé dvě sekundy po stažení podle očekávání pod kontrolou programu. Bez izolace by LED během stahování blikala, protože je připojena přímo k signálu SCK, který mění stav na příjem/vysílání dat hodin.

Případ 2 je úspěšný, pokud je signál MOSI předáván na ATtiny84 během stahování, tj. Stahování neselže a LED kontrolka reaguje na zapnutí/vypnutí SPST po stažení. Případ 2 zabrání jednomu nepravděpodobnému selhání stahování. Bez izolace způsobí přepínač SPST selhání, pokud 1) je použit západkový spínač a 2) je přepínač během stahování ponechán v zapnuté poloze. Když je přepínač izolován multiplexerem, nemůže za žádných okolností způsobit selhání stahování. Trochu úsek, ale pro nás staré lidi uklidňující.

Jedním z důsledků používání multiplexeru je, že hardwarovou komponentu již nelze připojit přímo k I/O pinu mikrokontroléru. To je poněkud nepohodlné, ale umožňuje to, aby komponenta zůstala na prkénku během testu společně s dalším hardwarem aplikace a po dokončení testu ji lze přesunout zpět na správné místo.

Krok 3: ATtiny84 Case 1 - Izolujte výstup aplikace

obraz
obraz

Tento krok popisuje nastavení pro sdílení výstupního pinu aplikace se signálem stahování. Použitým příkladem je LED dioda připojená ke kolíku 4 (SCK). Použití stávající LED jako příkladu umožňuje zdůraznit přidání multiplexeru do hardwarového a softwarového prostředí části 1.

  • Hardware

    • Přidejte multiplexor na prkénko v relativním umístění uvedeném ve schématu fritzování výše. Multiplexor je umístěn směrem ke středu, aby byl zajištěn prostor pro přepínač SPST potřebný v případě 2.
    • Rozšiřte signál RESET do multiplexeru přidáním přívodního vodiče (doporučeno žlutého) z kolíku ATtiny84 na pin 1 multiplexeru.
    • Zbývající nastavení hardwaru je uvedeno v kroku 2

      • připojte pin 2A multiplexeru přímo k zemi
      • připojte pin 2B k ATtiny84 pin 4
      • připojte výstup 2Y k LED anodě

        • Očekávané výsledky:

          • během stahování je 2Y připojeno k zemi (2A), takže LED dioda zhasne
          • Po stažení je 2Y připojen k ATtiny84 pin 4 - ovládání LED aplikací
  • Software

    • Kód části 1 je znovu použit; je k dispozici spíše z části 1, než je zde možné duplikovat
    • Načtěte a zkompilujte program části 1 do Arduino IDE
    • Zapojte programátor Tiny AVR do USB portu počítače
    • Zapojte Adafruit USB do sériového kabelu do druhého USB portu

      • Vytvoří se port COM, který se automaticky zpřístupní v seznamu portů IDE
      • Spusťte okno COM
    • Stáhněte si zkompilovaný kód do ATtiny84

Výsledky aplikačního programu jsou stejné jako v části 1, protože jedinou změnou bylo přemístění LED na „chráněné“místo: LED bliká ve 2sekundových intervalech; sériový výstup je stejný. Jediným rozdílem, který by měl nastat, je, že LED dioda již během stahování nebliká, protože během této doby je připojena k uzemnění prostřednictvím pinu 2A multiplexeru.

obraz
obraz

Krok 4: ATtiny84 Case 2 - Izolujte vstup aplikace

obraz
obraz

Tento krok vychází z nastavení pro předchozí případ izolace výstupu. Hardwarové změny spočívají v připojení přepínače SPST k ATtiny84 pin 6 (MOSI) prostřednictvím multiplexeru. Změny hardwaru jsou tedy minimální, ale existuje několik softwarových změn, které umožňují přepínači SPST ovládat LED pomocí přerušení změny pinů. Aktualizovaný kód je uveden ve spodní části této části. Kód by měl být zkopírován do Arduino IDE; doporučujeme uložit pod názvem Multiplexer_Input. (Omlouvám se za délku této sekce, ale je to jádro účelu instruktážního programu a myslím, že se lépe čte jako monolit, než vkládat umělé přestávky.)

Aktualizace Umístění Účel
zahrnovat „hacknutou“třídu SoftwareSerial zahrnout sekci LED je nyní ovládána spínačem SPST přes přerušení změny pinů. Třídu SoftwareSerial je třeba upravit, protože jinak přiděluje VŠECHNY vektory přerušení změny pinů. To způsobí chybu odkazu "více definic" pro vektor (port 0) přiřazený k přepínači SPST. Hackovaná verze SoftwareSerial by měla být umístěna ve stejném adresáři jako program, aby ovlivnila pouze tuto aplikaci.
Definice vstupního pinu SPST zahrnout/definiční část přiřazení vstupu SPST k pinu zařízení. Pin je specifický pro zařízení, takže je přidán do sekcí #ifdef ATtiny8x.
Režim vstupního kolíku SPST funkce nastavení Pin SPST je konfigurován jako VSTUP
Nakonfigurujte přerušení pinů SPST funkce nastavení Vektor přerušení je přiřazen vstupnímu pinu SPST, takže změna stavu spínače způsobí přerušení. Konfigurační registry a typ přerušení jsou specifické pro zařízení. Aby byl kód co nejjednodušší, jsou rozdíly zpracovány v rámci #if definované sekce
Nastavte úplnou sériovou zprávu funkce nastavení Zpráva o kompletním nastavení sériového výstupu je změněna tak, aby odrážela aplikaci Multiplexer Input
Přidejte funkci ISR přepínače SPST sekce kódu ISR pro přerušení změny pinů SPST je přidáno. Kód je běžný, ale použitý vektor je specifický pro zařízení a je definován v sekcích závislých na zařízení v horní části programu. Aby se ověřilo, že je ISR aktivován, stav LED se změní. Ačkoli ve skutečné aplikaci ne-ne, je generována zpráva o sériovém výstupu odrážející nový stav LED.
Upravit zpracování smyčky smyčková funkce ISR nyní ovládá zapínání a vypínání LED tak, aby byla funkce odstraněna z rutiny smyčky. Volání rutiny spánku je pro ATtiny84 přidáno jako jakési „extra“. U této aplikace ATtiny85 sleep nefunguje; možná kvůli rušení třídy Software Serial, protože funguje s odstraněným SoftwareSerial.
Přidejte režim spánku sekce kódu Funkce spánku není nutná k prokázání používání multiplexeru. Právě přidáno, protože by obvykle chtělo čekat na vstup v režimu POWER_DOWN, aby se ušetřila energie, a ne pokračovat v běhu programové smyčky a nedělat nic, dokud nedojde ke vstupu.

Upravte kód třídy SoftwareSerial

Třídu SoftwareSerial je třeba změnit, aby nezahrnovala všechny porty přerušení změny pinů. Kód třídy SoftwareSerial se nachází na adrese

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

Vyhledejte na PCINT0_vect v SoftwareSerial.cpp počáteční umístění změn kódu. Přidejte následující kód bezprostředně předcházející existujícímu příkazu #if defined (PCINT0_vect).

definováno #if (_ AVR_ATtiny84_)

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

Nyní okomentujte stávající blok kódu, který přiděluje vektory přerušení portu, jak je uvedeno níže (stačí přidat symboly komentáře začátku a konce bloku / * a * /):

/*

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

Konfigurujte hardware

Přepínač SPST je připojen ke kolíku 6 ATTiny84 (MOSI), jak je uvedeno v kroku 2. Postup je zde pro pohodlí duplikován.

  • připojte spínací vstup 3A k vývodu MOSI konektoru Tiny AVR programátoru
  • připojte 3B k výstupnímu kolíku SPST ON
  • připojte 3Y k ATtiny84 pin 6

    • VÝSLEDEK:

      • 3A, MOSI, bude během stahování bránou přes pin 6 ATtiny84
      • 3B, výstup SPST, bude po stažení uzavřen na pin 6

Spusťte program

Před spuštěním přepněte přepínač SPST do polohy vypnuto. Jinak se LED rozsvítí, když je vypínač vypnutý a naopak. Při načítání, kompilaci a stahování aplikačního vstupního programu pomocí Arduino IDE postupujte podle kroku 3. Stejně jako dříve by LED během stahování neměla blikat, takže jediným signálem, že je program spuštěn, bude sériová zpráva na konci rutiny nastavení: NASTAVENÍ dokončeno - příklad vstupu

V tomto okamžiku program čeká na vstup z přepínače SPST. Umístění spínače do polohy ON způsobí rozsvícení LED; přepnutím zpět do polohy vypnuto LED zhasne. Výstupní zprávy ověřují, že bylo vyvoláno ISR (ISR: Led HIGH, ISR: Led LOW). Všimněte si, že pořadí sériových zpráv je PŘEJÍT DO SPÁNKU, první čeká na změnu stavu přepínače; když získáte vstup spínače, vyvolá se ISR, přepne LED a dokumentuje změnu; pak zpracování navazuje na volání spánku, protože přerušení probouzí procesor.

obraz
obraz

PROGRAM PRO TENTO NÁVOD:

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

// ČÁST 2: Sdílení pinů aplikace/stahování zařízení //. Upravuje kód části 1 tak, aby podporoval opětovné použití pinů aplikace // přiřazených k programovacímu rozhraní SPI //. „Comon“kód pro ATtiny85 a ATtiny84 // *************************************** ******************************************************************* kód zpracování je společný, použité piny jsou specifické pro konkrétní zařízení #je -li definováno (_ AVR_ATtiny84_) || definováno (_ AVR_ATtiny84A_) #define ledPin 4 // Přepnuto pro zapnutí připojené LED zapnuto/vypnuto #define rxPin 9 // Pin použitý pro sériový příjem #define txPin 10 // Pin použitý pro sériový přenos #definovat SpstPin 6 // Vstup z přepínače SPST (MOSI) #define ISR_VECT PCINT0_vect // SPST switch Pin change interrupt vector #elif defined (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Input from SPST switch (INT0)vect_deTine // Přepínač SPST Vektor přerušení změny pinů #else #error Pouze ATiny84 a ATtiny85 jsou podporovány tímto Project #endif // Vytvořte instanci třídy Software Serial určující, které zařízení // piny mají být použity pro příjem a přenos SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Inicializace zdrojů zpracování // ------------------- ---------------------------------------------------------- --- neplatné nastavení () {mySerial.begin (9600); // Spustit zpoždění sériového zpracování (2000); // Poskytněte portu Serial Com čas na dokončení spuštění. // jinak 1. výstup pravděpodobně chybí nebo je zkomolený pinMode (ledPin, OUTPUT); // Konfigurace LED diody pro OUTPUT pinMode (SpstPin, INPUT); // Konfigurujte pin přepínače SPST jako VSTUP #definován (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // nastavení přerušení změny pinů pro zpracování vstupu spínače na pinu 6 (MOSI) GIMSK | = (1 <

Krok 5: ATtiny85 Case 1 - Izolujte výstup aplikace

obraz
obraz

Spíše než budovat duplicitní nastavení hardwaru pro ATtiny85 je pravděpodobně snazší začít s hotovou konfigurací pro ATtiny84 od kroku 4 a nahradit čip tiny84 čipem tiny85. Veškerý požadovaný hardware je pak již k dispozici. Pokud používáte tento přístup, najděte tiny85 tak, aby piny 3 a 4 byly v souladu se sériovým kabelem tx a přijímaly vodiče. Pak už jen stačí přemístit vodiče rozhraní SPI tak, aby odpovídaly jejich požadovaným umístěním pro ATtiny85.

Pokud začínáte od nuly, postupujte podle obecných kroků od kroku 3 a výše uvedeného diagramu. Kód je stejný jako použitý pro ATtiny84 v kroku 3 se stejnými očekávanými výsledky - žádné blikání během stahování; při běhu LED bliká ve 2sekundových intervalech a zprávy o sériovém výstupu sledují stav LED.

obraz
obraz

Krok 6: ATtiny85 Case 2 - Izolujte vstup aplikace

obraz
obraz

Pro nastavení hardwaru začněte s konfigurací od kroku 5 a přidejte přepínač SPST, jak je naznačeno ve schématu fritzování výše. Ve skutečnosti jsem použil dočasný přepínač pro verzi tiny85 a to trochu usnadňuje ověření. Všimněte si, že výstup přepínače je otočen o 180 stupňů z konfigurace ATtiny84. Tato změna usnadňuje vedení propojovacích vodičů, protože všechny 3 signály SPI jsou u ATtiny85 na stejné straně.

Použijte stejný program jako pro ATtiny84, krok 4. Očekávají se stejné obecné výsledky - LED změní stav, když je spínač SPST zapnutý/vypnutý a změny sériového výstupu dokumentují změny. Zprávy PŘEJÍT DO SPÁNKU chybí, protože u ATtiny85 není vyvolána funkce spánku. I když se používá stejný program, existují značné rozdíly v implementaci, což odpovídá skutečnosti, že ATtiny85 má pouze jeden registr portů (Port 0):

  1. SoftwareSerial nyní přiděluje přerušení změny portu 0 pro sériovou komunikaci (Připomeňme, že jsme mohli použít port 1 pro ATtiny84.)
  2. Přerušení přepínače SPST musí být implementováno s externím přerušením 0 (INT0), protože přerušení změny jediného a jediného pinu je přiděleno SoftwareSerial. To ilustruje bod, že přerušení změny pinů a externí přerušení jsou logicky nezávislé a mohou být použity ve stejném registru portů.
  3. Použitím upravené verze SoftwareSerial nic nezískáte - existuje pouze jeden port a třída SoftwareSerial BUDE chytit. Upravená třída však byla stále používána jen proto, aby se zabránilo změně, která přímo nesouvisí s cílem tohoto kroku.

Doporučuje: