sto cercando il modo corretto di collegare una tastiera matrix 4x4 ad un arduino mega,
l'unico esempio di cablaggio che ho trovato dove utilizzano delle resistenze di pull-up per i pin 2 - 3 - 4 - 5(nell'esempio) è questo, tutti gli altri nel quale mi sono imbattuto ne sono sprovvisti... quel'è quindi il modo corretto di collegarla?
nel mio caso la tastierà dovrà stare a 1-2 metri da arduino.
Qui trovi una spiegazione molto ben dettagliata di come fare. Il modello di tastiera sembra diverso, ma le connessioni dovrebbero essere uguali.
Temo che la distanza di 1-2 metri fra tastiera e Aeduino possa raccogliere disturbi elettromagnetici, dipende dall'ambiente in cui operi. Prova, e se ci saranno disturbi vedremo come ovviare.
giusto per capire, che tipo di distrurbi mi dovrei aspettare secondo te? che facci tipo da antenna e mi porti a blocchi arduino o a riavvi? oppure che questi disturbi possano simulare il premere di un pulsante anche se quento non lo è stato?
pensavo di utilizzare cmq un cavo schermato e di collegare la schermatura a gnd...intanto per iniziare...
Non dici niente su quello che ci vuoi fare e come lo vuoi fare. I disturbi elettromagnetici dipendono da una molteplicità di fattori tale che solo dopo aver sbattuto la testa contro diversi muri si riesce a comprenderli e talvolta a contrastarli. E i loro effetti sono subdoli.
Fili lunghi senza protezioni, o con protezioni inadeguate, agiscono come antenne captando sporcizia elettromagnetica di cui i pin di Arduino ad alta impedenza sono ghiotti.
Anche con un cavo schermato a 8 poli + schermo è necessario curare il collegamento dello schermo. Normalmente lo schermo va collegato a GND SOLO dalla parte dell'ingresso (pin Arduino) e NON DEVE essere utilizzato come ritorno di corrente. Nel tuo caso la circolazione della corrente avviene solo attraverso i fili della tastiera, quindi: schermo a GND lato Arduino e basta.
quello che voglio fare è un'evulozione di quello che già faccio e che ho spiegato qui, con quindi tutta la flessibilità,come numero di scelte, che mi permette di avere una tastiera e la netta velocità(rispetto ad ora che devo stare anche 20 secondi a premere un pulsante)
i pin di Arduino ad alta impedenza sono ghiotti.
questa cosa infatti mi è nota, ma ti chiedo, avendo anche molti pin analogici liberi, se sfruttassi loro come pin digitali, eliminerei questo rischio? o invece anche i pin analogici usati come digitali hanno questo problema?
poi una curiosità per capirci qualcosa in più, quello scherma nel link del primo post perchè usava resistenze pull-up? e solo sui 4 pin?
simosere:
... avendo anche molti pin analogici liberi, se sfruttassi loro come pin digitali, eliminerei questo rischio? o invece anche i pin analogici usati come digitali hanno questo problema?
Su AVR NON esistono pin "analogici" ... sono tutti pin digitali di cui, alcuni, possono essere, tramite un apposito circuito interno, commutati su MUX del ADC (... salvo casi particolari).
Tutti i pin, sia visti come digitali in ingresso che visti come analogici sono ad "alta impedenza" e quindi ... ovviamente estremamente sensibili ai disturbi. Se lasci un pin digitale in input non collegato, lo vedrai ballare causalmente tra HIGH e LOW, se lasci un pin collegato al ADC (quindi definito analogico) non collegato, vedrai il suo valore ballare a seconda dei disturbi.
Si sta parlando di letture analogiche o digitali, non di pin inutilizzati ed abbandonati a se stessi.
Se lasci un pin scollegato, il suo potenziale non è forzato ma dipenderà dall'etere oscillando in base ai disturbi captati.
Se quel pin non ti interessa, non ti cambia nulla anche se fluttua per i fatti suoi.
Se invece lo devi usare per farci delle letture allora il discorso cambia.
Se il pin lo colleghi con un filo, questo fungerà da antenna per i disturbi, più il filo è lungo e più forte capterà i disturbi, fino a quando i disturbi captati saranno tali da influenzare il valore letto.
La lettura digitale di un segnale digitale è molto meno soggetta ad errori a causa dei disturbi, perchè per variare un valore digitale, il disturbo deve essere di una certa ampiezza.
Per le letture analogiche, invece, si ha sempre variazione.
Mmm ... io, per evitare problemi, tutti i pin inutilizzati, li definirei INPUT_PULLUP ... così sono collegati ad una resistenza da circa 10 KΩ che li tiene fissi ad HIGH
Ma questi pin non collegati a nulla, diciamo quindi fluttuanti... possono, captando distrurbi anche portare al blocco di arduino? Mi sembra di capire di no... influenzerebbe solo letture che in realtà nn mi servono...
Quanti pin si possono collegare alle pullup interne nel caso di un mega?
In realtà, un pin che capta disturbi, anche se in teroria non dovrebbe influenzare nulla, in pratica può farlo e, difatti, è cosa suggerita comunemente, l'impostazione come ti ho detto sopra.
Per la tua seconda domanda ... ogni pin digitale, su AVR, ha la sua resistenza di pull-up, quindi ... :
Occhio che NON ricordo se sulla MEGA, come avviene sul 328P in case TQFP (A6 ed A7), esistono pin che sono SOLO collegati al MUX ADC e NON utilizzabili come pin digitali, ma solo come analogici ... tocca andare a guardare il datasheet
gpb01:
Mmm ... io, per evitare problemi, tutti i pin inutilizzati, li definirei INPUT_PULLUP ... così sono collegati ad una resistenza da circa 10 KΩ che li tiene fissi ad HIGH
Guglielmo
anche la tua memoria sta giocando brutti scherzi, 20-50kohm 35kohm nominali
pgiagno:
Temo che la distanza di 1-2 metri fra tastiera e Aeduino possa raccogliere disturbi elettromagnetici, dipende dall'ambiente in cui operi. Prova, e se ci saranno disturbi vedremo come ovviare.
Ciao a tutti,
rispetto agli anni passati l'unica modifica a livello hardware fatto al mio progetto di automazione tende è l'inserimento di questa tastiera. Fino ad un paio di giorni fa, senza accendere i termosifoni in casa(è arrivato finalmente il freddo dalle mie parti) tutto ha perfettamente funzionato... ma ora credo che la tastiera capti qualche disturbo quando la caldaia parte per scaldare casa... curiosità per l'acqua calda dei rubinetti non ho problemi( da agosto 2020 è in uso questa tastiera). Arduino si blocca e si riavvia grazie al WD... cmq non sempre si blocca, è casuale...
ebbi già problemi con la cadaia che mi faceva bloccare arduino ma filtrando l'alimentazione ho risolto... parliamo di un paio di anni fa...
il collegamento è stato fatto in questo modo:
la libreria utilizzata(se serve) è questa: Adafruit_Keypad.h
Anche con un cavo schermato a 8 poli + schermo è necessario curare il collegamento dello schermo. Normalmente lo schermo va collegato a GND SOLO dalla parte dell'ingresso (pin Arduino) e NON DEVE essere utilizzato come ritorno di corrente. Nel tuo caso la circolazione della corrente avviene solo attraverso i fili della tastiera, quindi: schermo a GND lato Arduino e basta.
qualche consiglio? ad esempio abilitare le resistenza pull up interne sui pin della tastiera?
digitalWrite (R1, HIGH );
digitalWrite (R2, HIGH );
digitalWrite (R3, HIGH );
digitalWrite (R4, HIGH );
digitalWrite (C1, HIGH );
digitalWrite (C2, HIGH );
digitalWrite (C3, HIGH );
digitalWrite (C4, HIGH );