Offline
God Member
Karma: 6
Posts: 541
|
 |
« on: September 26, 2012, 08:47:47 am » |
visto la mia "mancanza cronica" di pin a disposizione per avere piu "pulsanti da premere" ho provato a risolvere cosi
volevo sapere se vedete qualche "controindicazione"
uso un pin Analogico su cui cortocircuito delle resistenze tutte di valore uguale man mano che viene schiacciato un pulsante A1 rileva un valore predefinito di tensione if (analogRead(A1) > 550 && analogRead(A1) < 600).........
le resistenze da un mega servirebbero per non lasciare A1 libero di fluttuare se le altre resistenze vengono messe vicino alla pulsantiera rimovibile
|
|
|
|
« Last Edit: September 26, 2012, 10:20:57 am by GINGARDU »
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10284
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #2 on: September 26, 2012, 09:05:46 am » |
Concettualmente sembra valido, io diminuirei a 100K le due esterne ed aumenterei a 2,2K quelle interne
|
|
|
|
|
Logged
|
|
|
|
|
0
Online
Tesla Member
Karma: 83
Posts: 8242
:(){:|:&};:
|
 |
« Reply #3 on: September 26, 2012, 11:04:54 am » |
direi che l'unico limite è dato dall aprecisione delle resistenze e dell'ADC.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #4 on: September 26, 2012, 03:30:11 pm » |
perche' scusa? quando verifico con if di sicuro non cerco la lettura esatta ma che sia all'interno di un minimo e massimo con resistenze al 5% ci stai dentro molto bene,
ovviamente ci sono delle cose a cui fare attenzione i pulsanti piu importanti sono quelli che spostano la lettura agli estremi perche è impossibile che A1 ci va da solo (anche per un attimo) da quelle parti per un falso contatto
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
0
Offline
Full Member
Karma: 2
Posts: 226
Arduino rocks
|
 |
« Reply #5 on: September 26, 2012, 03:44:39 pm » |
Praticamente stai utilizzando un convertitore Flash al contrario...allora perchè non utilizzare direttamente un DAC? se trovo qualche esempio o ritrovo le dispense di elettronica II te le mando! Qualcosa tipo questo... http://people.scs.carleton.ca/~barbeau/SDR/BF537/DAC08.pdf
|
|
|
|
« Last Edit: September 26, 2012, 03:53:12 pm by liso »
|
Logged
|
|
|
|
|
0
Online
Tesla Member
Karma: 83
Posts: 8242
:(){:|:&};:
|
 |
« Reply #6 on: September 26, 2012, 05:09:27 pm » |
perche' scusa? quando verifico con if di sicuro non cerco la lettura esatta ma che sia all'interno di un minimo e massimo con resistenze al 5% ci stai dentro molto bene,
ovviamente ci sono delle cose a cui fare attenzione i pulsanti piu importanti sono quelli che spostano la lettura agli estremi perche è impossibile che A1 ci va da solo (anche per un attimo) da quelle parti per un falso contatto
non sto dicendo che non ci stai dentro, ma che il limite dei pulsanti deriva da quei due fattori (se li usi uno alla volta, se no si complica)
|
|
|
|
|
Logged
|
|
|
|
|
BZ (I)
Offline
Brattain Member
Karma: 162
Posts: 15757
+39 349 2158303
|
 |
« Reply #7 on: September 26, 2012, 05:14:12 pm » |
GINGARDU Il Tuo schema consuma sempre corrente visto che hai collegato massa e 5V ai partitori resistivi. Usando una serie di Resistenze e una resistenza Pullup non hai corrente quando non hai schiacciato nessun pulsante. volevo sapere se vedete qualche "controindicazione" L' uso di una lettura analogica e una serie di conftronti se il valore letto é in certi range comporta un ralentamento rispetto una lettura di diversi pin digitali. Personalmente preferirei usare un espander I2C e mettere lí i pulsanti con i loro Pullup/down. Ciao Uwe
|
|
|
|
« Last Edit: September 27, 2012, 01:11:39 am by uwefed »
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10284
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #8 on: September 26, 2012, 05:25:09 pm » |
@ Lesto: tutte queste soluzioni a partitore in genere presuppongono la pressione di un solo pulsante per volta, diversamente bisogna pensare a circuiti a matrice oppure a soluzioni più professionali come quelle suggerite da Uwe.
|
|
|
|
|
Logged
|
|
|
|
|
0
Online
Tesla Member
Karma: 83
Posts: 8242
:(){:|:&};:
|
 |
« Reply #9 on: September 26, 2012, 06:40:10 pm » |
però matematicamente prevendo i paralleli che si vengono a formare e scegliendo le R di consegunza si potrebbe fare. molto complesso però, forse usando numeri primi di resistenze...
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #10 on: September 27, 2012, 12:58:37 am » |
GINGARDU volevo sapere se vedete qualche "controindicazione" L' uso di una lettura analogica e una serie di conftronti se il valore leto é in certi range comporta un ralentamento rispetto una lettura di diversi pin digitali. Personalmente preferirei usare un espander I2C e mettere lí i pulsanti con i loro Pullup/down. Ciao Uwe hai hai  forse devo rivedere il mio modo di "progettare" sono gia a 24k di memoria occupata e un pin (4) solo come un gambo di sedano libero mi sa che e meglio che rifaccio tutto da capo
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #11 on: September 27, 2012, 01:07:01 am » |
però matematicamente prevendo i paralleli che si vengono a formare e scegliendo le R di consegunza si potrebbe fare. molto complesso però, forse usando numeri primi di resistenze...
ma il valore letto non lo devi per forza calcolare prima, basta mettere residtenze piu o meno uguali, quelle che si hanno poi di fa la lettura su A1 dei vari pulsantie si calcola bene per stare ben lontano dalla soglia di commutazione tra una lettura e l'altra, se un pulsante premuto da 120 di lettura faccio if (analogRead(A1) > 100&& analogRead(A1) < 140)......... ovviamente se i pulsanti aumentano in maniera enorme es 2-300 qualche problemino verra fuori se non usi resistenze 1% ma questa e un'altra storia
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
0
Online
Tesla Member
Karma: 83
Posts: 8242
:(){:|:&};:
|
 |
« Reply #12 on: September 27, 2012, 03:14:02 am » |
bhe i valori li devi precalcolare un minimo, altrimenti non sai il rage ADC a quale pulsante corrisponde (salvo fare prove direttamente) Comunque mi riferivo al fatto di premenre più di un pulsante contemporaneamente, in tal caso bisogna studiare un attimo il modello matematico
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Online
Brattain Member
Karma: 219
Posts: 16517
Don't know what I do
|
 |
« Reply #13 on: September 27, 2012, 03:31:35 am » |
Si potrebbe pensare ad una serie di resistenze calcolate sulla potenza del 2 per riprodurre la numerazione binaria. Si ha ad esempio 1-2-4-8 Per fare 3 si somma l'1 ed il 2. Basta quindi trovare 2 resistenze che compiano lo stesso scopo e con 4 valori si possono gestire fino a 16 pulsanti (2^4=16). Esempio: 68 120 220 470 560
Se leggo 0 nessun pulsante. Se leggo x (68) 1° pulsante Se leggo y (120) 2° pulsante Se leggo z (68+120=188) 3° pulsante ecc...
I valori poi si trovano in modo da non creare coppie con letture molto vicine.
|
|
|
|
|
Logged
|
|
|
|
|
0
Online
Tesla Member
Karma: 83
Posts: 8242
:(){:|:&};:
|
 |
« Reply #14 on: September 27, 2012, 03:47:49 am » |
così puoi gestire 2 pulsanti conteporaneamente, non di più. in oltre il parallelo si fa con le moltiplicazioni, non solo con le addizioni. Quindi mi sa che bisogna andare di numeri primi, e che non esiste un modo "veloce" per passare da analogico a pulsanti se non col brute force.
|
|
|
|
|
Logged
|
|
|
|
|
|