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


von Lukas (Gast)


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

von Niemand (Gast)


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?

von Falk B. (falk)


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

von Lukas W. (lukaswe)


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

von Tom (Gast)


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.

von Lukas W. (lukaswe)


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

von Tom (Gast)


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?

von Lukas W. (lukaswe)


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

von Lukas W. (lukaswe)


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

von Gast (Gast)


Lesenswert?

Wieviele Bytes sendet Ihr, wenn das DREQ aktiv wird?

von Boxi B. (boxi)


Lesenswert?

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

von Lukas W. (lukaswe)


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.
1
void VS_Reset( reset_e reset )
2
{
3
  u08 i;
4
  if( reset == VS_RESET_SOFT ) {
5
    VS_WriteSCI( VS_SCI_MODE, ( 1 << VS_SM_RESET ) );
6
    Delay( 5 ); /* 5ms */
7
    while( !( VS_PIN & ( 1 << VS_DREQ ) ) );
8
    Delay( 100 ); /* 100ms */
9
    VS_SMSet( VS_SM_SDINEW ); /* Like WriteSCI, but only sets on bit an leaves the others in their original state */
10
    
11
    VS_WriteSCI( VS_SCI_CLOCKF, 0x9800 ); /* 12,288,000Hz quarz / 2000 + 0x8000 for doubled frequenz ) */
12
  } else if( reset == VS_RESET_HARD ) {
13
    VS_BSYNC_ON();
14
    VS_RESET_ON();
15
    Delay( 1 ); /* 1ms */
16
    VS_RESET_OFF();
17
    /* 0.125 us per NOP + 0.25us (2 NOP) overhead, wait time for DREQ to go LOW */
18
    for( i = 0; i < 12; i++ ) {
19
      NOP(); NOP(); NOP(); NOP(); NOP(); NOP();
20
    }
21
    VS_BSYNC_OFF();
22
    while( ( VS_PIN & (1 << VS_DREQ ) ) ); /* App Notes, DREQ first goes LOW, then HIGH */
23
    while( !( VS_PIN & ( 1 << VS_DREQ ) ) );
24
  }
25
}
26
27
inline void VS_WaitDREQ( void )
28
{
29
  while( !( VS_PIN & ( 1 << VS_DREQ ) ) );
30
}
31
32
void VS_SendData32( u08 *data )
33
{
34
  u08 i, byte, foo;
35
  
36
  byte = *data;
37
  VS_WaitDREQ();
38
  VS_DCS_ON();
39
  for( i = 0; i < 32; i++ ) {
40
    SPDR = byte;
41
    data++;
42
    byte = *data;
43
    while( !( SPSR & ( 1 << SPIF ) ) );
44
    foo = SPSR; /* Clear SPIF, see ATMega16 datasheet */
45
    foo = SPDR;
46
  }
47
  VS_DCS_OFF();
48
}

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

von Sakul (Gast)


Lesenswert?

Hey Dani!

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

lg

von Lukas W. (lukaswe)


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?
1
inline void VS_WaitDREQ( void )
2
{  
3
  while( !( VS_PIN & ( 1 << VS_DREQ ) ) ) { Delay( 1 );  /* 1ms */ }
4
}

von Lukas W. (lukaswe)


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

von Gast (Gast)


Lesenswert?

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

von Lukas W. (lukaswe)


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

von Gast (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.