74HC595

74HC595

In questa pagina è descritto come utilizzare un analizzatore di stati logici per osservare lo scambio di dati tra Arduino ed un registro a scorrimento con uscita parallela. Il registro utilizzato è 74HC595, un circuito il cui uso con Arduino è semplificato dalla presenza di una vasta documentazione e di funzioni specifiche.

Come analizzatore di stati logici utilizzeremo Picoscope 2205A-MSO (Mixed Signal Oscilloscope). Il software usato è la versione 7.0.121 , l'ultima per Linux disponibile nel momento della prima stesura di questa pagina.

In sintesi le attività descritte:

Attività 1

Questa attività ha lo scopo di acquisire confidenza con l'analizzatore di stati logici. Non serve realizzare alcun circuito da collegare ad Arduino.

Scrivere il breve programma seguente ed analizzare la funzione shiftOut() ):

int latchPin = 13;
int clockPin = 12;
int dataPin = 11;

void setup() {
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0xA1);
  digitalWrite(latchPin, HIGH);
  delay(1);
}

Esso genera tre segnali:

Il segnale da visualizzare dovrebbe apparire simile al seguente:

Segnali sertiali

Per osservare i tre segnali occorre:

Segnali da visualizzare

Impostazione del trigger

Ulteriori attività:

Attività 2

In questa attività analizzeremo il funzionamento del circuito integrato 74HC595 sia leggendo i datasheet, sia utilizzando il simulatore Deeds.

74HC595 è costituito da:

La struttura ed il funzionamento di 74HC595 possono essere dedotti dal seguente schema a blocchi e dalla descrizione presente alla pagina 7 del data scheet:

Schema a blocchi di 74HC595

Per la descrizione completa di questo circuito integrato si rimanda al datasheet.

Per comprendere il funzionamento dell'integrato disegniamolo e simuliamolo  in Deeds, sia in modalità Animation che Timing Diagram.

 74HC595 simulato

Come segnali di ingresso possiamo utilizzarne di simili a quelli generati da Arduino nella precedente attività. Attenzione all'ordine con cui vengono letti i bit dell'uscita parallela, da sinistra a destra o viceversa.

Diagramma temporale

Attività 3

Con questa attività collegheremo Arduino e 74HC595, realizzando una trasmissione seriale sincrona unidirezionale:

Il codice di esempio e lo schema da realizzare sono i seguenti:

int latchPin = 13;
int clockPin = 12;
int dataPin = 11;

void setup() {
   pinMode(latchPin, OUTPUT);
   pinMode(clockPin, OUTPUT);
   pinMode(dataPin, OUTPUT);
   Serial.begin(9600);
}

void loop() {
   for (int i = 0; i < 8; i++) {
      int dataOut = 1 << i;
      Serial.println(dataOut, BIN);
      digitalWrite(latchPin, LOW);
      shiftOut(dataPin, clockPin, MSBFIRST, dataOut);
      digitalWrite(latchPin, HIGH);
   }
}

Per mitigare eventuali effetti delle interferenze tra segnali, è utile collegare una coppia di condensatori in parallelo tra massa e Vcc: indicativamente uno da 100 nF ed uno da 10 µF (in genere polarizzato).

Attività:

Sequenza casuale

Attività 4

Collegare un display a sette segmenti a catodo comune alle uscite di 74HC595, come nello schema seguente e nella fotografia di apertura, e scrivere il codice per la sua gestione


Pagina creata nel maggio 2023
Ultima modifica: 21 maggio 2024


Licenza "Creative Commons" - Attribuzione-Condividi allo stesso modo 3.0 Unported


Pagina principaleAccessibilitàNote legaliPosta elettronicaXHTML 1.0 StrictCSS 3

Vai in cima