[OT] - Simulazione su Tinkercad

Sto simulando un classico shift register su tinkercad, di cui allego il circuito.

Perche', ogni tanto, durante la simulazione, vedo un fulmine sull' integrato ?

Questo e' il codice:

#define pinDati  2
#define pinLatch 4
#define pinClock 10

void setup()
{
  pinMode(pinDati, OUTPUT);
  pinMode(pinLatch, OUTPUT);
  pinMode(pinClock, OUTPUT);
  
}

void loop()
{
 
   for (int j = 0; j < 256; j++) {
    //manda a massa latchPin e mantienilo così mentre trasmetti
    digitalWrite(pinLatch, LOW);
    shiftOut(pinDati, pinClock, LSBFIRST, j);
    //imposta latchPin a HIGH per segnalare al chip
    //che può smettere di rimanere in ascolto per altre informazioni
    digitalWrite(pinLatch, HIGH);
    delay(100);
  }
}

Sono anche io su Tinkercad, se imposti il progetto temporaneamente come pubblico e ci mandi il link diamo un'occhiata (non mi metto certo a reimpostare tutto il circuito.. :wink: )

In genere indica che hai fatto qualcosa di sbagliato (es. sovraccaricato qualche componente, succede pure con i LED ad esempio).

docdoc:
Sono anche io su Tinkercad, se imposti il progetto temporaneamente come pubblico e ci mandi il link diamo un'occhiata (non mi metto certo a reimpostare tutto il circuito.. :wink: )

Spero sia guisto: non ho mai condiviso nulla con tinkercad.

Cmq, ipotizzo, un consumo eccessivo di corrente ( ad intuito!)

EDIT: confermo!
Aumentando il delay e mettendo un multimetro all' ingresso del componente, in effetti, c'e' un assorbimento > 50mA che coincide con l'animazione in oggetto!

Metti una resistenza (es. 30 Ohm) tra GND di Arduino e tutto il circuito esterno. Il "bang" rosso dovrebbe sparire.

docdoc:
Metti una resistenza (es. 30 Ohm) tra GND di Arduino e tutto il circuito esterno. Il "bang" rosso dovrebbe sparire.

E infatti, e' cosi!: grazie!

So che non e' un forum di elettronica ma ti prego, ti supplico, ti imploro (spero basti!! :smiley: ), spiegami la teoria dietro questa cosa!

Banalmente: metto "a occhio" una resistenza abbastanza alta da abbassare la corrente quando ha i picchi ma abbastanza bassa da permettere ai LED di accendersi ?

boggi:
metto "a occhio" una resistenza abbastanza alta da abbassare la corrente quando ha i picchi ma abbastanza bassa da permettere ai LED di accendersi?

Era una soluzione "veloce" per vedere come si comportava la simulazione.

La soluzione giusta è aumentare il valore delle resistenze dei LED, o aggiungere un ulteriore stadio buffer, o usare un integrato con maggiore corrente di uscita.

Qual è il problema con quella resistenza?

Che il gnd dello shift register non è più connesso al gnd di Arduino (i due componenti hanno riferimenti di zero differenti). Con 30Ω e 36,7mA su quella resistenza cadono 1,1V, vuol dire che dal punto di vista dello shift register il gnd di Arduino si trova a -1,1V, quindi i segnali in arrivo da Arduino non vengono più sentiti come 0 .. 5V, ma come -1,1 .. 3,9V. Se si accendono altri LED la situazione peggiora ancora (ma non so se un simulatore così elementare è in grado di valutare anche questo aspetto, credo di no).

E collegare la resistenza sul positivo? Ok, così i riferimenti zero volt ritornerebbero a posto, ma lo shift register risulterebbe comunque alimentato a soli 3,9V invece che a 5V.

Claudio_FF:
La soluzione giusta è aumentare il valore delle resistenze dei LED, o aggiungere un ulteriore stadio buffer, o usare un integrato con maggiore corrente di uscita.

Qual è il problema con quella resistenza?

Che il gnd dello shift register non è più connesso al gnd di Arduino (i due componenti hanno riferimenti di zero differenti).

E collegare la resistenza sul positivo? Ok, così i riferimenti zero volt ritornerebbero a posto, ma lo shift register risulterebbe comunque alimentato a soli 3,9V invece che a 5V.

Perfetto: chiarissimo! Grazie mille!

Ultima cosa: in un tutorial, in cui connette in daisy chain due 595, dice che c'e' la possibilita', in caso di (8+8) LED accesi, che arduino non riesca a fornire abbastanza corrente e, quindi, aggiunge un condensatore elettrolitico all' ingresso di uno dei due IC.
Questo pero', nel nostro caso, non sarebbe utile perche' e' proprio l'IC del simulatore che non regge la corrente richiesta, giusto ?

In quel caso i problemi si sommano, ossia al problema della massima corrente erogabile dal singolo 74HC595 a quella erogabile da Arduino sul pin 5V (considera max 400mA totali). Il primo lo risolvi con resistenze più alte, come già detto, oppure limitando il numero massimo di LED accesi contemporaneamente, il secondo usando una alimentazione separata (o quantomeno non dal pin 5V di Arduino ma a monte sull'alimentatore che usi) per gli shift e relativi LED/carichi (mettendo in comune solo GND).

EDIT: comunque, per sintetizzare, con resistenze da 220 Ohm non puoi accendere più di 4 LED contemporaneamente per ogni 74LS595, da 5 in poi è un rischio per l'integrato.
Se vuoi accenderne di più devi o alzare la resistenza (ma si abbasserà la luminosità) o cambiare strategia che però dipende appunto da quanti led vuoi poter accendere contemporaneamente.

boggi:
iquindi, aggiunge un condensatore elettrolitico all' ingresso di uno dei due IC.

Per ingresso immagino intenda l'alimentazione. Se Arduino dal pin +5V non può fornire abbastanza corrente l'elettrolitico serve a poco, al massimo limita gli effetti locali di brevissimi picchi di assorbimento, ma di sicuro non funziona da batteria per oltre pochi millisecondi.

Il simulatore tra le altre cose non credo tenga conto dei limiti di corrente ottenibile dal pin +5V.

E si, in questo caso il problema evidenziato dal simulatore era la troppa corrente nello shift register.

In passato era normale considerare che agli integrati logici non si doveva collegare nessun carico, ma solo altre porte logiche (e neanche tantissime), oppure transistor se serviva più corrente. Poi i componenti si sono evoluti e adesso è normale che le uscite dei microcontroller siano in grado di gestire (assorbire o erogare) oltre 20..40mA, ma il collegamento diretto alle uscite è solo una possibilità in più usabile in alcuni casi, per tutto il resto si torna a fare come faceva la nonna :slight_smile:

Claudio_FF:
Il simulatore tra le altre cose non credo tenga conto dei limiti di corrente ottenibile dal pin +5V.

Non ne ho idea, effettivamente, per questo caso ma generalmente si comporta in modo abbastanza realistico. E comunque dal pin 5V possono uscire fino a 400mA circa, per cui non è questo il problema.