Sadržaj:

ATtiny84/85 SPI sučelje za ponovnu upotrebu: 6 koraka
ATtiny84/85 SPI sučelje za ponovnu upotrebu: 6 koraka

Video: ATtiny84/85 SPI sučelje za ponovnu upotrebu: 6 koraka

Video: ATtiny84/85 SPI sučelje za ponovnu upotrebu: 6 koraka
Video: Digispark ATtiny85 with Arduino 2.0: How to program? 2024, Srpanj
Anonim
Ponovna upotreba pin -a za sučelje SPI ATtiny84/85
Ponovna upotreba pin -a za sučelje SPI ATtiny84/85

Ovo uputstvo nastavak je instrukcije "ATtiny84/85 Uklanjanje pogrešaka u krugu sa serijskim izlazom" i proširuje tu hardversku i softversku konfiguraciju kako bi riješilo pitanje ponovne uporabe programskih pinova za preuzimanje od strane aplikacijskog programa. Sveukupno, između ovog i dijela 1 koji se može poučiti, raspravljaju se/demonstriraju sljedeće teme:

Tema ATtiny84 ATtiny85
Serijska komunikacija pomoću klase SoftwareSerial x x
Dijeljenje pinova uređaja između aplikacije i preuzimanja x x
Pin Promjena prekida x
Vanjski prekid x
Spavanje u načinu rada POWER_DOWN; buđenje na prekid x
Zaobilazno rješenje za "višestruko definiranu" pogrešku vektorske veze prekidanja vezanu uz SoftwareSerial x
U krugu izmjena, preuzimanje, ispravljanje pogrešaka,… razvojni ciklus za ATtiny uređaje x x

Dodavanje hardverske U/I komponente na jedan od pinova posvećenih programskom sučelju SPI ponekad je u redu, ponekad ne. Na primjer, dodavanje LED -a u MISO samo uzrokuje treperenje LED -a tijekom preuzimanja i tada je dostupan za aplikaciju. Međutim, dodavanje piezo zujalice u MISO rezultirat će užasnim škripavim zvukom nakon čega slijedi neuspješno preuzimanje.

Ove upute objašnjavaju kako koristiti multipleksor 4x2: 1 za "oporavak" upotrebe pinova dodijeljenih SPI sučeljima MISO, MOSI i SCK signala štiteći ih tijekom preuzimanja. Ponovna upotreba RESET pina zahtijeva promjenu osigurača i nije obuhvaćena ovim pristupom. Dvostruko dodjeljivanje pinova postiže se korištenjem multipleksera za prebacivanje između ulaza aplikacije i programiranja ovisno o tome je li preuzimanje u tijeku. Kod i sheme su uključeni i za ATtiny84 i za ATtiny85. Prvo se obrađuje konfiguracija ATiny84 budući da ima dva I/O porta i može se koristiti za ilustraciju nekih dodatnih problema/rješenja. Nakon male rasprave 84, isti scenariji se raspravljaju za ATtiny85.

Korak 1: Potreban hardver

Slika
Slika

Većina potrebnog hardvera navedena je u prvom dijelu, tako da je dolje naveden samo novi hardver.

Ime Mogući izvor Kako se koristi
4x2: 1 Multiplekser Mouser Sadrži četiri prekidača s 2 ulaza; 1 izlaz koji su mehanizam kojim se dijele signali SPI sučelja i aplikacijski I/O.
SPST prekidač Bilo koji tip prekidača (trenutni ili zasunni) će raditi. Prekidač se koristi za ilustraciju dijeljenja pinova za ulaz aplikacije.
10K otpornik Povučeni otpornik za SPST sklopku kako bi se izbjegao plutajući ulaz
Slika
Slika
Slika
Slika

Multiplekser je ključ za izolaciju upotrebe preuzimanja pin -a od uporabe aplikacije. Ukupna funkcionalnost multipleksera 4x2: 1 prilično je jednostavna i sastoji se od 2 upravljačka signala i 4 identično funkcionalna prekidača. Ponašanje svakog pina multipleksera razmatra se u nastavku:

Pribadača Ime Funkcija
15 G Kao što je naznačeno u tablici istinitosti, multiplekser funkcionira samo kada je pin za omogućavanje G nizak. Budući da nikada ne želimo potpuno onemogućiti multiplekser, pin 15 će biti spojen izravno na masu.
2-4; 5-7; 9-11;12-14 A (ulaz), B (ulaz), Y (izlaz) Postoje četiri 2-ulazna; 1-izlazni prekidači sa svakom grupom od 3 pina numerirani uzastopno po redoslijedu A (ulaz), B (ulaz), Y (izlaz) npr. za prekidač 1; pin 2 = 1A; pin 3 = 1B; pin 4 = 1Y.
1 Odaberi Kad je Odabir nizak, ulaz sklopke A spojen je na pripadajući izlazni prekidač prekidača, Y. Kad je odabir visok, ulaz sklopke B spojen je na izlaz. Prekidačima se istovremeno upravlja signalom za odabir i funkcioniraju identično.
8 GND multipleksor IC uzemljenje
16 VCC IC multipleksor snage

Korak 2: Pregled testnih slučajeva

Slika
Slika
Slika
Slika

Dva scenarija za ponovnu uporabu pinova temelje se na tome je li pin ulaz aplikacije ili izlaz. Postupak rukovanja bilo kojim ulazom uvijek je isti; također je postupak za izlazne aplikacije identičan bez obzira na hardversku komponentu. Čak i u tom slučaju objašnjenje je lakše, a nadamo se i jasnije, ako se navedu konkretni primjeri. Minimalistički raspored za dva slučaja prikazan je gore. Za detaljne postavke kasnije veze postaju pomalo gnijezdo vjeverica pa bi moglo biti korisno vratiti se na ove dijagrame čišćenja.

RESET je savršen izbor za odabir signala multipleksera jer je tijekom preuzimanja nizak, ali se vraća visoko po dovršetku preuzimanja. Imajte na umu da se bilo koji prekidač multipleksera može koristiti u oba slučaja jer se svi prekidači ponašaju identično. Također, niti jedan od primjera nije "realan"; oni su umjesto toga izabrani kao najjednostavniji način ilustriranja tehnika izolacije

  1. Izlazni slučaj: LED izlaz s ATtiny84 pina 4 (SCK) izoliran je pomoću prekidača 2 za multiplekser

    • priključite pin 2 multipleksera na masu
    • spojite pin 2B multipleksera na ATtiny85 pin 4
    • spojite izlaz 2Y na LED anodu

      • Očekivani rezultati:

        • LED je isključen tijekom preuzimanja jer je spojen na 2A, uzemljen
        • LED dioda je priključena na izlazni pin 4 aplikacije nakon preuzimanja putem 2B i počinje treperiti
  2. Ulazni slučaj: Ulaz SPST prekidača na ATtiny84 pin 6 (MOSI) izoliran je pomoću prekidača multipleksera 3

    • MOSI olovna žica iz zaglavlja programatora AVR pomaknuta je na 3A
    • prekidački ulaz 3B spojen je na SPST izlaz
    • izlaz 3Y je spojen na ATtiny84 pin 6

      • 3A, MOSI, spojen je na pin 6 tijekom preuzimanja
      • 3B, SPST izlaz, nakon preuzimanja je spojen na pin 6

Slučaj 1 je uspješan ako LED ne treperi tijekom preuzimanja programa, a zatim treperi svake dvije sekunde nakon preuzimanja, kako se očekuje pod kontrolom programa. Bez izolacije LED bi treperila tijekom preuzimanja jer je spojena izravno na SCK signal, koji mijenja stanje u sat/prijem podataka/prijenos.

Slučaj 2 je uspješan ako se MOSI signal tijekom preuzimanja proslijedi na ATtiny84, tj. Preuzimanje ne uspije, a LED nakon preuzimanja reagira na uključivanje/isključivanje SPST -a. Slučaj 2 sprječava jedan nevjerojatan neuspjeh preuzimanja. Bez izolacije, prekidač SPST uzrokovat će kvar ako 1) se koristi zaključani prekidač i 2) prekidač ostane u uključenom položaju tijekom preuzimanja. Kada je prekidač izoliran, prekidač ni pod kojim uvjetima ne može uzrokovati neuspjelo preuzimanje. Malo rastezanje, ali utješno za nas stare.

Jedna od posljedica korištenja multipleksera je da se hardverska komponenta više ne može spojiti izravno na U/I pin mikrokontrolera. To je pomalo nezgodno, ali dopušta da komponenta ostane na ploči za vrijeme testiranja zajedno s ostalim aplikacijskim hardverom, te se može premjestiti natrag na odgovarajuće mjesto nakon završetka testa.

Korak 3: ATtiny84 Slučaj 1 - Izolirajte izlaz aplikacije

Slika
Slika

Ovaj korak opisuje postavljanje za dijeljenje izlaznog pina aplikacije sa signalom za preuzimanje. Primjer je LED dioda priključena na pin 4 (SCK). Korištenje postojeće LED diode kao primjera omogućuje naglasak na dodavanju multipleksera u hardversko i softversko okruženje prvog dijela.

  • Hardver

    • Dodajte multiplekser na ploču na relativnom mjestu prikazanom na gornjoj shemi frcanja. Multiplekser je postavljen prema sredini kako bi se omogućio prostor za SPST prekidač potreban u slučaju 2.
    • Proširite signal RESET -a na multiplekser dodavanjem olovne žice (preporučite žutu) s ATtiny84 pina 11 na iglu 1 multipleksera.
    • Preostalo hardversko postavljanje dato je u 2. koraku

      • pin 2A multipleksera spojite izravno na masu
      • spojite pin 2B na ATtiny84 pin 4
      • spojite izlaz 2Y na LED anodu

        • Očekivani rezultati:

          • tijekom preuzimanja 2Y je spojen na masu (2A) pa LED dioda ostaje isključena
          • Nakon preuzimanja 2Y je spojen na ATtiny84 pin 4 - LED kontrola aplikacije
  • Softver

    • Kod prvog dijela se ponovno koristi; dostupno iz prvog dijela, a ne duplicirano ovdje
    • Učitajte i kompajlirajte program 1. dijela u Arduino IDE
    • Priključite programator Tiny AVR u USB priključak na računalu
    • Priključite Adafruit USB u serijski kabel u drugi USB priključak

      • COM port se stvara i automatski postaje dostupan na popisu portova IDE
      • Pokrenite COM prozor
    • Preuzmite prevedeni kod na ATtiny84

Rezultati aplikacijskog programa isti su kao i za dio 1 jer je jedina promjena bila premještanje LED diode na "zaštićeno" mjesto: LED treperi u intervalima od 2 sekunde; serijski izlaz je isti. Jedina razlika koja bi se trebala dogoditi je ta što LED više ne treperi tijekom preuzimanja jer je za to vrijeme spojen na masu preko pina 2A multipleksera.

Slika
Slika

Korak 4: ATtiny84 Slučaj 2 - Izolirajte unos aplikacije

Slika
Slika

Ovaj korak nadovezuje se na postavljanje za prethodni slučaj izolacije izlaza. Promjene hardvera sastoje se od spajanja SPST sklopke na ATtiny84 pin 6 (MOSI) putem multipleksera. Dakle, hardverske promjene su minimalne, ali postoji nekoliko softverskih promjena koje omogućuju SPST prekidaču da kontrolira LED pomoću prekida promjene pina. Ažurirani kôd nalazi se pri dnu ovog odjeljka. Kôd treba kopirati u Arduino IDE; predlažemo spremanje pod imenom Multiplexer_Input. (Ispričavam se na duljini ovog odjeljka, ali to je srž svrhe instruktora i mislim da se bolje čita kao monolit, a ne umetanje umjetnih pauza.)

ažuriranje Mjesto Svrha
uključuju "hakiranu" klasu SoftwareSerial uključi odjeljak LED dioda se sada kontrolira pomoću SPST prekidača preko prekida promjene pina. Klasa SoftwareSerial mora se promijeniti jer u protivnom dodjeljuje SVE vektore prekida pinova. To uzrokuje pogrešku veze "više definicija" za vektor (port 0) dodijeljen SPST prekidaču. Hakirana verzija SoftwareSerial trebala bi biti smještena u isti direktorij kao i program tako da utječe samo na ovu aplikaciju.
Definicija ulaznog pina SPST -a uključivanje/definicija odjeljak dodjeljivanje SPST ulaza pinu uređaja. Pin je specifičan za uređaj pa se dodaje u odjeljke #ifdef ATtiny8x.
SPST ulazni pin način funkcija postavljanja SPST pin je konfiguriran kao ULAZ
Konfigurirajte prekid SPST pina funkcija postavljanja Vektor prekida dodijeljen je ulaznom pinu SPST -a tako da promjena stanja prekidača uzrokuje prekid. Konfiguracijski registri i vrsta prekida specifični su za uređaj. Kako bi kôd bio što jednostavniji, razlike se obrađuju unutar #if definiranog odjeljka
Postavite kompletnu serijsku poruku funkcija postavljanja Poruka o kompletnom serijskom izlazu za postavljanje mijenja se kako bi odražavala aplikaciju za ulaz multipleksera
Dodajte funkciju ISR prekidača SPST odjeljak koda Dodaje se ISR za prekid promjene SPST pina. Kôd je uobičajen, ali korišćeni vektor je specifičan za uređaj i definiran je u odjeljcima ovisno o uređaju pri vrhu programa. Kako bi se potvrdilo da je ISR aktiviran, stanje LED se mijenja. Iako je ne-ne u stvarnoj aplikaciji, generira se serijska izlazna poruka koja odražava novo stanje LED-a.
Izmijenite obradu petlje funkcija petlje ISR sada kontrolira uključivanje i isključivanje LED -a tako da se funkcionalnost uklanja iz rutine petlje. Poziv na rutinu spavanja dodan je za ATtiny84 kao svojevrsni "dodatak". Za ovu aplikaciju ATtiny85 sleep ne radi; možda zbog smetnji klase Software Serial jer radi s uklonjenom SoftwareSerial.
Dodajte rutinu spavanja odjeljak koda Funkcija mirovanja nije potrebna za demonstraciju korištenja multipleksera. Samo dodano jer bi obično htjeli čekati na ulaz u načinu POWER_DOWN radi uštede energije, a ne nastaviti raditi kroz programsku petlju ne radeći ništa dok ne dođe do unosa.

Izmijenite kôd klase SoftwareSerial

Klasu SoftwareSerial potrebno je promijeniti tako da ne potiskuje sve portove za promjenu pinova. Kôd klase SoftwareSerial nalazi se na

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

Nađite na PCINT0_vect u SoftwareSerial.cpp kako biste pronašli početno mjesto za promjene koda. Dodajte sljedeći kôd neposredno ispred postojećeg #if definiranog (PCINT0_vect) izraza.

#if definirano (_ AVR_ATtiny84_)

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

Sada komentirajte postojeći blok koda koji dodjeljuje vektore prekida porta kako je dolje navedeno (samo dodajte simbole komentara početnog i završnog bloka / * i * /):

/*

#ako je definirano (PCINT0_vect) ISR (PCINT0_vect) {SoftwareSerial:: handle_interrupt (); } #endif #if definiran (PCINT1_vect) ISR (PCINT1_vect) {// SoftwareSerial:: handle_interrupt (); ISR (PCINT1_vect, ISR_ALIASOF (PCINT0_vect)); } #endif #if definiran (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if definiran (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #završi ako */

Konfigurirajte hardver

SPST prekidač priključen je na ATtiny84 pin 6 (MOSI) kako je opisano u koraku 2. Postupak je ovdje dupliciran radi praktičnosti.

  • spojite ulaz sklopke 3A na MOSI kabel zaglavlja Tiny AVR programatora
  • spojite 3B na SPST prekidač ON ON na izlaznom pinu
  • spojite 3Y na ATtiny84 pin 6

    • REZULTATI:

      • 3A, MOSI, bit će prebačen na ATtiny84 pin 6 tijekom preuzimanja
      • 3B, SPST izlaz, bit će preusmjeren na pin 6 nakon preuzimanja

Pokrenite program

Prije pokretanja preklopku SPST postavite u isključeno stanje. U suprotnom će se LED uključiti kad je prekidač isključen i obrnuto. Slijedite postupak za korak 3 za učitavanje, kompajliranje i preuzimanje aplikacijskog ulaznog programa pomoću Arduino IDE -a. Kao i do sada, LED dioda ne bi trebala treperiti tijekom preuzimanja pa će jedini pokazatelj da je program pokrenut i biti serijska poruka na kraju rutine postavljanja: SETUP Complete - Primjer unosa

U ovom trenutku program čeka na ulaz sa SPST sklopke. Postavljanje prekidača u položaj ON (Uključeno) uzrokovat će uključivanje LED diode; vraćanjem u položaj isključeno LED se isključuje. Izlazne poruke potvrđuju da je ISR pozvan (ISR: Led HIGH, ISR: Led LOW). Primijetite da je redoslijed serijskih poruka GO TO SLEEP prvo čekajući promjenu stanja prekidača; kada se dobije ulaz prekidača, ISR se doziva, prebacuje LED i dokumentira promjenu; zatim se obrada javlja nakon poziva za spavanje budući da prekid budi procesor.

Slika
Slika

PROGRAM ZA OVO UPUTSTVO:

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

// DIO 2: Dijeljenje pinova aplikacije/preuzimanja uređaja //. Modificira kôd 1. dijela kako bi podržao ponovnu uporabu pinova u aplikacijama // dodijeljenih programskom sučelju SPI //. "Zajednički" kod za ATtiny85 i ATtiny84 // ************************************** ******************************** #include "SoftwareSerial.h" // Modificirani Arduino SoftwareSerial class #include // While kod za obradu je uobičajen, koriste se pinovi specifični za uređaj #ako je definirano (_ AVR_ATtiny84_) || definirano (_ AVR_ATtiny84A_) #define ledPin 4 // Uključeno/isključeno LED uključeno/isključeno #define rxPin 9 // Pin koji se koristi za serijski prijem #define txPin 10 // Pin koji se koristi za serijski prijenos #define SpstPin 6 // Ulaz sa SPST sklopke (MOSI) #define ISR_VECT PCINT0_vect // SPST prekidač Vektor prekida izmjene pinova #elif definiran (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Unos sa SPST prekidača (INT0_VECT) #define // SPST prekidač Vektor prekida izmjene pinova #else #error Ovaj projekt podržava samo ATiny84 i ATtiny85 #endif // Kreirajte instancu klase Software Serial koja navodi koji // pinovi uređaja se trebaju koristiti za prijem i prijenos SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Inicijalizacija resursa za obradu // ------------------- -------------------------------------------------- --- void setup () {mySerial.begin (9600); // Pokretanje kašnjenja serijske obrade (2000); // Dajte Serial Com portu vremena za dovršetak pokretanja. // inače, prvi izlaz vjerojatno nedostaje ili je iskrivljen pinMode (ledPin, OUTPUT); // Konfiguriranje LED pina za OUTPUT pinMode (SpstPin, INPUT); // Konfigurirajte iglu prekidača SPST kao INPUT #ako je definirano (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // postavite prekid promjene pina za rukovanje ulazom prekidača na pinu 6 (MOSI) GIMSK | = (1 <

Korak 5: ATtiny85 Slučaj 1 - Izolirajte izlaz aplikacije

Slika
Slika

Umjesto izrade dupliciranih hardverskih postavki za ATtiny85, vjerojatno je lakše započeti s gotovom konfiguracijom za ATtiny84 iz 4. koraka i zamijeniti maleni 84 čip s malenim85. Sav potreban hardver tada je već dostupan. Ako koristite ovaj pristup, locirajte tiny85 tako da se pinovi 3 i 4 poravnaju sa serijskim kabelom tx i primaju žice. Tada je samo pitanje premještanja olovnih žica SPI sučelja tako da odgovaraju njihovim potrebnim mjestima za ATtiny85.

Ako počinjete ispočetka, samo slijedite opće korake iz koraka 3 i gornji dijagram frcanja. Kôd je isti kao i za ATtiny84 u koraku 3 sa istim očekivanim rezultatima - nema treperenja tijekom preuzimanja; tijekom rada LED dioda treperi u intervalima od 2 sekunde, a poruke serijskog izlaza slijede stanje LED.

Slika
Slika

Korak 6: ATtiny85 Slučaj 2 - Izolirajte unos aplikacije

Slika
Slika

Za postavljanje hardvera počnite s konfiguracijom iz koraka 5 i dodajte prekidač SPST kako je prikazano na gornjoj shemi frcanja. Zapravo sam koristio trenutni prekidač za malenu verziju 85 i to malo olakšava provjeru. Primijetite da je izlaz sklopke rotiran za 180 stupnjeva u odnosu na konfiguraciju ATtiny84. Ova promjena olakšava usmjeravanje spojnih žica budući da su sva 3 SPI signala na istoj strani za ATtiny85.

Upotrijebite isti program kao i za ATtiny84 Korak 4. Očekuju se isti opći rezultati - LED dioda mijenja stanje kada je SPST prekidač uključen/isključen, a poruke serijskog izlaza dokumentiraju promjene. Poruke GO TO SLEEP nedostaju jer se funkcija spavanja ne poziva za ATtiny85. Iako se koristi isti program, postoje značajne razlike u implementaciji zbog činjenice da ATtiny85 ima samo jedan port port (Port 0):

  1. SoftwareSerial sada dodjeljuje prekid promjene pina porta 0 za serijsku komunikaciju (Podsjetimo se da smo mogli koristiti port 1 za ATtiny84.)
  2. Prekid prekidača SPST mora se implementirati s vanjskim prekidom 0 (INT0) budući da jedan jedini prekid promjene pina dodjeljuje SoftwareSerial. Ovo ilustrira činjenicu da su prekidi promjene pina i vanjski prekidi logički neovisni i mogu se koristiti unutar istog registra porta.
  3. Ništa se ne dobiva korištenjem izmijenjene verzije SoftwareSerial - postoji samo jedan port i klasa SoftwareSerial ĆE ga zgrabiti. Međutim, izmijenjena klasa se i dalje koristila samo kako bi se izbjegla promjena koja nije izravno povezana s ciljem ovog koraka.

Preporučeni: