Sommario:

Come leggere molti switch con un pin MCU: 4 passaggi
Come leggere molti switch con un pin MCU: 4 passaggi

Video: Come leggere molti switch con un pin MCU: 4 passaggi

Video: Come leggere molti switch con un pin MCU: 4 passaggi
Video: 4 SITI PAZZESCHI CHE NON DOVRESTI MAI VISITARE 2024, Giugno
Anonim
Come leggere molti switch con un pin MCU
Come leggere molti switch con un pin MCU

Ti è mai capitato di buttarti a capofitto in un progetto/i e il progetto continua a crescere e crescere, mentre aggiungi più cose ad esso (lo chiamiamo Creaturismo Feaping)? In un recente progetto, stavo costruendo un frequenzimetro e ho aggiunto un generatore di segnale/sintetizzatore di frequenza a cinque funzioni. Presto mi sono ritrovato con più interruttori di quanti mi fossero rimasti disponibili, quindi cosa deve fare un ragazzo?

Tuttavia, presto ho avuto altri sette interruttori sul mio Funbox (sì, è quello che ho chiamato il mio generatore di funzioni … lo so, non ho creatività) ed ecco un breve tutorial che ti mostra come puoi fare lo stesso. Non richiede registri a scorrimento o circuiti integrati specifici. In effetti, non richiede nemmeno un microcontrollore, se i semiconduttori discreti sono il modo in cui rotoli. Ecco un modo in cui puoi leggere/gestire più interruttori usando un singolo pin sul tuo AVR (o altro microcontrollore… ho sentito che ci sono altri microcontrollori oltre all'AVR, ma non riesco a immaginare…).:)

Passaggio 1: gli elementi essenziali (non proprio)

Per fare ciò, avrai bisogno di alcuni componenti. Aiuta ad avere una moltitudine di interruttori che devi gestire. Avrai anche bisogno di alcuni resistori e di un microcontrollore con ADC (conversione da analogico a digitale) o in qualche altro modo in cui vorresti indicare che c'era un interruttore attivato e quale interruttore era.

Se volessi potresti usare un oscillatore controllato in tensione per indicarlo, magari con delle luci intermittenti, o in alternativa, con il suono. In questo 'ble, fingerò di usare un AVR, ma nel tuo mondo puoi fingere qualunque cosa ti renda felice. Mi manca Bob Ross.

Passaggio 2: il divisore di tensione

Il divisore di tensione
Il divisore di tensione
Il divisore di tensione
Il divisore di tensione

In sostanza, il modo in cui lo faremo è usare una tecnica e un circuito chiamato divisore di tensione. I divisori di tensione, come avrai intuito, dividono la tensione V,, in,, per un valore determinato da te. Puoi dividere la tensione con diversi componenti, inclusi condensatori e induttori, ma qui lo farò con il buon vecchio resistore. L'idea Quello che stiamo facendo è mettere due componenti in serie che causeranno, ciascuno individualmente, una caduta di tensione ai capi del componente. Guarda la prima foto se non ho senso. C'è una differenza potenziale di 9V da un binario all'altro. Tra 9V e 0V ci sono due resistori in serie. Ognuno di questi sperimenterà una caduta di tensione su se stesso, a seconda della resistenza, come probabilmente ricorderai da V = IR. Se prendi una misura di tensione tra i due resistori, otterrai un valore compreso tra 9V e 0V, a seconda di quanta tensione è scesa sul primo resistore e di quanta ne rimane sul secondo resistore, prima di 0V. C'è una formula semplice per calcolare la caduta di tensione attraverso un resistore in questa situazione e sembra così. Lascia che la tensione sulla resistenza 1 (R1) sia V1 e la tensione sulla resistenza due (R2) sia V2. Dal momento che non posso più usare la formattazione, guarda l'immagine 2 sotto per la formula … Quindi, nel nostro divisore resistivo, la tensione Vout può essere determinata dalla nostra formula per V2 (poiché faremo riferimento a GND a 0V). Cosa ha a che fare questo con il rilevamento di un gruppo di interruttori da un pin? Bene, volta pagina e te lo mostro!

Passaggio 3: scala del divisore di tensione

Scala del divisore di tensione
Scala del divisore di tensione

Ora supponiamo di avere tutti i nostri interruttori, forse sei o otto o sedici, tutti collegati tramite resistori che agiscono ciascuno come un partitore di tensione in modo tale che quando lo stato del pin dell'interruttore cambia, la tensione viene letta e in base al livello di tensione, può sapere quale interruttore è stato appena attivato. Guarda sotto. Nell'immagine qui sotto, ho collegato due blocchi di interruttori. Il blocco più in alto ha due interruttori e il blocco più in basso ha cinque interruttori. Puoi collegare i tuoi interruttori a levetta separati, momentanei, tattili, ecc. allo stesso modo. La cosa importante da notare è la resistenza a cui è collegato il tuo interruttore. Nel mio esempio, ho quasi raddoppiato la resistenza del resistore successivo per creare un gap di tensione facile da misurare e da non confondere con l'interruttore prima o dopo. Se non l'hai notato prima, guarda di nuovo e renditi conto che siamo tornati al nostro vecchio amico, il partitore di tensione resistivo. Il primo resistore, il 10k ohm, è collegato a 5V e il secondo resistore - il resistore che determinerà Vfuori per il pin SWITCH_ADC, è connesso a ciascun interruttore e quindi ad ogni interruttore è associata una particolare tensione Vout che può essere letta dal pin ADC connesso a SWITCH_ADC. Quindi, determina il Vout previsto da ciascun interruttore in questo modo

Vout = Vin * (R2 / (R1 + R2))

per l'interruttore uno:

Vout = 5V * (500 / (10000 + 500)) = 5*0.048 = 0,24V o 240 mV

per l'interruttore due:

Vout = 5 V * (2200 / (10000 + 2200)) = 5 * 0,18 = 0,9 V o ~900 mV

e così via. Sentiti libero di sostituire R2 con i tuoi valori se hai solo determinati resistori a portata di mano… La cosa fondamentale qui è mantenere un intervallo di tensione sufficientemente ampio tra gli interruttori in modo che qualsiasi margine di errore sull'ADC vinca' t metterti nella tensione attesa da un interruttore vicino. Ho scoperto che la cosa più semplice da fare è costruire la scala del divisore e mettere un multimetro/voltmetro sul pin ADC e premere ciascun pin e vedere quali valori ottieni. Dovrebbero essere abbastanza precisi su ciò che calcoli. Una volta ottenuti tutti i valori di tensione previsti da ciascun interruttore utilizzando un particolare resistore, è possibile far leggere all'MCU il pin ADC e confrontarlo con i valori noti per determinare quale interruttore è stato premuto. Ad esempio, supponiamo che tu abbia registrato una routine di servizio di interruzione che verrà chiamata ogni volta che viene rilevata una modifica sul pin ADC. All'interno di quell'ISR, puoi leggere l'ADC e confrontare quel valore con la tua tabella di commutazione. Se stai usando un valore ADC a 8 bit, la tua tensione verrà convertita in un numero compreso tra 0 e 255 che corrisponde a una tensione tra 0V e 5V. Ciò presuppone che l'ADC sia configurato in questo modo.

Passaggio 4: riepilogo

Quindi, ora dovresti sapere come essere parsimonioso nell'usare i pin GPIO per gli interruttori. Ogni volta che stai esaurendo i pin GPIO, o non ne hai quasi nessuno con cui iniziare, o se ti rendi conto che utilizzerai un banco di interruttori, il divisore resistivo è la strada da percorrere per salvare i tuoi pin GPIO pur fornendo un meccanismo robusto per rilevare l'accesso allo switch.

Consigliato: