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.
Questa prima 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);
}
Il segnale da visualizzare dovrebbe apparire simile al seguente:
Per osservare i tre segnali occorre:
Ulteriori attività:
Per la descrizione completa di questo circuito integrato si rimanda al datasheet.
Esso è costituito da:
L'uso principale che analizzeremo in questa pagina è il trasferimento seriale di otto bit da un microcontrollore (nel nostro caso Arduino) e otto segnali paralleli.
La struttura ed il funzionamento possono essere dedotti dal seguente schema a blocchi e dalla descrizione presente alla pagina 7 del data scheet:
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.
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, è utile collegare una coppia di condensatori tra massa e Vcc: indicativamente uno da 100 nF ed uno da 10 µF (in genere polarizzato).
Attività:
Pagina creata nel maggio 2023
Ultima modifica: 6 maggio 2023
Appunti scolastici - Versione 0.1020 - settembre 2023
Copyright 2012-2023, Vincenzo Villa (https://www.vincenzov.net)
Quest'opera stata rilasciata con licenza Creative Commons | Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)