Hallo Technikbegeisterte,
Ich hab ein Problem.Ich bau mir einen Mp3 Player aus dem Encoder VS1011
und einem Atmega128. Meine Mp3 Dateien bekomm ich von einer SD Karte nur
leider scheitert es schon daran das der Sinus Test bei mir nicht
funktioniert und ich glaube es ist ein schlechtes Zeichen wenn das DREQ
Signal die ganze zeit auf LOW bleibt.Zu allen übel messe ich nur ein
paar 100mV am RCAP Pin.
Am Atmega128 nutze ich den Hardware SPI zur Steuerung des Encoders als
auch der SD Karte , daraus ergibt sich folgende Verbindung am Atmega
SCK ->PB1
MOSI ->PB2
MISO ->PB3
xCS ->PB4 (CS vom Vs1011)
RESET ->PB5
BSYNC ->PB6
DREQ ->PB7
CS ->PA0 (CS von der SD Karte)
Ich nutze den Compatibility Mode des VS1011
Mein Quarz ist ein 24.576 MHZ und er schwingt.
Ich würde jetzt gerne wissen ob ich bei der Hardware irgendeinen Fehler
gemacht habe und hoffe das jemand schon einige Erfahrungen mit diesem
Encoder hat und mir helfen kann.Wenn mit der Hardware alles OK ist
,werde ich dann meine C-Files für den Sinus Test posten.
Im Anhang befindet sich meine Schematic.
Vielen dank schon im vorraus.
mfg M.F.
Hast du denn ne Ahnung ob der Reset soweit durchlaufen tut ? Hast du mal
versucht einen Logikanalyser dran zu basteln und zu messen ? MISO / MOSI
richtig rum angeschlossen ?
Ich selber hatte keine probleme den VS1011 in Betrieb zu nehmen.
CA Dirk.
Hallo Dirk,
hab jetzt nochmal die gesammte Beschaltung der Hardware Spi kontrolliert
und stimmt auch.Hatte mitn Oszi schon mal den MOSI + SCK Leitung
kontrolliert und alle beide machen das was sie tun sollen.Ich nutze AVR
Studio 4.14.
Ist es normal das die DREQ Leitung die ganze Zeit auf low liegt ..
ausser vielleicht ab und zu paar kleine Flanken um die 600mV??
P.S.: Woher weisst Du eigentlich, dass "es nicht funktioniert"? Hast Du
mal die Lautstärke des VS1011 aufgedreht? Vielleicht dudelt der ja schon
die ganze Zeit, aber nur viel zu leise ;-)
@ M.F.
Wenn du in Register schreibst, dann kein BSYNC setzen.
Was macht vs1011_reset() und vs1011_nulls()?
Mit welcher Geschwindigkeit läuft dein AVR?
-> _delay_ms funktioniert nur bis 262.14 ms / F_CPU.
In der Codesammlung gibt es auch ein Projekt zum VS:
Beitrag "Mp3 Player [mega8, SD, VS1001]"
Hallo, ich habe mir auch einen MP3 Player aufgebaut. Ist dein 24.576 mHz
quarz auch ein Grundtontyp ? Mit einem 3-Oberwelle die du überall
bekommst geht es nicht. Ich habe einen 14.xxx grundton genommen, und es
per software am VS-Chip eingestellt.
ein fröhliches Hallo an alle und ein großes Danke für die rege Teilnahme
an meinen Problem
also fangen wir mal an:
@Andreas
ich hab zwei Befehle zur Realisierung der spi Übertragung
die erste ist Spi_Mp3_Stream() in dieser Funktion setzt ich das Bsync
Signal high bevor ich etwas aus dem MISO schicke und am Ende der
Funktion wieder LOW.
Der Zweite SPI Befehl ist spi()
da wird ganz normal Daten aus MOSI geschickt Sinn und Zweck der beiden
Funktionen ist ,das ich unterteile ob ich den SDI oder SCI vom VS
anspreche
vs1011_nulls() benutz ich um eine bestimmte Anzahl an dummy Bytes zu
senden.
vs1011_reset() damit mach ich einen Hard- und Software Reset.
Mein Atmega128 hat einen externen Quarz von 14.7456 MHz.
Ich habe diesen Tread (mp3 player,mega8) schon gefunden und darauf
beruht eigentlich auch mein C-Code.
Was ich vielleicht noch mit bemerken sollte ist das selbt nach einem
Software Reset mein DREQ Pin keine Anstalten macht seine Flanke zu
wechseln.
@Gast
Ich hatte davon schon gehört das es wohl mit einen Quarz 3 Oberwellen
nicht funktionieren soll und hab deshalb ein großes Augenmerk darauf
gelegt einen Quarz im Grundton zu bekommen.
vielen dank für die Hilfe
mfg M.F.
M.F. wrote:
> Der Zweite SPI Befehl ist spi()> da wird ganz normal Daten aus MOSI geschickt Sinn und Zweck der beiden> Funktionen ist ,das ich unterteile ob ich den SDI oder SCI vom VS> anspreche
Warum steht dann in spi() was von byte sync und data:
...
Mp3SelectData(); // byte sync hi
SPDR = b; // send data
Mp3DeselectData(); // byte sync lo
...
> vs1011_nulls() benutz ich um eine bestimmte Anzahl an dummy Bytes zu> senden.> vs1011_reset() damit mach ich einen Hard- und Software Reset.
Die Funktion ist klar, aber wie hast du das umgesetzt?
> Mein Atmega128 hat einen externen Quarz von 14.7456 MHz.
Dann funktionieren deine Warteschleifen schon mal nicht.
> Was ich vielleicht noch mit bemerken sollte ist das selbt nach einem> Software Reset mein DREQ Pin keine Anstalten macht seine Flanke zu> wechseln.
Wie sieht es nach einem Hardwarereset aus?
Sind vielleicht die AVR-Ports falsch gesetzt?
@Andreas
Ich bin jetzt leider Daheim .Ich kann dir deshalb erst morgen antworten
und mit der Spi() Funktion haste recht sollte dann wohl eher sein xCS am
anfang auf LOW und nach Übertragung auf HIGH.
Besten Dank und noch einen schönen Abend.
mfg M.F.
Hallo alle miteinander,
so hab heut morgen mal meinen kompletten Code verworfen.Ich fand ihn zu
unübersichtlich und hab da ind em Forum noch den Link zu Michael Wolfs
MP3stick gefunden und hab den Code mal fix meinen bedürfnissen
angepasst.
Ergebnis: Sowohl bei Hard als auch Software Reset bleibt mein uC an der
Zeile
1
while(!(VS_DREQ_INP&_BV(VS_DREQ)));
hängen. bedeutet das mein VS einfach kein DREQ Signal schicken möchte
:(
ich bin bald der Meinung mein VS ist kaputt...
Naja vielleicht fällt euch ja noch was ein.. ich seh schon bald den Wald
vor lauter Bäumen nicht mehr.
im Anhang hab ich den veränderten Code
mfg M.F.
Hier sind einige Stolperfallen genannt:
Beitrag "Sinustest des vs1011"
Ich dacht auch erst, der Chip ist kaputt..
Kannst Du denn ein Register beschreiben und auch diesen Wert wieder
auslesen? laß doch erstmal die SD-Karte weg..
Ich nutze als externe Quarz einen 24.576 MHz. also brauch ich kein
clock doubler und Register beschreiben und lesen scheint auch nicht zu
funktionieren.
mfg M.F.
versuche mal den "Share" Mode und ohne SD-Karte, evtl. hast Du eine
Leitung verkehrt rum angesteuert / verstanden.
Lies den o.g. Thread nochmal uns stelle sicher, daß Du keinen der
genannten Fehler gemacht hast. Register schreiben und wieder korrekt
lesen kommt noch vor Sinustest..
@ M.F.
Hast du überhaupt den Code von Michael an deine Hardware angepasst?
Im ersten Post hast du geschrieben, dass der VS an PORTB hängt. In dem
geposteten Code ist das aber nicht der Fall.
@Andreas als ich den Code von Michael genommen hab ich mich an die Pin
Belegung von Michael gehalten.
werde morgen noch mal GANZ gründlich über die Sache drüber schaun und
hoffe doch noch den kleinen Bug zu finden xD.
Hallo,
selbst nach 2 Tagen gründlicher Prüfung bin ich keinen Schritt
weiter.Ich hab sogar den VS1011 ausgetauscht ohne Erfolg.Register lesen
und schreiben funktioniert bei mir nicht.ich bekomm an meinen MISO kein
Signal was man auswerten könnte.Sowohl mein DREQ Pin und mein RCAP Pin
sind die ganze Zeit um den Bereich 100mV.Hab echt keine Ahnung was ich
noch tun sollte.
mfg M.F.
Mir ist gerade aufgefallen, dass im Schaltplan SData mit SI und DClk mit
SClk verbunden ist. Das darf nicht sein.
Im VS-Symbol fehlen auch Pins:
* GBuf
* AVdd hat 3 Pins
* AGnd hat 4 Pins
* DGnd hat 5 Pins
@Andreas
ich nutz doch den vs1011 im Compatibility Mode da brauch ich doch DCLK
und SData, wie hätte ich sie den sonst beschalten sollen?
Ich nutz den Soic-28 da hab ich kein GBuf pin.
danke für deine Hilfe
mfg M.F.
M.F. wrote:
> ich nutz doch den vs1011 im Compatibility Mode da brauch ich doch DCLK> und SData, wie hätte ich sie den sonst beschalten sollen?
Ja stimmt. Im Comp-Modus ist das so - hatte ich verwechselt.
> Ich nutz den Soic-28 da hab ich kein GBuf pin.
Achso.
Der Resetpin geht auch ganz sicher auf high?
Dann müsste DREQ auch auf high gehen und an RCAP müssten um die 1V
liegen.
Vielleicht sind noch irgenwo Pins vertauscht oder die Fusebits falsch
gesetzt (M103C Comp-Modus)...
Hallo,
wenn Du Lust hast, kann ich Dir meinen Code vom Vs1002 anpassen und Dir
geben (ist allerdings in ASM). Der läuft auf jeden Fall.
Falls Interesse besteht, überprüfe bitte nochmal deine gepostete
Schaltung und obengenannte Pinbelegung.
SCK ->PB1
MOSI ->PB2
MISO ->PB3
xCS ->PB4 (CS vom Vs1011)
RESET ->PB5
BSYNC ->PB6
DREQ ->PB7
CS ->PA0 (CS von der SD Karte)
Weil der Schaltplan nit mit deiner Pinbelegung übereinstimmt (gehe mal
davon aus das nicht Du den gemacht hast).
Wenn Du bestätigen kannst, das die Pinbelegung OK ist, passe ich Dir
gerne meinen Code an und brauchst ihn nur noch zu flashen.
GRUSS
Achso,
funktioniert denn die Kommunikation mit der SD-Karte?
Falls nein wird der Fehler wohl schon in deinem SPI-Code zu suchen oder
an deinem Pegelwandler zu finden sein.
Ausserdem wie schnell ist dein SPI Takt mit dem VS1011?
Der verträgt nur max. 6Mhz, die SD-Karte deutlich mehr.
Gruss