INHOUDSOPGAWE:

ATtiny84/85 SPI -koppelvlak -hergebruik: 6 stappe
ATtiny84/85 SPI -koppelvlak -hergebruik: 6 stappe

Video: ATtiny84/85 SPI -koppelvlak -hergebruik: 6 stappe

Video: ATtiny84/85 SPI -koppelvlak -hergebruik: 6 stappe
Video: Работа с программатором USBAsp в Arduino IDE 2024, Julie
Anonim
AThttiny84/85 SPI -koppelvlak -hergebruik
AThttiny84/85 SPI -koppelvlak -hergebruik

Hierdie instruksies is 'n opvolg van die "ATtiny84/85 in-kring-ontfouting met seriële uitvoer" en kan die hardeware- en sagtewarekonfigurasie uitbrei om die probleem met die hergebruik van die programme-aflaai-penne deur die toepassingsprogram aan te spreek. Altesaam, tussen hierdie en die deel 1 wat opdrag gegee word, word die volgende onderwerpe bespreek/gedemonstreer:

Onderwerp ATtiny84 ATtiny85
Seriële kommunikasie met behulp van die SoftwareSerial -klas X X
Deel toestelpenne tussen toepassing en aflaai X X
Speldveranderingsonderbreking X
Eksterne onderbreking X
Slaap in die POWER_DOWN -modus; word wakker met onderbreking X
Probeer om die "vermenigvuldig gedefinieerde" onderbrekingsvectorskakelfout wat verband hou met SoftwareSerial, op te los X
In-kring verander, laai, ontfout, … ontwikkelingsiklus vir die ATtiny-toestelle X X

Dit is soms OK, soms nie, om 'n hardeware -I/O -komponent by een van die penne wat aan die SPI -programmeerkoppelvlak toegewy is, by te voeg. As u byvoorbeeld 'n LED by MISO voeg, laat die LED net flikker tydens aflaai, en dan is dit beskikbaar vir die toepassing. As u 'n piëzo -zoemer by MISO voeg, sal dit egter 'n aaklige gil veroorsaak, gevolg deur 'n aflaai.

Hierdie instruksies verduidelik hoe u 'n 4x2: 1 -multiplexer kan gebruik om die penne wat aan die SPI -koppelvlak MISO-, MOSI- en SCK -seine toegewys is, te "herstel" deur dit te beskerm tydens aflaai. Hergebruik van die RESET -pen vereis 'n lontverandering en word nie deur hierdie benadering gedek nie. Die dubbele toewysing van die penne word bewerkstellig deur die multiplexer te gebruik om te wissel tussen die aansoek- en programmeringsinsette, afhangende van die aflaai. Kode en skemas is ingesluit vir beide die ATtiny84 en ATtiny85. Die ATiny84 -opset word eers aangespreek, aangesien dit twee I/O -poorte het en kan gebruik word om 'n paar ekstra probleme/oplossings te illustreer. Na aanleiding van die tiny84 -bespreking word dieselfde scenario's vir die ATtiny85 bespreek.

Stap 1: Vereiste hardeware

Beeld
Beeld

Die meeste van die nodige hardeware is in die deel 1 gelys, dus slegs die nuwe hardeware word hieronder gelys.

Naam Moontlike bron Hoe gebruik
4x2: 1 Multiplexer Mouser Bevat vier 2-ingang; 1-uitset skakelaars, wat die meganisme is waarmee die SPI-koppelvlakseine en toepassings-I/O's gedeel word.
SPST skakelaar Enige tipe skakelaar (kortstondig of vasgemaak) werk. Die skakelaar word gebruik om pendeling vir 'n toepassingsinvoer te illustreer.
10K weerstand Trekweerstand vir die SPST-skakelaar om 'n drywende ingang te vermy
Beeld
Beeld
Beeld
Beeld

Die multiplexer is die sleutel tot die isolasie van die gebruik van pen -aflaai van toepassingsgebruik. Die algehele funksionaliteit van die 4x2: 1 multiplexer is redelik reguit en bestaan uit 2 beheerseine en 4 identies funksionerende skakelaars. Die gedrag van elke multiplexerpen word hieronder bespreek:

Speld Naam Funksie
15 G Soos aangedui in die waarheidstabel, funksioneer die multiplexer slegs as die G -inskakelpen laag is. Aangesien ons die multiplexer nooit heeltemal wil deaktiveer nie, sal pen 15 direk aan die aarde gekoppel word.
2-4; 5-7; 9-11;12-14 A (invoer), B (invoer), Y (uitset) Daar is vier 2-insette; 1-uitset skakelaars met elke groep van 3 penne wat opeenvolgend genommer is in die volgorde A (invoer), B (invoer), Y (uitset) bv. vir skakelaar 1; pen 2 = 1A; pen 3 = 1B; pen 4 = 1J.
1 Kies As Kies laag is, word skakelaarinvoer A gekoppel aan die gepaardgaande skakelaaruitgangspennetjie, Y. As kies hoog is, word skakelaarinvoer B eerder aan uitset gekoppel. Die skakelaars word gelyktydig deur die Select -sein beheer en funksioneer identies.
8 GND multiplexer IC grond
16 VCC multiplexer IC krag

Stap 2: Oorsig van toetsgevalle

Beeld
Beeld
Beeld
Beeld

Die twee scenario's vir hergebruik van spelde is gebaseer op of die pen 'n toepassingsinvoer of -uitset is. Die prosedure vir die hantering van enige insette is altyd dieselfde; ook die prosedure vir toepassingsuitsette is identies, ongeag die hardeware -komponent. Tog is die verduideliking makliker en hopelik duideliker as spesifieke voorbeelde gegee word. Minimalistiese uitlegte vir die twee gevalle word hierbo getoon. Vir die gedetailleerde opstellings later word die verbindings 'n eekhoringsnes, so dit kan nuttig wees om terug te kyk na hierdie skoner diagramme.

RESET is die perfekte keuse vir die multiplexer Select -sein, aangesien dit laag is tydens aflaai, maar hoog word as die aflaai voltooi is. Let daarop dat enige van die multiplexerskakelaars vir beide gevalle gebruik kan word, aangesien alle skakelaars identies gedra. Ook nie een van die voorbeelde is 'realisties' nie; hulle is eerder gekies as die eenvoudigste manier om die isolasie tegnieke te illustreer

  1. Uitgangskas: LED -uitset van ATtiny84 -pen 4 (SCK) word geïsoleer met behulp van multiplexerskakelaar 2

    • verbind die multiplexerpen 2A met die grond
    • verbind multiplexer pen 2B met ATtiny85 pin 4
    • koppel uitgang 2Y aan die LED -anode

      • Verwagte resultate:

        • LED is af tydens aflaai aangesien dit gekoppel is aan 2A, grond
        • LED aangeheg aan die toepassingsuitsetpen 4 na aflaai via 2B en begin knip
  2. Invoerkas: SPST -skakelaarinvoer na ATtiny84 -pen 6 (MOSI) word geïsoleerd met behulp van multiplexerskakelaar 3

    • MOSI -looddraad van die AVR Programmer -kop word na 3A verskuif
    • skakelaarinvoer 3B is gekoppel aan SPST -uitgang
    • uitset 3Y is gekoppel aan ATtiny84 pen 6

      • 3A, MOSI, word tydens aflaai aan pin 6 gekoppel
      • 3B, SPST -uitvoer, word na aflaai aan pin 6 gekoppel

Geval 1 is suksesvol as die LED nie flikker tydens die aflaai van die program nie en dan elke twee sekondes na aflaai flikker soos verwag onder programbeheer. Sonder isolasie sou die LED flikker tydens aflaai, aangesien dit direk aan die SCK -sein gekoppel is, wat die toestand verander na die ontvangs/versending van data.

Geval 2 is suksesvol as die MOSI -sein tydens aflaai na die ATtiny84 gestuur word, d.w.s. aflaai misluk, en die LED reageer op SPST -aan-/afskakel na aflaai. Geval 2 voorkom een onwaarskynlike aflaai -mislukking. Sonder isolasie veroorsaak die SPST -skakelaar mislukking as 1) 'n vergrendelde skakelaar gebruik word en 2) die skakelaar tydens aflaai in die aan -posisie gelaat word. As die skakelaar deur die multiplexer geïsoleer word, kan die aflaai onder geen omstandighede misluk nie. 'N bietjie van 'n stuk, maar troos vir ons ou mense.

Een gevolg van die gebruik van die multiplexer is dat die hardeware -komponent nie meer direk aan die I/O -pen van die mikrobeheerder gekoppel kan word nie. Dit is ietwat ongerieflik, maar laat die komponent tydens die toets op die broodbord bly saam met die ander toepassingshardeware, en kan na die regte plek teruggeskuif word wanneer die toets voltooi is.

Stap 3: ATtiny84 Case 1 - Isoleer die uitvoer van die toepassing

Beeld
Beeld

Hierdie stap beskryf die opstelling vir die deel van 'n toepassingsuitsetpen met 'n aflaaisignaal. Die voorbeeld wat gebruik word, is die LED wat aan pen 4 (SCK) geheg is. Deur die bestaande LED as voorbeeld te gebruik, word klem gelê op die toevoeging van die multiplexer tot die hardeware- en sagteware -omgewing van deel 1.

  • Hardeware

    • Voeg die multiplexer by die broodbord op die relatiewe plek in die ritsdiagram hierbo. Die multiplexer is na die middel geplaas om ruimte te gee vir die SPST -skakelaar wat nodig is in geval 2.
    • Brei die RESET -sein uit na die multiplexer deur 'n looddraad (stel geel) van ATtiny84 pen 11 by multiplexer pen 1 te voeg.
    • Die oorblywende hardeware -opstelling is soos aangedui in stap 2

      • verbind die multiplexerpen 2A direk met die grond
      • koppel pen 2B aan ATtiny84 pen 4
      • koppel uitgang 2Y aan die LED -anode

        • Verwagte resultate:

          • tydens aflaai word 2Y aan die grond (2A) gekoppel, sodat die LED af bly
          • Na aflaai word 2Y gekoppel aan ATtiny84 pin 4 - toepassings LED -beheer
  • Sagteware

    • Die deel 1 -kode word hergebruik; beskikbaar by die deel 1, eerder as hier gedupliseer
    • Laai en stel die deel 1 -program saam in die Arduino IDE
    • Koppel die Tiny AVR -programmeerder aan 'n rekenaar -USB -poort
    • Koppel die Adafruit USB -na -seriële kabel aan op 'n tweede USB -poort

      • 'N COM -poort word geskep en word outomaties beskikbaar gestel in die IDE -poortlys
      • Begin die COM -venster
    • Laai die saamgestelde kode af na die ATtiny84

Die resultate van die aansoekprogram is dieselfde as vir deel 1, aangesien die enigste verandering was om die LED na 'n "beskermde" plek te skuif: Die LED knipper met tussenposes van 2 sekondes; die reeksuitset is dieselfde. Die enigste verskil wat moet voorkom, is dat die LED nie meer flikker tydens aflaai nie, aangesien dit gedurende die tyd deur middel van multiplexerpen 2A aan die aarde gekoppel is.

Beeld
Beeld

Stap 4: ATtiny84 Case 2 - Isolate Application Input

Beeld
Beeld

Hierdie stap bou voort op die opstelling vir die vorige uitvoer -isolasie -geval. Hardeware -veranderinge bestaan uit die koppeling van 'n SPST -skakelaar aan ATtiny84 -pen 6 (MOSI) via die multiplexer. Die hardeware -veranderinge is dus minimaal, maar daar is verskeie sagteware -veranderinge om die SPST -skakelaar in staat te stel om die LED te beheer met 'n speldwisselingsonderbreking. Die opgedateerde kode is onderaan hierdie afdeling ingesluit. Die kode moet na die Arduino IDE gekopieer word; stel voor dat u dit onder die naam Multiplexer_Input stoor. (Ek vra om verskoning vir die lengte van hierdie afdeling, maar dit is die kern van die doel van die instruksies en dink dat dit beter lees as 'n monoliet eerder as om kunsmatige onderbrekings in te voeg.)

Opdateer Ligging Doel
sluit 'gekap' SoftwareSerial -klas in afdeling insluit Die LED word nou deur die SPST -skakelaar beheer via 'n speldwisselingsonderbreking. Die SoftwareSerial -klas moet gewysig word, aangesien dit andersins AL die penveranderingsvektore toeken. Dit veroorsaak 'n 'meervoudige definisie' skakelfout vir die (poort 0) vektor wat aan die SPST -skakelaar toegewys is. Die gekapte SoftwareSerial -weergawe moet in dieselfde gids as die program geplaas word, sodat dit slegs hierdie toepassing beïnvloed.
SPST -invoerpen definisie sluit/definisie -afdeling in toewysing van SPST -invoer aan 'n apparaatpen. Die pen is toestelspesifiek, dus word dit by die #ifdef ATtiny8x -afdeling (s) gevoeg.
SPST -invoerpenmodus opstel funksie Die SPST -pen is gekonfigureer as 'n INVOER
Stel SPST -penonderbreking op opstel funksie Die onderbrekingsvektor word aan die SPST -invoerpen toegeken, sodat 'n verandering in die toestand van die skakelaar 'n onderbreking veroorsaak. Die konfigurasieregisters en die tipe onderbreking is toestelspesifiek. Om die kode so eenvoudig moontlik te maak, word die verskille binne 'n #as gedefinieerde afdeling hanteer
Stel die volledige reeksboodskap op opstel funksie Die opstel -volledige reeksuitsetboodskap word verander om die Multiplexer -invoerprogram weer te gee
Voeg SPST -skakelaar ISR -funksie by kode afdeling Die ISR vir die onderbreking van die SPST -penverandering word bygevoeg. Die kode is algemeen, maar die vektor wat gebruik word, is apparaatspesifiek en word gedefinieer in die apparaatafhanklike afdelings bo -aan die program. Om te verifieer dat die ISR geaktiveer is, word die LED -toestand verander. Alhoewel 'n nee-nee in 'n werklike toepassing, word 'n seriële uitvoerboodskap gegenereer wat die nuwe LED-toestand weerspieël.
Verander lusverwerking lusfunksie Die ISR beheer nou die aan- en afskakel van die LED sodat funksionaliteit uit die kringlooproetine verwyder word. 'N Oproep na die slaaproetine word bygevoeg vir ATtiny84 as 'n "ekstra". Vir hierdie toepassing werk ATtiny85 nie; miskien as gevolg van die inmenging van die sagteware -reeks, aangesien dit wel werk met die verwydering van SoftwareSerial.
Voeg slaaproetine by kode afdeling Slaapfunksionaliteit is nie nodig om die gebruik van die multiplexer aan te toon nie. Net bygevoeg omdat ek gewoonlik wil wag vir 'n invoer in die POWER_DOWN -modus om krag te bespaar eerder as om deur die programlus te loop, sonder om iets te doen totdat 'n invoer plaasvind.

Verander die SoftwareSerial -klaskode

Die SoftwareSerial -klas moet verander word sodat dit nie al die onderbrekingspoorte van die pen verander nie. Die SoftwareSerial -klaskode is geleë op

C: / Programme (x86) Arduino / hardware / arduino / avr / biblioteke / SoftwareSerial / src

Soek op PCINT0_vect in SoftwareSerial.cpp om die beginplek vir die kodeveranderings te vind. Voeg die volgende kode by onmiddellik voor die bestaande #as gedefinieerde (PCINT0_vect) verklaring.

#as gedefinieer (_ AVR_ATtiny84_)

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

Lewer nou kommentaar op die bestaande kodeblok wat die poortonderbrekingsvektore toeken soos hieronder aangedui (voeg slegs die begin- en eindblok -kommentaar simbole / * en * /) toe:

/*

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

Stel die hardeware op

Die SPST -skakelaar is gekoppel aan ATtiny84 pen 6 (MOSI) soos uiteengesit in Stap 2. Die prosedure word hier gedupliseer vir gemak.

  • koppel skakelaarinvoer 3A aan op die Tiny AVR Programmer -kop MOSI -kabel
  • verbind 3B met die SPST -skakelaar AAN -uitvoerpen
  • koppel 3Y aan ATtiny84 pin 6

    • RESULTATE:

      • 3A, MOSI, sal tydens die aflaai na ATtiny84 -pen 6 oorgedra word
      • 3B, SPST -uitvoer, word na aflaai na pin 6 gekoppel

Begin die program

Sit die SPST -skakelaar in die af -posisie voordat u hardloop. Andersins sal die LED aanskakel as die skakelaar afgeskakel word en omgekeerd. Volg die prosedure vir stap 3 om die invoerprogram van die toepassing te laai, op te stel en af te laai met die Arduino IDE. Soos voorheen, behoort die LED nie te flikker tydens aflaai nie, dus die enigste aanduiding dat die program aan die gang is, is die reeksboodskap aan die einde van die opstelroetine: SETUP Complete - Invoervoorbeeld

Op hierdie punt wag die program op 'n invoer van die SPST -skakelaar. Deur die skakelaar in die AAN -posisie te plaas, sal die LED aanskakel; as u terugskakel na die af -posisie, skakel die LED af. Uitvoerboodskappe verifieer dat die ISR opgeroep is (ISR: Led HIGH, ISR: Led LOW). Let op die volgorde van die reeksboodskappe: GAAN SLAAP en wag eers op 'n verandering van die skakelaar; as u 'n skakelaarinvoer kry, word die ISR opgeroep, skakel die LED aan en dokumenteer die verandering; dan neem die verwerking op na die slaapoproep, aangesien die onderbreking die verwerker wakker maak.

Beeld
Beeld

PROGRAM VIR HIERDIE INSTRUKSIES:

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

// DEEL 2: Toepassing/aflaai van toestelpen -deling //. Verander die Deel 1 -kode om die hergebruik van programme van die penne // wat aan die SPI -programmeerkoppelvlak toegewys is // te ondersteun. "Comon" -kode vir ATtiny85 en ATtiny84 // *************************************** ******************************* #insluit "SoftwareSerial.h" // Gewysigde Arduino SoftwareSerial -klas #include // Terwyl die verwerkingskode is algemeen, die gebruikte penne is toestelspesifiek #as gedefinieer (_ AVR_ATtiny84_) || gedefinieer (_ AVR_ATtiny84A_) #definieer ledPin 4 // Gekoppel om aangeskakel Led aan/af te skakel #definieer rxPin 9 // Speld wat gebruik word vir seriële ontvangs #definieer txPin 10 // Pin gebruik vir seriële versending #definieer SpstPin 6 // Invoer van SPST -skakelaar (MOSI) #define ISR_VECT PCINT0_vect // SPST -skakelaar Speldveranderingsonderbrekingsvektor #elif gedefinieer (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Invoering van SPST -skakelaar (INT0)_def // SPST -skakelaar Speldveranderingsonderbrekingsvektor #else #fout Slegs ATiny84 en ATtiny85 word deur hierdie projek ondersteun #endif // Skep 'n instansie van die sagteware -seriële klas wat spesifiseer watter toestel // penne gebruik moet word vir die ontvangs en versending van SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Initialiseer verwerkingshulpbronne // ------------------- -------------------------------------------------- --- ongeldige opstelling () {mySerial.begin (9600); // Begin vertraging in reeksverwerking (2000); // Gee die Serial Com -poort tyd om die opstart te voltooi. // andersins ontbreek die eerste uitvoer waarskynlik of word pinMode (ledPin, OUTPUT) ontbreek; // Stel led -pin vir OUTPUT pinMode (SpstPin, INPUT) in; // Stel die SPST -skakelaarpen in as 'n INVOER #as gedefinieer (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // stel penwisselonderbreking op om skakelaarinvoer op pen 6 (MOSI) te hanteer GIMSK | = (1 <

Stap 5: ATtiny85 -saak 1 - Isoleer die uitvoer van die toepassing

Beeld
Beeld

In plaas van om 'n dubbele hardeware -opstelling vir die ATtiny85 te bou, is dit waarskynlik makliker om vanaf stap 4 met die voltooide opset vir ATtiny84 te begin en die tiny84 -chip te vervang deur die tiny85. Al die nodige hardeware is dan reeds beskikbaar. As u hierdie benadering gebruik, vind die tiny85 sodat penne 3 en 4 in lyn is met die seriële kabel tx en drade ontvang. Dit is dan net 'n kwessie om die leidrade van die SPI -koppelvlak te verplaas om by hul vereiste liggings vir die ATtiny85 te pas.

As u van nuuts af begin, volg die algemene stappe van stap 3 en die fritzdiagram hierbo. Die kode is dieselfde as vir die ATtiny84 in stap 3, met dieselfde resultate wat verwag word - geen flikkering tydens aflaai nie; As die LED aan die gang is, knipper die interval met 2 sekondes en volg die seriële uitvoerboodskappe die LED -toestand.

Beeld
Beeld

Stap 6: ATtiny85 Case 2 - Isoleer aansoekinvoer

Beeld
Beeld

Vir hardeware -opstelling, begin met die opset van stap 5 en voeg die SPST -skakelaar by soos aangedui in die fritzing -diagram hierbo. Ek het eintlik 'n kort rukkie vir die klein 85 -weergawe gebruik, en dit maak die verifikasie 'n bietjie makliker. Let op dat die skakelaaruitset 180 grade gedraai is vanaf die ATtiny84 -opset. Hierdie verandering maak dit makliker om die aansluitdrade te lei, aangesien al drie SPI -seine aan dieselfde kant is vir die ATtiny85.

Gebruik dieselfde program as vir ATtiny84 Stap 4. Dieselfde algemene resultate word verwag - die LED verander van toestand wanneer die SPST -skakelaar aan/afgeskakel word en seriële uitsetboodskappe die veranderinge dokumenteer. Die GO TO SLEEP -boodskappe ontbreek, aangesien slaapfunksies nie vir die ATtiny85 gebruik word nie. Alhoewel dieselfde program gebruik word, is daar aansienlike verskille in implementering, omdat die ATtiny85 slegs een poortregister (poort 0) het:

  1. SoftwareSerial ken nou die onderbreking van poort 0 -pen toe vir seriële kommunikasie (onthou dat ons poort 1 vir die ATtiny84 kon gebruik.)
  2. Die onderbreking van die SPST -skakelaar moet geïmplementeer word met eksterne onderbreking 0 (INT0), aangesien die enigste pinveranderingsonderbreking deur SoftwareSerial toegeken word. Dit illustreer wel die punt dat onderbrekings met penwisselings en eksterne onderbrekings logies onafhanklik is en binne dieselfde poortregister gebruik kan word.
  3. Niks word behaal deur 'n aangepaste SoftwareSerial -weergawe te gebruik nie - daar is slegs een poort en die SoftwareSerial -klas SAL dit gryp. Die aangepaste klas is egter steeds gebruik net om 'n verandering te vermy wat nie direk verband hou met die doel van hierdie stap nie.

Aanbeveel: