mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit einem VS1011


Autor: Luca Bertoncello (lucabert)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, Leute!

Nachdem ich geschafft habe, den Display und das DCF77-Modul zu steuern, 
wollte ich mich mit dem MP3-Decoder mich beschäftigen.

Ich habe einige Codebeispiele im Internet gefunden und probiert.
Leider kommt kein Ton raus...

Als Anhang das Schema meiner Schaltung.

Mein Code:
  mp3Init();
  tdaTurnOn();
  tdaLoud();

  for (i=0;i<3;i++)
  {
    sine_on(62);
    _delay_ms(100);
    sine_off();
    _delay_ms(100);
  }

  tdaMute();
  tdaTurnOff();
  while(1)
    ;

Die Init-Funktion sieht so aus:
  TDA_ONOF_DDR |= _BV(TDA_ONOF_PIN);
  TDA_MUTE_DDR |= _BV(TDA_MUTE_PIN);
// Erstmal den Verstärker ausschalten!
  tdaTurnOff();
  tdaMute();

  VS_DDR |= _BV(VS_CS_PIN);
  VS_DDR |= _BV(VS_RESET_PIN);
  VS_DDR &= ~_BV(VS_DREQ_PIN);
  VS_PORT |= _BV(VS_DREQ_PIN);
  VS_DDR |= _BV(VS_BSYNC_PIN);
  vsClearBSync();
  vsSetChipSelect();
  vsSetReset();

// SPI einrichten
  SPI_DDR |= _BV(MOSI) | _BV(SCK);        // MOSI und SCK als Output
  SPI_DDR &= ~_BV(MISO);                  // MISO als Input
  SPI_PORT &= ~_BV(SCK);
  SPCR |= _BV(SPE) | _BV(MSTR);           // SPI aktivieren
  dummy = SPSR;                           // Status löschen

// Init der VS1001
  _delay_us(3000);
// Hard Reset
  vsClearReset();
  _delay_ms(100);
  vsSetReset();
  _delay_ms(5);

// Soft Reset
  _delay_ms(200);
  buf[0] = 0x04;
  vsWriteData(0, 1, buf);  // set bit 2
  _delay_ms(2);

  loop_until_bit_is_set(VS_PIN, VS_DREQ_PIN);

  // set CLOCKF for 24.576 MHz
  buf[0] = 0;
  vsWriteData(3, 1, buf);

  vsSendNulls(32);

Und ein paar andere Funktionen/Defines:
#define tdaTurnOn()             TDA_ONOF_PORT &= ~_BV(TDA_ONOF_PIN);
#define tdaTurnOff()            TDA_ONOF_PORT |= _BV(TDA_ONOF_PIN);
#define tdaLoud()               TDA_MUTE_PORT &= ~_BV(TDA_MUTE_PIN);
#define tdaMute()               TDA_MUTE_PORT |= _BV(TDA_MUTE_PIN);

void vsSendNulls(uint8_t n)
{
  while(n--)
    vsSendData(0);
}

inline void vsSendData(unsigned char byte)
{
  vsSetBSync();

  SPDR = byte;

  asm volatile("nop");
  asm volatile("nop");
  asm volatile("nop");

  vsClearBSync();

  loop_until_bit_is_set(SPSR, SPIF);
}

void vsWriteData(uint8_t address, uint16_t count, uint16_t *data)
{
  vsClearChipSelect();

  spiWriteByte(VS1001_WRITE);
  spiWriteByte(address);

  while(count--)
  {
    spiWriteByte((uint8_t)((*data) >> 8));
    spiWriteByte((uint8_t)*data);
    data++;
  }

  vsSetChipSelect();

  _delay_ms(5);
}

void sine_on(uint8_t freq)
{
  uint8_t i,buf[4];

  // sine on
  buf[0] = 0x53;  buf[1] = 0xEF;  buf[2] = 0x6E;  buf[3] = freq;

  for (i=0;i<4;i++)
    vsSendData(buf[i]);
  vsSendNulls(4);
}

void sine_off(void)
{
  uint8_t i,buf[4];

  // sine off
  buf[0] = 0x45;  buf[1] = 0x78;  buf[2] = 0x69;  buf[3] = 0x74;

  for (i=0;i<4;i++)
    vsSendData(buf[i]);
  vsSendNulls(4);
}

Ich habe mich erwartet ein "Beep" zu hören, aber leider, außer ein "Tik" 
beim Einschalten und Ausschalten des Verstärkers und eine leise Summen 
ist überhaupt nicht zu hören...

Die Kontakte an der Platine scheinen richtig gelötet zu sein.
Bevor ich annehme, daß der VS1011 defekt ist, könnt ihr mir sagen, ob 
Fehler in meinem Code gibt?

Danke
Luca Bertoncello

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.