Ciao a tutti,
mio suocero mi ha portato una basetta con un display LCD 16x2 e 4 pulsanti recuperata da qualche parte di machinario di cui non si sa cos'era.
Ho disegnato lo schema (che allego) per capire come utilizzarlo.
Usa uno shift register per LCD , il 74HC4094, non ho ancora provato a collegarlo ma ho visto una spiegazione sul playground.
La cosa che non capisco è il collegamento dei 4 pulsanti: ovvero, ogni pulsante è collegato ad un pin DATA del display DB7,DB6,DB5,DB4 da un lato, il contatto di ogni singolo pulsante va sull'anodo di un diodo, i diodi sono tutti e quattro collegati con il catodo. C'è poi una resistenza di pull-down con un condnsatore in parallelo.
Il segnale dai pulsanti viene preso subito prima della resistenza.
La domanda è: come faccio a riconoscere quale pulsante viene premuto?
Forse dico una fesseria, ma ogni volta che premo un pulsante faccio passare i bit di quel pin (ad esempio DB7) che sono parte della comunicazione del carattere da stampare a display, ma naturalmente piu lo tengo premuto piu bit passano, quindi come posso riconoscerlo?
Pensavo potesse essere delle porte logiche a diodi, ma il segnale in ingresso non è solo 0 o solo 1, ma un treno di impulsi lungo quanto la pressione del tasto, e qui mi sono fermato.
Qualcuno riesce a chiarirmi le idee?
Grazie
Aggiungo che i diodi sono in realtà racchiusi in un SOT23 marchiato JA e sembra corrispondere a BAV70 Fast Switching Diodes
La fase lettura pulsanti è separata da quella di comando display.
Quando leggi i pulsanti porti a uno un bit alla volta sull'uscita del 4094.
Claudio_FF:
La fase lettura pulsanti è separata da quella di comando display.
Quando leggi i pulsanti porti a uno un bit alla volta sull'uscita del 4094.
ciao,
e quindi come posso leggerlo? ovvero cosa dovrei vedere?
Se il display continua ad avere dei caratteri, continua ad avere una sequenza di 0-1 sui vari DB7-6-5-4, quindi come puo essere separata?
e soprattutto, come li riconosco?
grazie
Se sei tu a comandare il 4094 inviandogli dei byte, sei sempre tu a stabilire quali bit mettere a uno e quali a zero di questi byte.
Se metti a uno solo il bit che esce su OP0, allora puoi leggere la linea del pulsante e se la trovi a uno sai che S4 è premuto.
Per sapere se è premuto S3 bisogna mettere a uno solo l'uscita OP1 e così via.
Quando invece si comanda il display non si leggono i pulsanti.
In entrambi i casi il lavoro si fa sempre modificando i bit di un byte in memoria, e trasmettendo quel byte allo shift register.
Scusa ma non capisco: quando userò il display e darò il comando lcd.print sarà la libreria a gestire lo shift register, quindi supponiamo di creare una fase di attesa scelta tramite pulsante. Sul display c'è scritto 'scegli', quindi fintanto che io no premo un pulsante lo sketch continua a stampare 'scegli', quindi su ogni pin dello shift reg collegato ai pin data del display continuerò ad avere gli 0 e 1 che compongono i caratteri della parola. A questo punto come faccio ad impostare ad 1 il pin dello shift senza compromettere la stampa? e allo stesso modo, io devo prima premere il tasto che mi permette di fare una scelta, quindi non posso mettere a 1 il pin dello shift prima di premere il tasto, e non posso averli tutti ad 1 altrimenti non li riconosco. Dove sbaglio nella tua logica ?
grazie per la comprensione ![]()
L' LCD non va scritto continuamente, ma solo quando si vuole cambiare quello che c'è scritto. Nel resto del tempo basta non agire sui suoi terminali di abilitazione e scrittura ed è come fosse scollegato, tutti gli altri bit possono cambiare come ti pare.
L' LCD non va scritto continuamente
ok,
quindi a questo punto devo impostare lo shift register per uscire con una serie di bit nota in modo da identificare il tasto?
Esatto, ma senza andare ad abilitare l'LCD, pin E ed RS. Ora non ricordo proprio se devono stare a uno o zero, ipotizzo che a riposo siano a zero perché non vedo negazioni nel disegno. Bisognerebbe consultare il datasheet del controller.
Ottimo.
Mi studio un po’ lo shift register perché non li ho mai usati.
Essendo E e RS collegati direttamente allo shift , non dovrei avere problemi a controllarli.
Grazie
Grande!
