www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik VS1011 MP3 wird nicht richtig abgespielt


Autor: Lukas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen!

Also mein Problem (Hoffe mir kann jemand helfen):

Mein Kollege und ich schicke die MP3 files richtig auf den VS1011 via 
die SPI-Schnittstelle. Haben wir überprüft!

Wir verwenden für den VS1011 eine 12.288 MHz Quarz, für den Atmega 16 
den internen 8 MHz Takt.

Das MP3 kann über die Kopfhörer nur ruckartig erkannt werden.
Das MP3 dauert normalerweise um die 3min, in dieser Schaltung ist das 
MP3 schon nach 1min fertig (daraus schließe ich, dass es zu schnell 
abgespielt wird.

Freue mich auf eure Beiträge und hoffe, dass mir jemand helfen kann!


MFG Lukas

Autor: Niemand (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat der MP3 Dekoder nicht einen internen Buffer der signalisiert, wann 
er voll ist? Wartet ihr mit der Übertragung neuer Daten, wenn dieses 
Signal erscheint?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Lukas (Gast)

>Das MP3 kann über die Kopfhörer nur ruckartig erkannt werden.
>Das MP3 dauert normalerweise um die 3min, in dieser Schaltung ist das
>MP3 schon nach 1min fertig (daraus schließe ich, dass es zu schnell
>abgespielt wird.

Wertet ihr das DREQ Signal ordentlich aus? Taktverdoppler eingeschaltet?

MFG
Falk

Autor: Lukas We (lukaswe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sry!
Das habe ich vergessen!

Wir warten auf das DREQ Signal! Jedoch wenn wir uns dieses Signal mit 
dem Oszi anschauen, dann sieht das aus wie ein Rechtecksignal eines 
Rechteckgenerators.

Wir haben zur Initialisierung das Datenblatt und die Aplicationnode von 
VLSI verwendet!

Den Taktverdoppler ist ebenfalls eingeschalten!

Wir sind langsam am verzweifeln!

MFG

Lukas

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne den VS1011 nicht so genau. Aber ich hatte mal solch ein 
problem mit einem Atmel. Damals lag es an der Einstellung des DAC.

Autor: Lukas We (lukaswe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Daten bekommen wir von einer CF-Karte! Ich vergesse schon viel gg 
hineinzuschreiben!
FAT funktioniert einwandfrei! Die Daten von der CF-Karte haben wir über 
die SPI auf die Festplatte gespeichert und da klingt das MP3 ganz 
normal!

MFG Lukas

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Über SPI an eine Festplatte?

Mag ja sein, hat aber mit dem DAC nix zu tun. Oder sollte das heißen, 
daß der VS1011 von einer Festplatte abspielen kann und es dann klappt?

Autor: Lukas We (lukaswe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein!

Also wie das mein Kollege mit der Festplatte gemacht hat weiß ich nicht 
genau weil ich nicht da war!

Wir speichern die Daten auf einer CF-Karte, diese wird mit einem 
ATMEGA16 angesteuert. Die Daten von der CF-Karte werden via ATMEGA auf 
den VS1011 geschickt!

MFG

Autor: Lukas We (lukaswe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tom wrote:
> Ich kenne den VS1011 nicht so genau. Aber ich hatte mal solch ein
> problem mit einem Atmel. Damals lag es an der Einstellung des DAC.

Wie hast du damals den Fehler behoben? Was war de Grund dafür?

In den Aplication-Nodes ist jedenfalls nie die rede von einem DAC!
Wir haben unser Prog. mit Hilfe dieser Nodes beschrieben.

MFG Lukas

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieviele Bytes sendet Ihr, wenn das DREQ aktiv wird?

Autor: Boxi Boxitec (boxi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schau doch mal mit dem oszi, ob daten gesendet werden, obwohl dreq sagt, 
dass der vlsi gerade keine haben möchte

Autor: Lukas We (lukaswe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Boxi Boxitec wrote:
> schau doch mal mit dem oszi, ob daten gesendet werden, obwohl dreq sagt,
> dass der vlsi gerade keine haben möchte

Haben wir schon. Der DREQ Pin geht andauern zwischen LOW und HIGH hin 
und her. Sieht aus wie ein Rechteck. Senden wird nur gestartet, wenn 
DREQ auf HIGH ist.

Gast wrote:
> Wieviele Bytes sendet Ihr, wenn das DREQ aktiv wird?

Einen Burst von 32 Bytes.

Tom wrote:
> Über SPI an eine Festplatte?
>
> Mag ja sein, hat aber mit dem DAC nix zu tun. Oder sollte das heißen,
> daß der VS1011 von einer Festplatte abspielen kann und es dann klappt?

Die Daten die von der CF Card gelesen wurden, haben wir über die USART 
an den  PC geschickt, das empfangene dann als File gespeichert und 
abspielen Probiert --> Funktioniert einwandfrei. Es gibt also kein 
Problem mit dem CF oder dem FAT Treiber.

Tom wrote:
> Ich kenne den VS1011 nicht so genau. Aber ich hatte mal solch ein
> problem mit einem Atmel. Damals lag es an der Einstellung des DAC.

Wie meinst du das? Auf den DAC des VS1011 hab ich ja keinen direkten 
Zugriff, der wird doch vom VS1011 intern verwaltet?


Bei der Initialisierung wird zuerst ein Hard Reset, dann ein Soft Reset 
ausgeführt, dann die CF Card initialisiert und dann wird begonnen die 
Datei so wie sie auf der CF Card ist an den VS1011 zu senden.
void VS_Reset( reset_e reset )
{
  u08 i;
  if( reset == VS_RESET_SOFT ) {
    VS_WriteSCI( VS_SCI_MODE, ( 1 << VS_SM_RESET ) );
    Delay( 5 ); /* 5ms */
    while( !( VS_PIN & ( 1 << VS_DREQ ) ) );
    Delay( 100 ); /* 100ms */
    VS_SMSet( VS_SM_SDINEW ); /* Like WriteSCI, but only sets on bit an leaves the others in their original state */
    
    VS_WriteSCI( VS_SCI_CLOCKF, 0x9800 ); /* 12,288,000Hz quarz / 2000 + 0x8000 for doubled frequenz ) */
  } else if( reset == VS_RESET_HARD ) {
    VS_BSYNC_ON();
    VS_RESET_ON();
    Delay( 1 ); /* 1ms */
    VS_RESET_OFF();
    /* 0.125 us per NOP + 0.25us (2 NOP) overhead, wait time for DREQ to go LOW */
    for( i = 0; i < 12; i++ ) {
      NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
    }
    VS_BSYNC_OFF();
    while( ( VS_PIN & (1 << VS_DREQ ) ) ); /* App Notes, DREQ first goes LOW, then HIGH */
    while( !( VS_PIN & ( 1 << VS_DREQ ) ) );
  }
}

inline void VS_WaitDREQ( void )
{
  while( !( VS_PIN & ( 1 << VS_DREQ ) ) );
}

void VS_SendData32( u08 *data )
{
  u08 i, byte, foo;
  
  byte = *data;
  VS_WaitDREQ();
  VS_DCS_ON();
  for( i = 0; i < 32; i++ ) {
    SPDR = byte;
    data++;
    byte = *data;
    while( !( SPSR & ( 1 << SPIF ) ) );
    foo = SPSR; /* Clear SPIF, see ATMega16 datasheet */
    foo = SPDR;
  }
  VS_DCS_OFF();
}

Ps.: Es ist ein VS1011e, wenn das irgendwie relevant ist...

Autor: Sakul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Dani!

Irgendwia hom mia de iatz vaschreckt mitm sourcecode und insare frogn! 
gg

lg

Autor: Lukas We (lukaswe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem scheint vom VS1011 auszugehen. Der DREQ Pin geht nicht oder 
zu kurz auf LOW. Wenn ich die VS_WaitDREQ abändere, dass es ein 
zusätzliches Delay gibt, kann man das Lied erkennen. (Zwar etwas zu 
langsam abgespielt, immerwieder Ruckler etc, aber eindeutig erkennbar.)

Hat irgendjemand eine Ahnung warum der DREQ Pin vom VS1011 anscheinend 
nicht richtig funktioniert?
inline void VS_WaitDREQ( void )
{  
  while( !( VS_PIN & ( 1 << VS_DREQ ) ) ) { Delay( 1 );  /* 1ms */ }
}

Autor: Lukas We (lukaswe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Danke für die Hilfe, das Problem war gar keines. Mein Soucecode 
funktioniert wunderbar. Schuld war scheinbar der VS1011. Ich habs jetzt 
mit einem anderen VS1011 Chip probiert und mit dem funktioniert es 
einwandfrei. Wiedergabe is selbst bei 320kBit/s Variable Bit Rate MP3s 
noch einwandfrei.

Warum beim alten VS1011 der Sinustest und die (ruckelhafte) Wiedergabe 
funktioniert hat ist mir immer noch ein Rätsel...

MfG
Lukas

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht hast DU vergessen, das TEST-Bein vom VS zu versorgen.. Je 
nach HIG oder LOW extern macht er dann so einen Quastsch.

Autor: Lukas We (lukaswe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gast wrote:
> Vielleicht hast DU vergessen, das TEST-Bein vom VS zu versorgen.. Je
> nach HIG oder LOW extern macht er dann so einen Quastsch.

Nein, TEST war auf VDD, an dem darf es nicht gelegen haben. Ich hab auch 
nichts an der Schaltung geändert, als alten VS1011 raus, neuen 
reinstecken. Ziemlich seltsam jedenfalls...

-- Lukas

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja evtl. hat dieses Beinchen nicht richtig gesessen, (gesteckt? ist 
doch ein SMD?) - kannst ja mal mit Absicht andersrum beschalten, falls 
es Dich noch interessiert, ob es daran lag.

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.