Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #15 on: August 20, 2011, 05:01:35 am » |
@menniti perchè sprecare tutti quei pin per la matrice quando potresti controllare 5 0 6 tasti con un pin analogico? basta fare una scala di resistenze (più precise sono e meglio è ) e di pulsanti e leggere da analog read . tipo così: 
|
|
|
|
|
Logged
|
|
|
|
|
Monselice PD Italy
Offline
Faraday Member
Karma: 15
Posts: 4920
фон Крыса
|
 |
« Reply #16 on: August 20, 2011, 05:04:33 am » |
La mia idea era proprio quella di ricostruire un LCD seriale visto quel che costano.... ma in effetti... con 16-17 euro ne hai uno finito 
|
|
|
|
|
Logged
|
Se corri veloce come un fulmine, ti schianterai come un tuono.
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #17 on: August 20, 2011, 05:18:04 am » |
gli lcd seriali sono un pò più incasinati da gestire perchè sullo stesso canale trasmetti sia il testo da mostrare, sia i comandi per il display, però sono comodissimi da usare perchè in pratica è semplice convertire l'output del serial monitor in output per l'lcd e poi si usano 2 pin che altrimenti non verrebbero usati, liberandone altri.
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10287
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #18 on: August 20, 2011, 05:21:36 am » |
@ Leo: infatti studierò a partire dal tuo firmware  @menniti perchè sprecare tutti quei pin per la matrice quando potresti controllare 5 0 6 tasti con un pin analogico? basta fare una scala di resistenze (più precise sono e meglio è ) e di pulsanti e leggere da analog read . tipo così:  Questa è un'idea molto interessante, potrei poi arrivare ad usare un micro più piccolo visto che risparmio 7 pin. La tolleranza delle resistenze comunque mi obbligherebbe ad accettare un range di valori per ogni tasto, quindi inutile prevedere roba a 0,5-1-2%. Stavo anche pensando al fatto che in realtà NON ho un "invio", ma potrei "leggere" il 3° tasto della sequenza impostandolo p.es. su 0, cioè premo FF0 o 0F0 o 000 per impostare i due valori iniziali ed "accettarli" con lo 0 finale @ ratto: se non avessi la necessità di interagire lo prenderei fatto, nel mio caso lo "costruisco" perché mi serve leggere la tastiera. Ho trovato su Internet " MCP23017-E/SP I/O expander i2c 16 bit", a che cosa dovrebbe servire? se non sbaglio sul canale I2C le varie periferiche si collegano in parallelo
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #19 on: August 20, 2011, 05:27:16 am » |
@menniti se lo fai con pochi tasti (fino a 5) puoi usare anche le resistenze comuni e non quelle di precisione, i range sono abbastanza ampii e riconoscibili e potresti sfruttare addirittura la pressione di 2 tasti contemporanei. c'è anche una libreria per gestirli: http://www.arduino.cc/playground/Code/AnalogButtons
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16524
Don't know what I do
|
 |
« Reply #20 on: August 20, 2011, 05:34:45 am » |
Se leggi 2 caratteri alla volta in teoria il 3° carattere non ti serve neanche. Potresti dare per scontato che l'utente abbia inserito correttamente. Oppure fare un check prima di uscire dalla maschera per verificare che sia tutto a posto chiedendo 0/1 all'utente per annula/conferma. Io scorro invece con un tasto e l'altro lo uso per la conferma, scorrendo sui valori da impostare automaticamente (che poi uso questo sistema solo per la data/ora, poi interpreto i 2 pulsanti sempre come OK/ANNULLA o SI/NO).
Cmq il protocollo è l'ultimo dei problemi. La rete di resistenze è invece una soluzione intelligente che è molto usata. A me non era venuta a mente, anche se lo shield LCD che comprai tempo fa con un micro-joystick usava proprio questa soluzione per leggere 5 valori (le 4 direzioni + la pressione dell'astina) con un solo pin, attaccato ad un interrupt e memorizzando le letture in un buffer.
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10287
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #21 on: August 20, 2011, 05:45:25 am » |
@menniti se lo fai con pochi tasti (fino a 5) puoi usare anche le resistenze comuni e non quelle di precisione, i range sono abbastanza ampii e riconoscibili e potresti sfruttare addirittura la pressione di 2 tasti contemporanei. c'è anche una libreria per gestirli: http://www.arduino.cc/playground/Code/AnalogButtonsBeh, i tasti sono 16 e non si scappa, ma la matrice della tastiera è di 8 punti, quindi combacia proprio con l'immagine che hai postato, o meglio, quelli sono 7, devo aggiungere un range; distanziando abbastanza i valori delle R non penso ci siano particolari problemi. Sul PG mi pare che spieghi (  ) che bisogna mettere una R da 100K verso massa, ma comunque sia sempre un banale partitore è,. @ Leo: hai perfettamente ragione, non prevedo un "backspace" per cui se sbaglio, sbaglio e basta, ripeto la procedura, quindi posso effettivamente interpretare il secondo valore come valore+INVIO; poi se funziona tutto posso sempre pensare al terzo tasto per il backspace o per l'INVIO.
|
|
|
|
|
Logged
|
|
|
|
|
|
|
Marche
Offline
Edison Member
Karma: 25
Posts: 2063
|
 |
« Reply #23 on: August 20, 2011, 06:22:32 am » |
Anche lo shift register CD4021 può essere una soluzione, si comanda con 3 pin e legge otto ingressi http://www.arduino.cc/en/Tutorial/ShiftIn
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10287
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #24 on: August 20, 2011, 06:57:52 am » |
in pratica questo farebbe le veci del tiny84 di Leo? Sì, tutte soluzioni valide, ma io non devo risparmiare pin, almeno in questa fase, devo far dialogare due 328 tramite tx/rx, Leo lo ha fatto con I2C, lui dice che è facile trasformare il suo firmware per il funzionamento seriale, ma se avessi qualche link con un esempio specifico....proverò.
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #25 on: August 21, 2011, 01:43:17 am » |
il 23017 un portexpander i2c, non è intelligete come il tiny, ma ti permetterebbe di avere tutti i pin che servon o per l'lcd e 4 io da usare a piacimento (tasti?) e di dialogare con arduino con 2 fili.
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10287
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #26 on: August 21, 2011, 02:59:22 pm » |
il 23017 un portexpander i2c, non è intelligete come il tiny, ma ti permetterebbe di avere tutti i pin che servon o per l'lcd e 4 io da usare a piacimento (tasti?) e di dialogare con arduino con 2 fili.
Cioè potrei pilotare l'LCD direttamente con lo sketch di Arduino usando questo PE come interfaccia I2C<->LCD? Risolverei il pilotaggio dell'LCD senza diover programmare un secondo chip? In ogni caso ho bisogno di 8 pin per gestire la tastiera e qui non posso usare il trucchetto dell'in analogico.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16524
Don't know what I do
|
 |
« Reply #27 on: August 21, 2011, 03:27:41 pm » |
Allora fai una bella cosa: usa un 328 intero per gestire l'LCD e la tastierina, tot. 15 pin quindi i 14 digitali + 1 analogico. E poi comunichi con l'altro 328 usando l'I2C.
Così separi l'I/O dalla CPU.
|
|
|
|
|
Logged
|
|
|
|
|
Lamezia Terme
Offline
Shannon Member
Karma: 386
Posts: 10287
Le domande di chi vuol imparare rappresentano la sua sete di sapere
|
 |
« Reply #28 on: August 21, 2011, 03:39:42 pm » |
Allora fai una bella cosa: usa un 328 intero per gestire l'LCD e la tastierina, tot. 15 pin quindi i 14 digitali + 1 analogico. E poi comunichi con l'altro 328 usando l'I2C.
Così separi l'I/O dalla CPU.
Aaaaaaaah! <<andò vai? - a vedé quo vadis - e che vor dì - ando vai? - me stai a pija per culo?, t'oo chiesto prima io  (TriRussa)» La soluzione che mi stai suggerendo (328+display+tastieraHex) è quella che ho scelto ma: il 328 "originale" dispone (e non posso fare diversamente  ) solo dei pin tx/rx, nel senso che sono usati pure, ma mi lasciano la possibilità di dialogare col serial monitor e quindi anche con un eventuale altro 328. Quindi l'unica speranza che ho è quella di poter far parlare tra loro due micro incrociando tx-rx e rx-tx; i pin I2C sono superimpegnati, se li tocco va tutto a putt e mi incriminano per favoreggiamento della prostituzione 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16524
Don't know what I do
|
 |
« Reply #29 on: August 21, 2011, 03:53:09 pm » |
Ah, già. Sì. Ma il discorso non cambia, che sia I2C o seriale, sempre 2 linee usi. Relativamente all'adattamento del mio codice, invece di TinyWireS.begin metterai Serial.begin, per TinyWireS.available metterai Serial.available... e risolvi velocemente.
|
|
|
|
|
Logged
|
|
|
|
|
|