PCB con pulsanti e led... pulldown ok?

Ciao a tutti e scusate se la domanda (ed il PCB) sono banali, ma sono decisamente alle prime armi.

Ho progettato l'allegato PCB con 6 pulsanti e 6 associati LED, ed i relativi pettini di pin sarebbero direttamente collegati ad altrettanti pin dati di Arduino (oltre a quelli gnd e +5V).

Vorrei che i pulsanti fossero letti da Arduino come HIGH quando sono premuti, e i led si accendessero se le uscite sono impostate a HIGH.

Ho messo correttamente le resistenze di pulldown? i valori possono andare? nel complesso come "design" vi sembra accettabile?
(ps: se è più chiaro, carico una copia senza piano massa...)

Grazie a tutti dei pareri! :slight_smile:

Premetto che non sono espertissimo e sopratutto non uso fritzing.
Le resistenze sono collegate bene (pulldown) ma visto che hai il piano di massa il collegamento tra i pin di inppu per il gnd e le varie resistenze pulldown/led non necessitano della pista di collegamento.
I due pin di ciascun lato del pulsante sono interconnessi quindi collegherei le resistenze pulldown ad uno di essi in modo che la pista risulti dritta metre l'altro pin del pulsante, a tal proposito le resistenze R1-R6 se i pin sono 5V tolerant non servono.
Capitolo led, se la posizione non è obbligata puoi pensare di spostare le resistenze a lato (sempre rimuovendo la pista del gnd tanto c'è il piano di massa) in modo che la pista di collegamento tra resistenza e pin del led sia dritta, in linea generale più le piste sono corte meglio è, tutto questo a mio modestissimo parere di poco esperto.

Non vedo problemi con la lunghezza delle piste, perché non usiamo ne alte frequenze ne alte correnti.
Direi che la scheda va bene.
Concordo che le resitenze R1 a R6 non servono, ma non fanno neanche male.

Ciao Uwe

Se gli input sono 5V tolerant le resistenze Rx non sono necessarie, e questo mi è chiaro. Ma se invece non fossero 5V tolerant sarebbero sufficienti?

Ciao e grazie a tutti per i consigli :slight_smile:

fabpolli:
Premetto che non sono espertissimo e sopratutto non uso fritzing.
Le resistenze sono collegate bene (pulldown) ma visto che hai il piano di massa il collegamento tra i pin di inppu per il gnd e le varie resistenze pulldown/led non necessitano della pista di collegamento....

è Fritzing che funziona (AFAIK) così: disegni la pista, gli dici che è GND, e se e quando gli dici di aggiungere il piano massa, la annega dentro. Forse si può farlo lavorare diversamente, ma allora devi indicare manualmente ogni singolo pin che va a gnd, che è molto più noioso che tracciare una pista :slight_smile:

uwefed:
Non vedo problemi con la lunghezza delle piste, perché non usiamo ne alte frequenze ne alte correnti.
Direi che la scheda va bene.
Concordo che le resitenze R1 a R6 non servono, ma non fanno neanche male.

Quindi quelle propriamente dette di pulldown sono quelle Rxb, che collegano permanentemente a massa il pulsante, giusto?

le R1-6 le ho messe perchè a quanto ho letto, servono ad evitare che il 5V dell'alimentazione finisca con correnti indefinite (quindi quelle erogate dell'alimentazione, magari anche qualche A) direttamente dentro i pin di input, che reggono max 40mA. Metterle servirebbe proprio a limitare la corrente a meno di 40mA.
Quindi sembrerebbero fondamentali per non danneggiare l'arduino... come mai dite che non servono?!? :cry:

daysleeper:
Se gli input sono 5V tolerant le resistenze Rx non sono necessarie, e questo mi è chiaro. Ma se invece non fossero 5V tolerant sarebbero sufficienti?

Se il pin non è 5V tolerant, ovvero lavoro ad esempio con tensioni fino a 3.3V o hai tale alimentazione e allora non ci sono problemi perché al pin arriverà al massimo 3.3V oppure se hai 5V (o più) devi fare un partitore con due resistenze in modo tale da far arrivare al pin una tensione uguale o inferiore al massimo tollerato.

cinquevolt:
Ciao e grazie a tutti per i consigli :slight_smile:
è Fritzing che funziona (AFAIK) così: disegni la pista, gli dici che è GND, e se e quando gli dici di aggiungere il piano massa, la annega dentro. Forse si può farlo lavorare diversamente, ma allora devi indicare manualmente ogni singolo pin che va a gnd, che è molto più noioso che tracciare una pista :slight_smile:
Quindi quelle propriamente dette di pulldown sono quelle Rxb, che collegano permanentemente a massa il pulsante, giusto?

le R1-6 le ho messe perchè a quanto ho letto, servono ad evitare che il 5V dell'alimentazione finisca con correnti indefinite (quindi quelle erogate dell'alimentazione, magari anche qualche A) direttamente dentro i pin di input, che reggono max 40mA. Metterle servirebbe proprio a limitare la corrente a meno di 40mA.
Quindi sembrerebbero fondamentali per non danneggiare l'arduino... come mai dite che non servono?!? :cry:

Ho premesso che non uso fritzing, il motivo? Durante i primi approcci qui ho sempre visto sconsigliarlo a gran voce e propendere anzi per Eagle, più difficile da imparare all'inizio ma moooooooooolto meglio quando poi lo devi usare davvero (tra l'altro è quello usato per fare i PCB di Arduino).
Se su Fritzing devi fare così fai così.... :slight_smile:
Le resistenze, come ha ribatido uwe, se ci sono male non fanno ma in realtà quanto asserito su quel sito collegare un pin digitale impostato come input direttamente con il pulsante non causa nessun problema al pin stesso, non conosco il sito e non ho letto l'articolo ma non parte nel migliore dei modi.
A dire il vero per fare una cosa veramente ben fatta visto che spazio ne hai in abbondanza e fare un bel debounce hardware per ciascun pin, la resistenza già la hai aggiungi il condensatore e sei a posto!

cinquevolt:
le R1-6 le ho messe perchè a quanto ho letto, servono ad evitare che il 5V dell'alimentazione finisca con correnti indefinite (quindi quelle erogate dell'alimentazione, magari anche qualche A) direttamente dentro i pin di input

Fammi una cortesia, prendi il bookmark che hai per quel sito e, perdona l'espressione, "buttalo al cesso" perché scrive cose che NON stanno né in cielo né in terra e dimostra TUTTA la sua completa IGNORANZA in materia !!!

Riporto:

Ma quando premiamo il pulsante cosa succede? In teoria i 5V “raggiungeranno” il nostro ingresso che diventerà un 1, ossia “ingresso attivato – HIGH” ossia esattamente ciò che volevamo fare. Questo è verissimo ma c’è un piccolo particolare che abbiamo trascurato, infatti non abbiamo fatto nulla per limitare la corrente ad un massimo di 40mA, motivo per cui il pin di ingresso potrà andare ad assorbire molta più corrente andando a friggersi in modo definitivo.

:o :o :o

Quest'ignorante NON ha capito che il limite dei max. 40 mA è il limite in OUTPUT, ovvero la massima corrente erogabile dal pin. Un pin in INPUT ha una impedenza elevatissima e, praticamente, l'assorbimento di corrente è del tutto trascurabile. :smiling_imp:

Guglielmo

P.S.: Se proprio uno vuole mettere una resistenza in ingresso lo fa perché, se sta facendo delle prove e magari carica un nuovo programma che usa il pin che prima era stato dichiarato come INPUT, come OUTPUT, può, se non ha preventivamente scollegato il tutto, trovarsi in una situazione di corto ... ma è il caso limite di una persona che sta agendo male, caricando un nuovo programma senza aver tolto i collegamenti provati in un prcedente programma.

E, per chiarire a te, ricorda ...

  1. un pin dichiarato INPUT ha un'impedenza che può, teoricamente, essere considerata infinita e quindi NON assorbe corrente (... ovviamente, in pratica, non è così, ma l'impedenza è talmente elevata e la corrente talmente trascurabile, che puoi immaginare la cosa come detto). Questo è il motivo per cui, un pin in INPUT, non va mai lasciato "disconnesso" dato che, proprio a causa della sua altissima impedenza, capta qualsiasi disturbo e, se lo vai a leggere, oscilla in modo causale tra HIGH e LOW.

  2. un pin dichiarato OUTPUT può fornire al massimo, a Vcc, 40 mA (... ma quello è veramente un limite, nel normale funzionamento occorre stare al 60-70% di detto valore). C'è un'altra limitazione ... la somma delle correnti di tutti i pin (in output) e dell'assorbimento del chip, non deve superare il massimo di 200 mA (... e anche qui massimo va considerato come valore limite, ma nel normale funzionamento occorre stare al 60-70% di detto valore). Cercare di far erogare ai pin correnti oltre detti limiti può danneggiare irrimediabilmente il chip.

Guglielmo

OOOOOk, grazie, cestino subito il bookmark... Dispiace che chi cura siti in materia scriva cose totalmente sbagliate >:(

Allora via le Rx, lascio solo le Rxb di pulldown (oltre a quelle dei led, ovviamente)

Beh, a questo punto avanza parecchio spazio e posso mettere più pulsanti e led... mi servono 12 led e 17-18 pulsanti e pensavo di affiancare più PCB ma a questo punto procedo a rifare tutto da capo... :frowning:

Debonce l'ho predisposto sw... farlo hw mi potente spiegare o indicare qualche link corretto?!? :wink:

Come spesso suggerito qui sul forum se è possibile farlo hardware il debounce è meglio, sgrava il software di controlli che lo rendono innutilmente complicato, ovvio che se non lo si può fare hardware si ricorre al software. Altro modivo di farlo hardware è se il contatto lo si usa come interrupt via software non si può farlo, quindi hardware è meglio :slight_smile:
Ti allego un pdf con tre modi difare il debounce hardware, quello che interessa a te è il terzo (quello più a destra).
Per quanto riguarda lo spazio anche se devi aggiungere resistenze e condensatori hai molto spazio tra un componente e l'altro puoi impachettare tutto avvicinando i componenti senza problemi

debouncing_hw.pdf (22.8 KB)

Dimenticavo quelo proposto è un odo di fare debounce hardware, ci sono anche altri modi che offrono vantaggi e svantaggi, ad esempio esistono appositi integrati che "di lavoro" fanno quello ovviamente bene e meglio magari a scapito di un componente in più (costo e spazio) ma se serve...

fabpolli:
... ad esempio esistono appositi integrati che "di lavoro" fanno quello ovviamente bene e meglio magari a scapito di un componente in più (costo e spazio) ma se serve...

... MAX6817EUT ... fatto apposta per fare il debiuncing HW ... ma veramente dove è indispensabile usarlo visto che ... costa, in quantitativi unitari, poco meno di 5€ :money_mouth_face: :money_mouth_face: :money_mouth_face:

Fino a quando non ci sono seri problemi, la classica rete R/C (magari portando anche a 100 nF il condensatore) va più che bene :wink:

Guglielmo

Grazie dei preziosi consigli... appena ho tempo di rimetterci mano, vedo di integrare il debounce hw e magari di compattare il tutto. se poi riuscissi a mettere tutti e 12 i pulsanti+led sulla stessa scheda, più i 4-5 pulsanti extra, e riciclare un connettore da 40 poli tipo IDE da vecchi hard disk per fare la connessione, verrebbe tutto più pulito...

ma il MAX6817EUT viene 5€ l'uno? carissimo! vedo che c'è anche il MAX6818 a 8 vie, costerà come 5 arduino :smiley:

Ciao
Vorrei aggiungere qualcosa.

  • A proposito dell'antirimbalzo (siamo italiani... :slight_smile: ):
    22nF*22kohm=484us, cioè circa mezzo millisecondo: è un po' poco. Arriverei a 20ms, ad esempio con 220nF e 100kohm o, per mantenere bassa l'impedenza della linea, 1uF (un comunissimo elettrolitico, oppure ceramico o tantalio) e 22kohm.

  • A proposito del pull-down:
    Non è per caso che le resistenze all'interno del microcontrollore sono di pull-up! La chiusura a massa è uno standard per gli apparati, per molteplici ragioni:

  1. La massa è quasi sempre disponibile, mentre per il positivo bisogna portare un filo in più (e anni fa, quando si portavano i comandi paralleli, il cavo poteva anche essere lungo svariate decine o anche centinaia di metri).

  2. Portare il positivo è pericoloso: mentre se un filo qualunque fa cortocircuito con qualunque altro, massa compresa, al massimo si ha una commutazione indesiderata, se il positivo fa cortocircuito a massa (o al metallo di un apparato, che sta a terra) lo fa sull'alimentazione, il che, come minimo, spegne e riaccende l'apparato e già questo può essere un problema, ma l'apparato può anche rimanere spento...

  3. La massa è la stessa anche tra apparati alimentati a tensioni differenti: un consenso dato da un apparato mediante chiusura a massa è sempre a 0V; se, invece, viene dato mediante un +V, tale tensione deve essere uguale a quella dell'altro apparato o, almeno, essere accettata (quindi deve essere abbastanza alta da commutare ma non deve fare danni).

Insomma, anche se devi fare un minimo di sforzo, ti conviene abituarti a usare le chiusure a massa! :slight_smile:

Datman:
Ciao
Vorrei aggiungere qualcosa.

  • A proposito dell'antirimbalzo (siamo italiani... :slight_smile: ):
    22nF*22kohm=484us, cioè circa mezzo millisecondo: è un po' poco. Arriverei a 20ms, ad esempio con 220nF e 100kohm o, per mantenere bassa l'impedenza della linea, 1uF (un comunissimo elettrolitico, oppure ceramico o tantalio) e 22kohm.

  • A proposito del pull-down:
    Non è per caso che le resistenze all'interno del microcontrollore sono di pull-up! La chiusura a massa è uno standard per gli apparati, per molteplici ragioni:

  1. La massa è quasi sempre disponibile, mentre per il positivo bisogna portare un filo in più (e anni fa, quando si portavano i comandi paralleli, il cavo poteva anche essere lungo svariate decine o anche centinaia di metri).

  2. Portare il positivo è pericoloso: mentre se un filo qualunque fa cortocircuito con qualunque altro, massa compresa, al massimo si ha una commutazione indesiderata, se il positivo fa cortocircuito a massa (o al metallo di un apparato, che sta a terra) lo fa sull'alimentazione, il che, come minimo, spegne e riaccende l'apparato e già questo può essere un problema, ma l'apparato può anche rimanere spento...

  3. La massa è la stessa anche tra apparati alimentati a tensioni differenti: un consenso dato da un apparato mediante chiusura a massa è sempre a 0V; se, invece, viene dato mediante un +V, tale tensione deve essere uguale a quella dell'altro apparato o, almeno, essere accettata (quindi deve essere abbastanza alta da commutare ma non deve fare danni).

Insomma, anche se devi fare un minimo di sforzo, ti conviene abituarti a usare le chiusure a massa! :slight_smile:

detto in parole povere il mio PCB è 'na schifezza :cry: :smiley:
Beh, essendo del tutto alle prime armi con l'elettronica mi viene più facile pensare pulsante premuto = 1, pulsante rilasciato = 0, ma capisco la questione della massa... però del resto sul PCB il +5 c'è comunque, visto che ci sono anche dei led, quindi vale al pena "invertire" tutto per usare le masse come comando?

chiaro invece il discorso dei condensatori per l'antirimbalzo (in effetti avevo già scritt... copiato una routine di antirimbalzo sw chiamandola proprio antirimbalzo e traducendo anche le variabili... metto sempre variabili in italiano così non rischio di confonderle con le parole chiave dei linguaggi...:D)... se ho ben capito il senso, fanno da "serbatoio" per compensare le oscillazioni del pulsante... per cui al limite mettendone uno enorme bisognerebbe tenere premuto il pulsante molto a lungo perchè venisse "letto" da arduino, è esatto?

Si puoi vederlo come un serbatoio, finché non è pieno dirotta l'acqua verso di lui, quando è pieno ti fa arrivare l'acqua nel tubo di casa tua. Quando premi il pulsante i vari rimbalzi caricheranno il condensatore (che sul rimbalzo si scarica) quando i rimbalzi cessano il condensatore non ha più modo di scaricarsi e quando avrà accumulato la sua capacità massima allora al pin di Arduino arriverà il livello di tensione corretto (+5 per il pulldown o GND per il pullup).
Sicuramente può essere spiegato meglio e anche tecnicamente meglio da altri frequentatori ma spero di aver reso l'idea

Consiglio visto che sei all'inizio e i componenti che stai usando sono nelle librerie standa (quindi già pronti all'uso) accantona Fritzing e passa a Eagle

fabpolli:
Si puoi vederlo come un serbatoio, finché non è pieno dirotta l'acqua verso di lui, quando è pieno ti fa arrivare l'acqua nel tubo di casa tua. Quando premi il pulsante i vari rimbalzi caricheranno il condensatore (che sul rimbalzo si scarica) quando i rimbalzi cessano il condensatore non ha più modo di scaricarsi e quando avrà accumulato la sua capacità massima allora al pin di Arduino arriverà il livello di tensione corretto (+5 per il pulldown o GND per il pullup).
Sicuramente può essere spiegato meglio e anche tecnicamente meglio da altri frequentatori ma spero di aver reso l'idea

metafora chiarissima, grazie :slight_smile:

fabpolli:
Consiglio visto che sei all'inizio e i componenti che stai usando sono nelle librerie standa (quindi già pronti all'uso) accantona Fritzing e passa a Eagle

hmm capisco, ma in genere preferisco il sw opensource a quello closed, ed in particolare autodesk mi sta un po' lì per le sue oscene politiche e i prezzi astronomici...

cinquevolt:
hmm capisco, ma in genere preferisco il sw opensource a quello closed, ed in particolare autodesk mi sta un po' lì per le sue oscene politiche e i prezzi astronomici...

... passa ad Eagle, dai retta, Fritzing, con tutto il rispetto, è poco più che un "giocattolo" ...

Hai due opzioni per la versione "Free" ...

  1. usare quella che ora è di Autodesk, registrandoti sul loro sito e scaricando quella "Free"

  2. scaricare una delle varie versioni ufficiali 7.7 cadsoft ... leggi QUI

Personalmente sono un utente registrato della versione "Cadsoft 7.7 Ultimate" e NON ho mai voluto dare i soldi ad Autodesk (che ha assorbito Cadsoft) ... la 7.7 va benissimo e ti permete di fare tutto quello che ti serve nei limiti della versione "Free" (... tanto per capirci, considera che Arduino MEGA è disegnato con la versione "Free" :smiley:)

Guglielmo