[strano glitch] Bottoni schema eagle

Ho buttato via lo schema RC per il debounce hardware dei bottoni, ho messo un paio di bottoni su breadboard seguendo questo tutorial e funziona tutto.
http://arduino.cc/it/Tutorial/Button

Ho fatto uno schemino eagle per mettere la pulsantiera, mi sembra di aver riprodotto lo schema del tutorial ma chiedo conferma. I bottocini con le loro quattro zampette mi confondono un po'.

Allo schema ho aggiunto due morsettiere a due poli perché ho intenzione di tirare due pulsanti a pannello, oltre ai pulsantini sulla scheda.
Le morsettiere le ho messe ai capi dell'interruttore.

Mi controllate se è tutto ok?
Grazie

Ok, hai messo 2 resistenze tra Vcc e massa.
Cosa vuoi fare con i pulsanti?
Cosa hai attacato al JP1?

Ciao Uwe

JP1 sono due pin dell'arduino :slight_smile:
I pulsanti comandano un termostato... è già tutto funzionante su breadboard.

Volevo conferma che lo schema eagle rispecchi il tutorial e che le morsettiere sono state sistemate giuste, dovendole usare per aggiungere altri due interruttori a pannello.

DanielaES:
Mi controllate se è tutto ok?

E' tutto sbagliato :grin:
Per come hai collegato i pulsanti non fanno nulla, Vcc lo devi mettere sul lato opposto del pulsante, in questo modo con pulsante aperto hai 0 logico tramite la pull down, con pulsate premuto 1 logico, meglio se metti una r da 330 ohm in serie a Vcc, giusto per evitare potenziali corti.
Sul connettore per i pulsanti esterni devi prevedere tre contatti, due sono gli ingressi e un Vcc, sempre tramite 330 ohm, che viene chiuso sul contatto.

Daniela; se vuoi mettere le resistenze di pulldown sulla schedina Ti serve sia massa che Vcc sulla schedina percui un conettore a 4 pin come collegamento all'Arduino.
Ciao Uwe

astrobeed:

DanielaES:
Mi controllate se è tutto ok?

E' tutto sbagliato :grin:
Per come hai collegato i pulsanti non fanno nulla, Vcc lo devi mettere sul lato opposto del pulsante, in questo modo con pulsante aperto hai 0 logico tramite la pull down, con pulsate premuto 1 logico, meglio se metti una r da 330 ohm in serie a Vcc, giusto per evitare potenziali corti.
Sul connettore per i pulsanti esterni devi prevedere tre contatti, due sono gli ingressi e un Vcc, sempre tramite 330 ohm, che viene chiuso sul contatto.

Non c'è una faccina basita? :? :fearful:
Mannaggia... meno male che ho chiesto un controllo, mi rileggo quello che hai scritto e ci riprovo.
EDIT:
spetta, chiariscimi...
Prendendo ad esempio il bottone UP:
vcc su pin 2, pin arduino su pin 1, pull down e massa su pin 3?

Ho fatto uno schemino eagle per mettere la pulsantiera, mi sembra di aver riprodotto lo schema del tutorial ma chiedo conferma. I bottocini con le loro quattro zampette mi confondono un po'.

L'unica è controllarli con il tester perchè due pin sono collegati insieme, cioè entrambi i capi dello switch hanno 2 pin in comune.

Un consiglio su come fare:
Per la puldown è semplice basta mettere a gnd il pin di arduino tramite la restistenza di puldown.

Per il pulsante un capo va ad una R da 330 ohm che viene posta a 5Volts, l'altro capo del pulsante va al pin di arduino su cui hai già messo la resistenza di pulldown. Quando pigi il pulsante la 5Volts passa attraverso la resistenza da 330 e va sull pin di arduino (stato HIGH), quando lasci il pulsante la pulldown porta il pin verso GND (stato Low).

Si hai necessita di Vcc e gnd nella schedina tasti e quindi 4 fili.

Ciao.

Ok, andiamo un passo alla volta che inizio a sentirmi scema... :smiley:
Mettere pin arduino in pulldown... dovrei saperlo fare.
Un capo così l'altro capo cosà.... ok, guardate l'immagine e ditemi se ci siamo.
Non ho messo la resistenza da 330 |-| perché non la possiedo.
Ho questi valori, posso utilizzare qualcuna di queste?:

  • 2.2? - 10? - 47? - 100? - 680? - 1k? - 10k? - 22k? - 68k? - 100k? - 330k? - 1M? -

b2.jpg

Bene, tra VCC e il pulsante mettici una R da 330 ohm e hai risolto.

Ok, andiamo un passo alla volta che inizio a sentirmi scema... smiley-grin

So per certo che non lo sei, ehi sei forte lo sai. Dopo questa iniezione di fiducia come ti senti? :smiley:

oppssss:
Usa la 680 ohm al posto della 330.

Ciao.

Ok, lentamente la stiamo portando a casa :slight_smile:
Ho messo le res, adesso devo mettere le morsettiere.
Provo a spiegarmi meglio sul senso delle morsettiere.
Ora come ora abbiamo fatto una specie di button pad, che poi infilerò a mo di shield sull'arduino (allineamento pin già testato)
Tuttavia oltre a questi due bottonicini che abbiamo messo vorrei avere ALTRI due pulsanti al pannello.
Pulsanti di questo tipo.
Avendo, questi pulsanti, solo due pin... suppongo che mi servano morsettiere a 2 poli messe a cavallo dei microswitch, giusto?

Visto il pulsante, io pensavo usassi i microswitch a 4 pin da montare su PCB.

Quindi DOWN_1 e DOWN_2 fanno capo ad un morsetto a due poli e qui ci andranno collegati i fili del pulsante, giusto?

mmm... ma ti serve un connettore due poli anche per VCC e GND.

azzz.. aspè, ho capito (credo). Quindi è una shield con su due microswitch a 4 pin, ogni microswitch ha un pulsante in paralello in modo che è indifferente se premi il microswitch ho il pulsante a pannello.

se è così allora VCC e GND li prendi dai contatti della shield insieme a pin del micro e quindi come dici tu ti servono due morsetti bipolari, cioè uno per pulsante.

Ciao.

MauroTec:
azzz.. aspè, ho capito (credo). Quindi è una shield con su due microswitch a 4 pin, ogni microswitch ha un pulsante in paralello in modo che è indifferente se premi il microswitch ho il pulsante a pannello.

Esatto, i bottoni a pannello servono per gestire il termostato quanto tutto è montato nella scatola... ma se un domani ho bisogno di tirare fuori l'arduino per sistemare qualcosa, svito le morsettiere, lascio i bottoni fissi a pannello e ho comunque due microswitch per testare la funzionalità del termostato :slight_smile:

se è così allora VCC e GND li prendi dai contatti della shield insieme a pin del micro e quindi come dici tu ti servono due morsetti bipolari, cioè uno per pulsante.

Perfetto, allora ce l'abbiamo fatta... menomale che ho scritto per avere un controllo! :slight_smile:
Grazie a tutti :slight_smile:

Mmm.
C'è uno strano glitch.
Al momento ho il circuito su breadboard ma SENZA la resistenza da 680ohm su vcc.
Il circuito in linea di massima funziona, se premo i pulsanti entro nei miei menu... Ma:

Ogni tanto è come se ci fosse un glitch ed uno dei pulsanti venisse premuto.
Lo capisco per il fatto che vedo il menu pulsanti sul display.
E' successo un paio di volte, per quanto ho potuto vedere io, tuttavia considerato che l'uscita dal menu è automatica dopo 60 secondi, potrebbe essere capitato più spesso (tipo quando dormivo ecc).
In ogni caso non sembra un fenomeno frequente.

Suggerimenti?
Cambio il valore della pulldown?
Aumento il delay del debounce software? al momento utilizzo un 50millisecondi di debounce
Quando metterò la resistenza da 680ohm su vcc il circuito si stabilizzerà?

Grazie

legacy:
Cambiare completamente approccio, introdurre feedback


(servondo 2 porte nand di un integrato 74hc00 che in toto ne ha 4 di porte al suo interno)

una batteria di nand-/s/r di cui per ogni singola cella sr

  • il capo /s e' connesso al pulsante in pull up (quando premi connetti /s a massa)
  • l'uscita q al (digial_in) button_xx_pressed di arduino
  • il capo /r, tutti i capi /r di tutte le celle sr, al(digial_out) buttor_all_reset di arduino

ipotesi di startup
arduino: key_reset_all(); function nella quale si forza uno zero logico sul digitalpin out buttor_all_reset, che verra' propatato a tutte le celle forzandole nello stato di reset

ipotesi di tasto premuto, controllo in polling
quando un utente preme un tasto meccanicamente connette a gnd il pin /s della cella sr preposta alla gestione di quel tasto col risultato che la relativa uscita q di quella cella scatta ad un livello logico alto rimanendoci anche quando l'untente solleva il dito riportando il pin /s al pullup verso vcc

arduino: ogni tot msec si chiama switch( key_pressed() ), key_pressed legge i digital_in relativi ai vari tasti (stabili a memoria, fino a che non li si resetta espelicitamente), lo switch li dettaglia per case

switch ( key_pressed() )

{
        case key_button0_pressed:
               do_...
               key_reset();
               break;
        case key_button1_pressed:
               do_...
               key_reset();
               break;
        ..
        case key_buttonN_pressed:
               do_...
               key_reset();
               break;
        case key_buttonJam_pressed: /* more than one key pressed, jam decoding /
               do_...
               key_reset();
               break;
        default: /
no key pressed */
               break;

Ma un integrato con x flip flop-SR gia' fatto, è troppo complicato, invece di farseli da soli con le NAND?

Ragazzi stiamo parlando di due tastini... rimaniamo sul basilare :slight_smile:

DanielaES:
Ragazzi stiamo parlando di due tastini... rimaniamo sul basilare :slight_smile:

Difatti :wink:

Spiegami 2 cosine:

  1. ma che sono quei pin prima e dopo i pulsantini?
  2. qual è il tuo problema? Come collegarli?

Se il fenomeno che lamenti avviene senza che premi nulla agire sul delay non ti serve a niente, penso piuttosto a qualche falso contatto sulla bread; potresti provare a dimezzare la pull-down, visto che non hai una 4k7, usa per ora quella da 1K, tanto per capire se il problema è proprio dei riferimenti, ma insisto sui falsi contatti.

legacy:

DanielaES:
Ragazzi stiamo parlando di due tastini... rimaniamo sul basilare :slight_smile:

Spiegami cosa c'e' di piu' basilare di un paio di flop flop sr realizzabili con 2 integrati 74hc00 che sono fra l'altro mattoncini base della logica a memoria per definizione.

Ti rispondo io: NIENTE, anzi ti dirò di più: se rinunciasse al latch, di 74hc00 potrebbe usarne addirittura uno soltanto. Resta il fatto che un microcontrollore, ma so di non dirti assolutamente nulla di nuovo viste le tue competenze, ti permette di risolvere il problema con qualche riga di firmware usata per implementare un debounce. Considera che Daniela si dichiara poco competente, che oggi è domenica e che dispone solo di alcune resistenze, quindi almeno si tenta di risolvere con gli ingredienti che ha in casa. Mal che vada domani va e compra il paio di IC, ma sul Forum ci sono tanti che hanno implementato 3-4-5 pulsanti col solo debounce, mi pare giusto che ci provi anche lei, alla fine deve usarlo in una serra, mica in una sala operatoria. :wink:

legacy:

menniti:
Ti rispondo io: NIENTE, anzi ti dirò di più: se rinunciasse al latch, di 74hc00 potrebbe usarne addirittura uno soltanto. Resta il fatto che un microcontrollore, ma so di non dirti assolutamente nulla di nuovo viste le tue competenze, ti permette di risolvere il problema con qualche riga di firmware usata per implementare un debounce.

Eh, ma la richiesta iniziale era di semplificarsi la vita e in particolare di fare debounce in hw. Ecco che mi pare cosa meno indolore usare 2 integratini e tirarci 4 fili smazzando il problema davvero all'hw rispetto poi a dor scrivere quelle 2 benedette righe in fw anche per il fatto che su quel 328 poi ci dovra' girare altro codice. Domenica o meno, intanto ci si medita sopra, e domani pome i negozi sono aperti e 2 74hct00 costano 1 euro max.

Boh, mi concedo perche' oggi in particolare a breve ho lezioni di volo a vela =P

:slight_smile: Ti voglio dare una giusta soddisfazione. Prima di partire ho iniziato la progettazione di uno strumento di misura (per ora Top Secret, quindi scusa se non approfondisco ;)). Prevede una serie di pulsanti a pannello per impostazioni di portate et altro. Su ogni pulsante sto prevedendo una rigorosa logica hardware a porte NAND, stavo provando anche l'alternativa schmitt trigger, poi impegni importanti mi hanno portato fuori Regione. Quindi, come vedi... :wink: buon volo...

giusto per info, questo mese in edicola su Fare Elettronica c'e' proprio un articolo sul debounce. Vengono viste le soluzioni hw e le sw.

online si puo' sfogliare parzialmente