Pin mapping per un pulsante

Salve,

ho un dispositivo che ha un pulsante fisico (classico pushbutton), collegato ad una MCU che non controllo. Vorrei poter comandare questo pulsante (evitando relè) con Arduino, senza inibire la possibilità di premere manualmente il pulsante. L’idea è di porsi in parallelo al pulsante collegando i pin a due GPIO. La corrente che passa, quando il pulsante è premuto è minimale (<1mA).

Vorrei capire come mappare i GPIO (e.g. Digital 8 e Digital 9) in modo che possano avere i due seguenti stati:

  • Entrambi Float/Alta impedenza
  • Digital 8 connesso internamente con Digital 9

Grazie

Mirko

Se è un pulsante che chiude verso GND, basta un transistor NPN BC337 con emettitore verso GND, collettore sull'altro estremo del pulsante, base collegata ad una uscita digitale di Arduino tramite resistore da 1k e GND delle due CPU in comune.

Se, invece, il pulsante chiude verso Vcc della MCU, si usa un transistor PNP.

cyberhs: Se è un pulsante che chiude verso GND, basta un transistor NPN BC337 con emettitore verso GND, collettore sull'altro estremo del pulsante, base collegata ad una uscita digitale di Arduino tramite resistore da 1k e GND delle due CPU in comune.

Se, invece, il pulsante chiude verso Vcc della MCU, si usa un transistor PNP.

Purtroppo non chiude nè su GND, nè su VCC. Fa parte di una pulsantiera a matrice. Ho proprio bisogno che i contatti rimangano ad alta impedenza o che vengono chiusi tra i due pin, a seconda dei due stati.

Non hai uno schema degli ingressi della MCU collegata alla keypad?

Mirko1976: Salve,

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni e a leggere il regolamento se non lo hai già fatto: Regolamento Qui una serie di link utili, non inerenti al tuo problema: - qui una serie di schede by xxxPighi per i collegamenti elettronici vari: ABC - Arduino Basic Connections - qui le pinout delle varie schede by xxxPighi: Pinout - qui una serie di link [u]generali[/u] utili: Link Utili

Dipende anche da cosa è collegato al pulsante. Per stare sul sicuro, puoi mettere un relè in parallelo al pulsante e comandare quello da una porta I/O mediante un transistor.

paulus1969:
Dipende anche da cosa è collegato al pulsante.
Per stare sul sicuro, puoi mettere un relè in parallelo al pulsante e comandare quello da una porta I/O mediante un transistor.

Sì… è la soluzione certamente più sicura, ma più dispendiosa, anche perchè dovrei mettere 12 relè per emulare tutta la matrice di pulsanti. Non so se esiste un IC che possa aiutarmi…

cyberhs: Non hai uno schema degli ingressi della MCU collegata alla keypad?

E' una classica tastiera a membrana a 12 tasti,a matrice 3x4, collegati ad una MCU che non controllo . L'idea è mettermi in parallelo ai 7 pin ed emulare la tastiera con Arduino (senza inibirla). Il problema nella sua essenza è trovare un pinmapping che mi permetta di collegare internamente ad Arduino, due GPIO insieme... (e lasciarli float).

Probabilmente la MCU a cui è collegata già di suo fa una scansione delle colonne leggendo sulle righe se qualche tasto è stato premuto (... o viceversa, a secondo della logica usata) ...

... SE i valori di tensione sono compatibili con quelli di Arduino, allora puoi facilmente leggere in input la scansione delle colonne e, al momento giusto, inviare il segnale sulla riga come se il tasto fosse stato premuto.

Ovviamente devi vedere sia come viene fatta la scansione della matrice sia se la chiusura è verso GND o verso +Vcc e comportarti di conseguenza.

Tutto questo sempre e solo se i valori si tensione sono compatibili ... altrimenti la cosa si complica un pochino.

Guglielmo

P.S.: l'ATmega328P non ha la possibilità di connettere internamente un pin con un altro. Un pin in INPUT è ad alta impedenza, in OUTPUT assume il valore che gli dai.

Hummm con 3 4016 dovresti risolvere.... che dite?

http://www.ti.com/lit/ds/symlink/cd4016b.pdf

Stefano

cam9500: Hummm con 3 4016 dovresti risolvere.... che dite?

http://www.ti.com/lit/ds/symlink/cd4016b.pdf

Stefano

Ottima idea... cercando ho trovato questo https://datasheets.maximintegrated.com/en/ds/MAX14661.pdf

gpb01: Probabilmente la MCU a cui è collegata già di suo fa una scansione delle colonne leggendo sulle righe se qualche tasto è stato premuto (... o viceversa, a secondo della logica usata) ...

... SE i valori di tensione sono compatibili con quelli di Arduino, allora puoi facilmente leggere in input la scansione delle colonne e, al momento giusto, inviare il segnale sulla riga come se il tasto fosse stato premuto.

Ovviamente devi vedere sia come viene fatta la scansione della matrice sia se la chiusura è verso GND o verso +Vcc e comportarti di conseguenza.

Tutto questo sempre e solo se i valori si tensione sono compatibili ... altrimenti la cosa si complica un pochino.

Guglielmo

P.S.: l'ATmega328P non ha la possibilità di connettere internamente un pin con un altro. Un pin in INPUT è ad alta impedenza, in OUTPUT assume il valore che gli dai.

I valori di tensione non sono compatibili... l'MCU lavora a 3V. Comunque mi sembra abbastanza complesso da implementare...

Mirko1976: I valori di tensione non sono compatibili... l'MCU lavora a 3V. Comunque mi sembra abbastanza complesso da implementare...

Nessun problema, esiste Arduino Pro Mini, che oltretutto è poco più grande di un francobollo (... e quindi adattissimo ad essere inserito in piccoli spazi dove c'è già qualche cosa) che ... lavora a 3.3V :D :D :D

Per la complessità ... ... più difficile a dirsi che a farsi ;)

Comunque, se ti va bene e risolvi con la "simulazione di pulsanti" tramite i 4016 o simili ... è sicuramente più facile.

Guglielmo

Mirko1976:
Ottima idea… cercando ho trovato questo
https://datasheets.maximintegrated.com/en/ds/MAX14661.pdf

Eh no… se guardi lo schema hai 2 comuni (comA e comB) ed una uscita per ogni canale. A te servono 12 interruttori indipendenti.

Poi voglio dire… gallina vecchia fa buon brodo :slight_smile:

Stefano