Salve a tutti,ho un problema di tipo hardware con un mux 8:1 (74ls151). Questo mux gestisce dei semplici finecorsa a levetta,questi ultimi sono collegati al mux attraverso resistori di pull-up per evitare stati logici misti quando si trovano flottanti.
Ora mi chiedevo devo posizionare anche un pull up tra l'uscita del mux ed arduino?
Questa domanda me la sono posta perchè in maniera randomica arduino legge una pressione fantasma del finecorsa anche se non è stato premuto , poi la lettura successiva,quindi meno di 50 ms dopo ri-effettuo la lettura e quest' ultima è giusta.
Volevo chiedere se era un ragionamento giusto per rendere ancora più robusto il sistema di acquisizione dati.
ps: oppure servirebbe solo un condensatore ceramico da 0.1 verso massa per cortocircuitare eventuale spazzatura?
Le uscite del LS151 non hanno uno stato possibile ad alta impedenza, possono essere solo 0 o 1, quindi il problema non puo essere quello (a meno che tu non stia facendo delle prove con una breadboard e qualche foro abbia un contatto incerto, a volte succede con le breadboard) ... il pin G lo hai collegato a vcc, se non lo usi come strobe ? ... l'alimentazione e' ben filtrata ? ... tutte le saldature (se lo hai su un PCB) sono ben fatte ? ... qualcuno dei fili di connessione dei finecorsa e' lungo o passa vicino a qualche fonte di possibili disturbi ? ... le pullup da quanto sono, e ci sono dei condensatori di debounce insieme ad esse sugli ingressi ?
Un 100n sull'alimentazione, il piu vicino possibile all'integrato, sarebbe sempre bene metterlo.
Ciao Etemenanki , il pin strobe è collegato a low (gnd) come specificato sul datasheet.Il tutto si trova su pcb ben saldato e l'alimentazione è filtrata con il condensatore da 100 nF mentre i pull up sono da 4.7 kOhm e sono sulla scheda vicino all' 74ls151 ,ora mi hai fatto venire un dubbio,ho lasciato flottante l'uscita y,io uso la w che è negata.
Potrebbe essere quello?
Grazie
Non credo, ma potrebbe dipendere dal fatto che non ci sono (mi sembra) condensatori verso massa sugli ingressi, se un'ingresso captasse qualche disturbo attraverso il filo che lo collega al PCB, tipo "antenna" o se ci fossero rimbalzi sui finecorsa, te li potrebbe vedere come segnali ... 4k7 dovrebbe essere un valore abbastanza congruo, ma prova a mettere dei condensatori da 100n fra ognuno degli ingressi e massa e vedi se il problema sparisce.
Un'altra possibilita', ma dipende da come hai realizzato tu il sistema, potrebbe essere che il cambiamento dell'indirizzo di lettura avvenga mentre l'ingresso viene letto, quindi se scambi due ingressi mentre uno e' alto e l'altro e' basso, la MCU potrebbe teoricamente vedere uno dei due valori per un'attimo come segnale (e' molto difficile, e non avviene se lasci anche solo un paio di millisecondi fra quando cambi indirizzo e quando leggi, lo cito solo come possibilita')
ciao,l'eventualità che venga letto un altro ingresso è un ottima intuizione,ma io leggo sempre lo stesso finecorsa finchè non è premuto per poi passare al prossimo,quindi questa eventualità non si palesa.
dovrei provare con i condensatori sulle linee,magari migliora.
Per adesso ho cambiato il programma inserendo un debounce software e sembra andare meglio.Ovvero quando il finnecorsa è premuto,aspetto 100 ms e lo vado a ri-testare,se i dati coincidono significa che è premuto