Hallo allerseits, ich weiß, dass der altbekannte VS1011er hier schon x-Fach durchdiskutiert wurde, habe aber bisher keine einzige passende Antwort bzw. Lösung für meine Probleme gefunden... Problem Nr.1: Die Initialisierung scheint nicht immer richtig zu klappen... Ich muss mein Board mehrfach ein und ausschalten, biss beispielsweise der Sinustest klappt. Desweiteren klickt der VS beim ersten einschalten ein wenig dumpf. beim wiederholten einschalten ist es ein "besseres" knacken. (klingt doof, ich weiß ^^). Also fast so, als wären irgendwelche Elkos noch nicht geladen... Aber auch mit nem riesigen Delay vor der ersten init. knackt es iwie dumpf... Hier mein init-code: void VS1011_HardReset(void) { XCS=1; XDCS=0; Delay_ms(50); do { VS_R=0; VS_R_In(); Delay_ms(1); VS_R=1; VS_R_Out(); VS_R=1; Delay_ms(20); XDCS=1; //laut App.Note ist ein lo-hi wechsel nötig XDCS=1; Delay_ms(1); while(!DREQ); VS1011_Null(32); VS1011_Write(0x00,0x00,0x04); Delay_ms(1); // while(!DREQ); }while(!DREQ); VS1011_Write(0x00,0x08,0x00); while(!DREQ); VS1011_Write(0x0B,0x20,0x20); while(!DREQ); // Delay_ms(200); } Problem Nr.2: Bei der Wiedergabe einer MP3 gibt es je nach Bitrate bestimmte Aussetzer: Bei kleiner Bitrate setzt der Song aus und springt Stückweise... Bei hoher Bitrate setzt es ebenfalls aus und es wird in die länge gezogen. Den Effekt mit der hohen Bitrate kann ich mir erklären: Mit 1,5Mhz SPI-Takt kommen schlicht und ergreifend zu wenig Daten pro Sekunde an. Aber das mit der niedrigen ist seltsam... Es wirkt als würde ich Dreq nicht handlen, aber genau das tue ich. Anbei der Code: void VS1011_WriteBlock(void) { unsigned int i=0; XDCS=0; for(i=0;i<512;i++) { VS1011_MP3Data(SD_Data[i]); //SD_Data ist das globale Array mit den Daten von der SD-Karte if((i % 32)==0) { while(DREQ==0) { Nop(); } } } XDCS=1; } Ich bin für jeden Tipp und jede Hilfe sehr dankbar! mfg guest ;-)
Zu 1.) Das ist normal, weil die Elkos schlagartig geladen werden. Deswegen gibt es in der Application Note von VLSI die Schaltung im Anhang, um das ploppen zu verhindern. Zu 2.)Ich wette deine Register Einstellungen vom Takt sind falsch. Deswegen mit was für einem Takt läuft dein VLSI (nur wenn du nen 24,576Mhz Quarz dran hast brauchste nit einstellen). Aso und ich hoffe das deine Funktion vier Bytes schickt ("VS1011_Write(0x0B,0x20,0x20);") --> 0x02 , 0x0B , 0x20 , 0x20.
Hallo, 1: das ploppen an sich ist nicht das Problem. Seltsam ist nur, dass wenn das "dumpfe" knacken kommt, der VS dann definitiv nicht funktioniert. Er läuft nur, und auch dann nur manchmal, wenn dieses helle knacksen kommt. 2: Ich wette dagegen ;-) ich hab nämlich genau den 24,576 MHz Quarz ^^ Ich hab das Datasheet eig recht gut studiert... 3: Jop, in meiner Funktion ist das Byte 0x02 fest implementiert... Vielen Dank für die Hilfe. Allerdings bleiben die Probleme ja noch offen... ich kanns mir nicht wirklich erklären... ich warte ganz regulär auf DREQ und trotzdem springt die mp3 mit niedriger bitrate... bei 128kbit/s ist es fast super... es wird weder zu langsam gespielt, noch springt er extrem... aber die kleinen sprünge nerven trotzdem und Sinn der Sache ist es ja auch nicht... gruß guest
Hallo, probiers mal so. Also erst High-->warten-->Low-->warten-->High-->warten-->DREQ high-->OK An PB0 ist der Reset Pin vom VLSI: unsigned char VS_init() { SPCR = 0x51; SPSR = 0x01; PORTB |= (1 << PB0); _delay_us(1); PORTB &= ~(1 << PB0); _delay_us(7); PORTB |= (1 << PB0); _delay_ms(5); unsigned char DREQ = 0x00; DREQ = PINB; DREQ = DREQ & 0x02; unsigned char Status = 0; if(DREQ == 0x02) { Status = 1; } return Status; }
jetzt bin ich mal wie viele bei threads von mir: Nimm nen STA013, da funktioniert das leicht...
@Fabian Ostner werds gleich ausprobieren @Bit-Pfriemler das scheint mir nicht so ganz das gelbe vom Ei ;-) ich arbeite lieber an meinen Problemchen ^^ gruß guest
@Fabian Ostner hat leider keinen erfolg gebracht... Ich denke das init-problem kann ich vlt dadurch umgehen, dass ich nach der initialisierung ein register beschreibe und dies dann nochmal vergleichen lasse. bei fehler wird nochmal initialisiert... das mp3-problem besteht weiterhin.... gruß guest
Deswegen gebe ich ja den return-Wert zurück in meiner Funktion ! Es wird solange die Funktion aufgerufen , bis return-Wert = 1 ist. Zu deinem Wiedergabe Problem: Ist denn der VLSI genau so beschaltet wie im datasheet Seite 16 ! Also alle GPIO's mit 100K auf Masse und der Test-Pin auf VCC ? Gruß
hallo, jop, die beschaltung stimmt. ich kanns mir langsam echt nicht mehr erklären... zu dem anderen problem: kann denn DREQ nach 5ms nach reset überhaupt schon 1 sein? war da nicht was mit 50000 cycles?
Hallo, 50000 cycles bei 24,576Mhz = 2,03ms Haste noch nen anderen VLSI da, nur um auszuschliessen daß das Ding putt ist. Bzw. Schaltung noch mal komplett überprüfen nach schlechten Lötstellen etc. Gruß
Hallo, die Schaltung habe ich bereits mehrfach geprüft. Nen zweiten VS1011 habe ich leider nicht... Wäre aber wirklich ärgerlich, wenn er die Probleme verursachen würde... Ich werde morgen nochmal nach der Init schauen... Dann wäre ich zumindest ein Stückchen weiter... gruß guest
Hmmm, Ist das ein 24,576 Mhz Grundtonquarz ? Gib mal Link zu dem Quarz (nit böse gemeint) ! Gruß und moin.
Guten Morgen Jop, ist ein Grundtonquarz. Ich hatte in der Tat erst einen blöden Obertonquarz von Reichelt drin... Den Grundtonquarz habe ich dann bei Conrad gekauft und getauscht. gruß guest
Hat sonst keiner eine pasende idee? oder vielleicht source der bei euch läuft? auch avr source. nur irgendwas... gruß guest
Hi sry das ich so OT dazwischenfrage aber ich wollte mir auch in ner woche von Reichelt die Bauteile für mein MP3-Player Projekt holen nur seh ich grade das es den Quarz dort nicht gibt wie Fabian oben schon erwähnte gibts da nur den 3ten Oberton als Quarz. Kann man einen anderen bei R. nehmen so das es geht oder geht es nur mit einem genauen 24,576 Grundton ? Wollte eigendlich nicht wegen einem Quarz noch bei nem anderen Versender bestellen wenn ich den gesammten rest bei R. bekomme. Was mir zum Thema noch einfällt ist die Versorgung gut gepuffert? Die Ganzen Kondis ziehen ja am anfang ziemlich Strom und da könnte deine Spannung absacken, wodurch es zu netten Fehler beim init kommen kann. Notfalls lass dem Chip doch einfach etwas Zeit nach dem Einschalten so 10 ms z.b. oder mach 2 inits also init reset init. Dann sollten alle C´s schon geladen sein und fehler bei der 2ten init dürften dann nicht auftreten. Das ist jetzt nur ne idee ^^. Grüße ErgoProxy
Hallo, @Andreas : nimm nen 12,288 MHZ Quarz @Gast: siehe Anhang und poste mal Code sowie Schaltplan.
Hallo, im Anhang die beiden Files. zum Thema Schaltplan fällt mir ne Zwischenfrage ein: wo gibts bei Eagle die GND und VDD Signal-Verbinder? Da würde meiner nämlich erheblich übersichtlicher werden ;-) gruß gast
Hallo, ich weiss gar nicht wo ich anfangen soll !!! Also dein Schaltplan ist schon mal Mist ! Ich frag einfach nochmal nach, ist der VLSI so verschaltet wie im Datasheet auf Seite 15. 1.) alle GPIO's mit 100K gegen Masse und TestPin auf VCC ? 2.) Pulldown am Reset Eingang ? RX auf VCC mit 100K ? 3.) 1 MegaOhm parallel zum Quarz ? 4.) RCAP mit 100nF gegen Masse ? 5.) Spannungsversorgungen sauber ? So nun zum Code: Erstmal eine Frage vorne weg. Du benutzt ja kein FAT , woher weisst Du das die Daten alle Sektor auf Sektor folgen ? 1.) Übernimm bitte 1:1 meine Reset Routine, deine ist .... 2.) in deiner Softreset Funktion setzt du den PIN SM_TESTS , ganz schlecht 3.) Und schließlich das aller schlimmste. Bei SD_readblock benutzt du die Funktion SD_writecmd , in der der Chipselect auf NULL gesetzt und anschliessend wieder auf EINS, ganz schlecht, da du den Chipselect mitten in der ReadRoutine aus machst. Kann also zu fehlern führen ! So das wars erstmal und genug für dich zu tun. Gruß
Hallo, der Schaltplan ist mies, das muss ich zugeben. Ich hab seitdem auch etliche Verbsserungen vorgenommen: A2) Pulldown hab ich. RX PullUp -> Welches RX? da hab ich nix im Datasheet gesehen... A3) Hab ich A4) Hab ich A5) Ich versorge das Ding mit einem Spannungswandler IC von TI. Die SPannung ist auch bei exakt 3.3V Zum Thema Sektor: Ich habe die Daten mit r-linux direkt auf den ersten Sektor geschrieben. Sollte zumindest eine Testlösung sein. B1) Werd ich, sobald ich kann... Hoffe in den nächsten paar Tagen Zeit zu haben... Meine Routine besteht aus etlichen Versuchen, zum Teil zusammengewürfelt ^^ B2) Ja, das war noch, als ich die Sinus-Tests implementiert hatte... Wird aber z.Z. sowieso nicht aufgerufen, wird aber geändert. B3) Werde auch das Ausprobieren, aber im Großen und Ganzen scheint es nicht am SPI-Transfer zu liegen, aber natürlich prüf ich das. Vielen Dank auf jeden Fall, für die Arbeit, die du dir gemacht hast thumbs up ^^ gruß gast
Im Schaltplan sind einige AVDDx und DVDDx nicht angeschlossen. Ich hoffe doch das sie bei dir angeschlossen sind. Die Pins hat der Hersteller nicht ohne Grund aus dem Gehäuse geführt.
Hallo, ich setze gleich die code-änderungen um. Ja, ich hab alle VDD's und GND's angeschlossen. gruß gast
Hallo, hier die Ergebnisse: 1) Deine Init hat leider kein erfolg gebracht... Hier meine Umsetzung: void VS1011_HardReset(void) { uchar i=0; do { VS_R=1; VS_R_Out(); Delay_ms(1); VS_R=0; VS_R_In(); Delay_ms(7); VS_R=1; VS_R_Out(); Delay_ms(5); } while(DREQ==0); VS1011_SoftReset(); } 2) Das mit dem ReadBlock habe ich umgesetzt. Es scheint sich etwas geändert zu haben, bin mir aber nicht sicher... Insgesamt allerdings immernoch das selbe Problem -.- gruß Gast
Du weisst, dass dr Core mmax. 2.5V verträgt? Hast du den etwa auch mit 3.3V versorgt?
@Gast: Aso RX gibts beim VS1011 gar nit, mein Fehler. Wie sieht es denn mit dem Sinustest aus ? MAch den mal ohne dein VS1011_StopSine Funktion. Dann sollte ein Pfiepen zu hören sein. Wenn das auch aussetzt, ist es ein Hardware Fehler, ansonsten iss was is deiner Software. Wenn Sinustest klappt, poste deinen neuen vollständingen Code. Andernfalls den Schaltplan. @Tobias: Blödsinn ! Er hat nen 1011 und keinen 1003 oder 1033. Gruß
Hallo, anbei die main.c. Deine Init-Routine habe ich mittlerweile wieder auskommentiert... Habe auch das mit dem schreib-lese-test implementiert. init wird jedoch trotzdem nur einmal durchlaufen, also hängt es scheinbar nicht mit dem SCI-Teil zusammen... Werde mal nen SDI-Schreibtest implementieren müssen... laut datasheet sind für analog und digital-vdd ein spannungsbereich von 2,5-3,3V angegeben?! gruß gast
Hallo, der Sinustest klappte ebenfalls nur manchmal -> selbes symptom...
Also der Sinustest ohne deine StopSine-Funktion setzt auch aus? Gruß
Au shit! sorry. Ich hab erst grad gesehen dass du den VS1011 hast.... ich hab das Datasheet vom 33er angeguckt.
Hmmm, mal ne Frage, weil ich keine PICS kenne, aber was macht VS_R_Out() und VS_R_In() ??? Ich hoffe nicht auf Ausgang und Eingang schalten. Außerdem konnte die Reset Funktion, die du von mir übernommen hast, nur funktionieren, wenn du danach den Sinustest gemacht hast. Denn in deiner SoftReset Methode ist immer noch SM_TESTS_Bit gesetzt ! Gruß
Hallo, der Sinustest fing manchmal gar nicht erst an. Eben errst nach mehrmaligen Aus- und Einschalten. VS_R_Out() und In schalten Tatsächlich auf Ausgang und Eingang. Als Eingang Ist der PIC ja im High-Impedance Modus -> also müsste der Pulldown den VS auch auf Reset setzen. Oder liegt da mein Denkfehler? Ich habe Deine Reset-Funktion wie angegeben übernommen. Bis zum Softreset kam es ja gar nicht, da der VS bzw. ununterbrochen Resetted hat. Dadurch kam nur ein unangenehmes Rattern zustande. Zumal ich das SM_Tests-Bit ja aus der SoftReset schon entfernt habe... Bin langsam am verzweifeln... gruß gast
Hi, anbei mein Code für den VS1011. Läuft auf einem PIC 18F87J10 (CCS Compiler ) Viel Spaß Gruß Thorsten
@Gast: du schaltest den PIN vom µC auf AUSGANG (nix mit Eingang) an dem der Reset ist und der bleibt auch AUSGANG!!! Und toggelst auf High , wartest kurz , wieder LOW, kurz warten und letztlich auf High und kurz warten, voila VS1011 ist Resetet und startbereit. Und dann teste mal obs Unterbrechungen gibt bei while(1) { VS1011_SineTest; } . Wenn nicht Hardware Ok, andernfalls .... @Thorsten: Ich würde an deiner Stelle bei write Data mal den DREQ abfragen ob der überhaupt Daten will ! Außerdem ist die max. SPI Clock bei SCI reads auf XTAL/6 im Datenblatt angegeben , also statt deiner 5Mhz , so um die 4Mhz. KAnn funktionieren also, aber muss halt nicht.
Das mit dem SPI ist klar, aber da es geht warum ändern? Der DREQ Ausgang wird abgefragt, allerdings nicht für jedes Datenbyte sondern bevor ich den Puffer fülle. ( In einer anderen Datei zu finden ) Gruß
@Thorsten: nicht für jedes Datenbyte ^^ , aber nach jedem 32Byte Häppchen sollte er abgefragt werden ob der Puffer schon voll ist und er überhaupt noch Daten will, wenn nicht , warten bis DREQ wieder auf High ! Und das mit den 5Mhz SCI-read schrieb ich ja schon kann funzen muss aber nicht. Beim nächsten VLSI klappts vielleicht nicht. Gruß
Hallo, Änderungen umbesetzt... Leider hängt der VS in der Hardreset-schleife fest... gruß gast
Poste mal deinen neuen Code, wie soll man sonst was sagen. Noch besser du nimmst nen AVR , dann kannste nen Code 1:1 übernehmen von mir (Poste ihn dann)^^. Wenns dann nit läuft würde ich auf ein Hardware Problem tippen, was ich mittlerweile eh tue. P.S: Was ist denn damit, wenn dein VLSI mal den Reset schafft -----> while(1) { VS1011_SineTest; } ?????????????? Gibts da auch Aussetzer oder nit ???
Hi, wenn der VS mal den Reset schafft (war bisher nur mit meiner Routine der Fall) genügt es, wenn nur ein einziges mal die Sinus-Funktion aufgerufen wird. Dann piept er fröhlich bis die Hölle zufriert ^^ Ich habe nochmal 2 VS-chips bei Reichelt bestellt. Werde einen auf jeden Fall wechseln... Die Hardware überprüfe ich nochmals beim Einbau des neuen Chips... gruß Gast
Nochwas: Den "Reset schaffen" sollte ich genauer definieren: Mit meiner Compare-Funktion läuft der Reset genau ein mal ab. Dann kann es aber dennoch sein, dass er weder Sinustest, noch MP3-Daten abspielt. Nach mehrmaligen aus- und einschalten spielt er iwann alles ab... In meinem obigen Code fehlt das Bit SM_Tests ist mir gerade aufgefallen, aber das würde auch nichts daran ändern, dass er Deine Reset-Routine nie verlässt... Der alte VS ist schon rausgeschnitten, also werd ich sowieso auf die neuen warten... Ich würde gern langsam Ergebnisse erzielen ;-) gruß Gast
Also wir sollten uns erstmal nur um den Reset und den Sinustest kümmern, wenn das ordentlich läuft, sollten wir uns um andere Sachen kümmern. Das meine ResetRoutine nit geht wundert mich sehr. Die funzt auf ca. 6 Stück (von VS1011 bis 1033) MP3-Decodern und zwar IMMER beim einschalten. Mach mal nen ordentlichen Schaltplan. Notfalls male ihn auf nen Dina4 und scanne das Dingen ein. Mit allen Bauteil Bezeichnungen. Also bi denne wenn deine neuen Chips da sind^^. Gruß
Einen schönen guten Morgen allerseits, also die neuen VS sind gekommen und ich hab gleich einen eingebaut. Die Probleme sind allerdings die selbe wie vorher auch... gruß Gast
Ich komme einfach nicht weiter... Ich habe die Hardware x-fach gecheckt... Wenn mir jemand sagt, wo es bei Eagle die Masse und VDD Verbinder gibt zeichne ich nochmal einen Schaltplan zum angucken... gruß Gast
Hi, miss auch mal am PIN RCAP. Dort sollten ca. 1.3V anliegen, ansonsten stimmt was mit der Beschaltung nicht. Gruß Thorsten
Gast wrote: > Wenn mir jemand sagt, wo es bei Eagle die Masse und VDD > Verbinder gibt zeichne ich nochmal einen Schaltplan zum angucken... Ich mein einfach nach vcc oder gnd suchen bei den Bauteilen (mit * dahinter) oder den supply Zweig suchen....
Am Rcap liegen die 1,3V an, das habe ich schon einmal gemessen... Ich werde bei Gelegenheit mal den schaltplan überarbeiten...
Hallo allerseits, entschuldigt, dass ich dieses uralte Thema ausgrabe, aber ich möchte euch noch mitteilen wo der Hase im Pfeffer lag: #define DREQ LATCbits.LATC1 müsste: #define DREQ PORTCbits.RC1 sein. Das wars auch schon... Dieses blöde LAT Register ist memory mapped und nur zum schreiben gedacht -.- beim lesen werden die zuletzt geschriebenen werte gelesen und nicht der Pegel am Port... Das Projekt ist übrigens mittlerweile fertig ^^ mfg Gast
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.