sono riuscito a controllare (mi pare) bene la schedina audio WTV020 SD ...
la comunicazoine può avvenire tramite due linee una di CLOCK ed una di DATA secondo il seguente schema
questa è la funzione originale usata dalla SOMO che utiliza lo stesso integrato in una sua scheda ....
void sendData(int ThisSong)
{
int TheSong = ThisSong;
int ClockCounter=0;
int ClockCycle=15;//0x0f;
digitalWrite(pinClock,HIGH); // Hold (idle) for 300msec to prepare data start
delay(300);
digitalWrite(pinClock,LOW); //Hold for 2msec to signal data start
delay(2); //2msec delay
while(ClockCounter <= ClockCycle)
{ digitalWrite(pinClock,LOW);
if (TheSong & 0x8000)
{digitalWrite(pinData,HIGH);
}
else
{digitalWrite(pinData,LOW);
}
TheSong = TheSong << 1;
delayMicroseconds(200); //Clock cycle period is 200 uSec - LOW
digitalWrite(pinClock,HIGH);
ClockCounter++;
delayMicroseconds(200); //Clock cycle period is 200 uSec - HIGH
}
digitalWrite(pinData,LOW);
digitalWrite(pinClock,HIGH); // Place clock high to signal end of data
}
la stessa SOMO in un altro script usa questo
void sendCommand(int addr)
{
digitalWrite(clockPin, LOW);
delay(2);
for (int i=15; i>=0; i--)
{
delayMicroseconds(50);
if((addr>>i)&0x0001 >0)
{
digitalWrite(dataPin, HIGH);
//Serial.print(1);
}
else
{
digitalWrite(dataPin, LOW);
// Serial.print(0);
}
delayMicroseconds(50);
digitalWrite(clockPin, HIGH);
delayMicroseconds(50);
if(i>0)
digitalWrite(dataPin, LOW);
else
digitalWrite(dataPin, HIGH);
delayMicroseconds(50);
if(i>0)
digitalWrite(clockPin, LOW);
else
digitalWrite(clockPin, HIGH);
}
delay(20);
}
entrambi funzionano bene ...
io ho provato a rifarlo ... e ho fatto così:
void sendCommand(int addr)
{
digitalWrite(pinClock,HIGH); delay(300); digitalWrite(pinClock,LOW); delay(2); // guardare il datasheet del WTV020
for (int i=15; i>=0; i--)
{
digitalWrite(pinClock, LOW);
if((addr>>i)&0x0001 >0){digitalWrite(pinData, HIGH);} else {digitalWrite(pinData, LOW);}
delayMicroseconds(100);
digitalWrite(pinClock, HIGH);
delayMicroseconds(100);
}
}
anche questo funziona (mi pare) bene ...
qual'è la Vs opinione al riguardo ... a me mi sembra che la mia versione sia più rispettosa di quanto indicato nel datasheet .... mi fate sapere cosa ne pensate??? ... grazie