Arduino vs 595 led control

salve a tutti, il mio dilemma è: vorrei usare due 74595 per variare lo stato on/off di 16 led usando solo 3 pin digitali, questo all'interno di un progetto più grande.

A monte di questo c'è la necessità di variare lo stato di un driver per led tramite dei singoli impulsi su di una linea sola

Ossia fare in modo (per ogni led) che il primo impulso funzioni da set e il secondo da reset. (entrambi sullo stesso filo).

Ho realizzato un driver che consiste in un flipflop di 2 porte nand precedute da 2 porte excl nor disposte come nella figura:

il segnale a impulsi viene applicato a una porta per ciascuno degli or esclusivi. porte che sono jumperate assieme.

Alla prima realizzazione (forse non era proprio la prima :roll_eyes:) il flipflop funziona se comandato da un pulsante (ossia la prima pressione accende il led e la seconda lo spegne). (il pulsante è collegato a massa; l'ingresso comune degli or excl al +5v tramite una res da 330)

Siccome lo stato iniziale di un pin è sempre LOW mentre a me servirebbe un HIGH (nello stato di attesa dell'impulso LOW) ho deciso di interporre un inverter 74s04 al mio flip flop.

Prima del 74s04 avevo provato un 74ac14 (invert triggerato) che mandava tutto in malora. chissa perche...

(e adesso la domanda) c'è per caso qualcuno che conosce un modo più economico per realizzare questa funzione?

Vorrei risparmiare sui nand o sugli or, o su tutti e due. Mi piacerebbe molto utilizzarli. perciò se sapete economizzare usando solo una porta e qualche invert, spero vogliate condividere il vostro schema.

P.S. ecco un semplice codice per ulteriori chiarimenti:

int ledPin = 13;
int inputPin =4;
int val = 0;

void setup() [
pinmode(ledPin, output);
pinMode(inputPin, INPUT);
]

void loop() [
val = digitalRead(inputPin);
if (val == HIGH) [
digitalWrite(ledPin, HIGH);
val = 0;
delay(10);
digitalWrite(ledPin, LOW);
delay(1000);
]
]
scusate per le graffe non ne avevo sottomano.
Grazie.

Ciao rugantigno, non fraintendermi.

Non capisco la Tua logica di voler risolvere il problema. mi sembra che comlichi la cosa.
Hai un microcontroller che fa tutto quello che gli voi far fare e vuoi mettere un Flip Flop per accendere e spegnere un LED usando dei impulsi. perché non cambi la programmazione in modo che un low sul uscita da un led spento e un HIGH lo accende.
Se prendi 2 shiftregister come il 74HC595 puoi collegare i led con una resistenza direttamente alle uscite.
Il microcontroller lo usi proprio per sostituire la logca discreta delle porte e implementi le funzioni via SW.

Ciao Uwe

intendi dire tramite la latch del 74595 tengo acceso i led.
Ma voglio risparmiare anche sui cicli macchina, ti spiego:
metti caso che debba variare lo stato di un led in una fila di 16 e che per questo debba ricalcolare il valore del doppio byte da inviare 0000101100110010, dovrò richiamare la variabile doppio byte e sottrarre o aggiungere un valore costante significativo per quel led diciamo 0000000100000000 oltre ad aggiornare una variabile di controllo aggiuntiva esempio valpin08 = LOW, con una porta esterna mi risparmio l'addizione/sottrazione, mi limito a mandare 0000000100000000 e posso mandare il programma più fluido.
Più tempo per le scansioni dei potenziometri e per la digitalRead() dei pulsanti.

Ciao rugantigno
Mi cadono le braccia
Allora da buon amico Ti dico lascia stare Arduino é troppo lento.

Se vuoi usare arduino ti dico che chiamare 2 variabili e fare l'aggiornamento influenza molto poco su un ciclo di aggiornamento uscite anche perché non aggiorni ogni millisecondo le uscite.
Ciao Uwe

se ho capito bene quello che vuoi dire è che l'aggiornamento dei led viene fatto di rado, diciamo ad esempio in un else e quindi eseguito solo raramente e solo se le condizioni dell'if non vengono verificate.
Credo che tu abbia ragione e probabilmente faro così.

Comunque mi interessa a livello teorico la possibilità di memorizzare uno stato in quel modo, con un minimo numero di porte e/o inverter(invert che è comunque una porta).

diciamo che è una domanda complessa e non è possibile farla a google.