Multiplexer e Demultiplexer

Ciao a tutti,
sto programmando Arduino in modo da implementare delle porte logiche, attraverso la tabella di verità e gli operatori logici dell'IDE ho simulato il funzionamento delle porte logiche accendendo e spegnendo dei led. Fin qui tutto ok, nulla di complicato.
Adesso vorrei simulare il funzionamento di un Multiplexer e di un Demultiplexer... qualcuno ha esperienze in merito?
Grazie a tutti

Bisognerebbe vedere come hai simulato una porta per poter dire.
Nel senso che se simuli tutte le porte di un mux... ottieni un mux.

Ad esempio per me questa è una porta AND a due ingressi:

y = a & b;

Mentre questo è un addizionatore a un bit con riporto (due AND, due XOR, una OR):

out = in1 ^ in2 ^ inrip;
outrip = (in1 & in2) | ( (in1 ^ in2) & inrip);

Un mux 4 ingressi 1 uscita potrebbe essere così (quattro AND, una OR):

out = (in0 & !a & !b) | (in1 & a & !b) | (in2 & !a & b) | (in3 & a & b);

Ho simulato le porte con gli operatori logici:
&& AND
|| OR
! NOT

Per la XOR dalla tabella di verità ho calcolato i maxtermini e la somma dei prodotti, con gli operatori logici AND e OR ho calcolato il risultato

((A)||(B))&&(!(A)||!(B));

Ok, la logica negata dei maxtermini (prodotto di somme) mi ha sempre confuso, personalmente sono a mio agio con i mintermini (somma di prodotti) perché più simile al normale pensiero umano, anche se il risultato matematico/logico finale non cambia.

Detto ciò, gli operatori [color=red]&& || ! [/color](logici) lavorano sulla booleanità dei valori (56 && 45 -> 1).

Invece [color=red]& | ^ [/color](bitwise) effettuano l'operazione logica sui singoli bit delle variabili (56 & 45 -> 40).

Il bitwise [color=red]^[/color] è lo XOR.

Se si lavora con variabili che contengono solo 0/1 il loro uso è totalmente interscambiabile.

Il mux del mio post precedente (4 ingressi, 1 uscita, due ingressi selezione) è espresso con mintermini usando gli operatori bitwise.

Claudio_FF:
Detto ciò, gli operatori && || ! (logici) lavorano sulla booleanità dei valori (56 && 45 -> 1).
Invece & | ^ (bitwise) effettuano l'operazione logica sui singoli bit delle variabili (56 & 45 -> 40).
Il bitwise ^ è lo XOR.

Si, ma lui sta SIMULANDO proprio gli operatori bitwise ... se usi quelli esistenti ... che simulazione è ? ? ? :smiley:

Guglielmo

Ma alla dine vuoi fare un programma che faccia da multiplexer/demultiplexer giusto? Praticamente uno di quei cosi con tanti ingressi e una sola uscita (o viceversa) in cui l'uscita singola é un ingresso alla volta o l'ingresso singolo comanda un uscita alla volta?
Se lo scopo finale é questo Arduino credo sia sprecato, visto che i multiplexer non sono "macchine intelligenti". E soprattutto le porte logiche non sono neanche strettamente necessarie, perché gestire il tutto con for ed array é più facile e veloce (secondo me). Sai come?

Silente:
Ma alla dine vuoi fare un programma che faccia da multiplexer/demultiplexer giusto?

NO, non hai capito, non vedi che sta studiando la "logica" di come scrivere via software delle cose che sono ovviamente banalmente implementate in HW ? ... il suo è uno studio teorico su "quello che c'è dietro" come "logica" !

Guglielmo