Più di un pulsante nello stesso pin


12

Sto realizzando un progetto e sto usando Arduino come prototipo, devo usare 10 pulsanti (insieme a più cose) e non ho abbastanza pin.

Una soluzione che mi viene in mente è quella di utilizzare i pin analogici e utilizzarli per due pulsanti, qualcosa del genere:

schematico

simula questo circuito - Schema creato usando CircuitLab

In questo modo posso leggere il pin A0 e sapere quale di essi viene spinto osservando se la tensione è 5 V o metà di quello.

E 'questa una buona idea? I diversi pulsanti non devono MAI essere premuti contemporaneamente, il che è l'unico problema a cui riesco a pensare.

Ci sono modi migliori?


Quanti pin stai cercando di usare?
W5VO,

@ W5VO Avrei bisogno di 22, con 10 pulsanti, la scheda ha solo 18 ... quindi due pulsanti per ogni pin analogico Ho solo bisogno di 5 pin analogici e la scheda ha 6.
MyUserIsQuesto

1
Proprio FYI, molte case automobilistiche usano lo stesso approccio per i comandi montati sul volante per il sistema audio. Hanno (dare o prendere) 8 pulsanti, ognuno con il proprio resistore. Ciò consente loro di far passare un singolo filo (o una coppia di fili per garantire un ritorno pulito) dalla ruota alla testa audio. È un approccio perfettamente valido.
DoxyLover,

Credo che tu possa effettivamente usare tre pin per immettere teoricamente un numero infinito di switch usando alcuni registri shift. È anche possibile utilizzare 8 pin per immettere 256 switch utilizzando i multiplexer.
Alvin Wong,

Risposte:


22

Perché sprecare più pin analogici per due switch ciascuno, quando è possibile eseguire un numero qualsiasi di pulsanti su un singolo pin analogico?

Due modi per farlo. Uno è in serie, l'altro è parallelo.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

Ecco come sono alcuni controlli audio sul volante dell'auto. E come funzionano alcuni dei più vecchi controller in linea per iPod.

A seconda dei resistori che usi, se hai bisogno di più pulsanti premuti contemporaneamente e di quanto sia sensibile il tuo analogico, potresti avere tutti e 10 i pulsanti su un singolo pin.


Grazie, ci ho pensato anche io, ma ho anche pensato che forse le letture della tensione non erano esattamente come le ho bisogno per poter fare affidamento su questo metodo. Proverò anche questo e vedrò come funziona.
MyUserIsQuesto

Dato che i fondamenti delle mie analisi di rete di resistori non sono abbastanza solidi, ho provato ad usare CircuitLab per simulare il circuito in serie ed elaborare una tabella di verità per la misura della tensione sul pin di ingresso analogico. Ho scoperto che, le combinazioni B2 + B3 risultano in 2.499 V e le combinazioni B1 + B4 risultano in 2.498 V. Con cifre così vicine, penso che il tipico ADC a 10 bit non sarà in grado di differenziare correttamente le combinazioni multi-input. Che ne dici ? Certo, una chiave alla volta, avrebbe funzionato perfettamente - senza dubbio. Nota B1 = Pulsante 1.
Icarus74,

In realtà, B2 + B4 fornisce 1.666 V, mentre B2 + B3 + B4 fornisce anche 1.666 V! La soluzione potrebbe utilizzare diversi valori di resistori per R1, R2, R3, R4 e non mantenere tutti di 1K. Cosa dire ?
icarus74,

7
Una scala 2R / R trasformava i pulsanti in D / A e ogni combinazione di pulsanti avrebbe un valore unico. Mi fiderei che funzioni con i pulsanti N-3, dove N è la risoluzione ADC
Scott Seidman,

1
@ icarus74 sì, usando valori diversi invece di tutti 1k, si otterrebbero combinazioni uniche. Prova 1k, 2k, 4k, 8k, 16k, ecc. (O 1k, 4k, 16k, ecc., Per una gamma più ampia)
Passerby

10

Funzionerebbe, ma un modo migliore è con una matrice . Questo è lo stesso concetto dei LED multiplexing con una matrice, ma con interruttori.

inserisci qui la descrizione dell'immagine

Questa è una matrice 2x2. Una matrice utile è più grande, perché a queste dimensioni, non stai salvando alcun pin sul collegamento degli switch singolarmente.

Con una matrice 3x3 puoi ottenere 9 switch. Hai bisogno di 10, quindi puoi aggiungere un'altra riga o un'altra colonna e supportare 12 switch, oppure semplicemente posizionare il 10 ° switch sul proprio pin.

Il vantaggio qui è che puoi usare l'IO digitale, che è più economico e di solito più abbondante dell'IO analogico. Un registro a scorrimento è un modo economico per aggiungere più IO digitale, se si esaurisce.

Se si desidera un numero ancora inferiore di pin, è possibile, per aumentare la complessità, utilizzare il charlieplexing . Dovrai aggiungere diodi oltre ai tuoi interruttori e questi diodi probabilmente costano quanto un registro a scorrimento. Tuttavia, se il costo non è la tua preoccupazione principale, potrebbe avere qualche vantaggio. Con questo metodo, puoi leggere tutti i tuoi switch (fino a 12, in realtà) con quattro pin.


Solo una domanda. Perché è meglio se avrò bisogno di più pin? In questo modo avrò bisogno di 6 pin per la matrice 9x9 più un altro pin per il decimo, mentre in quello che ho realizzato avrei bisogno solo di 5 pin.
MyUserIsQuesto

@MyUserIsQuesto si adatta meglio quando aumenta il numero totale di switch. ex una matrice 5x5 consente di collegare 25 switch a 10 pin. Come commento più generale, fare le cose in modo convenzionale rende entrambi più facili da capire per quello che hai fatto; e per riconoscere ciò che fanno i circuiti di altre persone (perché ti sei allenato all'implementazione standard).
Dan è Fiddling by Firelight il

@MyUserIsThis vedere le modifiche. Anche Passerby ha una buona risposta.
Phil Frost,

2

L'ingresso analogico è un approccio valido, dovresti essere in grado di avere diversi pulsanti su di esso. Vorrei anche suggerire di utilizzare un chip IO Expander come MCP23017 . Ha 16 pin che possono essere input e output ed è controllato con I2C usando due pin. Adafruit ha una libreria Arduino per questo.


2

Sì, sembra una buona idea, ma comunque proporrò un'alternativa che mi è appena venuta in mente.

Se hai accesso alle porte logiche puoi mappare molti npulsanti ai ceil(log2(n + 1))pin attraverso la logica booleana. Ad esempio, se hai 4 pulsanti, ma solo 2 pin puoi creare una configurazione come questa:

Buttons | Pins
----    | --
0123    | 01
----    | --
0001    | 00
0010    | 01
0100    | 10
1000    | 11

Cioè, button0premuto dovrebbe avere pin0e pin1basso; button1, pin0basso e pin1alto; button2, pin0alto e pin1basso; e button3, pin0e in pin1alto.

Da ciò derivano le seguenti espressioni booleane

pin0 = button2 OR button3
pin1 = button1 OR button3

Una mappatura di 4 pulsanti a 2 pin potrebbe quindi essere realizzata con solo 2 porte OR. Avresti bisogno di un pin aggiuntivo e della logica aggiuntiva, tuttavia, per indicare se un pulsante viene premuto.

Naturalmente, ci saranno ancora problemi se si premono più pulsanti contemporaneamente.

Inoltre, se continuerai con l'approccio della resistenza, considera l'utilizzo di valori maggiori sui resistori diversi da 100 ohm da 5 V attraverso resistori nell'ordine di 100s di ohm produrrebbe una corrente dell'ordine di 10 s di mA che è gentile di inutilmente alto. Immagino che valori più ragionevoli sarebbero 10k Ohm o 47k Ohm.


Grazie per il tuo approccio. Ho anche pensato a qualcosa del genere, ma non ho porte logiche e ho tonnellate di resistori. E sì, di solito uso resistori da 10k per questo, 100 ohm era solo il valore predefinito dell'editor di circuiti. Grazie ancora per il tuo aiuto.
MyUserIsQuesto

Penso che userò finalmente l'approccio della resistenza, poiché non dovrò comprare porte logiche, inoltre il tuo approccio logico mi fa risparmiare solo 1 pin e non ne ho bisogno. Avrò questo in mente per progetti più grandi. Grazie mille.
MyUserIsQuesto

Va bene! Buona fortuna con il vostro progetto!
nijoakim,

0

La seguente pagina può essere utile:

http://txapuzas.blogspot.co.uk/2010/07/papertecladoanalogico-varios-pulsadores.html

È scritto in spagnolo, ma gli elementi essenziali sono tracciati, penso che sia un'ottima idea per te.

In questo video puoi vedere il risultato finale, lo schizzo è anche sulla pagina, funzione incapsulata per facilitare l'implementazione sui tuoi progetti

Video di Youtube: tastiera a 10 tasti su un singolo pin

Ecco uno schema dal sito sopra:

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


2
Aggiungi un riepilogo di ciò che contiene il link nel caso in cui dovesse scomparire, specialmente quando è in spagnolo e questo è un sito in lingua inglese.
PeterJ,

Siamo spiacenti, potrebbe essere la situazione normale che in Spagna sia normale fare riferimento a una pubblicazione inglese ... Ma il link è molto interessante, dice come costruire una tastiera a 10 tasti usando solo un pin con la descrizione della foto passo-passo, i diagrammi per creare una lavagna e un'immagine per creare la copertina dei pulsanti. Anche il codice per gestire la tastiera, facilmente comprensibile. Bello sviluppato, penso.
JohnnyDeauville,

Non è solo il lato spagnolo delle cose, sono d'accordo che il diagramma è chiaro, sembra buono e posso capire di cosa si tratta solo basato su quello. Ma Stack Exchange scoraggia il collegamento solo le risposte perché non sono utili se il collegamento si interrompe, immagina se quel blog verrà chiuso / eliminato domani quanto utile sarebbe la risposta. Forse potresti includere lo schema e una o due frasi al riguardo e lasciare il link come riferimento per ulteriori informazioni.
PeterJ

Sono un novellino in questo forum, come posso fare per dirmelo? Qualche sezione in speciale ...? Grazie per il tuo tempo
JohnnyDeauville,

Ho appena incluso lo schema e il riferimento da cui proviene, ma potrebbe anche valere la pena tradurre un po 'di più della pagina per dare un po' di contesto su come funziona e quali saranno le letture ADC.
PeterJ
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.