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
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?
@ 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
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
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.
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
Ü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?
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
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
schau doch mal mit dem oszi, ob daten gesendet werden, obwohl dreq sagt, dass der vlsi gerade keine haben möchte
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...
Hey Dani! Irgendwia hom mia de iatz vaschreckt mitm sourcecode und insare frogn! gg lg
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 | }
|
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
Vielleicht hast DU vergessen, das TEST-Bein vom VS zu versorgen.. Je nach HIG oder LOW extern macht er dann so einen Quastsch.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.