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, Juli
Anonim
ATtiny84/85 SPI sučelje za ponovnu upotrebu
ATtiny84/85 SPI sučelje za ponovnu upotrebu

Ovo uputstvo je nastavak instrukcije "ATtiny84/85 In-circuit Debugging with Serial Output" i proširuje tu hardversku i softversku konfiguraciju kako bi riješio pitanje ponovne upotrebe 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 pri prekidu X
Zaobilazno rješenje za "višestruko definiranu" grešku vektorske veze s prekidom vezanu uz SoftwareSerial X
U krugu izmjena, preuzimanje, otklanjanje grešaka,… razvojni ciklus za ATtiny uređaje X X

Dodavanje hardverske I/O komponente na jedan od pinova posvećenih SPI programskom interfejsu je ponekad 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 greška preuzimanja.

Ova instrukcija objašnjava kako se koristi multipleksor 4x2: 1 za "oporavak" upotrebe pinova dodijeljenih SPI interfejsu MISO, MOSI i SCK signala štiteći ih tokom 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 toku. Kod i sheme su uključeni i za ATtiny84 i za ATtiny85. Prvo se obrađuje konfiguracija ATiny84 jer 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

Image
Image

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 sa 2 ulaza i 1 izlaza koji su mehanizam pomoću kojeg se dijele signali SPI sučelja i aplikacijski I/O.
SPST prekidač Bilo koja vrsta prekidača (trenutna ili zaključana) će raditi. Prekidač se koristi za ilustraciju dijeljenja pinova za ulaz aplikacije.
10K otpornik Povučeni otpornik za SPST prekidač kako bi se izbjegao plutajući ulaz
Image
Image
Image
Image

Multiplekser je ključ za izolaciju upotrebe preuzimanja pin -ova od upotrebe 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:

Pin Ime Funkcija
15 G Kao što je naznačeno u tabeli istinitosti, multiplekser funkcioniše 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 numerisani uzastopno po redoslijedu A (ulaz), B (ulaz), Y (izlaz) npr. za prekidač 1; pin 2 = 1A; pin 3 = 1B; pin 4 = 1Y.
1 Odaberite Kada je Odabir nizak, ulaz sklopke A spojen je na pripadajući izlazni prekidač prekidača, Y. Kada je odabir visok, ulaz sklopke B je spojen na izlaz. Prekidačima se istovremeno upravlja signalom za odabir i funkcioniraju identično.
8 GND IC uzemljivač multipleksera
16 VCC napajanje IC multipleksera

Korak 2: Pregled testnih slučajeva

Image
Image
Image
Image

Dva scenarija za ponovnu upotrebu pinova temelje se na tome je li pin ulaz aplikacije ili izlaz. Postupak rukovanja bilo kojim unosom uvijek je isti; takođe je procedura za izlazne aplikacije identična bez obzira na hardversku komponentu. Ipak, objašnjenje je lakše, a nadam se i jasnije, ako se navedu konkretni primjeri. Minimalistički raspored za dva slučaja prikazan je gore. Za detaljnije 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 nizak tokom preuzimanja, ali se vraća visoko kad se preuzimanje završi. 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đe, nijedan od primjera nije "realan"; oni su umjesto toga izabrani kao najjednostavniji način za ilustraciju tehnika izolacije

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

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

      • Očekivani rezultati:

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

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

      • 3A, MOSI, je povezan na pin 6 tokom preuzimanja
      • 3B, SPST izlaz, povezan je na pin 6 nakon preuzimanja

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

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

Jedna od posljedica korištenja multipleksera je da se hardverska komponenta više ne može direktno spojiti na I/O pin mikrokontrolera. Ovo je pomalo nezgodno, ali dopušta da komponenta ostane na matičnoj ploči tijekom testa zajedno s drugim hardverom aplikacije i može se premjestiti natrag na odgovarajuće mjesto kada se test završi.

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

Image
Image

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

  • Hardver

    • Dodajte multiplekser na matičnu ploču na relativnoj lokaciji prikazanoj 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 (predložite žutu) sa ATtiny84 pina 11 na iglu 1 multipleksera.
    • Preostalo podešavanje hardvera je dato u 2. koraku

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

        • Očekivani rezultati:

          • tokom 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 ponovo koristi; dostupno iz prvog dijela, a ne duplicirano ovdje
    • Učitajte i kompajlirajte program prvog dijela u Arduino IDE
    • Uključite Tiny AVR programator u USB priključak na računaru
    • Priključite Adafruit USB u serijski kabel u drugi USB priključak

      • COM port je kreiran i automatski je dostupan na listi IDE portova
      • Pokrenite COM prozor
    • Preuzmite prevedeni kod na ATtiny84

Rezultati aplikacijskog programa isti su kao u prvom dijelu 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.

Image
Image

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

Image
Image

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) preko 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 na dnu ovog odjeljka. Kôd treba kopirati u Arduino IDE; predlažemo da ga sačuvate pod imenom Multiplexer_Input. (Izvinjavam se na dužini ovog odeljka, ali to je srž svrhe instruktora i mislim da se bolje čita kao monolit, a ne umetanje veštačkih pauza.)

Update Location Svrha
uključuju "hakiranu" klasu SoftwareSerial uključi odjeljak LED dioda se sada kontrolira pomoću SPST prekidača putem prekida promjene pina. Klasa SoftwareSerial mora se izmijeniti jer u protivnom dodjeljuje SVE vektore prekida pinova. To uzrokuje grešku veze "više definicija" za vektor (port 0) dodijeljen SPST prekidaču. Hakirana verzija SoftwareSerial treba 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 dodeljivanje 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 podešavanja SPST pin je konfiguriran kao ULAZ
Konfigurirajte SPST pin prekid funkcija podešavanja Vektor prekida dodijeljen je ulaznom pinu SPST -a tako da promjena stanja prekidača uzrokuje prekid. Konfiguracijski registri i tip prekida specifični su za uređaj. Da bi kôd bio što jednostavniji, razlike se obrađuju unutar #if definiranog odjeljka
Postavite kompletnu serijsku poruku funkcija podešavanja Poruka o kompletnom serijskom izlazu za postavljanje se mijenja kako bi odražavala aplikaciju za ulaz multipleksera
Dodajte funkciju ISR prekidača SPST kodni odeljak Dodaje se ISR za prekid promjene SPST pina. Kôd je uobičajen, ali vektor koji se koristi je specifičan za uređaj i definiran je u odjeljcima ovisnim o uređaju na 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 dodaje se za ATtiny84 kao neku vrstu „dodatka“. Za ovu aplikaciju ATtiny85 sleep ne radi; možda zbog smetnji klase Software Serial jer radi s uklonjenom SoftwareSerial.
Dodajte rutinu spavanja kodni odeljak 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, umjesto da nastavljaju trčati 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. Kod klase SoftwareSerial nalazi se na

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

Nađite na PCINT0_vect u SoftwareSerial.cpp da pronađete početnu lokaciju 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 kao što je dolje navedeno (samo dodajte simbole komentara početnog i završnog bloka / * i * /):

/*

#if 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 definisan (PCINT2_vect) ISR (PCINT2_vect, ISR_ALIASOF (PCINT0_vect)); #endif #if definisan (PCINT3_vect) ISR (PCINT3_vect, ISR_ALIASOF (PCINT0_vect)); #endif */

Konfigurirajte hardver

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

  • spojite ulaz prekidača 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 tokom preuzimanja
      • 3B, SPST izlaz, bit će preusmjeren na pin 6 nakon preuzimanja

Pokrenite program

Prije pokretanja postavite prekidač SPST u isključeni položaj. U suprotnom će se LED uključiti kada je prekidač isključen i obrnuto. Slijedite proceduru 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 prekidača. Postavljanje prekidača u položaj ON će uzrokovati 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 GO SLEEP prvo čekajući promjenu stanja prekidača; kada dobijete ulaz prekidača, ISR se poziva, prebacuje LED diodu i dokumentuje promjenu; zatim se obrada nastavlja nakon poziva za spavanje jer prekid budi procesor.

Image
Image

PROGRAM ZA OVO UPUTSTVO:

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

// DIO 2: Dijeljenje pinova aplikacije/preuzimanja uređaja //. Modificira 1. dio za podršku ponovnoj upotrebi pinova u aplikacijama // dodijeljenim programskom sučelju SPI //. "Zajednički" kod za ATtiny85 i ATtiny84 // **************************************** ******************************** #include "SoftwareSerial.h" // Izmijenjeni Arduino SoftwareSerial class #include // While kod za obradu je uobičajen, koriste se pinovi za uređaj specifični #if definirano (_ AVR_ATtiny84_) || definirano (_ AVR_ATtiny84A_) #define ledPin 4 // Uključeno/isključeno uključeno LED uključivanje/isključivanje #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 prekidača (MOSI) #define ISR_VECT PCINT0_vect // SPST prekidač Vektor prekida Pin promjenom #elif definiran (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Unos sa SPST prekidača (INT0_VEZE) #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 će se 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 SPST prekidača kao INPUT #ako je definirano (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // postavlja prekid promjene pinova za rukovanje ulazom prekidača na pinu 6 (MOSI) GIMSK | = (1 <

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

Image
Image

Umjesto izgradnje duplikata hardverskih postavki za ATtiny85, vjerovatno je lakše započeti s gotovom konfiguracijom za ATtiny84 iz 4. koraka i zamijeniti tiny84 čip sa tiny85. 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 izmještanja olovnih žica SPI sučelja tako da odgovaraju njihovim traženim lokacijama za ATtiny85.

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

Image
Image

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

Image
Image

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

Koristite 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 biti implementiran 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 da se mogu 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 direktno povezana sa ciljem ovog koraka.

Preporučuje se: