Ja, kann ich mal schauen mit 7200 ob das möglich ist (es hängt immer von den Frequenzteiler-Verhältnissen in Verhältnis zum Basis-Takt ab).
Übrigens - ich habe gerade herausgefunden, wie man den MP3-Player "abfragt". Anscheinend gibt es doch eine Möglichkeit, den Status abzufragen.
Hier aus einem C-Treiber, den ich gefunden habe:
String SerialMP3Player::decodeMP3Answer(){
// Response Structure 0x7E 0xFF 0x06 RSP 0x00 0x00 DAT 0xFE 0xBA 0xEF
//
// RSP Response code
// DAT Response additional data
String decodedMP3Answer="";
decodedMP3Answer=sanswer();
switch (ansbuf[3])
{
case 0x3A:
decodedMP3Answer += " -> Memory card inserted.";
break;
case 0x3D:
decodedMP3Answer += " -> Completed play num " + String(ansbuf[6], DEC);
break;
case 0x40:
decodedMP3Answer += " -> Error";
break;
case 0x41:
decodedMP3Answer += " -> Data recived correctly. ";
break;
case 0x42:
switch(ansbuf[6]){
case 0: decodedMP3Answer += " -> Status: stopped"; break;
case 1: decodedMP3Answer += " -> Status: playing"; break;
case 2: decodedMP3Answer += " -> Status: paused"; break;
}
break;
case 0x43:
decodedMP3Answer += " -> Vol playing: " + String(ansbuf[6], DEC);
break;
case 0x48:
decodedMP3Answer += " -> File count: " + String(ansbuf[6], DEC);
break;
case 0x4C:
decodedMP3Answer += " -> Playing: " + String(ansbuf[6], DEC);
break;
case 0x4E:
decodedMP3Answer += " -> Folder file count: " + String(ansbuf[6], DEC);
break;
case 0x4F:
decodedMP3Answer += " -> Folder count: " + String(ansbuf[6], DEC);
break;
}
ansbuf[3] = 0; // Clear ansbuff.
return decodedMP3Answer;
}
Dies sollte zurückkommen über die serielle Schnittstelle / RX, wenn man die folgenden Query-Commands abschickt:
// Query commands
void qPlaying(); // Ask for the file is playing
void qStatus(); // Ask for the status
void qVol(); // Ask for the volumen
void qFTracks(); // Ask for the number of tracks folders
void qTTracks(); // Ask for the total of tracks
void qTFolders(); // Ask for the number of folders
// Query Commands
#define CMD_PLAYING_N 0x4C // qPlaying(); // Ask for the file is playing
#define CMD_QUERY_STATUS 0x42 // qStatus(); // Ask for the status
#define CMD_QUERY_VOLUME 0x43 // qVol(); // Ask for the volumen. // Sometime board fails
#define CMD_QUERY_FLDR_TRACKS 0x4E // qFTracks(); // Ask for the number of tracks folders
#define CMD_QUERY_TOT_TRACKS 0x48 // qTTracks(); // Ask for the total of tracks
#define CMD_QUERY_FLDR_COUNT 0x4F // qTFolders(); // Ask for the number of folders
void SerialMP3Player::sendCommand(byte command, byte dat1, byte dat2){
byte Send_buf[8] = {0}; // Buffer for Send commands.
String mp3send = "";
// Command Structure 0x7E 0xFF 0x06 CMD FBACK DAT1 DAT2 0xEF
delay(20);
Send_buf[0] = 0x7E; // Start byte
Send_buf[1] = 0xFF; // Version
Send_buf[2] = 0x06; // Command length not including Start and End byte.
Send_buf[3] = command; // Command
Send_buf[4] = 0x01; // Feedback 0x00 NO, 0x01 YES
Send_buf[5] = dat1; // DATA1 datah
Send_buf[6] = dat2; // DATA2 datal
Send_buf[7] = 0xEF; // End byte
for(int i=0; i<8; i++)
{
Serial3->write(Send_buf[i]) ;
mp3send+=sbyte2hex(Send_buf[i]);
}
if (_showDebugMessages){
Serial.print("Sending: ");
Serial.println(mp3send); // watch what are we sending
}
delay(1000); // Wait between sending commands.
}
Die Filenamen vom MP3 kriegt man damit immer noch nicht zurück, aber zumindest die Filenummer etc.
Ich muss mal sehen, ob ich demnächst Zeit finde, das mal zum implementieren. Evtl. reicht die Info für Dich ja schon, TFM, um zu sehen, ob Du in Assembler nach Absenden eines CMD_QUERY_TOT_TRACKS z.B. die Anzahl der Tracks zurückkriegst? Wie gesagt, die serielle sollte dann diese Bytes empfangen, wie in decodeMP3Answer oben gezeigt:
// Response Structure 0x7E 0xFF 0x06 RSP 0x00 0x00 DAT 0xFE 0xBA 0xEF
Ich weiß, Du sagtst immer, Du kannst kein C(++), aber eigentlich brauchst Du ja nur die Codes und wissen, wie man seriell empfängt mit LS-FS.
Wegen Terminal - klar, dass sollte gehen! Mal im LS3 BASIC Terminal Programm nachgucken.