Ciao a tutti, come dice il titolo vorrei controllare una serie di reed che supera il numero di porte che ho a disposizione e pensavo di farlo con un multiplexer.
Da quello che ricordo dai miei studi universitari, con un multiplexer dovrei riuscire a leggere contemporaneamente lo stato di più ingressi "concentrati" su poche linee secondo la legge 2^n -> n, quindi nel mio caso con sole 5 linee dovrei riuscire a conoscere con una sola lettura lo stato di 32 reed.
Se la premessa fosse corretta, cosa della quale non sono sicuro e di cui vi chiedo conferma, avrei il problema di trovare un HW che mi consenta di implementarlo. Ho cercato in rete dei multiplexer e ne ho trovati a decine, ma leggendone le caratteristiche non mi è sembrato che facessero quello che mi serve.
Sono abbastanza sicuro del fatto che esista un circuito in grado di fare questo lavoro, ma o non è il multiplexer, o non riesco a capire come funziona un multiplexer, qualcuno può chiarirmi le idee?
Per me dipende da cosa devi farci, ossia cosa devi rilevare, e dal tempo in cui i reed restano un un certo stato.
In genere con i reed si lavora sui "fronti" ossia cambiamenti di stato, non sulla lettura dello stato ad intervalli regolari cosa che invece accade con un multiplexer. Se poi lo stato cambia due volte (es. da 0 ad 1, poi torna a 0) tra un intervallo di lettura ed il successivo perderesti l'informazione di tale transizione. Per cui se, per fare un esempio, tu leggessi tramite multiplexer lo stato di tutti gli input ogni 500 ms, dovresti essere certo che un cambiamento di stato di un qualsiasi reed duri più di 500 ms.
Ma di quanti input parliamo, e di quale tipo sono gli eventi? Non potresti ad esempio usare un Mega che di porte ne ha in abbondanza?
Ciao Docdoc, grazie per la risposta, i cambiamenti di stato dei reed intendo "bloccarli" in hardware, e sarà l'hardware a gestirne fronti, rimbalzi e quant'altro, quindi assumiamo che siano degli interruttori a tutti gli effetti, e la frequenza di cambiamento di stato sarà di diversi ordini di grandezza più grande della frequenza di lettura.
Il progetto attualmente prevede 20 di questi "interruttori", ma vorrei risolverlo con un multiplexer (ammesso che sia questo il circuito che io ricordo) piuttosto che passare a un hardware diverso, perchè se tutto va bene, tutto il blocco multiplexer/interruttori dovrà passare sotto il controllo di un raspberry perchè vorrei controllarli da interfaccia grafica, e anche sul raspberry le porte sono poche.
Ero convinto che volessi controllare (cioè pilotare) dei relè reed con delle uscite, invece dal resto della discussione mi sembra che tu voglia leggere lo stato di interruttori reed magnetici con degli ingressi...
Più che multiplexer guarderei gli shift register (8 ingressi ciascuno, controlli tutto con tre linee e ne puoi aggiungere in serie quanti ti pare), o gli I/O expander i2c come l'MCP23017 (16 ingressi ciascuno, controlli tutto con 2 linee, e anche qui se ne possono collegare diversi allo stesso bus).
nel mio caso con sole 5 linee dovrei riuscire a conoscere con una sola lettura lo stato di 32 reed.
No, a seconda del livello di "concentrazione" potrebbero servire anche 32 letture.
Con due di questi (multiplexer 16 to 1) saresti a posto: 4 linee in uscita per selezionare l'ingresso (0..15), e due linee in ingresso per leggere i due ingressi selezionati: https://it.aliexpress.com/item/32652790510.html
...sono 16 scritture e 16 letture per ricomporre come ti pare i bit letti.
E' semplice: basta fare una matrice. Fai due blocchi, ciascun blocco con x linee attraverso x diodi più una comune. Metti in parallelo le x linee e le mandi a x ingressi. Poi alimenti un comune per volta e leggi quali interruttori di ciascun blocco sono chiusi.
"la frequenza di cambiamento di stato sarà di diversi ordini di grandezza più grande della frequenza di lettura."
???... Spero che sia il contrario!
Comunque anche qui, a quanto pare, vige il segreto militare...
Ciao Claudio, grazie per la risposta, hai ragione, la frequenza degli eventi sarà inferiore alla frequenza di lettura.
Purtroppo la soluzione matrice non è configurabile perchè prevederebbe un cablaggio troppo complicato. Il mio progetto è un tentativo di implementare un sistema di allarme e quindi i cablaggi dovranno essere necessariamente a stella, anche perchè ho scartato le soluzioni wireless.
Continuando a cercare il circuito che ricordo di aver studiato all'università e che risolve nativamente il problema che vi ho sottoposto, sono arrivato alla conclusione che non si tratta di un multiplexer/demultiplexer, ma di un encoder/decoder, per la precisione di un encoder.
In rete ho trovato riferimenti a questi integrati: IC CD74HC147EE4, IC SN 74148 e IC CD4532BE, chiaramente dovrò metterne 3 o 4 in cascata per raggiungere i 20 ingressi, ma dai datasheet che ho trovato in rete non sono in grado di capire quale di questi potrebbe essere migliore per il mio problema, avete consigli a riguardo?
Mi risulta che gli encoder a priorità in caso di attivazione contemporanee di più linee segnalino solo quella a priorità più alta, mi sbaglio?
l'accesso ai cavi sarebbe possibile solo dall'interno, in questa fase non sto pensando a sensori esterni, quindi l'evento taglio o cortocircuito dei cavi non è ipotizzabile.
Magari limitando il numero di porte dedicate ai contatti non accessibili dall'esterno potrò in seguito gestire questi controlli per i sensori esterni con le porte rimanenti.
Intendo che dalla "centrale" partono n cablaggi ciascuno diretto a un singolo sensore, la matrice che descrivi tu prevederebbe un cablaggio più complesso.
Utilizzo un termine mutuato dall'informatica per descrivere la topologia fisica delle reti, non so se in elettronica ha un significato diverso...
Metti il pull-up sugli ingressi da 1 a 10 e chiudi a massa alternativamente C1 e C2: gli ingressi a livello alto rivelano il sensore aperto; a livello basso, il sensore chiuso.
E' vero, vedevo la matrice sviluppata in un altro modo e il cablaggio mi sembrava troppo complicato, non avevo pensato a questo tipo di soluzione, ma occuperei comunque molti pin, mentre gli encoder messi a cascata me ne occuperebbero solo 3, anche se non avrei più il dettaglio preciso della zona ma solo il sottoinsieme.
Forse la soluzione più semplice e più efficace a questo punto è quella che suggeriva Claudio: