Corso programmazione PICMicro in C – Approfondimenti – Come aumentare il numero di uscite a disposizione. Gli Shift Register SIPO, cosa sono e come si usano

Giovanni Bernardo | March 26th, 2010
Categories: PICmicro 10/12/16

Succede spesso che, quando incominciamo a prendere la mano con i picmicro, le esigenze aumentano sempre più e ci troviamo così a voler disporre di un numero sempre crescente di periferiche e di I/O. Ovviamente questo è un problema sentito anche quando, ad esempio, si vorrebbe avere quel “qualcosa in più”, ma senza necessariamente dover ricorrere ad un pic più grande oppure quando le reali necessità non giustificano l’acquisto di un controllore più potente.

In questo approfondimento vedremo quindi come aumentare il numero delle uscite (parlo di sole uscite e non anche di ingressi) di un picmicro con una spesa davvero irrisoria e in maniera semplice, senza complicarci troppo le cose. Difatti non dovremo far affidamento a nessuna periferica integrata nei picmicro: bastano soltanto due normalissimi I/O del picmicro per pilotare 8 uscite (Lo so… Già state pensando di sfruttare questo sistema sul più economico pic12F a 8 pin! Difatti tale sistema, appunto non sfruttando nessun tipo di periferica, può essere applicato a qualsiasi tipo di microcontrollore).

Per realizzare questo concetto utilizzeremo quei circuiti integrati meglio noti come SIPO (Serial In – Parallel Out). Come suggerisce il nome stesso, tali integrati accettano in ingresso un dato seriale e forniscono in uscita il dato in formato parallelo. Sappiamo già qualcosa di come è fatto un segnale seriale, in quanto ne abbiamo discusso nella lezione riguardante la RS232: prendiamo un byte (8bit) e inviamo i bit uno dietro l’altro su un’unica linea. L’integrato SIPO riceverà questi 8 bit in serie e li trasferirà su 8 uscite, realizzando così la conversione seriale/parallelo.

In realtà per aumentare il numero di uscite di un picmicro esistono anche altri sistemi: si può ricorrere a circuiti integrati chiamati I/O expander (che permettono anche di avere degli ingressi aggiuntivi) come il PCF8575. Tali integrati vanno però controllati utilizzando il bus I2C che non tutti i picmicro hanno a bordo (anche se può essere emulato via software) e richiede un po’ di esperienza, codice e costi in più. In questo articolo, però, non parleremo degli I/O expander.

Tutto ciò è possibile tramite un circuito elettronico, contenuto nei SIPO, che prende il nome di Shift Register, o Registro a scorrimento.  Il dato seriale viene fatto passare attraverso 8 celle di memoria a 1 bit (flip/flop) contigue: il primo bit andrà nella cella numero zero, il secondo bit sposterà il primo, il quale andrà a finire nella cella numero 1, e lui stesso andrà a finire nella cella zero e così via: ecco perchè “registro a scorrimento”: il dato scorre attraverso queste “celle”, di cella in cella.

Le celle a loro volta, a seconda del SIPO utilizzato, possono essere collegate ad un latch (una cella di memoria) in cui il singolo bit viene memorizzato e quindi solo successivamente trasferito al relativo pin di uscita tramite un segnale di abilitazione. In altri SIPO, quelli privi di latch, il bit viene trasferito direttamente all’uscita.

Appartengono al primo tipo (latched shift register) gli integrati 74xx595  e 74xx4094, appariene invece al secondo tipo (non-latched shift register) il 74xx164. Al posto delle xx ci saranno le sigle che contraddistinguono la tecnologia utilizzata per la costruzione del circuito integrato.

Il 74/164 lo troveremo più comunemente venduto come 74LS164 (LS sta per Low-power Shottky) ed è un integrato TTL. I 74/4094 e 74/565 li troveremo (più comunemente) come 74HC4094, 74HCT4094 e 74HC595,74HCT595, dove la C  sta ad indicare che questi sono integrati CMOS (anche se la sigla inizia per 74) e sono compatibili come piedinatura ai circuiti integrati corrispondenti della famiglia logica TTL.

Ovviamente esistono altri integrati che svolgono tale funzione ma ho focalizzato qui l’attenzione solo su quelli che ritengo personalmente più comuni.

Tutti i tipi di SIPO ricevono il dato seriale su un pin ed effettuano il trasferimento dei bit attraverso le celle dello shift register tramite un segnale di clock (stiamo quindi parlando di una trasmissione seriale sincrona). Lo schema di funzionamento è il seguente:

Shift Register SIPO a 4 bit - Immagine tratta da Wikipedia

In “Data In” entra il dato seriale, ogni bit è trasportato attraverso le celle (i quadratini nello schema) tramite la transizione del segnale di  Clock da livello logico basso a livello logico alto.

Abbiamo detto che i SIPO con latch (74xx4094 e 74xx595) memorizzano il dato e rendono il byte disponibile sulle uscite solo dopo un comando: tali integrati hanno difatti un pin di enable (generalmente indicato con OE : Output Enable) che in pratica effettua questa operazione. Il pin di enable in questi SIPO può essere tenuto al livello attivo (alto per il 4094 e basso per il 595) in maniera tale che il dato venga trasferito direttamente alle uscite man mano (come con quelli non latched) senza il segnale di abilitazione.

Il 74xx595 ha anche bisogno di un secondo clock per poter trasferire i bit dalle celle dello shift register ai latch di memorizzazione.

Il 74xx4094 e il 74xx595 hanno inoltre un’uscita che permette di collegare più integrati in cascata in maniera tale da poterli pilotare tutti con le stesse linee clock e dati e quindi rendere più semplici ulteriori “espansioni”.

I SIPO senza latch (74xx164) rendono il bit disponibile sulle uscite man mano che viene caricato: questo a volte può essere un problema se dobbiamo pilotare circuiterie che richiedono l’invio perfettamente contemporaneo dei dati. Difatti inviato il primo bit questo è già disponibile sulle uscite (supponendo che il primo bit valga 1, avremo le linee di uscita nello stato 10000000), arrivato il secondo bit (se questo ad esempio vale zero) lo stato sarà  aggiornato nuovamente (01000000) ecc, con una transizione continua fino a che tutto il byte non è stato inviato: questo causa sicuramente malfunzionamenti in quei dispositivi che devono ricevere tutto il dato insieme, in un sol colpo.

Questo non è un problema quando lo si deve utilizzare per pilotare un qualcosa che già di per sè ha un proprio meccanismo di abilitazione prima di dover effettuare la lettura dei bit sul bus parallelo; i display LCD basati sul controller HD44780, ad esempio, hanno un pin di enable: quando tutto il dato è stato inviato diamo l’abilitazione e siamo sicuri che il dato prelevato sia quello corretto. Oppure ancora un display a 7 segmenti: possiamo inviare i dati per accendere i segmenti e solo successivamente attiviamo il comune; se rimanessimo il comune acceso, vedremo i led “sfarfallare” fino a che il dato non è stato ricevuto. Spero sia chiaro il concetto, che è da capire bene altrimenti non riuscirete a dare spiegazioni ad eventuali malfunzionamenti dei circuiti che avrete intenzione di ideare con questo sistema.

In questo articolo utilizzerò il 74LS164 (datasheet come sempre in fondo all’articolo), che è il tipo più economico non avendo i latch connessi alle uscite (e poi è anche l’unico che sono riuscito a recuperare in breve tempo per poter fare delle prove!).

Spero di poter inserire prossimamente anche degli esempi per i 74xx4094 e 74xx595.

Vediamo qui la struttura del 74xx164:

I pin indicati con Q0…Q7 sono le 8 uscite. A differenza degli altri SIPO, questo ha due ingressi: A e B, in realtà l’integrato in questione effettua un AND su questi due ingressi e prende quindi il risultato, noi non volendo sfruttare questa funzione li collegheremo insieme per essere sicuri di non combinare guai (oppure ne colleghiamo uno soltanto e l’altro lo teniamo alto con una resistenza di pullup).

CP è il pin su cui si invia il segnale di clock: il dato sarà trasportato attraverso lo  shift register sulla transizione da livello logico basso a livello logico alto.

MR è il master reset, attivo basso, il che significa che tale pin esplica la sua funzione (azzerare tutte le uscite) quando viene posto a livello logico basso; non volendo sfruttare tale funzione (abbiamo detto che vogliamo sfruttare poche risorse del picmicro) lo terremo “buono” con una resistenza di pullup: se proprio vogliamo azzerare tutte le uscite invieremo uno zero, no?!

La logica di funzionamento è la seguente:


Ci sono gli 8 flip/flop dello shift register in cui vengono fatti scorrere i bit che compongono la parola seriale in ingresso. La prima cella è quella connessa all’uscita Q0 (pin3 del circuito integrato). Faremo un esempio di funzionamento collegando dei led alle uscite.

Le uscite forniscono 8mA, per cui sono inadatte per pilotare qualsiasi cosa se non un’altra logica o un transistor, io comunque ho “osato” collegando su  un 74LS164N dei led alle uscite tramite resistenze da 330Ω senza che nulla si sia guastato… però… non andrebbe fatto! Per cui non ve la prendete con me se l’integrato vi si guasta! Vi consiglio pertanto di collegare una resistenza più alta (tipo 620Ω) in maniera che non si prelevino più di 8mA dalle uscite: i led si accenderanno molto, molto poco, ma almeno state tranquilli e non rischiate che vi si rompa l’integrato! Uomo avvisato…

Realizzeremo quindi il seguente, semplice schemino (se lo realizzate, state attenti ai numeri di pin!):

Di tale schema ho anche realizzato il master, non ho purtroppo avuto il tempo di testarlo, ma lo do per buono al 99%, (in ogni caso è possibile scaricare in fondo all’articolo anche i sorgenti per Eagle):

Andremo quindi ad applicare il byte “serializzato” sull’ingresso che ho denominato “serial in” (che va ai pin 1 e 2 dell’integrato contemporaneamente) e quindi il clock sul pin 8.

Bene. Passiamo al programma sul picmicro. Serializzare un dato non è così difficile, basta semplicemente sfruttare le cose che abbiamo imparato in questo articolo e in quest’altro, e applicarle opportunamente, utilizzando un ciclo: non è difficile.

Dobbiamo focalizzarci su un bit alla volta spostandoci nel byte che vogliamo trasferire, controllare quindi se vale zero o uno e infine trasferire questo zero o questo uno sul pin (qualsiasi) che abbiamo scelto per trasferire il dato.

Facciamo quindi un rapido esempio in C, un passo alla volta, di come può essere effettuata questa operazione:

unsigned char shift;
for (shift=0; shift<8; shift++)
   {
   value = dat >> shift;
   if (value & 1)
      {
      DATA=1;
      }
   else
      {
      DATA=0;
      }
   }

Value è il valore che voglio serializzare (valore di tipo CHAR, quindi un byte). Come vedete faccio un ciclo costituito da 8 iterazioni (quanti sono i bit da trasferire), effettuo quindi uno shift verso destra di un numero di posizioni pari al valore “shift” (zero, e quindi nessuno spostamento, la prima volta che viene eseguito il ciclo, 1 la seconda volta, 2 la terza e via di seguito): in questo modo il bit “shift-esimo” si viene a trovare sempre nella posizione zero del mio byte risultante.

Effettuo quindi un AND del byte risultante con il valore 1 (oppure, per farvi rendere conto: 0b00000001): in questo modo i 7 bit “alti” vengono azzerati e se il bit shift-esimo vale 1, DATA (che nella fattispecie è il nostro pin che trasmetterà il dato seriale) varrà esattamente uno, altrimenti varrà zero. Semplice no? Ovviamente qui non stiamo tenendo conto della velocità di trasmissione: come vedete tra due stati successivi del pin DATA c’è soltanto il ritardo legato alle istruzioni precedenti.

E perchè non stiamo tenendo conto della velocità?

Primo perchè il 74LS164 regge frequenze fino a 35MHz, quindi usando il quarzo da 20MHz la transizione tra uno stato e l’altro di DATA rientra nella capacità del SIPO utilizzato, secondo… abbiamo detto che la trasmissione seriale che dobbiamo realizzare con il SIPO deve essere sincrona quindi c’è il clock che regola il trasferimento.

Già… il Clock!

Dopo queste istruzioni, supponendo che CK sia il pin che trasmette il clock (e precedentemente inizializzato a zero) basta fare semplicemente:

CK=1;
CK=0;

Abbiamo difatti detto che il dato viene trasferito sulla transizione da basso ad alto del clock. Il pin CK era già basso dall’inizio, lo mettiamo a uno in maniera da spostare il bit presente sugli ingressi (quello che abbiamo “messo” sul pin DATA) e quindi lo rimettiamo a zero in maniera che sia pronto per il ciclo successivo. Abbiamo appena realizzato una trasmissione seriale sincrona con delle banali istruzioni!

Nel caso in cui tutto ciò avesse bisogno di rispettare una determinata velocità di trasmissione, basterebbe includere dei ritardi tra l’invio di un bit e il successivo (tra un clock alto e un clock basso). Questa è la tecnica che si utilizza quando, ad esempio, si vogliono implementare le comunicazioni RS232 o I2C anche su pic che non hanno le relative periferiche a bordo.

Vediamo quindi il programma completo come è strutturato. Definiamo i nnanzitutto i due pin necessari alla comunicazione seriale:

#define DATA RC7 // pin utilizzato per inviare il dato seriale
#define CK   RC6 // pin utilizzato per il clock

(sto usando il 16F877A, se usate altri pic, cambiate voi le porte, state attenti solo se utilizzate RA4 che è a collettore aperto e vuole quindi una resistenza di pullup, e se utilizzate porte che hanno pure funzione analogica ricordatevi di settarle come digitali…).

Dovrò avere cura di inizializzare a zero tali pin:

DATA=0;
CK=0;

e quindi di definirli come uscite:

TRISC=0;

Per comodità ci definiamo una funzione che effettua la trasmissione seriale verso il SIPO, funzione alla quale passeremo come argomento il dato da serializzare e trasmettere:

// Questa funzione serializza il byte DAT per inviarlo al 74LS164
void sipo_out(unsigned char dat)
   {
   static unsigned char value=0; // valore dopo lo shift
   static unsigned char shift=0; // shift
 
   for (shift=0; shift<8; shift++)
      {
      value = dat >> shift;
      if (value & 1)
         {
         DATA=1;
         }
      else
         {
         DATA=0;
         }
      // Segnale di clock:
      CK=1;
      CK=0;
      // La transizione da basso ad alto sposta il dato nello shift register
      }
   }

Volendo infine trasferire un byte al SIPO basterà richiamare la funzione passandole il dato da trasferire, ad esempio:

sipo_out(255); // così si accenderanno tutti i led

Realizziamo ora un semplicissimo contatore:

for (int a=0; a<256; a++)
   {
   sipo_out(a);
   DelayMs(100);
   }

Tale ciclo conta da 0 a 255 e mi trasferisce il valore sul SIPO, vedremo quindi accendersi i led in sequenza binaria, il ritardo serve per farci vedere che i led sono accesi nella maniera corretta, altrimenti tutto scorrerebbe via molto velocemente.  Questo esempio è scaricabile in fondo all’articolo.

Per i più attenti: perchè ho definito “a” come int (valore a 16bit) se deve contare solo fino a 255 (valore a 8 bit)?

Arrivati a questo punto, sempre i più attenti spero noteranno due cose molto, molto importanti:

1- I led che devono rimanere spenti si accenderanno in maniera quasi impercettibile fino a che il programma non termina. Questo è appunto causato dal fatto che, come dicevo prima, i bit su questo SIPO vengono trasferiti man mano che arrivano, quindi quel leggero lampeggìo (che potrebbe anche non notarsi affatto) è dovuto al fatto che in quel microsecondo sta “scorrendo” un bit a 1 attraverso il registro.

2- Il bit zero del mio dato mi va a finire nell’uscita Q7 e non nell’uscita Q0 come verrebbe logico da pensare!

Giustissimo. Ma non è un vero e proprio errore, è solo questione di come vogliamo ragionare. Con la nostra funzione sipo_out stiamo scansionando il byte da sinistra verso destra, mentre nello shift register, se ridiamo un’occhiatina allo schema che ne illustra il funzionamento logico, la prima cella è quella connessa a Q0 e l’ultima è Q7.

Alla fine della mia funzione, il primo bit (il bit zero) del mio dato finirà in Q7 e l’ultimo in Q0. Se vogliamo fare in modo che il primo bit vada in Q0… Basta ragionare al contrario: non effettueremo più lo shift del nostro dato e l’and con la maschera (1), bensì effettueremo lo shift della maschera ( però 0b10000000 questa volta) e quindi l’AND con il dato. Se avete letto bene gli articoli precedenti (questo e questo) che parlano di queste operazioni dovreste dovrebbe risultarvi più semplice afferrare il concetto. Alla fine si può strutturare il programma nell’uno o nell’altro modo: l’importante, quando si progetta il circuito, è sapere esattamente cosa succederà.

Downloads

PDFDatasheet 74LS164 (112.33 kB - 988 downloads)
PDFDatasheet 74HC4094 e 74HCT4094 (305.83 kB - 934 downloads)
PDFDatasheet 74HC595 e 74HCT595 (140.7 kB - 1836 downloads)
PDFSorgenti Eagle - PCB Test SIPO 74LS164 (not tested) (27.09 kB - 91 downloads)
PDFCorso Programmazione PICMicro in C - Approfondimenti - Utilizzo di un encoder rotativo per l'immissione dei dati utilizzo di un SIPO 74LS164 per aumentare il numero di uscite di un picmicro (7.38 kB - 214 downloads)
Puoi andare alla fine dell'articolo e lasciare un commento. I trackback e i ping non sono attualmente consentiti.

  1. #1 da peppers il July 27th, 2010

    Buongiorno a tutti!
    Articolo molto interessante…
    Qualcuno sa se esistono delle routine in Hi-Tech C belle e pronte per pilotare un display LCD hd44780 compatibile tramite uno shift register…per risparmiare ulteriormente pin?
    Ho trovato alcuni esempi ma solo per Arduino…
    Grazie
    Pier

    • #2 da peppers il February 28th, 2011

      Mi rispondo da solo…e aggiungo il mio piccolo contributo…
      Finalmente ho avuto tempo per “serializzare” le routine di gestione LCD a caratteri HD44780 compatibile con 74LS164, ma con piccole modifiche si possono utilizzare anche altri shift register, qui il mio articolo: [link rimosso]

      Saluti a tutti
      Pier

      • #3 da Giovanni Bernardo il February 28th, 2011

        Quella pagina non è visibile agli utenti non registrati a quel sito (vorrei capire un eventuale download, ma bloccare un’intera pagina dalla visualizzazione!), per cui personalmente la ritengo poco utile e soprattutto un atto di scortesia se hai utilizzato delle informazioni prese qui. Chiaramente so che la colpa non è tua, ma questo sistema non mi piace affatto. Potrei anch’io chiudere le pagine e ne usufruirebbero pochissimi utenti. Mi trovo quindi costretto a rimuovere il link e ad esortare altri utenti a non utilizzare informazioni prese qui soltanto per “guadagnare punti” in altri siti, altrimenti prima o poi chiudo anch’io e vediamo dove si va a finire.

  2. #4 da peppers il March 1st, 2011

    Ti capisco Giovanni,
    ma volevo chiarire alcuni punti:
    prima di tutto non mi sono accorto che il link non è visibile a chi non è registrato (è comunque a livello 0, quindi accessibile a tutti gli utenti registrati), in secondo luogo non ho copiato un bel nulla, le routine di gestione sono quelle di Andrea Bonzini, che ho citato e ringraziato nel mio articolo e che sono riuscito a “serializzare” tra l’altro con una funzione diversa dalla tua.
    Nel mio post ho citato anche questo sito, dove ho preso lo spunto per iniziare il mio lavoro, questo perchè l’esposizione qui è sempre molto chiara anche per un neofita.
    Ma il io lavoro “grosso” ripeto è stato quello di creare delle routine decenti per la gestione di un LCd a caratteri con 3 fili.
    Volevo solo dare il mio contributo per un utilizzo pratico di uno shift register e ti posso assicurare che, per un programmatore della domenica come me non è stato affatto semplice, ma ci sono riuscito e ho voluto condividere il mio lavoro con altri.
    La rete mi ha dato tanto e quando riesco do qualcosa anche io.
    Saluti
    Pier

    • #5 da Giovanni Bernardo il March 1st, 2011

      Ma questo lo capisco e ti apprezzo sicuramente. E poi anch’io non sono un professionista. Come detto più volte, ho studiato tutt’altro e la programmazione è solo una passione. Io difatti non ho dato la colpa a te, l’ho detto chiaramente che lo so bene che la colpa non è tua. E’ il sistema che personalmente ritengo non giusto. Almeno l’articolo dovrebbe poter essere visibile a tutti, poi se per i download ci vuole la registrazione è giusto così. Uno si rende prima conto di cosa si parla, se gli va bene si registra. Ma per me, mettere pagine nascoste, e per di più istituire un sistema a punteggi, incita soltanto a copiare il lavoro degli altri. Non critico il lavoro degli altri, magari facendo cosi ci si guadagna qualcosa in termini di numero di utenti, sto soltanto dicendo che non mi piace e non lo condivido. Voglio dire, parto dal presupposto che la gente legga le licenze e rispetti il lavoro degli altri, però sappiamo bene tutti che genere di persone ci sono in giro (e ribadisco: non mi riferisco assolutamente a te, che hai fatto un lavoro egregio, mi riferisco al sistema). Io sono un operaio, uno di quelli che a fine mese ci arriva davvero a stento, non ho avuto la possibilità di studiare l’elettronica, che era una cosa che desideravo, lo sto facendo adesso da autodidatta, tra i mille problemi che può avere un operaio. A volte lo faccio di notte, tra mille sacrifici, e senza guadagnare nulla se non tanta amicizia da persone che apprezzano, e questo per me vale più di ogni compenso in denaro e grazie a Dio questa cosa la capisce anche la mia famiglia. Quando poi vedi che c’è il solito stupido di turno che per guadagnare un punto in più si mette a copiare il tuo lavoro, e poi non dice nemmeno: il merito di questa libreria va ad XYZ… Mi viene una tristezza da pazzi e voglia di abbandonare tutto. E’ uno sfogo del tutto personale. Per me non è facile.
      Se la prossima volta vuoi condividere qualcosa anche con noi di settorezero, a me non può farmi che piacere. Ho difatti detto più volte che ognuno può partecipare e come vedi ogni tanto anche altre persone danno un contributo significativo con le loro esperienze. E questo per me è un segno di gratitudine che vale davvero tanto. Poi come già detto, non critico il lavoro degli altri, ognuno fa come vuole.

  3. #6 da a.screm il April 26th, 2011

    Ciao
    Come al solito ti devo fare i complimenti per la chiarezza dei tuoi articoli, ed i complimenti sono doppi
    dato che ho appreso che fai un altro lavoro e sei una autodidatta come me.

    Sto leggendo il datasheet dello shift register 74LS164,
    per cercare di capire dove e’ indicato il valore di massimo carico di corrente
    prelevabile dai pin Q0-Q7

    Non capisco perche’ il datasheet a pagina 1 indica
    che la Output Current allo stato LOW e’ di 8 mA ed allo stato HIGH e di -0,4 mA.

    Mi sarei aspettato quantomeno il contrario.

    per me e’ un mistero..

    Ciao a presto
    Alessandro

  4. #7 da gncarlo il August 14th, 2011

    Buongiorno Giovanni,
    innanzitutto volevo ringraziarla di aver messo a disposdizione questi articoli, molto chiari ed utili, perchè grazie a loro ho migliorato molto la mia conoscenza dei picmicro.
    A riguardo degli shift-register volevo chiederle se era possibile inviare i dati a più SIPO. Cioè con tre linee di I/O se posso comandare 3 o più SIPO senza perdere il valore di tutti i SIPO.
    Grazie ancora.

    • #8 da Giovanni Bernardo il August 14th, 2011

      Certamente, quasi tutti gli shift register hanno un pin di ingresso e uno di uscita per collegare più shift register in cascata

  5. #9 da Andrea Barbon il April 12th, 2012

    Ho un semi-progetto ancora a livello “mente”: un pic che mi controlla 4 matrici bicolori 8×8.
    Per farlo avrei quindi bisogno di 2 shift register per ogni matrice (uno per colore, quindi sono 8 in totale), mentre per i catodi comuni potrei fare comunella su una linea a 8 bit controllata direttamente dal picmicro o un’altro sipo che mi fa lo scan… però mi viene un dubbio, ovvero che sia meglio usare i sipo con o senza latch?
    senza latch ho paura che sia troppo evidente sulla matrice a led, sopratutto perchè essendo 8 matrici (4+4) la trasmissione più lenta potrebbe diventare evidente, mentre con un latch sarei in un certo senso salvo.
    Ho dato un’occhiata rapida al 4094, da quel che ho capito (spero male) mentre carico il byte via seriale mantenendo l’OE basso l’uscita parallela non manda fuori l’ultimo byte precedente ma rimane in alta impedenza, lasciandomi i led spenti.
    Penso che per poter fare una cosa valida il sipo deve mantenermi il byte sulla porta parallela mentre carico il byte successivo, quindi mandando l’impulso semplicemente cambia il byte in uscita sulla porta con quello attualmente caricato, così da fare lo scan sincronizzato senza avere momenti con i led spenti, o chiedo troppo? Non avendoli mai usati e avendo poco tempo a disposizione prima di ordinare gli integrati volevo sapere la vostra opinione…!

    • #10 da Giovanni Bernardo il April 12th, 2012

      Ci vuole uno col latch. Usa il 74HC595 e non ci pensare più. E’ il più adatto per fare questi lavori anche perchè tu hai bisogno di una certa corrente in uscita e il 595 ce la fa a pilotare i led.

Devi essere collegato per lasciare un commento.

  1. No trackbacks yet.
Settorezero.com e il logo Zroid™ ©2007÷2017 Giovanni Bernardo - E' vietata la copia e la distribuzione anche parziale dei contenuti di questo sito web senza l'esplicito consenso dell'autore. I contenuti di settorezero.com sono distribuiti sotto una licenza Creative Commons Attribuzione-Non Commerciale-Non Opere derivate 2.5 Italia e sono soggetti alle condizioni definite nel disclaimer. Settorezero.com e tutti i suoi contenuti sono tutelati dalla legge sul diritto d'autore per cui i trasgressori sono perseguibili a norma di legge. Settorezero fa uso dei cookie leggi l'informativa estesa. Il tema di questo sito è basato sul tema Fusion per wordpress, realizzato originariamente da digitalnature e fa uso del plugin Wassup per il computo delle statistiche. Per contattare l'autore siete pregati di utilizzare la sezione contatti. Siamo presenti anche su Facebook e, meno assiduamente, anche su Twitter - Tumblr - Google+ - Blogspot - Youtube.
Creative Commons BY-NC-ND 2.5