In questa pagina è descritto come utilizzare un analizzatore di stati logici (Logic Analyser) per osservare lo scambio di dati tra Arduino e 74HC595, un registro a scorrimento con uscita parallela 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) strumento dotato di due ingressi analogici (canali A e B) e 16 ingressi digitali (da D0 a D15). Il software usato è la versione 7.0.121 , l'ultima disponibile nel momento della prima stesura di questa pagina.
In sintesi le attività che verranno fatte:
Questa attività ha lo scopo di acquisire confidenza con la funzione shiftOut. Inizialmente non serve realizzare alcun circuito da collegare ad Arduino.
Scrivere il breve programma seguente ed analizzare con l'oscilloscopio la funzione shiftOut():
int clockPin = 12;
int dataPin = 11;
void setup() {
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
shiftOut(dataPin, clockPin, MSBFIRST, 0xA1);
delay(1);
}
Questa attività ha lo scopo di acquisire confidenza con l'analizzatore di stati logici, strumento utile per osservare più segnali digitali, soprattutto quando non si dispone di un sufficiente numero di ingresso dell'oscilloscopio. Non serve realizzare alcun circuito da collegare ad Arduino.
Scrivere il breve programma seguente:
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);
}
Oltre ai due segnali già visti nell'attività 1 è presente un terzo segnale:
Osservazione ovvia: l'oscilloscopio utilizzato non dispone di tre canali per osservare contemporaneamente tutti questi segnali... Per questo utilizzeremo tre ingressi digitali dell'analizzatore di stati logici (da D0 a D15, i fili gialli nell'immagine di apertura).
Per osservare i tre segnali occorre:
Il segnale da visualizzare dovrebbe apparire simile al seguente:
Oltre a ripetere le attività già descritte in precedenza:
In questa attività analizzeremo il funzionamento del circuito integrato 74HC595 sia leggendo il 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:
Per la descrizione completa di questo circuito integrato si rimanda al datasheet.
(questa attività può essere svolta in un secondo momento: passare all'attività 3)
Per comprendere il funzionamento dell'integrato disegniamolo e simuliamolo in Deeds, sia in modalità Animation che Timing Diagram.
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.
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:
Attività:
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: 1 aprile 2025
Appunti scolastici - Versione 0.1031 - Marzo 2025
Copyright 2012-2025, Vincenzo Villa (https://www.vincenzov.net)
Creative Commons | Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)