RETRO-IC’ER / SKIFTEREGISTRE

MM74HC165: læs otte kontakter med tre ledninger

En mikrocontroller løber tør for ben længe før et projekt løber tør for kontakter. Et skifteregister med parallel indgang og seriel udgang bytter ben for tid: otte indgange låses samtidig og klokkes derefter ud ad en enkelt ledning.

Hvad et skifteregister egentlig gør

Et skifteregister er en række flip-flop’er i en kæde. Hver klokflanke kopierer værdien fra den ene flip-flop over i den næste, som når folk sender spande videre i en kæde. MM74HC165 har otte sådanne trin, kaldet QA til QH, og skubber data fra QA mod QH.

Det, der gør den til et parallelindgangs-register, er den anden måde at få data ind på. I stedet for at vente otte klokflanker kan chippen lægge en værdi i alle otte trin på én gang, direkte fra otte indgangsben. Det er indlæsningen, og det er hele pointen med kredsen: du fastfryser otte signaler i samme øjeblik og læser dem ud i dit eget tempo.

Otte kontaktindgange A til H på ben 11, 12, 13, 14, 3, 4, 5 og 6 fører til en MM74HC165; SHIFT/LOAD på ben 1, CLOCK på ben 2 og CLOCK INHIBIT på ben 15 styrer den, og den serielle udgang QH på ben 9 går til en mikrocontroller, første bit H og sidste bit A.
Principdiagram, ikke et færdigt kredsløb. Afkobling, pull-up-modstande og signalkonditionering er ikke tegnet.

De tre styreben

SHIFT/LOAD (ben 1) vælger tilstand. Hold det højt, og chippen skifter på klokflanker. Træk det lavt, og de otte parallelle indgange indlæses direkte i registeret. Databladet siger udtrykkeligt, at denne indlæsning sker uafhængigt af klokkens tilstand – den er asynkron, så du behøver ikke at synkronisere den med noget.

CLOCK (ben 2) står for skiftet. Data overføres på den stigende flanke, altså ved overgangen fra lav til høj.

CLOCK INHIBIT (ben 15) er en port foran klokken. Indvendigt fører de to klokben til en NOR-port med to indgange, så hvis bare én af dem holdes høj, står registeret stille. Bruger du kun én klokkilde, så forbind CLOCK INHIBIT til stel og gløm det.

En komplet aflæsning, trin for trin

VCC er ben 16, stel er ben 8, og en 100 nF kondensator hører hjemme mellem dem tæt på chippen. Forbind otte kontakter til A–H (ben 11, 12, 13, 14, 3, 4, 5 og 6), hver med en modstand til et defineret niveau, så ingen indgang nogensinde flyder frit.

  1. Fastfrys. Med CLOCK lav og CLOCK INHIBIT lav trækkes SHIFT/LOAD lav og høj igen. Alle otte kontakttilstande ligger nu inde i registeret. Fra det øjeblik må kontakterne gerne prelle eller skifte – du læser et øjebliksbillede.
  2. Læs første bit uden at klokke. QH (ben 9) viser allerede værdien i ottende trin, som kom fra indgang H (ben 6). Det er den klassiske fejl: klokker du først og læser bagefter, mister du bit H og læser en bit, der aldrig har været der.
  3. Skift syv gange. Hver stigende flanke på CLOCK flytter kæden én plads mod QH, så efter første flanke viser QH G, derefter F, E, D, C, B og til sidst A (ben 11). I alt otte bit: én gratis, syv klokkede.
  4. Gentag. Træk SHIFT/LOAD lav igen til næste øjebliksbillede. Registeret skal ikke tømmes først; indlæsningen overskriver alle otte trin på én gang.

Med andre ord ankommer byten H først, A sidst – mest betydende bit først, hvis du kalder H for bit 7. Får din kode kontakterne spejlvendt, er det næsten altid forklaringen.

At læse den med SPI

Forløbet ovenfor er præcis en SPI-læsning med klokpolaritet 0 og fase 0, så de fleste mikrocontrollere kan klare det i hardware: forbind CLOCK til SCK, QH til MISO, og styr SHIFT/LOAD fra et ledigt udgangsben. Én byte ind, otte kontakter læst. Der sendes aldrig noget til chippen, så MOSI er ikke forbundet.

Hold klokken inden for kredsens evner: databladet angiver en typisk forsinkelse fra klok til Q på 20 ns, og de garanterede grænser er specificeret ved forsyninger på 2 V, 4,5 V og 6 V. Ved 5 V er nogle få megahertz helt udramatisk; det er som regel ledningsføringen og ikke chippen, der sætter grænsen.

To registre i kæde giver 16 indgange

Ben 10 er SERIAL INPUT. Det fører ind i det første trin, QA – den ende af kæden, der ligger længst fra udgangen. Forbind QH-udgangen (ben 9) på den ene chip til SERIAL INPUT (ben 10) på den næste, del SHIFT/LOAD og CLOCK mellem dem, og du har et 16-bit register, der læses ad én ledning med seksten klokflanker. En tredje chip giver 24 indgange; prisen er udelukkende tid.

Ben 7 er den komplementære udgang /QH – de samme serielle data inverteret. Den er nyttig, hvis den modtagende logik forventer modsat polaritet, og den kan uden videre stå ubenyttet.

Tallene, der betyder noget

MM74HC165Værdi
Forsyningsspænding2–6 V
Driftstemperatur−40 til +85 °C
Forsinkelse klok til Q20 ns typisk
Indgangsstrømmaks. 1 µA
Hvilestrømmaks. 80 µA (74HC-serien)
Udgangsdriftfan-out på 10 LS-TTL-laster
Højt indgangsniveau, VCC = 4,5 Vmin. 3,15 V
Lavt indgangsniveau, VCC = 4,5 Vmaks. 1,35 V
Maks. stige-/faldtid på indgang, VCC = 4,5 V500 ns

Fire ting, folk snubler over

En 3,3 V mikrocontroller kan ikke pålideligt styre denne chip ved 5 V. Ved 4,5 V garanterer databladet først et højt niveau fra 3,15 V, og ved 5 V skal der cirka 3,5 V til. Den rene løsning er at køre ’165’eren på 3,3 V, hvilket ligger inden for dens 2–6 V-område, eller at niveauomsætte styresignalerne – se guiden om niveauskift med SN74AHCT08. Dens serielle udgang ind i en 3,3 V indgang kræver den modsatte retning, så bland ikke forsyninger på må og få.

Lad aldrig en parallel indgang flyde. Et ubrugt A–H-ben skal forbindes til VCC eller stel. En kontakt alene er ikke nok: den definerer kun niveauet i den ene af sine to stillinger, så hver kontakt skal have en pull-up- eller pull-down-modstand.

Ændr kun CLOCK INHIBIT, mens CLOCK er høj. Fordi begge klokben går til samme NOR-port, ligner en ændring på CLOCK INHIBIT, mens CLOCK er lav, en klokflanke for registeret og rykker dine data stille og roligt én plads.

Mekaniske kontakter preller. Registeret fastfryser med glæde en prel som et rigtigt skifte. Enten aflæser du langsomt og sammenligner på hinanden følgende målinger i software, eller også renser du flankerne i hardware med en Schmitt-trigger-indgang som 74AC14 hex Schmitt-trigger-inverter.

Hvor den passer ind blandt andre registre

Kredsen er bevidst énvejs: indgange ind, seriel ud. Skal flere enheder derimod skiftes om at drive den samme bus, skal du bruge 3-state-udgange som i guiden om MC74HC173 4-bit 3-state-register. Skal en hel byte flytte sig begge veje mellem CPU og bus, er det en transceivers opgave – se 74HC245-guiden. Og skal de otte bit, du lige har skiftet ind, lyse et ciffer op, tager MC74HC4511-guiden om 7-segmentvisning over derfra.

I en busbaseret maskine som en 6502-computer er et skifteregister som regel det billige alternativ til at afkode endnu en adresse: intet chipvalg, intet timingvindue, bare tre almindelige udgangsben. Guiden om 74HC138-adresseafkodning beskriver den anden fremgangsmåde, og guiden til 6502-dele sætter begge i sammenhæng.

Den nøjagtige variant på lager

MM74HC165MX i SOIC-16 set ovenfra: ben 1 til 8 er SHIFT/LOAD, CLOCK, E, F, G, H, inverteret QH og stel; ben 16 ned til 9 er VCC, CLOCK INHIBIT, D, C, B, A, SERIAL INPUT og QH.
Set ovenfra, tegnet efter Fairchilds forbindelsesdiagram for MM74HC165. Samme benængde gælder for DIP-, SOIC-, SOP- og TSSOP-kapslingen.

iMania har MM74HC165MX på lager. I Fairchilds bestillingskode står M for kapsling M16A, en 16-bens smal SOIC efter JEDEC MS-012 (0,150″ hus), og det tilføjede X markerer tape/reel-pakning. Rulleetiketten bærer desuden kundenummer 099.200.052; producenten af netop denne rulle er ikke særskilt verificeret, så sammenlign mærkningen på selve delen før produktionsbrug.

Det er en overflademonteret del med 1,27 mm bendækning. Den kan lødes i hånden med almindeligt værktøj, men til breadboard skal du bruge et SOIC-16-til-DIP-adapterprint. Den rene hulmonterede MM74HC165 i PDIP-16 er samme chip i kapsling N16E; det er en anden bestillingskode og indgår ikke i dette parti.

Se varesiden for MM74HC165MX og lagerstatus.

Originalt datablad: Fairchild Semiconductor MM74HC165 Parallel-in/Serial-out 8-Bit Shift Register, DS005316, september 1983, revideret februar 1999. Bennumre, styrefunktioner, kapslingskoder og alle tal ovenfor stammer derfra.