VS1011 MP3 wird nicht richtig abgespielt

Gast #707735
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
#707943
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
#708470
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
#708627
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...
#713862
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
}
#715539
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren