Taula de continguts:

El registre de canvis 74HC164 i el vostre Arduino: 9 passos
El registre de canvis 74HC164 i el vostre Arduino: 9 passos

Vídeo: El registre de canvis 74HC164 i el vostre Arduino: 9 passos

Vídeo: El registre de canvis 74HC164 i el vostre Arduino: 9 passos
Vídeo: RAMPS 1.6 - Basics 2024, De novembre
Anonim
El registre de canvis 74HC164 i el vostre Arduino
El registre de canvis 74HC164 i el vostre Arduino
El registre de canvis 74HC164 i el vostre Arduino
El registre de canvis 74HC164 i el vostre Arduino

Els registres de desplaçament són una part molt important de la lògica digital, actuen com a cola entre el món paral·lel i el món en sèrie. Redueixen el recompte de cables, utilitzen els pins i, fins i tot, ajuden a treure la càrrega de la vostra CPU en poder emmagatzemar les seves dades. Tenen diferents mides, amb diferents models per a diferents usos i diferents funcions. El que parlaré avui és el 74HC164 de 8 bits, sèrie en paral·lel, sense tancament, registre de desplaçament. Per què? Bé, per un, és un dels registres de canvis més bàsics que hi ha, cosa que facilita l'aprenentatge, però va ser l'únic que tenia (jeje!)., i connecteu-lo amb un arduino que inclou alguns esbossos de mostra i circuits led. Espero que tots gaudiu!

Pas 1: Què són els registres de torns?

Què són, doncs, els registres de canvis?
Què són, doncs, els registres de canvis?

Com es va esmentar anteriorment, presenten diferents sabors i també he mencionat que estic fent servir un 74HC164 de 8 bits, sèrie en paral·lel, sense tancament, registre de desplaçament, què significa tot això?!? En primer lloc, el nom 74 significa la seva part de la família lògica 74xx i, ja que la seva lògica no pot controlar directament molt el corrent (16-20ma per a tot el xip és comú), només transmet senyals, però això no vol dir aquest senyal no es dirigeix cap a un transistor que pot canviar una càrrega de corrent més alta. HC significa que és un dispositiu CMOS d'alta velocitat, podeu llegir-ne a l'enllaç següent, però el que bàsicament heu de saber és que és de potència i funcionarà de 2 a 5 volts (per tant, si utilitzeu un arduino de 3,3 volts, esteu bé) També pot funcionar correctament a velocitats elevades, aquest xip en particular té una velocitat típica de 78 MHz, però podeu anar tan lent o tan ràpid (fins que comenci a augmentar) com vulgueu www.kpsec.freeuk.com/components/74series.htm164 és el número de model d’aquest xip, hi ha un gràfic gran a wikipediaen.wikipedia.org/wiki/List_of_7400_series_integrated_circuits A continuació, 8 bits Un registre de desplaçament està format per circuits de flip flop, un flip flop té 1 bit de memòria, aquest ha s 8 (o 1 byte de memòria). Com que és memòria, si no necessiteu actualitzar el registre, només podeu deixar de "parlar" amb ell i es mantindrà en l'estat que hàgiu deixat, fins que "torneu a parlar-lo" o reinicieu l'alimentació. altres registres de desplaçament de la sèrie lògica 7400 poden anar fins a 16 bits de sèrie en paral·lel. Això vol dir que el vostre arduino li envia dades en sèrie (polsos apagats un darrere l'altre) i el registre de desplaçament col·loca cada bit al pin de sortida correcte. Aquest model només requereix que es controlin 2 cables, de manera que podeu utilitzar 2 pins digitals a l’arduino i trencar aquestes 2 a 8 sortides digitals més. (per exemple, un gamepad NES) no bloquejat Pot ser una caiguda d'aquest xip si el necessiteu. A mesura que les dades entren en un registre de desplaçament via sèrie, apareixen al primer pin de sortida, quan entra un pols de rellotge, el primer bit es desplaça sobre 1 lloc, creant un efecte de desplaçament a les sortides, per exemple, 00000001 apareixerà a les sortides com a 101001000100001000001000000100000001 Si parleu amb altres dispositius lògics que comparteixen el mateix rellotge i que no esperen això, pot causar problemes. Els registres de desplaçament bloquejats tenen un conjunt de memòria addicional, de manera que un cop fetes les dades entrant al registre, podeu girar un commutador i mostrar les sortides, però afegeix un altre cable, programari i coses per mantenir-se al dia. controlem les pantalles LED, l’efecte de desplaçament es produeix tan ràpid que no el podeu veure (excepte quan enceneu el xip per primera vegada) i, un cop el byte estigui al registre de desplaçaments, ja no hi ha cap desplaçament Controlarem el tipus de gràfic de barres, de 7 segments, i una matriu de 16LED 4x4 dot amb aquest xip i programari a l’arduino que utilitza només 2 pins digitals (+ alimentació i terra)

Pas 2: cablejat i funcionament bàsics

Cablejat i funcionament bàsics
Cablejat i funcionament bàsics
Cablejat i funcionament bàsics
Cablejat i funcionament bàsics

Cablatge El 74HC164 és un xip de 14 pins, té 4 pins d'entrada, 8 pins de sortida, alimentació i connexió a terra, de manera que podem començar des de la part superior. tots dos han de ser lògics alts (és a dir, 5 volts) perquè el bit es vegi com a 1, un estat baix (0 volts) en qualsevol dels dos es llegirà com a zero. Realment no ho necessitem i és més fàcil de tractar amb el programari, així que trieu-ne un i lligueu-lo a V + perquè sempre es llegeixi alt. Decideixo utilitzar un pont des del pin 1 fins al pin 14 (V +), ja que només podeu fer passar un pont sobre el xip. L’única entrada serial restant (pin 2 als meus esquemes) passarà al pin digital 2 de l’arduino. Els pins 3, 4, 5 i 6 del 74HC164 són els primers 4 bytes de sortida El pin 7 es connecta a terra Saltant a la dreta, pin 8 és el pin de rellotge, així és com el registre de desplaçament sap que el següent bit de sèrie està preparat perquè es pugui llegir, s’hauria de connectar al pin digital 3 de l’arduino., teniu l’opció d’utilitzar-lo, però res d’això inescrutable ho fa, així que lligueu-lo als pins V + 10, 11 12 i 13 que són els darrers 4 bytes de la sortida 14, és la potència dels xips. Operació Primer heu d’establir l’entrada sèrie del registre (pin digital 2 a l’arduino) alt o baix, a continuació, cal girar el pin del rellotge (pin digital 3) de menor a major, el registre de desplaçament llegirà les dades de l’entrada sèrie i canviarà els pins de sortida 1, repetiu 8 vegades i heu definit totes les 8 sortides. Això es pot fer manualment per a bucles i escriptures digitals a l’IDE arduino, però ja que t la seva és una comunicació de nivell de maquinari (SPI) molt comuna, tenen una única funció que ho fa per vosaltres. shiftOut (dataPin, clockPin, bitOrder, valor) Només cal dir-li on estan connectades les dades i els pins del rellotge a l'arduino, quina forma d'enviar les dades i què s'ha d'enviar i quina és la seva cura (útil)

Pas 3: Projectes

Projectes
Projectes

D’acord, hi ha prou conferència i teoria, permet fer coses divertides amb aquest xip! Hi ha 3 projectes que podeu provar en aquest instructiu, els dos primers són fàcils i es poden analitzar en qüestió. El tercer, la matriu de leds 4x4, requereix més temps i pensament per construir, a causa del cablejat del led. compatible (5v) 1 * 330 ohm resistència 1/4 watt 8 * sortida normal LED vermell 12 * cables jumper Projecte 2: controlador de pantalla de 2 segments "2 cables" 1 * 74HC164 registre de canvis 1 * tauler de pa sense soldadura 1 * arduino o compatible arduino (5v) 1 * 330 ohm de resistència de 1/4 watt 1 * pantalla de càtode comú de set segments 9 * cables de pont Projecte 3: pantalla de matriu de leds de '2 fils' 4x4 1 * 74HC164 Registre de desplaçament 1 * compatible arduino o arduino (5v) 4 * 150 ohm 1 Resistència de 1/4 watt 8 * 1 Kohm Resistència de 1/8 watt (o més gran) Transistor de 8 * NpN (2n3904 o millor) 16 * LED vermell de sortida normal és un mitjà per construir-lo i potència regulada de 5 volts que pot suportar 160 + ma (podeu enceneu tots els LED alhora com un llum de fre)

Pas 4: Projecte 1 [pt 1]: maquinari del controlador de pantalla LED Bargraph "2 fils"

Projecte 1 [pt 1]: maquinari del controlador de pantalla LED Bargraph '2 fils'
Projecte 1 [pt 1]: maquinari del controlador de pantalla LED Bargraph '2 fils'
Projecte 1 [pt 1]: maquinari del controlador de pantalla LED Bargraph '2 fils'
Projecte 1 [pt 1]: maquinari del controlador de pantalla LED Bargraph '2 fils'

Connecteu el registre d’arduino i de desplaçament d’acord amb l’esquema, ja tinc una pantalla de barres de 10 segments preparada per a l’ús de taulers de suport i això és el que veureu a la imatge, però podeu fer el mateix amb leds individuals. A la segona pàgina Vaig afirmar que no eren dispositius de controladors, que eren dispositius lògics, amb petites quantitats de corrent capaç de passar-hi. Per tal d’executar 8 LED, tot mantenint el circuit senzill i no cuinant el registre de desplaçament, cal que limitem una mica el corrent. terra de subministrament que necessiten per passar per una resistència de 330 ohms, limitant la quantitat total de corrent que tots els LEDs podrien utilitzar a 10 ma (a 5 volts). Això deixa els LED en un estat malaltís, però s’encenen aquest exemple, per conduir els LED al corrent adequat, haureu d’inserir un transistor on el registre de desplaçament pugui activar / desactivar una font de corrent superior (vegeu el projecte 3) El pin de dades del registre de desplaçament (pin 2) necessita per connectar-se al pin digital arduino # 2 El pin del rellotge del registre de desplaçament (pin 8) ha de connectar-se al pin digital arduino # 3

Pas 5: Projecte 1 [pt 2]: programari de control de pantalla LED Bargraph "2 fils"

Projecte 1 [pt 2]: programari de control de pantalla LED Bargraph '2 fils'
Projecte 1 [pt 2]: programari de control de pantalla LED Bargraph '2 fils'
Projecte 1 [pt 2]: programari de control de pantalla LED Bargraph '2 fils'
Projecte 1 [pt 2]: programari de control de pantalla LED Bargraph '2 fils'

Exemple 1: obriu el fitxer "_164_bas_ex.pde" Dins de l'IDE arduino, és un esbós senzill que us permet definir els LED d'encès o apagat a la pantalla de gràfics de barres Les 2 primeres línies defineixen els números de pin que utilitzarem per a les dades i el utilitzeu #define sobre const integer, em resulta més fàcil recordar-ho i no hi ha cap avantatge per a l’un o l’altre un cop compilades #define data 2 # define rellotge 3 següent és la funció de configuració buida, només s’executa una vegada, de manera que l’arduino gira activat, estableix el registre de desplaçaments i no té res més a fer. Dins de la funció de configuració del buit, configurem els pins de rellotge i dades com a pins OUTPUT i, a continuació, mitjançant la funció shiftOut enviem les dades a la configuració del buit del registre de canvis () {pinMode (rellotge, OUTPUT); // feu del pin de rellotge un pinMode de sortida (dades, OUTPUT); // converteix el pin de dades en una sortida shiftOut (dades, rellotge, LSBFIRST, B10101010); // envieu aquest valor binari al registre de desplaçament} A la funció shiftOut podeu veure els seus arguments: les dades són el pin de dades, el rellotge és el pin de rellotge LSBFIRST fa referència a quin ordre està, quan s’escriu en notació binària (Bxxxxxxxx) L'element que passa del B és el bit mínim significatiu. Primer, s'introdueix en primer lloc, de manera que acaba en l'última sortida un cop s'alimenten els 8 bits., intenteu jugar amb valors diferents per activar o desactivar diferents patrons i finalment un bucle buit buit (perquè en necessiteu un fins i tot si no el feu servir) bucle buit () {} // bucle buit per ara Exemple 2: les primeres 8 línies són el mateix que les primeres 8 línies del primer exemple, de fet no canviaran per a cap dels altres projectes, de manera que #define data 2 # define clock 3void setup () {pinMode (clock, OUTPUT); // Feu que el pin del rellotge sigui un pinMode de sortida (dades, OUTPUT); // Feu que el pin de dades sigui una sortida. Però ara, en la configuració nul·la, hi ha un recompte de 8 bucles, prenent un byte buit i canviant 1 bit a la vegada, començant pel bit més esquerre i movent-se cap a la dreta. Això és cap enrere del primer exemple en què hem començat des del bit més dret i hem treballat cap a l’esquerra, però mitjançant MSBFIRST la funció de desplaçament envia les dades de la manera correcta També afegim un retard al bucle for perquè es ralenti prou com per ser visible. for (int i = 0; i <8; ++ i) // for 0 - 7 do {shiftOut (data, clock, MSBFIRST, 1 << i); // canvi de bits un valor lògic alt (1) per un retard (100); // retardar 100 ms o no el podríeu veure}} bucle buit () {} // bucle buit per ara carregueu l'script i ara hauríeu de veure que el gràfic de barres s'encén cada llum d'una a la vegada

Pas 6: Projecte 2: Controlador de pantalla de 7 segments "2 cables"

Projecte 2: controlador de pantalla de 7 segments "2 fils"
Projecte 2: controlador de pantalla de 7 segments "2 fils"
Projecte 2: controlador de pantalla de 7 segments "2 fils"
Projecte 2: controlador de pantalla de 7 segments "2 fils"

Mireu la fixació de la pantalla de 7 segments (només en tenia una de doble, però només en feia servir la meitat) i utilitzeu el dibuix següent per connectar cada segment al bit correcte del registre de desplaçament 1 = pin 3bit 2 = pin 4bit 3 = pin 5bit 4 = pin 6bit 5 = pin 10bit 6 = pin 11bit 7 = pin 12bit 8 = pin 13 (si voleu utilitzar el punt decimal) I el càtode de la pantalla a través de la resistència de 330 ohm i per a la font d'alimentació obriu ara el seven_seg_demo.pde a l'arduino IDEFirst veureu on definim les dades i els pins del rellotge #define data 2 # define clock 3 A continuació, establim tots els patrons de caràcters en binari, això és bastant fàcil, mireu el dibuix següent, si necessiteu el segment mitjà escriviu un, aleshores necessiteu el segment superior, si és així, escriviu-ne un altre, continueu fent-ho fins que cobreixis tots els 8 segments, fixeu-vos que el meu bit més dret (bit 8) sempre és 0, perquè no activa mai el decimal punt. byte zero = B01111110; octet un = B00000110; octet dos = B11011010; octet tres = B11010110; octet quatre = B10100110; octet cinc = B11110100; octet sis = B11111100; octet set = B01000110; octet vuit = B11111110; octet nou a continuació, en configuració buida, configurem les nostres dades i pins de rellotge a les sortides configuració buida () {pinMode (rellotge, SORTIDA); // Feu que el pin del rellotge sigui un pinMode de sortida (dades, OUTPUT); // Feu que el pin de dades sigui una sortida3} i al bucle buit fem servir shiftOut per mostrar cada patró (número), espereu 1/2 segon i mostreu el següent, del 0 al 9, ja que es realitzarà a la funció de bucle buit que comptarà 0-9 i repeteix per sempre. bucle buit () {shiftOut (dades, rellotge, LSBFIRST, zero); retard (500); shiftOut (dades, rellotge, LSBFIRST, un); retard (500); shiftOut (dades, rellotge, LSBFIRST, dos); retard (500); shiftOut (dades, rellotge, LSBFIRST, tres); retard (500); shiftOut (dades, rellotge, LSBFIRST, quatre); retard (500); shiftOut (dades, rellotge, LSBFIRST, cinc); retard (500); shiftOut (dades, rellotge, LSBFIRST, sis); retard (500); shiftOut (dades, rellotge, LSBFIRST, set); retard (500); shiftOut (dades, rellotge, LSBFIRST, vuit); retard (500); shiftOut (dades, rellotge, LSBFIRST, nou); retard (500);}

Pas 7: Projecte 3 [pt 1]: pantalla de matriu LED 4x4 "2 cables"

Projecte 3 [pt 1]: pantalla de matriu Led 4x4 "2 fils"
Projecte 3 [pt 1]: pantalla de matriu Led 4x4 "2 fils"
Projecte 3 [pt 1]: pantalla de matriu Led 4x4 "2 fils"
Projecte 3 [pt 1]: pantalla de matriu Led 4x4 "2 fils"

El projecte de la matriu LED 4x4 és bastant més complex, però està pràcticament tot en construcció; trio fer el meu soldat sobre perfboard, però hauria de ser possible replicar-lo en un tauler de suport, molt més espaiat. es diferencia en què el registre de desplaçament no condueix directament el led, en canvi les sortides del registre de desplaçament s’envien a través d’una resistència de 1 Kohm a la base d’un transistor NpN, quan la sortida del bit és alta, deixa passar el corrent i la tensió suficients a la transistor per canviar la connexió entre el col·lector i l'emissor, els col·lectors estan lligats a una regulació "resistent" de 5 volts. Els emissors dels transistors estan connectats a resistències de 150 ohm i les resistències estan lligades als anodes de 4 led seguits i limita la fila a 20 ma, tot i que quan es dibuixen imatges a la pantalla només hi ha 1 led encès alhora i, per tant, a prop de la lluminositat completa (a prop perquè s’encenen i s’apaguen molt ràpidament per formar tota la imatge) Hi ha 4 files i 4 columnes, cadascuna la fila obté una resistència i un transistor, a cada columna els càtodes del LED estan lligats entre si, es troben al col·lector d’un transistor, la base del qual també està controlat pel registre de desplaçament i, finalment, surt a terra. Versió gran de l'esquema www.instructables.com/files/orig/F7J/52X0/G1ZGOSRQ/F7J52X0G1ZGOSRQ.jpg

Pas 8: Projecte 3 [pt 2]: pantalla de matriu LED 4x4 "2 cables"

Projecte 3 [pt 2]: pantalla de matriu Led 4x4 "2 fils"
Projecte 3 [pt 2]: pantalla de matriu Led 4x4 "2 fils"
Projecte 3 [pt 2]: pantalla de matriu Led 4x4 "2 fils"
Projecte 3 [pt 2]: pantalla de matriu Led 4x4 "2 fils"
Projecte 3 [pt 2]: pantalla de matriu Led 4x4 "2 fils"
Projecte 3 [pt 2]: pantalla de matriu Led 4x4 "2 fils"

El registre de desplaçament controla tant l’ànode com els càtodes dels LED en format YX, mireu el bit següent 1 = columna 1 (a la dreta) bit 2 = columna 2bit 3 = columna 3bit 4 = columna 4bit 5 = fila 1 (més a dalt) bit 6 = fila 2 bits 7 = fila 3 bits 8 = fila 4 Per fer una imatge traieu un quadrat 4x4 sobre paper mil·limetrat i empleneu quines voleu que es mostrin, a continuació, feu una taula YX. A continuació veureu un mapatge per fer un símil, així com el millor que podeu fer en 4x4 "píxels". Per a cada secció emplenada, escric en quina columna (Y) es troba, i en quina fila es troba (X) Ara obro al fitxer _4x4.pde de l’IDE d’arduino veureu els nostres vells 2 amics #define data 2 # define clock 3 i llavors una matriu de nombres enters int img = {1, 1, 4, 1, 1, 3, 4, 3, 2, 4, 3, 4}; Si veieu només una llista de les meves coordenades YX anotades, seria un gran dolor al darrere convertir aquests valors a mà i tenim un ordinador … deixeu-ho fer! Si continueu, hi ha una configuració nul·la on fem els nostres pins de rellotge i dades OUTPUTS void setup () {pinMode (rellotge, OUTPUT); // Feu que el pin del rellotge sigui un pinMode de sortida (dades, OUTPUT); // Feu que el pin de dades sigui una sortida3} I un bucle buit que sembla confús, per començar les coses hem de declarar algunes variables locals bucle buit () {int Y; int X; byte fora; A continuació, un bucle for, aquest bucle ha de ser tan llarg com la quantitat d'entrades a la matriu img, per a aquesta imatge només he utilitzat 6 píxels, de manera que es produeixen 12 coordenades YX. Faig saltar tots els altres números fent servir i + = 2, perquè llegim 2 coordenades per bucle per (int i = 0; i <12; i + = 2) // nombre de punts a la matriu img, aquest cas 12 {Ara llegim la entrada Y a de la matriu i en restem un del seu valor, perquè els bytes no comencen per un, comencen per zero, però comptem des de 1 // obtenim el primer parell de cordons YX Y = (img - 1); // restar-ne un ja que el recompte de bits comença a 0 A continuació, llegim l'entrada X a [i + 1] de la matriu i restem-ne una del seu valor, pel mateix motiu X = (img [i + 1] - 1); Després de tenir els valors YX del píxel, fem una mica de bits o matemàtiques i desplaçem-nos cap a l’esquerra. Primer, hem de llegir el valor X i, sigui quin sigui el seu valor, canvieu-lo perquè quedi molts llocs + 4, així que si X és 4 i afegiu 4, és el bit 8 (MSB), tornant a mirar el gràfic … bit 1 = columna 1 (més a la dreta) bit 2 = columna 2bit 3 = columna 3bit 4 = columna 4bit 5 = fila 1 (més a dalt) bit 6 = fila 2bit 7 = fila 3 bits 8 = fila 4 El bit 8 és l'última fila Després el valor Y també es desplaça cap a l'esquerra, aquesta vegada només per si mateix, no s'hi afegeix res. (nibbles), usant bitwise o (el símbol |) pren dos bytes i bàsicament els suma, suposem X = 10000000Y = 00000001 -------------------- O = 10000001 fila 4 columna 1 = 1 << (X + 4) | 1 << Y; I finalment shiftOut per mostrar la imatge actual i continuar fent-ho fins que no tinguem més dades a la matriu … retardar un moment i fer un bucle per sempre, ja que estàvem canviant les dades a l'esquerra i necessitem que el MSB estigui a l'últim pin de sortida del registre de torns envieu-lo primer. shiftOut (dades, rellotge, MSBFIRST, fora); // canvieu el byte al nostre retard de registre (1); // ajornar-lo perquè tingui l'oportunitat de deixar un punt de llum als ulls. No dubteu a crear les vostres pròpies imatges i efectes. Hi ha 3 fitxers de mostra, la cara somrient i un tauler de quadres (que sembla més que ratlles), i finalment un fabricant d’espurna aleatòria

Pas 9: Conclusió

Conclusió
Conclusió
Conclusió
Conclusió
Conclusió
Conclusió

Per sobre de tot, hi ha un petit xip força útil i estic content d’haver-lo retirat d’una vella peça electrònica dirigida a la paperera. Es pot utilitzar per a altres coses, a part dels sistemes de visualització, però a tothom li agraden les llums i la retroalimentació instantània de veure el que està passant és extremadament útil per a pensadors visuals com jo. Perdoneu també el meu codi, només he tingut l’arduino des de la tercera setmana d’octubre i ha estat un curs accidentat força gran. Però això és el més fantàstic del sistema, si us asseieu a treballar-hi, té moltes funcions que permeten controlar fàcilment el món amb un microcontrolador de 8 bits. Com sempre, les preguntes i comentaris són benvinguts i gràcies per llegint, espero que hagueu après molt

Recomanat: