Arduino e cd74hc4067

I collegamenti attuali:

Schema fatto con fritzzing che a penna mi e' venuto una cosa oscena hahaha, con questo si capisce perfettamente tutto.

Per quanto riguarda i cicli for non ho idea di come migliorarli, perche non so quale sia il problema anche se ho capito che tu mi hai dato la soluzione, ma, comunque non sono in grado di modificare un ciclo for cosi complesso ed elaborato :confused:

PS. non ho risposto perche ero a farmi il vaccino, che anno magnifico...

Non ti conviene usare degli shift register?...

Due for uno dentro l'altro dove ti ho già detto esattamente dove sta il problema?

E come lo hai scritto quel programma?

Per @Datman invece:

Dopo attenta analisi sono stati scelti i multiplexer...

E adesso questi ci sono...

...e adesso deve comandarli uno per uno, anziché metterli in fila! :frowning:

Posso metterlo uno shift register se serve, a me basta che funzioni tutto... Non so cosa sia ne cosa faccia uno shift register, mi vado ad informare.

Ahahaha stai sempre sul pezzo

Qui, ad esempio, usa dei PISO (Parallel In Serial Out), con una resistenza di pull down per ogni pulsante:

Purtroppo non ha pubblicato uno schema elettrico... >:(

Leggi anche qui:
http://stor.altervista.org/shift-register/4094.php

e qui:

anche se le sigle sui pin sono messe con molta fantasia... >:(
3. O7: Q8
9. PL: Parallel/Serial control
10. CP: Clock
11. Ds: Serial input

Questo è il documento ufficiale a cui devi fare riferimento:

In realtà ogni produttore pubblica i suoi datasheet, molto simili tra loro. A volte, però, ci sono delle differenze:

  • qualcuno può essere un po' più sintetico, qualcun altro più dettagliato;
  • qualcuno può riportare molti schemi applicativi, altri no;
  • possono adottare simbologie leggermente diverse;
  • alcune caratteristiche elettriche possono essere leggermente diverse e in rari casi possono portare a comportamenti diversi usando nello stesso circuito un integrato di un produttore o di un altro (ad esempio l'ICL7106 per quanto riguarda una resistenza e un condensatore...).

Praticamente è molto simile ad un multiplexer.
Alla fine fanno la stessa cosa(o sbaglio?), il mio unico problema è solo leggerli come cristo comanda, accenderne uno, leggerlo, se è stato cliccato un pulsante mandare una nota midi e poi rispengerlo, così per tutti i mux.

Che intendi?
Ragazzi miei io non ci sto più capendo nulla...

Che intendo... dove???...
Lo shift register di tipo PISO legge gli stati degli ingressi P e li manda in fila sull'uscita, che è esattamente ciò che serve a te. E' fatto apposta! :slight_smile:

Faccio un piccolo recap perché ho come l'impressione di perdere qualcosa, io sto creando una macchina con 120 pulsanti 11 fader e 4 encoder, che mandano delle note nel caso dei pulsanti e che mandano cambi di velocità della singola nota nel caso di fader ed encoder.
Per i fader siamo apposto,per gli encoder ho ancora qualche problemino ma niente di grave mentre per i mux non ci siamo proprio.
I collegamenti sono quelli li (gli ultimi mandati), il codice idem, però non vanno... @Standardoil mi ha dato la soluzione a quanto pare, ma io continuo a non capire quale sia...

Gli shift register sono fatti apposta! Usali!
Qui 15 ti vengono a costare circa 26€:

Se no, per avere prezzi migliori devi acquistarli in Cina (e sperare che siano buoni).

@gemini99xd
Quindi nella setup c'e' l'hai messo questo ??

pinMode( sigpin, INPUT_PULLUP);
for (byte i = 0; i < NUM_MUX; i++)  
{ pinMode( ENpin[i], OUTPUT);
}

Inoltre, "non funzionano" non dice nulla, sii più preciso.
@Datman , non capisco, lui ha già dei mux, perché dovrebbe cambiare chip ?

Perché gli shift register sono fatti apposta e ottiene facilmente i dati in uscita.
Qui c'è già il codice:
http://stor.altervista.org/shift-register/4094.php

I 4067 sono commutatori analogici e hanno 16 ingressi con 4 bit di indirizzamento: per 130 ingressi, quindi, servono 9 CD4067 (8x16=128...) e 9 pin digitali di ingresso su Arduino. Collegando gli indirizzi in parallelo, quindi, servono 4 uscite e 9 ingressi... Sì, può funzionare, anche se non credo che possa raggiungere la stessa velocità di scansione.

N.B.: per velocizzare, conviene mandare un indirizzo a tutti i 4067 in parallelo e leggere tutte le uscite. Accontentandosi di 128 ingressi, si può usare la porta D e leggere velocemente gli 8 bit in parallelo: con 16 letture della porta D si ha la lettura dei 128 ingressi.

Quindi (pseudo):
for (byte n=0; n<16; n++)

  • scrivi n in binario su 4 uscite
  • byte in (n)=PORT D (com'è sul Mega?...)

Ma dove sta il problema?...

Cosi funzionerebbe

O almeno potremmo isolare il prossimo problema, quella famosa frase del post 120

Infatti io continuo a temere un ulteriore inciampo

Ma servirebbe superare finalmente questa impasse, che sta rasentando la tragicommedia

Non ho mai provato

Si possono concatenare 15 shift register?

Grande...

Perché no?...

Il fan-out dei pin di arduino che danno clock e latch

Non ho idea di che fan-out abbiano

Sull'Uno, 40mA...
Almeno 20?

Vero