Realizzare un simulatore di Flip-Flop SR con Arduino

Tempo di lettura: 2 minutes

Nelle reti combinatorie, il valore dell’uscita dipende esclusivamente dal valore assunto dagli ingressi in quel dato istante.
Nelle reti sequenziali, il valore dell’uscita non dipende solo dal valore assunto dagli ingressi in un dato istante, ma anche dai livelli logici assunti dalle uscite negli istanti precedenti. Si può dire che nelle reti combinatorie il valore dell’uscita non dipende dal tempo, mentre nelle reti sequenziali la variabile tempo riveste una grande importanza.
Se in un determinato istante 𝑡𝑡𝑛𝑛 gli ingressi e le uscite si trovano in un determinato stato, è possibile che nell’istante successivo 𝑡𝑡𝑛𝑛+1 una variazione dei valori logici di ingresso determini un nuovo stato delle uscite. Lo stato delle uscite dipende, sia dagli ingressi al tempo 𝑡𝑡𝑛𝑛+1 sia da quello delle uscite all’istante precedente 𝑡𝑡𝑛𝑛 ,allora, si può dire che il circuito è in grado di conservare memoria della sequenza degli stati assunti dagli ingressi e dalle uscite.
Le strutture circuitali che possono realizzare queste funzionalità di memoria sono molteplici, diamo uno sguardo ai dispositivi chiamati flip-flop.

  • Realizzazione pratica del circuito;
  • Verifica del funzionamento del circuito;

Fasi operative Flip-Flop SR:

  • Realizzare lo schema di montaggio in Fritzing;


  • Datasheet;

 

Dato lo sketch Arduino che segue, non commentato, comprenderne il funzionamento, commentare ogni parte e derivare il circuito elettronico di montaggio.

segnalare eventuali correzioni/miglioramenti da effettuare allo sketch.

int pinQ = 10;
int pinQneg = 9;
int pinSet = 8;
int pinReset = 7;

int pinLedSet = 5;
int pinLedReset = 4;

int statoOutNorReset = 0;
int statoOutNorSet = 0;

int statoOutNorResetSuc = 0;
int statoOutNorSetSuc = 0;

boolean statoQ = 0;
boolean statoQneg = 0;
  
void setup()
{
  pinMode(pinSet, INPUT);
  pinMode(pinReset, INPUT);

  pinMode(pinQ, OUTPUT);
  pinMode(pinQneg, OUTPUT);

  pinMode(pinLedSet, OUTPUT);
  pinMode(pinLedReset, OUTPUT);
}

void loop()
{
  boolean statoSet = digitalRead(pinSet);
  boolean statoReset = digitalRead(pinReset);

  if (statoSet == 1) {
    digitalWrite(pinLedSet, HIGH);
  } else {
    digitalWrite(pinLedSet, LOW);
  }

  if (statoReset == 1) {
    digitalWrite(pinLedReset, HIGH);
  } else {
    digitalWrite(pinLedReset, LOW);
  }

  statoOutNorSet = statoQneg;
  statoOutNorReset = statoQ;
  
  statoOutNorResetSuc = !(statoReset || statoOutNorSet);
  statoOutNorSetSuc = !(statoSet || statoOutNorReset);
  
  digitalWrite(pinQ, statoOutNorReset);
  digitalWrite(pinQneg, statoOutNorSet);

  statoQneg = statoOutNorSetSuc;
  statoQ = statoOutNorResetSuc;
}

Si ricorda è obbligatorio:

  • inserire un’intestazione come indicato, indicare nelle note:
    • Cognome e Nome
    • Classe
    • Esercizio/Sommario funzionamento
  • tutto il codice deve essere commentato;
  • tutto il codice deve essere correttamente indentato;
  • ogni allievo dovrà utilizzare 1 singola scheda Arduino;
  • il codice dovrà essere consegnato al docente secondo le indicazioni date a lezione.