Obsah:
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-13 06:58
Tento pokyn nadväzuje na pokyn „Ladenie v obvode ATtiny84/85 so sériovým výstupom“a rozširuje konfiguráciu hardvéru a softvéru tak, aby riešila problém opätovného použitia pinov na stiahnutie programovania aplikačným programom. Celkom medzi touto a pokynom pre časť 1 sú prediskutované/demonštrované nasledujúce témy:
Téma | ATtiny84 | ATtiny85 |
---|---|---|
Sériová komunikácia pomocou triedy SoftwareSerial | X | X |
Zdieľanie pinov zariadenia medzi aplikáciou a sťahovaním | X | X |
PIN Zmena prerušenia | X | |
Externé prerušenie | X | |
Spať v režime POWER_DOWN; zobudiť na prerušenie | X | |
Riešenie chyby vektorového prerušenia „viacnásobne definovaného“súvisiacej so SoftwareSerial | X | |
Cyklus úpravy, sťahovania, ladenia, … vývojového cyklu pre zariadenia ATtiny | X | X |
Pridanie hardvérového I/O komponentu na jeden z pinov vyhradených pre programovacie rozhranie SPI je niekedy v poriadku, niekedy nie. Napríklad pridanie LED do MISO spôsobí, že LED dióda počas sťahovania bliká a potom je k dispozícii pre aplikáciu. Pridanie piezoelektrického bzučiaka do MISO však bude mať za následok strašný škrípavý zvuk, po ktorom bude nasledovať zlyhanie sťahovania.
Tento návod vysvetľuje, ako použiť multiplexor 4x2: 1 na „obnovu“použitia pinov priradených k signálom SPI rozhrania MISO, MOSI a SCK ich ochranou počas sťahovania. Opätovné použitie kolíka RESET vyžaduje výmenu poistky a tento prístup naň nie je zahrnutý. Dvojité priradenie pinov sa dosahuje pomocou multiplexora na prepínanie medzi vstupmi aplikácie a programovania v závislosti od toho, či prebieha sťahovanie. Kód a schémy sú zahrnuté pre ATtiny84 aj ATtiny85. Konfigurácia ATiny84 je adresovaná ako prvá, pretože má dva I/O porty a môže byť použitá na ilustráciu niektorých ďalších problémov/riešení. Po diskusii tiny84 sú diskutované rovnaké scenáre aj pre ATtiny85.
Krok 1: Požadovaný hardvér
Väčšina požadovaného hardvéru bola uvedená v časti 1 s pokynmi, takže nižšie je uvedený iba nový hardvér.
názov | Možný zdroj | Ako sa používa |
---|---|---|
Multiplexor 4x2: 1 | Mouser | Obsahuje štyri prepínače s 2 vstupmi a 1 výstupom, ktoré sú mechanizmom zdieľania signálov rozhrania SPI a vstupov a výstupov aplikácie. |
Prepínač SPST | Funguje akýkoľvek typ prepínača (dočasný alebo západkový). Prepínač slúži na ilustráciu zdieľania pinov pre vstup aplikácie. | |
10K odpor | Stiahnutím odporu pre prepínač SPST sa vyhnite plávajúcemu vstupu |
Multiplexor je kľúčom k izolácii používania sťahovania pinov od používania aplikácií. Celková funkčnosť multiplexera 4x2: 1 je pomerne jednoduchá a skladá sa z 2 riadiacich signálov a 4 identicky fungujúcich spínačov. Správanie každého pinu multiplexora je popísané nižšie:
Pin | názov | Funkcia |
---|---|---|
15 | G | Ako je uvedené v tabuľke pravdy, multiplexor funguje, iba ak je kolík aktivácie G nízky. Pretože nikdy nechceme úplne deaktivovať multiplexor, pin 15 bude pripojený priamo k zemi. |
2-4; 5-7; 9-11;12-14 | A (vstup), B (vstup), Y (výstup) | K dispozícii sú štyri 2 vstupy; 1-výstupové prepínače s každou skupinou 3 pinov číslovaných postupne v poradí A (vstup), B (vstup), Y (výstup) napr. pre spínač 1; kolík 2 = 1A; kolík 3 = 1B; kolík 4 = 1 rok. |
1 | Vyberte | Keď je Select nízka, prepínací vstup A je pripojený k príslušnému prepínaciemu výstupnému kolíku Y. Keď je voľba vysoká, prepínač vstup B je namiesto toho pripojený k výstupu. Prepínače sú ovládané súčasne signálom Select a fungujú identicky. |
8 | GND | uzemnenie multiplexora IC |
16 | VCC | výkon multiplexora IC |
Krok 2: Prehľad testovacích prípadov
Dva scenáre opätovného použitia pinov sú založené na tom, či je pinom vstup alebo výstup aplikácie. Postup pri spracovaní akéhokoľvek vstupu je vždy rovnaký; aj postup pre výstupy aplikácií je identický bez ohľadu na hardvérové komponenty. Napriek tomu je vysvetlenie jednoduchšie, a dúfajme, že aj jasnejšie, ak sú uvedené konkrétne príklady. Minimalistické rozloženia pre tieto dva prípady sú uvedené vyššie. Pre podrobné nastavenia neskôr sa zo spojení stane trochu veveričie hniezdo, takže by mohlo byť užitočné vrátiť sa k týmto čistejším diagramom.
RESET je perfektnou voľbou pre signál Select multiplexera, pretože počas sťahovania je nízky, ale po dokončení sťahovania sa vracia späť na vysokú úroveň. Všimnite si toho, že ktorýkoľvek z multiplexorových prepínačov by mohol byť použitý pre oba prípady, pretože všetky prepínače sa správajú rovnako. Ani jeden z príkladov nie je „realistický“; namiesto toho boli zvolené ako najjednoduchší spôsob ilustrácie izolačných techník
-
Výstupné puzdro: LED výstup z ATtiny84 pin 4 (SCK) je izolovaný pomocou multiplexorového prepínača 2
- pripojte pin 2A multiplexora k zemi
- prepojte pin 2B multiplexera s pinom ATtiny85 4
-
pripojte výstup 2Y k LED anóde
-
Očakávané výsledky:
- LED dióda počas sťahovania nesvieti, pretože je pripojená k uzemneniu 2A
- LED dióda pripojená k výstupnému kolíku aplikácie 4 po stiahnutí cez 2B a začne blikať
-
-
Vstupný prípad: Vstup prepínača SPST na kolík 6 ATtiny84 (MOSI) je izolovaný pomocou prepínača multiplexora 3
- Vodič MOSI z hlavičky programátora AVR je presunutý do 3A
- prepínací vstup 3B je pripojený k výstupu SPST
-
výstup 3Y je pripojený k pinu 6 ATtiny84
- 3A, MOSI, je počas sťahovania pripojený k pinu 6
- 3B, výstup SPST, je po stiahnutí pripojený k pinu 6
Prípad 1 je úspešný, ak LED dióda počas sťahovania programu nebliká a potom bliká každé dve sekundy po stiahnutí podľa očakávania pod kontrolou programu. Bez izolácie by LED dióda počas sťahovania blikala, pretože je pripojená priamo k signálu SCK, ktorý mení stav na príjem/prenos hodinových dát.
Prípad 2 je úspešný, ak je signál MOSI počas sťahovania odoslaný ďalej na ATtiny84, t.j. sťahovanie nezlyhá a dióda LED po stiahnutí reaguje na zapnutie/vypnutie SPST. Prípad 2 zabráni nepravdepodobnému zlyhaniu sťahovania. Bez izolácie spôsobí spínač SPST poruchu, ak 1) je použitý západkový spínač a 2) je spínač počas sťahovania ponechaný v zapnutej polohe. Keď je spínač izolovaný multiplexorom, nemôže za žiadnych okolností spôsobiť zlyhanie sťahovania. Trochu úsek, ale pre nás starých ľudí utešujúci.
Jedným z dôsledkov použitia multiplexora je, že hardvérovú súčasť už nemožno pripojiť priamo k I/O kolíku mikrokontroléra. To je trochu nepohodlné, ale umožňuje to, aby komponent zostal na doske počas testu spolu s ďalším hardvérom aplikácie a po dokončení testu sa dá presunúť späť na svoje správne miesto.
Krok 3: ATtiny84 Prípad 1 - Izolácia výstupu aplikácie
Tento krok popisuje nastavenie zdieľania výstupného kolíka aplikácie so signálom sťahovania. Použitým príkladom je LED dióda pripevnená k pinu 4 (SCK). Použitie existujúcej LED ako príkladu umožňuje dôraz na pridanie multiplexora do hardvérového a softvérového prostredia časti 1.
-
Hardvér
- Pridajte multiplexor na dosku s chlebom v relatívnom mieste uvedenom vo vyššie uvedenom diagrame. Multiplexor je umiestnený v strede, aby poskytol priestor pre prepínač SPST potrebný v prípade 2.
- Rozšírte signál RESET do multiplexora pridaním zvodového vodiča (žltý) z pinu ATtiny84 na pin 1 multiplexora.
-
Zostávajúce nastavenie hardvéru je uvedené v kroku 2
- pripojte pin 2A multiplexora priamo k zemi
- pripojte pin 2B k ATtiny84 pinu 4
-
pripojte výstup 2Y k LED anóde
-
Očakávané výsledky:
- počas sťahovania je 2Y pripojený k uzemneniu (2A), takže LED dióda zostane zhasnutá
- Po stiahnutí je 2Y pripojený k ATtiny84 pin 4 - aplikačné LED ovládanie
-
-
Softvér
- Kód časti 1 sa znova použije; je k dispozícii z časti 1, je možné ho inštruovať, a nie duplikovať tu
- Načítajte a skompilovajte program časť 1 do Arduino IDE
- Zapojte programátor Tiny AVR do USB portu počítača
-
Pripojte sériový kábel Adafruit USB k druhému portu USB
- Vytvorí sa port COM, ktorý sa automaticky sprístupní v zozname portov IDE
- Spustite okno COM
- Stiahnite si skompilovaný kód do ATtiny84
Výsledky aplikačného programu sú rovnaké ako v časti 1, pretože jedinou zmenou bolo premiestnenie diódy LED na „chránené“miesto: LED dióda bliká v 2 -sekundových intervaloch; sériový výstup je rovnaký. Jediný rozdiel, ktorý by mal nastať, je ten, že dióda LED už nebliká počas sťahovania, pretože počas tejto doby je pripojená k zemi pomocou kolíka 2A multiplexora.
Krok 4: ATtiny84 Case 2 - Izolácia vstupu aplikácie
Tento krok vychádza z nastavenia pre predchádzajúci prípad izolácie výstupu. Hardvérové zmeny pozostávajú z pripojenia prepínača SPST k pinu 6 ATtiny84 (MOSI) prostredníctvom multiplexora. Hardvérové zmeny sú teda minimálne, ale existuje niekoľko softvérových zmien, ktoré umožňujú prepínaču SPST ovládať diódu LED pomocou prerušenia zmeny kolíka. Aktualizovaný kód je uvedený v spodnej časti tejto sekcie. Kód by mal byť skopírovaný do Arduino IDE; navrhnite uložiť ho pod názvom Multiplexer_Input. (Ospravedlňujem sa za dĺžku tejto sekcie, ale je jadrom účelu inštrukcie a myslím si, že sa lepšie číta ako monolit, než ako vkladanie umelých prestávok.)
Aktualizácia | Poloha | Účel |
---|---|---|
zahŕňajú „hacknutú“triedu SoftwareSerial | zahrnúť sekciu | LED dióda je teraz ovládaná prepínačom SPST prostredníctvom prerušenia zmeny pinov. Trieda SoftwareSerial musí byť upravená, pretože inak prideľuje VŠETKY vektory prerušenia zmeny pinov. To spôsobuje chybu prepojenia "viac definícií" pre vektor (port 0) priradený k prepínaču SPST. Hackovaná verzia SoftwareSerial by mala byť umiestnená v rovnakom adresári ako program, aby ovplyvňovala iba túto aplikáciu. |
Definícia vstupného kolíka SPST | sekcia zahrnúť/definícia | priradenie vstupu SPST ku kolíku zariadenia. Pin je špecifický pre zariadenie, takže je pridaný do sekcií #ifdef ATtiny8x. |
Režim vstupného kolíka SPST | funkcia nastavenia | Pin SPST je nakonfigurovaný ako VSTUP |
Nakonfigurujte prerušenie pinov SPST | funkcia nastavenia | Vektor prerušenia je priradený vstupnému kolíku SPST, takže zmena stavu prepínača spôsobí prerušenie. Konfiguračné registre a typ prerušenia sú špecifické pre zariadenie. Aby bol kód čo najjednoduchší, rozdiely sa riešia v #definovanej sekcii |
Nastavte úplnú sériovú správu | funkcia nastavenia | Hlásenie o dokončení sériového výstupu nastavenia sa zmení tak, aby zodpovedalo aplikácii vstupu Multiplexer |
Pridajte funkciu ISR prepínača SPST | sekcia kódu | ISR pre prerušenie zmeny pinov SPST je pridané. Kód je bežný, ale použitý vektor je špecifický pre zariadenie a je definovaný v sekciách závislých od zariadenia v hornej časti programu. Aby sa overilo, či je ISR aktivovaný, stav LED sa zmení. Aj keď v skutočnej aplikácii nie je, generuje sa správa o sériovom výstupe odrážajúca nový stav LED. |
Upraviť spracovanie slučky | slučková funkcia | ISR teraz ovláda zapínanie a vypínanie diódy LED, aby sa z rutiny slučky odstránila funkčnosť. Volanie do rutiny spánku je pre ATtiny84 pridané ako akési „extra“. Pre túto aplikáciu spánok ATtiny85 nefunguje; možno kvôli rušeniu triedy Software Serial, pretože funguje, keď je SoftwareSerial odstránený. |
Pridajte spánkový režim | sekcia kódu | Funkcia spánku nie je potrebná na preukázanie používania multiplexora. Práve pridané, pretože zvyčajne by ste chceli čakať na vstup v režime POWER_DOWN, aby ste ušetrili energiu, a nie pokračovať v behu programovej slučky, pričom nerobíte nič, kým nenastane vstup. |
Upravte kód triedy SoftwareSerial
Triedu SoftwareSerial je potrebné zmeniť tak, aby nezaháňala všetky porty prerušenia zmeny pinov. Kód triedy SoftwareSerial sa nachádza na
C: / Program Files (x86) Arduino / hardware / arduino / avr / libraries / SoftwareSerial / src
Nájdite na PCINT0_vect v SoftwareSerial.cpp a nájdite počiatočné miesto pre zmeny kódu. Pridajte nasledujúci kód bezprostredne pred existujúci príkaz #definovaný (PCINT0_vect).
definované #if (_ AVR_ATtiny84_)
#define MYPORT PCINT1_vect #elif defined (_ AVR_ATtiny85_) #define MYPORT PCINT0_vect #endif ISR (MYPORT) {SoftwareSerial:: handle_interrupt (); }
Teraz okomentujte existujúci blok kódu, ktorý prideľuje vektory prerušenia portu, ako je uvedené nižšie (stačí pridať symboly komentárov začiatočného a koncového bloku / * a * /):
/*
#if definovaný (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if definovaný (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if definovaný (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if definované (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #koniec Ak */
Konfigurujte hardvér
Prepínač SPST je pripojený k kolíku 6 ATTiny84 (MOSI), ako je to uvedené v kroku 2. Tento postup je tu kvôli pohodliu duplikovaný.
- prepínací vstup 3A pripojte k vývodu MOSI konektora Tiny AVR programátora
- pripojte 3B k výstupnému kolíku ON prepínača SPST
-
pripojte 3Y k pinu ATtiny84 6
-
VÝSLEDKY:
- 3A, MOSI, bude počas sťahovania prepojený s kolíkom 6 ATtiny84
- 3B, výstup SPST, bude po stiahnutí prepojený s pinom 6
-
Spustite program
Pred spustením prepnite prepínač SPST do polohy vypnuté. V opačnom prípade sa LED dióda rozsvieti, keď je vypínač vypnutý a naopak. Podľa postupu v kroku 3 načítajte, kompilujte a sťahujte vstupný program aplikácie pomocou Arduino IDE. Rovnako ako predtým, LED dióda by počas sťahovania nemala blikať, takže jediným indikátorom toho, že je program spustený, bude sériová správa na konci nastavovacej rutiny: NASTAVENIE dokončené - príklad vstupu
V tomto mieste program čaká na vstup z prepínača SPST. Prepnutie prepínača do polohy ON spôsobí rozsvietenie diódy LED; prepnutím späť do polohy vypnuté LED zhasne. Výstupné správy overujú, či bolo vyvolané ISR (ISR: Led HIGH, ISR: Led LOW). Všimnite si toho, že poradie sériových správ je PREJSŤ DO SPÁNKU, ako prvé počká na zmenu stavu prepínača; keď získate vstup prepínača, vyvolá sa ISR, prepne sa dióda LED a dokumentuje sa zmena; potom spracovanie zdvihne po spánku, pretože prerušenie prebudí procesor.
PROGRAM PRE TENTO NÁVOD:
//************************************************************************
// ČASŤ 2: Zdieľanie pinov aplikácie/sťahovania zariadenia //. Upravuje kód časti 1 tak, aby podporoval opätovné použitie pinov aplikácie // priradených k programovaciemu rozhraniu SPI //. „Comon“kód pre ATtiny85 a ATtiny84 // **************************************** ********************************************************************** kód spracovania je spoločný, použité piny sú špecifické pre zariadenie #ak sú definované (_ AVR_ATtiny84_) || definovaný (_ AVR_ATtiny84A_) #define ledPin 4 // Prepínanie na zapnutie pripojenia LED zapnutie/vypnutie #define rxPin 9 // Kolík použitý pre sériový príjem #define txPin 10 // Kolík použitý pre sériový prenos #definovať SpstPin 6 // Vstup z prepínača 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 // SPST prepínač Vektor prerušenia zmeny pinov #else #error Iba ATiny84 a ATtiny85 sú podporované týmto projektom #endif // Vytvorenie inštancie triedy Software Serial určujúcej, ktoré zariadenie // piny sa majú použiť na príjem a prenos SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Inicializácia zdrojov spracovania // ------------------- ---------------------------------------------------------- --- neplatné nastavenie () {mySerial.begin (9600); // Spustenie oneskorenia sériového spracovania (2000); // Poskytnite portu Serial Com čas na dokončenie spustenia. // inak, 1. výstup pravdepodobne chýba alebo je skomolený pinMode (ledPin, OUTPUT); // Konfigurácia LED diódy pre VÝSTUP pinMode (SpstPin, INPUT); // Konfigurujte prepínač SPST ako VSTUP #ak je definované (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // nastavenie prerušenia zmeny pinu na zvládnutie vstupu prepínača na pine 6 (MOSI) GIMSK | = (1 <
Krok 5: Prípad ATtiny85 1 - Izolácia výstupu aplikácie
Namiesto vytvárania duplicitného nastavenia hardvéru pre ATtiny85 je pravdepodobne jednoduchšie začať s hotovou konfiguráciou ATtiny84 od kroku 4 a nahradiť čip tiny84 čipom tiny85. Všetok požadovaný hardvér je potom už k dispozícii. Ak používate tento prístup, nájdite zariadenie small85 tak, aby piny 3 a 4 boli v súlade so sériovým káblom tx a prijímali vodiče. Potom ide len o premiestnenie vodičov rozhrania SPI tak, aby zodpovedali ich požadovanému umiestneniu pre ATtiny85.
Ak začínate od nuly, postupujte podľa všeobecných krokov od kroku 3 a diagramu zrenia vyššie. Kód je rovnaký ako kód ATtiny84 použitý v kroku 3 a očakávajú sa rovnaké výsledky - žiadne blikanie počas sťahovania; počas chodu LED dióda bliká v 2 -sekundových intervaloch a správy o sériovom výstupe sledujú stav LED.
Krok 6: ATtiny85 prípad 2 - Izolujte vstup aplikácie
Pokiaľ ide o nastavenie hardvéru, začnite s konfiguráciou od kroku 5 a pridajte prepínač SPST podľa vyššie uvedeného diagramu. V skutočnosti som použil chvíľkový prepínač pre verziu tiny85 a to trochu uľahčuje overenie. Všimnite si, že výstup prepínača je otočený o 180 stupňov od konfigurácie ATtiny84. Táto zmena uľahčuje vedenie prepojovacích káblov, pretože všetky 3 signály SPI sú pre ATtiny85 na rovnakej strane.
Použite rovnaký program ako pre ATtiny84, krok 4. Očakávajú sa rovnaké všeobecné výsledky - LED dióda zmení stav, keď je vypínač SPST zapnutý/vypnutý a zmeny dokumentujú sériové výstupy. Správy GO TO SLEEP chýbajú, pretože pre ATtiny85 nie je vyvolaná funkcia spánku. Napriek tomu, že sa používa ten istý program, existujú značné rozdiely v implementácii, pretože ATtiny85 má iba jeden register portov (port 0):
- SoftwareSerial teraz prideľuje prerušenie zmeny pinu portu 0 pre sériovú komunikáciu (Pripomeňme, že sme mohli použiť port 1 pre ATtiny84.)
- Prerušenie prepínača SPST musí byť implementované s externým prerušením 0 (INT0), pretože prerušenie zmeny jediného a jediného kolíka je priradené spoločnosťou SoftwareSerial. Toto ilustruje bod, že prerušenia zmeny pinov a externé prerušenia sú logicky nezávislé a môžu byť použité v rámci rovnakého registra portov.
- Použitím upravenej verzie SoftwareSerial nič nezískate - je tu iba jeden port a trieda SoftwareSerial BUDE chytiť. Upravená trieda však stále slúžila len na to, aby sa zabránilo zmene, ktorá priamo nesúvisí s cieľom tohto kroku.