Indholdsfortegnelse:

ATtiny84/85 SPI Interface Pin Genbrug: 6 trin
ATtiny84/85 SPI Interface Pin Genbrug: 6 trin

Video: ATtiny84/85 SPI Interface Pin Genbrug: 6 trin

Video: ATtiny84/85 SPI Interface Pin Genbrug: 6 trin
Video: Squid game #shorts 2024, September
Anonim
ATtiny84/85 SPI Interface Pin Genbrug
ATtiny84/85 SPI Interface Pin Genbrug

Denne instruerbare er en opfølgning på "ATtiny84/85 In-circuit Debugging with Serial Output" instruerbar og udvider denne hardware- og softwarekonfiguration til at løse problemet med genbrug af programmeringsdownload-benene i applikationsprogrammet. Alt i alt mellem dette og den del 1, der kan instrueres, diskuteres/demonstreres følgende emner:

Emne ATtiny84 ATtiny85
Seriel kommunikation ved hjælp af klassen SoftwareSerial x x
Deling af enhedsnåle mellem applikation og download x x
Pin Change afbrydelse x
Ekstern afbrydelse x
Sov i POWER_DOWN -tilstand; vågne ved afbrydelse x
Work-around for den "multiplicerede definerede" afbrydelsesvektorlinkfejl relateret til SoftwareSerial x
In-circuit modificering, download, fejlretning, … udviklingscyklus for ATtiny-enhederne x x

Tilføjelse af en hardware I/O -komponent til en af benene, der er dedikeret til SPI -programmeringsgrænsefladen, er undertiden OK, nogle gange ikke. For eksempel får tilføjelse af en LED til MISO bare LED'en til at flimre under download, og så er den tilgængelig for applikationen. Imidlertid vil tilføjelse af en piezo -summer til MISO resultere i en frygtelig skrigende lyd efterfulgt af downloadfejl.

Denne instruktør forklarer, hvordan man bruger en 4x2: 1 multiplexer til at "gendanne" brug af benene, der er tildelt SPI -grænsefladen MISO, MOSI og SCK -signaler ved at beskytte dem under download. Genbrug af RESET -stiften kræver et sikringsskift og er ikke omfattet af denne fremgangsmåde. Dobbelt tildeling af stifterne opnås ved at bruge multiplexeren til at skifte mellem applikations- og programmeringsindgange afhængigt af om download er i gang. Kode og skemaer er inkluderet for både ATtiny84 og ATtiny85. ATiny84 -konfigurationen behandles først, da den har to I/O -porte og kan bruges til at illustrere nogle yderligere problemer/løsninger. Efter diskussionen tiny84 diskuteres de samme scenarier for ATtiny85.

Trin 1: Påkrævet hardware

Billede
Billede

Det meste af den nødvendige hardware blev angivet i del 1, der kan instrueres, så kun den nye hardware er angivet nedenfor.

Navn Mulig kilde Hvordan brugt
4x2: 1 Multiplexer Mouser Indeholder fire 2-input; 1-output switches, som er den mekanisme, hvormed SPI-interfacesignalerne og applikationens I/O'er deles.
SPST switch Enhver switch type (momentan eller låst) fungerer. Omskifteren bruges til at illustrere pindeling for en applikationsindgang.
10K modstand Pull-down modstand til SPST-kontakten for at undgå en flydende indgang
Billede
Billede
Billede
Billede

Multiplexeren er nøglen til at isolere brug af pin -download fra applikationsbrug. Den overordnede funktionalitet af 4x2: 1 multiplexeren er ret ligetil, der består af 2 kontrolsignaler og 4 identisk fungerende kontakter. Opførslen af hver multiplexerstift diskuteres nedenfor:

Pin Navn Fungere
15 G Som angivet i sandhedstabellen fungerer multiplexeren kun, når G -aktiveringsnålen er lav. Da vi aldrig helt vil deaktivere multiplexeren, bliver pin 15 forbundet direkte til jorden.
2-4; 5-7; 9-11;12-14 A (input), B (input), Y (output) Der er fire 2-input; 1-output switches med hver gruppe på 3 ben nummereret fortløbende i rækkefølgen A (input), B (input), Y (output) f.eks. til switch 1; pin 2 = 1A; pin 3 = 1B; pin 4 = 1Y.
1 Vælg Når Select er lav, er switch -indgang A forbundet til den tilhørende switch -output -pin, Y. Når select er høj, er switch -input B forbundet til output i stedet. Skifterne styres samtidigt af Select -signalet og fungerer identisk.
8 GND multiplexer IC -jord
16 VCC multiplexer IC strøm

Trin 2: Oversigt over testcases

Billede
Billede
Billede
Billede

De to scenarier til genanvendelse af ben er baseret på, om stiften er en applikationsindgang eller -output. Proceduren for håndtering af input er altid den samme; også proceduren for applikationsoutput er identisk uanset hardwarekomponenten. Alligevel er forklaringen lettere og forhåbentlig klarere, hvis der gives specifikke eksempler. Minimalistiske layout for de to sager er vist ovenfor. For de detaljerede opsætninger senere bliver forbindelserne lidt af et egern reden, så det kan være nyttigt at henvise til disse renere diagrammer.

RESET er det perfekte valg til multiplexer Select -signalet, da det er lavt under download, men går højt tilbage, når download er fuldført. Bemærk, at enhver af multiplexerkontakterne kan bruges i begge tilfælde, da alle kontakter opfører sig identisk. Ingen af eksemplerne er også "realistiske"; de blev i stedet valgt som den mest ligetil måde at illustrere isolationsteknikkerne på

  1. Output Case: LED output fra ATtiny84 pin 4 (SCK) er isoleret ved hjælp af multiplexer switch 2

    • tilslut multiplexer pin 2A til jorden
    • tilslut multiplexer pin 2B til ATtiny85 pin 4
    • tilslut udgang 2Y til LED -anoden

      • Forventede resultater:

        • LED er slukket under download siden tilsluttet 2A, jord
        • LED fastgjort til applikationsudgangsstift 4 efter download via 2B og begynder at blinke
  2. Input Case: SPST switch input til ATtiny84 pin 6 (MOSI) er isoleret ved hjælp af multiplexer switch 3

    • MOSI -ledning fra AVR -programmeringshovedet flyttes til 3A
    • switchindgang 3B er forbundet til SPST -udgang
    • output 3Y er forbundet til ATtiny84 pin 6

      • 3A, MOSI, er forbundet til pin 6 under download
      • 3B, SPST -udgang, tilsluttes pin 6 efter download

Sag 1 lykkes, hvis lysdioden ikke blinker under programdownload og derefter blinker hvert andet sekund efter download som forventet under programkontrol. Uden isolation ville LED'en flimre under download, da den er forbundet direkte til SCK -signalet, som ændrer tilstand til urdata modtage/transmittere.

Sag 2 lykkes, hvis MOSI -signalet videresendes til ATtiny84 under download, dvs. download mislykkes, og LED'en reagerer på SPST -tænd/sluk efter download. Sag 2 forhindrer en usandsynlig downloadfejl. Uden isolation vil SPST -kontakten forårsage fejl, hvis 1) der bruges en låst kontakt, og 2) kontakten efterlades i tændt position under download. Når kontakten er isoleret af multiplexeren, kan den under ingen omstændigheder forårsage downloadfejl. Lidt af en strækning men trøstende for os gamle mennesker.

En konsekvens af at bruge multiplexeren er, at hardwarekomponenten ikke længere kan tilsluttes direkte til mikrokontrollerens I/O -ben. Dette er noget ubelejligt, men tillader, at komponenten forbliver på brødbrættet under testen sammen med den anden applikationshardware og kan flyttes tilbage til sin retmæssige placering, når testen er gennemført.

Trin 3: ATtiny84 Case 1 - Isolér applikationsoutput

Billede
Billede

Dette trin beskriver opsætning til deling af en applikations output -pin med et downloadsignal. Det anvendte eksempel er LED'en fastgjort til pin 4 (SCK). Brug af den eksisterende LED som eksempel tillader vægt på tilføjelse af multiplexeren til del 1 hardware- og softwaremiljøet.

  • Hardware

    • Tilføj multiplexeren til brødbrættet på den relative placering, der er vist i fritzdiagrammet ovenfor. Multiplexeren er placeret mod midten for at give plads til den SPST -switch, der er nødvendig i sag 2.
    • Udvid RESET -signalet til multiplexeren ved at tilføje en ledning (foreslå gul) fra ATtiny84 pin 11 til multiplexer pin 1.
    • Den resterende hardwareopsætning er som angivet i trin 2

      • tilslut multiplexer pin 2A direkte til jorden
      • tilslut pin 2B til ATtiny84 pin 4
      • tilslut udgang 2Y til LED -anoden

        • Forventede resultater:

          • under download er 2Y forbundet til jorden (2A), så LED'en forbliver slukket
          • Efter download er 2Y forbundet til ATtiny84 pin 4 - applikations LED -kontrol
  • Software

    • Del 1 -koden genbruges; tilgængelig fra del 1 instruerbar frem for duplikeret her
    • Indlæs og kompilér del 1 -programmet i Arduino IDE
    • Tilslut den lille AVR -programmør til en pc -USB -port
    • Tilslut Adafruit USB til Serial -kablet til en anden USB -port

      • En COM -port oprettes og gøres automatisk tilgængelig på IDE -portlisten
      • Start COM -vinduet
    • Download den kompilerede kode til ATtiny84

Applikationsprogrammets resultater er de samme som for del 1, da den eneste ændring var at flytte LED'en til et "beskyttet" sted: LED'en blinker med 2 sekunders mellemrum; seriel output er den samme. Den eneste forskel, der skulle forekomme, er, at LED'en ikke længere flimrer under download, da den i løbet af denne tid er forbundet til jorden via multiplexer pin 2A.

Billede
Billede

Trin 4: ATtiny84 Case 2 - Isolér applikationsinput

Billede
Billede

Dette trin bygger på opsætningen af den tidligere output -isolationskasse. Hardwareændringer består i at tilslutte en SPST -switch til ATtiny84 pin 6 (MOSI) via multiplexeren. Så hardwareændringerne er minimale, men der er flere softwareændringer, der gør det muligt for SPST -kontakten at styre LED'en ved hjælp af en pin -skifteafbrydelse. Den opdaterede kode er inkluderet nederst i dette afsnit. Koden skal kopieres til Arduino IDE; foreslå at gemme det under navnet Multiplexer_Input. (Jeg beklager længden af dette afsnit, men det er kernen i instruktørens formål og synes, at det læser bedre som en monolit frem for at indsætte kunstige brud.)

Opdatering Beliggenhed Formål
omfatte "hacket" SoftwareSerial -klasse omfatte afsnit Lysdioden styres nu af SPST -kontakten via en afbrydelse af stiftskift. SoftwareSerial -klassen skal ændres, da den ellers tildeler ALLE stiftskifteafbrydelsesvektorer. Dette forårsager en "multiple definition" linkfejl for (port 0) vektoren, der er tildelt SPST -switchen. Den hackede SoftwareSerial -version skal placeres i samme bibliotek som programmet, så den kun påvirker denne applikation.
SPST input pin definition inkludere/definition sektion tildeling af SPST -input til en enhedsnål. Stiften er enhedsspecifik, så den føjes til sektionen (e) #ifdef ATtiny8x.
SPST input pin -tilstand opsætningsfunktion SPST -stiften er konfigureret som en INPUT
Konfigurer SPST pin interrupt opsætningsfunktion Afbrydelsesvektoren tildeles SPST -indgangsstiften, så en ændring i switchtilstand forårsager en afbrydelse. Konfigurationsregistrene og afbrydelsestypen er enhedsspecifikke. For at gøre koden så ligetil som muligt håndteres forskellene inden for en #hvis defineret sektion
Opsætning af komplet seriel meddelelse opsætningsfunktion Den komplette konfiguration af den serielle output -meddelelse ændres, så den afspejler applikationen Multiplexer Input
Tilføj SPST switch ISR -funktion kodesektion ISR'en for SPST pin -ændringsafbrydelsen tilføjes. Koden er almindelig, men den anvendte vektor er enhedsspecifik og er defineret i de enhedsafhængige sektioner øverst i programmet. For at kontrollere, at ISR er aktiveret, ændres LED -tilstanden. Selvom det er et nej-nej i en rigtig applikation, genereres en seriel output-meddelelse, der afspejler den nye LED-tilstand.
Rediger loop -behandling loop -funktion ISR'en kontrollerer nu at tænde og slukke LED'en, så funktionaliteten fjernes fra loop -rutinen. Et opkald til søvnrutinen tilføjes til ATtiny84 som en slags "ekstra". Til denne applikation fungerer ATtiny85 søvn ikke; måske på grund af forstyrrelser i klassen Software Serial, da den fungerer med SoftwareSerial fjernet.
Tilføj søvnrutine kodesektion Søvnfunktion er ikke nødvendig for at demonstrere brugen af multiplexeren. Lige tilføjet, fordi jeg normalt ville vente på et input i POWER_DOWN -tilstand for at spare strøm i stedet for at fortsætte med at køre gennem programsløjfen uden at gøre noget, før der opstår et input.

Rediger SoftwareSerial -klassekoden

SoftwareSerial -klassen skal ændres, så den ikke sviner alle pin -ændringsafbrydelsesporte. SoftwareSerial -klassekoden er placeret på

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

Find et fund på PCINT0_vect i SoftwareSerial.cpp for at finde startplaceringen for kodeændringerne. Tilføj følgende kode umiddelbart forud for den eksisterende #if definerede (PCINT0_vect) sætning.

#if defineret (_ AVR_ATtiny84_)

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

Kommenter nu den eksisterende kodeblok, der tildeler portafbrydelsesvektorerne som angivet nedenfor (tilføj blot start- og slutblokkommentarsymboler / * og * /):

/*

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

Konfigurer hardwaren

SPST -switchen er fastgjort til ATtiny84 pin 6 (MOSI) som beskrevet i trin 2. Proceduren er duplikeret her for nemheds skyld.

  • tilslut switchindgang 3A til Tiny AVR Programmer header MOSI -kabel
  • tilslut 3B til SPST switch ON -udgangsstiften
  • tilslut 3Y til ATtiny84 pin 6

    • RESULTATER:

      • 3A, MOSI, gates til ATtiny84 pin 6 under download
      • 3B, SPST -output, gates til pin 6 efter download

Kør programmet

Sæt SPST -kontakten i slukket position, før du kører. Ellers tænder LED'en, når kontakten er slukket og omvendt. Følg proceduren for trin 3 for at indlæse, kompilere og downloade applikationsinputprogrammet ved hjælp af Arduino IDE. Som før bør LED'en ikke blinke under download, så den eneste indikation på, at programmet er i gang, er den serielle meddelelse i slutningen af installationsrutinen: SETUP Complete - Input Eksempel

På dette tidspunkt venter programmet på et input fra SPST -kontakten. Placering af kontakten i ON -position vil få LED'en til at tænde; ved at skifte tilbage til slukket position slukker LED'en. Outputmeddelelser bekræfter, at ISR blev påberåbt (ISR: Led HIGH, ISR: Led LOW). Læg mærke til rækkefølgen af de serielle meddelelser er GO TO SLEEP først venter på en switch state ændring; når få en switch -input, aktiveres ISR, skifter LED'en og dokumenterer ændringen; derefter optager behandlingen efter søvnopkaldet, da afbrydelsen vækker processoren.

Billede
Billede

PROGRAM FOR DENNE INSTRUKTABEL:

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

// DEL 2: Applikation/download enhedens pindeling //. Ændrer del 1 -koden for at understøtte applikationsgenbrug af benene //, der er tildelt SPI -programmeringsgrænsefladen //. "Comon" -kode for ATtiny85 og ATtiny84 // **************************************** ******************************* #include "SoftwareSerial.h" // Modificeret Arduino SoftwareSeriel klasse #include // While behandlingskoden er almindelig, benene, der bruges, er enhedsspecifikke #if defineret (_ AVR_ATtiny84_) || defineret (_ AVR_ATtiny84A_) #define ledPin 4 // Skiftede til at slå tilsluttet Led til/fra #define rxPin 9 // Pin bruges til seriel modtagelse #define txPin 10 // Pin bruges til seriel transmission #define SpstPin 6 // Input fra SPST -switch (MOSI) #define ISR_VECT PCINT0_vect // SPST -switch Pin -ændringsafbrydelsesvektor #elif defineret (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Input fra SPST -switch (INT0)_Vind_ // SPST -switch Pin -ændringsafbrydelsesvektor #else #error Kun ATiny84 og ATtiny85 understøttes af dette projekt #endif // Opret forekomst af klassen Software Serial, der angiver, hvilken enhed // pins der skal bruges til at modtage og transmittere SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Initialiser behandlingsressourcer // ------------------- ---------------------------------------------------------- --- void setup () {mySerial.begin (9600); // Start forsinkelse af seriel behandling (2000); // Giv Serial Com -port tid til at fuldføre opstarten. // ellers mangler 1. output sandsynligvis eller forvansket pinMode (ledPin, OUTPUT); // Konfigurer led -pin til OUTPUT pinMode (SpstPin, INPUT); // Konfigurer SPST switch pin som et INPUT #hvis defineret (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // opsætning af pin -ændringsafbrydelse til at håndtere switch -input på pin 6 (MOSI) GIMSK | = (1 <

Trin 5: ATtiny85 Case 1 - Isolér applikationsoutput

Billede
Billede

I stedet for at opbygge en duplikeret hardware -opsætning til ATtiny85, er det sandsynligvis lettere at starte med den færdige konfiguration for ATtiny84 fra trin 4 og erstatte den tiny84 -chip med den lille85. Al den nødvendige hardware er så allerede tilgængelig. Hvis du bruger denne fremgangsmåde, skal du lokalisere den lille85, så stifter 3 og 4 stemmer overens med det serielle kabel tx og modtager ledninger. Det er derefter bare et spørgsmål om at flytte SPI -interfacets ledningstråde til at matche deres krævede placeringer for ATtiny85.

Hvis du starter forfra, skal du bare følge de generelle trin fra trin 3 og fritz -diagrammet ovenfor. Koden er den samme som bruges til ATtiny84 i trin 3 med de samme forventede resultater - ingen flimmer under download; ved kørsel blinker LED'en med 2 sekunders mellemrum, og serielle output -meddelelser følger LED -tilstanden.

Billede
Billede

Trin 6: ATtiny85 Case 2 - Isolér applikationsinput

Billede
Billede

Ved hardwareopsætning skal du starte med konfigurationen fra trin 5 og tilføje SPST -kontakten som angivet i fritz -diagrammet ovenfor. Jeg brugte faktisk en kortvarig switch til den lille85 -version, og det gør verifikationen lidt lettere. Bemærk, at switchens udgang drejes 180 grader fra ATtiny84 -konfigurationen. Denne ændring gør det lettere at dirigere tilslutningskablerne, da alle 3 SPI -signaler er på samme side for ATtiny85.

Brug det samme program som for ATtiny84 Trin 4. De samme generelle resultater forventes - LED'en ændrer tilstand, når SPST -kontakten tændes/slukkes, og serielle outputmeddelelser dokumenterer ændringerne. GO TO SLEEP -meddelelserne mangler, da søvnfunktionalitet ikke aktiveres for ATtiny85. Selvom det samme program bruges, er der betydelige forskelle i implementeringen for at tage højde for, at ATtiny85 kun har et portregister (Port 0):

  1. SoftwareSerial tildeler nu port 0 -pin -ændringsafbrydelsen til seriel kommunikation (husk, at vi var i stand til at bruge port 1 til ATtiny84.)
  2. SPST -switch -afbrydelsen skal implementeres med ekstern afbrydelse 0 (INT0), da den eneste pin -ændringsafbrydelse tildeles af SoftwareSerial. Dette illustrerer det punkt, at pin -ændringsafbrydelser og eksterne afbrydelser er logisk uafhængige og kan bruges inden for det samme portregister.
  3. Intet opnås ved at bruge en modificeret SoftwareSerial -version - der er kun en port, og SoftwareSerial -klassen VIL få fat i den. Den modificerede klasse blev dog stadig brugt bare for at undgå en ændring, der ikke er direkte relateret til målet med dette trin.

Anbefalede: