Taula de continguts:

Reutilització del pin d'interfície ATtiny84 / 85 SPI: 6 passos
Reutilització del pin d'interfície ATtiny84 / 85 SPI: 6 passos

Vídeo: Reutilització del pin d'interfície ATtiny84 / 85 SPI: 6 passos

Vídeo: Reutilització del pin d'interfície ATtiny84 / 85 SPI: 6 passos
Vídeo: ATtiny85 Arduino Getting Started Tutorial, the Smallest Arduino, Micro Arduino, ATtiny85 Bootloader 2024, Desembre
Anonim
Reutilització del pin d'interfície ATtiny84 / 85 SPI
Reutilització del pin d'interfície ATtiny84 / 85 SPI

Aquesta instrucció és un seguiment de la "Depuració de circuits ATtiny84 / 85 amb sortida de sèrie" instructable i amplia aquesta configuració de maquinari i programari per abordar el problema de la reutilització dels pins de descàrrega de programació pel programa d'aplicació. En total, entre aquesta i la primera part instructiva, es debaten / demostren els temes següents:

Tema ATtiny84 ATtiny85
Comunicació en sèrie mitjançant la classe SoftwareSerial X X
Compartint pins dels dispositius entre l'aplicació i la descàrrega X X
Interrupció del canvi de pin X
Interrupció externa X
Dormiu en mode POWER_DOWN; desperta en interrupció X
Solució de l’error d’enllaç de vector d’interrupció "multiplicat definit" relacionat amb SoftwareSerial X
Cicle de desenvolupament de modificacions, descàrregues, depuracions, … en circuit per als dispositius ATtiny X X

Afegir un component d'E / S de maquinari a un dels pins dedicats a la interfície de programació SPI de vegades està bé, de vegades no. Per exemple, afegir un LED a MISO només fa que parpellegi durant la descàrrega i que estigui disponible per a l'aplicació. Tanmateix, afegir un brunzidor piezoelèctric a MISO donarà lloc a un horrible so de crits seguit d'un error de descàrrega.

Aquesta instrucció explica com utilitzar un multiplexor 4x2: 1 per "recuperar" l'ús dels pins assignats als senyals MISO, MOSI i SCK de la interfície SPI protegint-los durant la descàrrega. La reutilització del pin RESET requereix un canvi de fusible i no està coberta per aquest enfocament. La doble assignació dels pins s'aconsegueix utilitzant el multiplexor per canviar entre l'aplicació i les entrades de programació en funció de si la descàrrega està en curs. S'inclouen codis i esquemes tant per a ATtiny84 com per a ATtiny85. La configuració ATiny84 s’aborda primer, ja que té dos ports d’E / S i es pot utilitzar per il·lustrar alguns problemes / solucions addicionals. Després de la discussió tiny84, es discuteixen els mateixos escenaris per a l'ATtiny85.

Pas 1: maquinari obligatori

Imatge
Imatge

La majoria del maquinari requerit es va incloure a la part 1 que es pot instruir, de manera que només es mostra el maquinari nou a continuació.

Nom Possible font Com s'utilitza
Multiplexor 4x2: 1 Mouser Conté quatre commutadors de 2 entrades i 1 sortida que són el mecanisme mitjançant el qual es comparteixen els senyals de la interfície SPI i les E / S d'aplicacions.
Interruptor SPST Qualsevol tipus de commutador (momentani o tancat) funcionarà. El commutador s’utilitza per il·lustrar l’ús compartit de pins per a una entrada d’aplicació.
Resistència de 10K Resistència desplegable per al commutador SPST per evitar una entrada flotant
Imatge
Imatge
Imatge
Imatge

El multiplexor és la clau per aïllar l’ús de la descàrrega de pins de l’ús de l’aplicació. La funcionalitat general del multiplexor 4x2: 1 és bastant senzilla i consta de 2 senyals de control i 4 commutadors que funcionen de manera idèntica. A continuació es parla del comportament de cada pin del multiplexor:

Pin Nom Funció
15 G Tal com s’indica a la taula de veritat, el multiplexor només funciona quan el pin d’habilitació G està baix. Com que mai no volem desactivar totalment el multiplexor, el pin 15 es connectarà directament a terra.
2-4; 5-7; 9-11;12-14 A (entrada), B (entrada), Y (sortida) Hi ha quatre entrades de 2; Commutadors d'una sortida amb cada grup de 3 pins numerats consecutivament en l'ordre A (entrada), B (entrada), Y (sortida), p. per al commutador 1; pin 2 = 1A; pin 3 = 1B; pin 4 = 1Y.
1 Seleccioneu Quan la selecció és baixa, l’entrada del commutador A està connectada al pin de sortida del commutador associat, Y. Quan la selecció és alta, l’entrada del commutador B es connecta a la sortida. Els commutadors són controlats simultàniament pel senyal Select i funcionen de manera idèntica.
8 GND terra multiplexor IC
16 VCC alimentació IC multiplexor

Pas 2: Visió general dels casos de prova

Imatge
Imatge
Imatge
Imatge

Els dos escenaris per a la reutilització del pin es basen en si el pin és una entrada o sortida d'aplicació. El procediment per gestionar qualsevol entrada sempre és el mateix; també el procediment per a les sortides de l'aplicació és idèntic independentment del component de maquinari. Tot i això, l’explicació és més fàcil i, amb sort, més clara, si es donen exemples específics. Els dissenys minimalistes per als dos casos es mostren a la part superior. Per a les configuracions detallades més endavant, les connexions es converteixen en un niu d'esquirols, de manera que pot ser útil referir-vos a aquests diagrames més nets.

RESET és l'elecció perfecta per al senyal de selecció del multiplexor, ja que és baix durant la descàrrega, però torna enrere quan finalitza la descàrrega. Tingueu en compte que qualsevol dels commutadors del multiplexor es podria utilitzar en qualsevol cas, ja que tots els commutadors es comporten de manera idèntica. A més, cap dels dos exemples no és "realista"; en lloc d’això, es van triar com la forma més directa d’il·lustrar les tècniques d’aïllament

  1. Cas de sortida: la sortida LED del pin 4 ATtiny84 (SCK) s’aïlla mitjançant l’interruptor 2 del multiplexor

    • connecteu el pin 2A del multiplexor a terra
    • connecteu el pin 2B del multiplexor al pin 4 ATtiny85
    • connecteu la sortida 2Y a l’ànode LED

      • Resultats esperats:

        • El LED està apagat durant la descàrrega ja que està connectat a terra a 2A
        • LED connectat al pin de sortida de l'aplicació 4 després de la descàrrega mitjançant 2B i comença a parpellejar
  2. Cas d’entrada: l’entrada del commutador SPST al pin 6 ATtiny84 (MOSI) s’aïlla mitjançant el commutador multiplexor 3

    • El fil conductor MOSI de la capçalera del programador AVR es mou a 3A
    • l’entrada de commutador 3B està connectada a la sortida SPST
    • la sortida 3Y està connectada al pin 6 d'ATtiny84

      • 3A, MOSI, està connectat al pin 6 durant la descàrrega
      • 3B, sortida SPST, està connectada al pin 6 després de la descàrrega

El cas 1 té èxit si el LED no parpelleja durant la descàrrega del programa i després parpelleja cada dos segons després de la descàrrega, tal com s’esperava sota el control del programa. Sense aïllament, el LED parpellejaria durant la descàrrega, ja que està connectat directament al senyal SCK, que canvia d'estat per rebre / transmetre les dades del rellotge.

El cas 2 té èxit si el senyal MOSI s’envia a l’ATtiny84 durant la descàrrega, és a dir, la descàrrega no falla i el LED respon a l’encesa / apagada SPST després de la descàrrega. El cas 2 impedeix una fallada de descàrrega poc probable. Sense aïllament, l’interruptor SPST causarà un error si 1) s’utilitza un interruptor bloquejat i 2) es deixa l’interruptor en posició d’encès durant la descàrrega. Quan està aïllat pel multiplexor, el commutador no pot causar cap error de descàrrega en cap cas. Una mica estirat però reconfortant per a nosaltres, gent gran.

Una conseqüència de l'ús del multiplexor és que el component de maquinari ja no es pot connectar directament al pin d'E / S del microcontrolador. Això és una mica incòmode, però permet que el component romangui a la taula de proves durant la prova juntament amb l’altre maquinari de l’aplicació, i es pot tornar a la ubicació correcta quan finalitzi la prova.

Pas 3: ATtiny84 Cas 1 - Aïllar la sortida de l'aplicació

Imatge
Imatge

Aquest pas descriu la configuració per compartir un pin de sortida de l'aplicació amb un senyal de descàrrega. L'exemple utilitzat és el LED connectat al pin 4 (SCK). L'ús del LED existent com a exemple permet posar èmfasi en afegir el multiplexor a l'entorn de maquinari i programari de la part 1.

  • Maquinari

    • Afegiu el multiplexor a la tauleta de suport a la ubicació relativa que es mostra al diagrama de fritzing anterior. El multiplexor es col·loca cap al centre per deixar espai al commutador SPST necessari en el cas 2.
    • Amplieu el senyal de RESET al multiplexor afegint un fil conductor (suggeriu groc) des del pin 11 ATtiny84 fins al pin 1 del multiplexor.
    • La configuració de maquinari restant és la que es dóna al pas 2

      • connecteu el pin 2A del multiplexor directament a terra
      • connecteu el pin 2B al pin 4 ATtiny84
      • connecteu la sortida 2Y a l’ànode LED

        • Resultats esperats:

          • durant la descàrrega, 2Y està connectat a terra (2A), de manera que el LED roman apagat
          • Després de la descàrrega, es connecta 2Y al pin 4 d'ATtiny84: control LED d'aplicació
  • Programari

    • El codi de la part 1 es reutilitza; disponible a la part 1 que es pot instruir en lloc de duplicar-lo aquí
    • Carregueu i compileu el programa de la part 1 a l'IDE Arduino
    • Connecteu el programador Tiny AVR a un port USB del PC
    • Connecteu el cable USB a sèrie Adafruit a un segon port USB

      • Es crea un port COM que es fa disponible automàticament a la llista de ports IDE
      • Inicieu la finestra COM
    • Baixeu-vos el codi compilat a ATtiny84

Els resultats del programa d'aplicació són els mateixos que per a la part 1, ja que l'únic canvi va ser moure el LED a una ubicació "protegida": el LED parpelleja a intervals de 2 segons; la sortida en sèrie és la mateixa. L'única diferència que s'hauria de produir és que el LED ja no parpelleja durant la descàrrega, ja que, durant aquest temps, es connecta a terra mitjançant el pin 2A del multiplexor.

Imatge
Imatge

Pas 4: ATtiny84 Cas 2: aïllar l'entrada de l'aplicació

Imatge
Imatge

Aquest pas es basa en la configuració del cas anterior d'aïllament de sortida. Els canvis de maquinari consisteixen a connectar un commutador SPST al pin 6 ATtiny84 (MOSI) mitjançant el multiplexor. Per tant, els canvis de maquinari són mínims, però hi ha diversos canvis de programari que permeten al commutador SPST controlar el LED mitjançant una interrupció de canvi de pin. El codi actualitzat s'inclou a la part inferior d'aquesta secció. El codi s'ha de copiar a l'IDE Arduino; suggeriu desar-lo amb el nom Multiplexer_Input. (Disculpeu la durada d'aquesta secció, però és el centre del propòsit de l'instrumentable i crec que es llegeix millor com a monòlit en lloc d'inserir pauses artificials).

Actualització Ubicació Propòsit
inclou la classe SoftwareSerial "pirateada" inclou la secció Ara el LED es controla mitjançant l’interruptor SPST mitjançant una interrupció de canvi de pin. La classe SoftwareSerial s'ha de modificar, ja que en cas contrari assigna TOTS els vectors d'interrupció del canvi de pin. Això provoca un error d'enllaç de "definició múltiple" per al vector (port 0) assignat al commutador SPST. La versió de SoftwareSerial piratejada s’hauria de col·locar al mateix directori que el programa perquè afectés només aquesta aplicació.
Definició de pin d'entrada SPST secció d’inclusió / definició assignació d’entrada SPST a un pin del dispositiu. El pin és específic del dispositiu, de manera que s'afegeix a les seccions #ifdef ATtiny8x.
Mode pin d'entrada SPST funció de configuració El pin SPST es configura com a INPUT
Configureu la interrupció de pin SPST funció de configuració El vector d'interrupció s'assigna al pin d'entrada SPST de manera que un canvi d'estat del commutador provoca una interrupció. Els registres de configuració i el tipus d'interrupció són específics del dispositiu. Per fer el codi el més senzill possible, les diferències es gestionen dins d'una secció definida #if
Configura el missatge en sèrie complet funció de configuració El missatge de sortida sèrie completa de la configuració es canvia per reflectir l'aplicació d'entrada del multiplexor
Afegiu la funció ISR del commutador SPST secció de codis S'afegeix la ISR per a la interrupció de canvi de pin SPST. El codi és comú, però el vector utilitzat és específic del dispositiu i es defineix a les seccions que depenen del dispositiu a la part superior del programa. Per tal de verificar que l'ISR està activat, es canvia l'estat del LED. Tot i que no-no en una aplicació real, es genera un missatge de sortida sèrie que reflecteix el nou estat LED.
Modifica el processament del bucle funció de bucle Ara l’ISR controla l’encesa i l’apagada del LED de manera que s’elimini la funcionalitat de la rutina de bucles. S'afegeix una trucada a la rutina de son per a ATtiny84 com a "extra". Per a aquesta aplicació, ATtiny85 sleep no funciona; potser a causa de la interferència de la classe Software Serial, ja que funciona amb SoftwareSerial eliminat.
Afegiu una rutina de son secció de codis La funcionalitat de son no és necessària per demostrar l’ús del multiplexor. S'ha afegit simplement perquè normalment es vol esperar una entrada en mode POWER_DOWN per estalviar energia en lloc de continuar executant-se pel bucle del programa sense fer res fins que es produeixi una entrada.

Modifiqueu el codi de classe SoftwareSerial

Cal canviar la classe SoftwareSerial perquè no emboliqui tots els ports d’interrupció del canvi de pin. El codi de la classe SoftwareSerial es troba a

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

Cerqueu a PCINT0_vect a SoftwareSerial.cpp per trobar la ubicació inicial dels canvis de codi. Afegiu el codi següent immediatament anterior a la sentència #if definit (PCINT0_vect) existent.

#if definit (_ AVR_ATtiny84_)

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

Ara comenteu el bloc de codi existent que assigna els vectors d’interrupció del port tal com s’indica a continuació (només cal afegir els símbols de comentari del bloc d’inici i de finalització / * i * /):

/*

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

Configureu el maquinari

El commutador SPST està connectat al pin 6 ATtiny84 (MOSI) tal com es descriu al pas 2. El procediment es duplica aquí per comoditat.

  • connecteu l’entrada del commutador 3A al cable MOSI de la capçalera del programador Tiny AVR
  • connecteu 3B al pin de sortida de l’interruptor SPST
  • connecteu 3Y al pin 6 d'ATtiny84

    • RESULTATS:

      • 3A, MOSI, es tancarà al pin 6 d'ATtiny84 durant la descàrrega
      • 3B, sortida SPST, es tancarà al pin 6 després de la descàrrega

Executeu el programa

Abans d’executar, poseu l’interruptor SPST a la posició apagada. En cas contrari, el LED s’encendrà quan l’interruptor estigui apagat i viceversa. Seguiu el procediment del pas 3 per carregar, compilar i descarregar el programa d'entrada de l'aplicació mitjançant l'IDE Arduino. Com abans, el LED no hauria de parpellejar durant la descàrrega, de manera que l’única indicació que el programa està en funcionament serà el missatge en sèrie al final de la rutina de configuració: SETUP Complete - Exemple d’entrada

En aquest moment, el programa espera una entrada del commutador SPST. Si col·loqueu l’interruptor a la posició ON, el LED s’encendrà; si canvieu de nou a la posició apagada, el LED s'apaga. Els missatges de sortida verificen que es va invocar l'ISR (ISR: Led HIGH, ISR: Led LOW). Tingueu en compte que l’ordre dels missatges en sèrie és ANAR A DORMIR abans d’esperar un canvi d’estat del commutador; quan s'obté una entrada de commutador, s'invoca l'ISR, commuta el LED i documenta el canvi; després, el processament es reprèn després de la trucada de repòs, ja que la interrupció desperta el processador.

Imatge
Imatge

PROGRAMA PER AQUEST INSTRUCTABLE:

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

// PART 2: Aplicació / baixada de compartició de pins del dispositiu //. Modifica el codi de la part 1 per donar suport a la reutilització de l'aplicació dels pins // assignats a la interfície de programació SPI //. Codi "Comon" per a ATtiny85 i ATtiny84 // **************************************** ******************************** #include "SoftwareSerial.h" // Classificació Arduino SoftwareSerial modificada #include // While el codi de processament és comú, els pins utilitzats són específics del dispositiu #if definit (_ AVR_ATtiny84_) || definit (_ AVR_ATtiny84A_) #define ledPin 4 // Activat / desactivat per activar / desactivar el Led connectat #define rxPin 9 // Pin usat per a la recepció serial #define txPin 10 // Pin utilitzat per a la transmissió serial #define SpstPin 6 // Entrada des del commutador SPST (MOSI) #define ISR_VECT PCINT0_vect // Commutador SPST Pin d'interruptor de canvi de vector #elif definit (_ AVR_ATtiny85_) #define ledPin 1 #define rxPin 4 #define txPin 3 #define SpstPin 2 // Entrada des del commutador SPST (INT0) #define ISR_VECT INT0_v // Commutador SPST Vector d'interrupció de canvi de pin #else #error Només ATiny84 i ATtiny85 són compatibles amb aquest projecte #endif // Creeu una instància de la classe de programari Serial especificant quin dispositiu // els pins s'utilitzaran per rebre i transmetre SoftwareSerial mySerial (rxPin, txPin); // ------------------------------------------------ ------------------------ // Inicialitzar els recursos de processament // ------------------- -------------------------------------------------- --- void setup () {mySerial.begin (9600); // Inicia el retard de processament en sèrie (2000); // Doneu temps al port Serial Com per completar l'inici. // en cas contrari, probablement es produeixi la 1a sortida de pinMode (ledPin, OUTPUT); // Configureu el pin led per a OUTPUT pinMode (SpstPin, INPUT); // Configureu el pin de commutació SPST com a INPUT #if definit (_ AVR_ATtiny84_) || (_AVR_ATtiny84A_) // configureu la interrupció del canvi de pin per gestionar l'entrada del commutador al pin 6 (MOSI) GIMSK | = (1 <

Pas 5: ATtiny85 Cas 1: aïllar la sortida de l'aplicació

Imatge
Imatge

En lloc de crear una configuració de maquinari duplicada per a l'ATtiny85, probablement sigui més fàcil començar amb la configuració acabada d'ATtiny84 des del pas 4 i substituir el xip tiny84 pel tiny85. Tot el maquinari necessari ja està disponible. Si utilitzeu aquest enfocament, localitzeu el tiny85 de manera que els pins 3 i 4 s’alineen amb el cable sèrie tx i reben cables. Aleshores només es tracta de reubicar els cables de la interfície SPI perquè coincideixin amb les ubicacions necessàries per a l'ATtiny85.

Si comenceu de zero, seguiu els passos generals del pas 3 i el diagrama de fritzing anterior. El codi és el mateix que s'utilitza per a l'ATtiny84 al pas 3 amb els mateixos resultats esperats: no hi ha parpelleig durant la descàrrega; quan s'executa el LED parpelleja a intervals de 2 segons i els missatges de sortida sèrie segueixen l'estat del LED.

Imatge
Imatge

Pas 6: ATtiny85 Cas 2: aïllar l'entrada de l'aplicació

Imatge
Imatge

Per a la configuració del maquinari, comenceu amb la configuració del pas 5 i afegiu el commutador SPST tal com s'indica al diagrama de fritzing anterior. De fet, he utilitzat un commutador momentani per a la versió tiny85 i fa que la verificació sigui una mica més fàcil. Tingueu en compte que la sortida del commutador gira 180 graus des de la configuració ATtiny84. Aquest canvi fa que sigui més fàcil enrutar els cables de connexió, ja que els 3 senyals SPI es troben al mateix costat per a l'ATtiny85.

Utilitzeu el mateix programa que per a ATtiny84 Pas 4. S'esperen els mateixos resultats generals: el LED canvia d'estat quan l'interruptor SPST s'encén / apaga i els missatges de sortida sèrie documenten els canvis. Falten els missatges ANAR A DORMIR ja que la funcionalitat de repòs no s’invoca a l’ATtiny85. Tot i que s’utilitza el mateix programa, hi ha diferències significatives en la implementació per tenir en compte el fet que l’ATtiny85 només té un registre de ports (Port 0):

  1. SoftwareSerial ara assigna la interrupció de canvi de 0 pins de port per a la comunicació serial (recordem que vam poder utilitzar el port 1 per a l'ATtiny84).
  2. L'interrupció del commutador SPST s'ha d'implementar amb la interrupció externa 0 (INT0), ja que SoftwareSerial assigna l'única interrupció de canvi de pin. Això il·lustra el punt que les interrupcions de canvi de pin i les interrupcions externes són lògicament independents i es poden utilitzar dins del mateix registre de ports.
  3. No es guanya res mitjançant l’ús d’una versió de SoftwareSerial modificada: només hi ha un port i la classe SoftwareSerial l’aconseguirà. Tot i això, la classe modificada encara es feia servir només per evitar un canvi que no estigués directament relacionat amb l'objectiu d'aquest pas.

Recomanat: