Salve a tutti,
sono un pioniere tecnologico di Bari e mi occupo di integrazioni fra meccanica, elettronica e acustica.
Sto sviluppando alcuni progetti che sfruttano i digipot in comunicazione sia SPI che I2C, ma sto incontrando un problema probabilmente banale nella comunicazione SPI con un digital potentiometer tipo AD5206.
Premettiamo che il circuito è uno standalone realizzato su PCB fotoincisa, quindi collegata via seriale RX/TX alla scheda originale di arduino per gli ovvi scopi programmativi.
I pin di alimentazione e comunicazione sono tutti collegati correttamente. Lo slave select è controllato dal pin numero 8 per questioni tecniche.
Lo sketch in uso è il più semplice che prevede la libreria SPI.h ed è quello base, proposto un po' dappertutto. Lo riporto qui di seguito:
#include <SPI.h>
void digitalPotWrite(int address, int value) {
// take the SS pin low to select the chip:
digitalWrite(8, LOW);
delay(100);
// send in the address and value via SPI:
SPI.transfer(address);
SPI.transfer(value);
delay(100);
// take the SS pin high to de-select the chip:
digitalWrite(8, HIGH);
}
void setup() {
// set the slaveSelectPin as an output:
pinMode(8, OUTPUT);
// initialize SPI:
SPI.begin();
}
void loop() {
// go through the six channels of the digital pot:
for (int channel = 0; channel < 6; channel++) {
// change the resistance on this channel from min to max:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, level);
delay(10);
}
// wait a second at the top:
delay(1000);
// change the resistance on this channel from max to min:
for (int level = 0; level < 255; level++) {
digitalPotWrite(channel, 255 - level);
delay(10);
}
}
}
Questo semplicissimo sketch non funziona, in quanto i digipot non rispondono e assumono valori fissi.
Ci tengo a precisare che a un certo punto nella giornata di ieri il circuito ha cominciato a funzionare, ma uno sbalzo di corrente mi ha fatto spegnere il computer con lo sketch che avevo revisionato più e più volte, per cui sono sicuro che il circuito che ho bromografato sia corretto almeno a livello hardware.
Probabilmente si tratta di qualche tipo di svista sulle istruzioni della libreria SPI.h, oppure qualcosa che ha a che fare con una versione buggata della stessa o dell'IDE che sto usando al momento su piattaforma Win XP (IDE versione 1.8.8 ). Dal momento che sul circuito stesso sto affrontando un collaudo di una certa complessità, il fatto che questo semplicissimo sketch abbia ricominciato a fare i capricci mi ha fatto un attimo perdere le staffe.
Aprendo questo post chiedo quindi l'aiuto degli esperti, magari offrendo un thread di discussione risolutivo ad eventuali posteri che si trovino nella mia stessa situazione.
Un saluto e grazie a tutti coloro che contribuiranno alla soluzione di questo enigma