Ciao a tutti.
Ho iniziato una topic tempo fa volendo creare un looper/switcher per la chitarra, ma ho perso quell'account e non sono più riuscito a scrivere sul forum.
Rispetto a quel progetto, per chi l'ha visto, ho deciso di utilizzare un espansione i2c invece di 2 arduino per avere una sola alimentazione ma ora riscontro dei problemi.
L'espansione che utilizzo è PCF8575 e quando vado con il digitalRead a leggere se il pulsante è premuto "impazzisce" tutto il programma. Per capire cosa stava succedendo ho deciso di fare un Serial.print del pin dell'espansione e ho scoperto che:
Quando il tasto non è premuto (dovrebbe dare valore "1") da valore "1" ogni 10 "0"
Quando il pulsante è premuto da tutti valori "0"
Quindi alla lettura mi dice che è HIGH ma subito dopo è LOW.
Ho provato a verificare la necesssità di resistenze di pull-up e pull-down ma niente da fare.
davidedev:
Ho provato a verificare la necesssità di resistenze di pull-up e pull-down ma niente da fare.
DOVE hai messo le resistenze?
... perché sul bus I2C vanno delle resitenze di pull-up (i pin del bus I2Csono open-drain) e vanno anche sugli ingressi (pull-up o pull-down, a seconda di come hai scritto il software) per forzarli ad un valore prefissato quando i bottoni non sono premuti.
Questo può essere un problema ... il bus I2C (come il bus SPI) NON è fatto per essere portato in giro con cavetti vari, ma nasce per interconnettere tra loro IC sulla stessa scheda, quindi ... portarlo a spasso con cavi è spesso fonte di problemi (non per nulla esistono appositi IC per estendere la lunghzza dei collegamenti in I2C).
Prova ad aggiungere un paio di resistenze di pull-up lato bus I2C per abbassare il valore di quelle che già ci sono ...
... due resistenze da 4.7K dovrebbero andare bene (arrivi ad una resistenza, data dal parallelo con la 10K già presente, di circa 3.1K) e vedi se la cosa migliora.
Ah, metti comunque un piccolo schema eletrico di come hai fatto le connessioni e della/delle alimentazioni, che magari il problema è li ... :
Il cavetto scollegato va al pulsante che in quel momento non era collegato e il pulsante si collega al pin P07 dove si vede collegata una resistenza al Vdd
Appena accendo arduino mi da solo 0
Dal momento che schiaccio il pulsante (ho provato sia con gnd che con vdd) il segnale passa a 01 e quando smetto di premere resta così.
Se muovo i cavi non cambia nulla
Ho notato che se rallento con un delay da 12 ms il risultato è corretto...
Sicuro che non sia un limite temporale imposto dalla libreria? ... ovvero, che non supporta chiamate a raffica, ma vuole un minimo di tempo tra una chiamata e l'altra? Magari non è particolarmente ottimizzata o il componente richiede determinate tempistiche (mai usato quel chip, quindi non ti so dire) ... :
Mi hanno risposto su un altro forun che non posso leggere direttamente così ma devo salvare la lettura in una variabile uint8_t e poi lavorare su quella...
Ho provato e funziona perfettamente.
Grazie mille per l'aiuto
Un ultima cosa sapresti indicarmi dei topic sul midi program change fatti bene?
davidedev:
Mi hanno risposto su un altro forun che non posso leggere direttamente così ma devo salvare la lettura in una variabile uint8_t e poi lavorare su quella...
Ho provato e funziona perfettamente.