hey ihr da draußen!
ich brauch da mal ganz dringend eure hilfe!
ich versuche jetzt schon seit einer halben ewigkeit den vs1011 zum
abspielen einer mp3-datei zu bringen. fat16 für die datei läuft,
taktanpassung des vs
is richtig, register beschreiben/ lesen funktioniert super, sogar
der ominöse sinustest klappt einwandfrei!
nur bei seiner eigentlich aufgabe hakts irgendwo...
ich betreibe den vs1011 im vs1002-nativ-mode mit extra chipselects für
cmd-interface und daten-interface. die daten werden, immer nachdem dreq
auf high geht, schön in blöcken á 32byte und mit data-interface-cs auf
low zum vs gesendet. nur es passiert absolut rein gar nichts!!!
ach ja: das ganze läuft in asm geschrieben auf nem mega128...
hab ich vielleicht irgendwas übersehen?? irgendwas kleingedrucktes im
datenblatt??? ich weiss im moment echt nicht worans liegen könnte...
ich hoffe, ihr könnt mir helfen :)
glg
zero_gravity
hallo,
wie schnell ist denn dein SPI takt bei der datenübertragung (max.
4mhz)???
kleiner code ausschnitt wäre net schlecht wegen eventuellen fehlern??
an welchem port hängt das dingen ???
im notfall kann ich dir meinen code "LEIHEN"
;-)
gruss fubu
hey fubu :)
zum ansteuern benutze ich das hardware-spi mit fosc/2 also genau 4mhz..
aber ich denk mal dass das kein probelm ist, da sonst alles
super funktioniert (also sinustest, register lesen/beschreiben)
hier mal das 'kernstück' aus der routine zum übertragen von mp3-daten
zum vs:
clr XL
clr XH
read_mp3_data:
cpi XL, LOW(512)
brne read_mp3_data_valid
cpi XH, HIGH(512)
brne read_mp3_data_valid
rjmp read_mp3_data_end
read_mp3_data_valid:
clr counter
sbis PINB, vs1011_dreq
rjmp read_mp3_data_valid
ldi YL, LOW(mp3_buffer)
ldi YH, HIGH(mp3_buffer)
read_mp3_data_loop_1:
cpi counter, 32
breq read_mp3_data_loop_2
call readbyte_spi
st Y+, rxdata
inc counter
rjmp read_mp3_data_loop_1
read_mp3_data_loop_2:
sbi card_port, card_select
cbi card_port, vs1011_data_cs
clr counter
ldi YL, LOW(mp3_buffer)
ldi YH, HIGH(mp3_buffer)
read_mp3_data_loop_3:
cpi counter, 32
breq read_mp3_data_loop_end
ld txdata, Y+
call sendbyte_spi
inc counter
rjmp read_mp3_data_loop_3
read_mp3_data_loop_end:
sbi card_port, vs1011_data_cs
cbi card_port, card_select
adiw XH:XL, 32
rjmp read_mp3_data
diese subroutine wird 8 mal innerhalb eines block-read-cmd der sd-karte
aufgerufen... wenn ich die daten über uart raushaue ergibt sich auch im
endeffekt die richtige datei, nur der vs will halt nicht
ach ja: wundert euch nicht über meinen schrecklichen programmier-stil ;)
glg
zero_gravity
noch ne kleine frage am rande:
wenn ich mir, während des mp3-datentransfers zum vs, HDAT1 anzeigen
lasse,
is der nach 100 übtertragenen blöcken immer noch auf 0 und nich auf FF
und F2 oder sowas in der art...
ab wann sollte mir denn HDAT1 anzeigen, ob der stream überhaupt "valid"
ist?
doch wohl gleich nach der übertragung des framesectors der mp3-datei,
oder??
glg
zero_gravity
hallo,
1.)hörste knacken oder ähnliches bei der übertragung deiner MP3 aufm
kopphörer???
2.)japp nach der der ersten übertragung des Frameheaders der MP3 sollte
da was drin stehen, normalerweise sollte da nach 100 übertragungen was
drin sein.
nee, das isses ja.
wenn da irgendwie sowas wie nen knacken oder piepsen wäre, wär das
suchen nach dem fehler ja nich so verdammt schwierig!
aber ich hab da ja nur dieses übliche ganz ganz leise
hintergrundrauschen...
ach, es ist zum verzweifeln ^^
glg
zero_gravity
hallo,
wie gesagt ich kein dir einen alten code leihen um das VS dingen zu
testen.
hab damals auf ATMEGA32 und VS1002 gesetzt.
besser du gibst mir mal deine email, weil i wohl der einzige bin der
helfen will !!!
das prob wird scho zu lösen sein !!!
gruss fubu
hey fubu!
das ist echt total nett von dir, dass du mir versuchst zu helfen! :)
ich werd mit diesem dingen hier noch total irre ^^
meine mail: stnolting@web.de
glg
zero_gravity
Moin,
hat sich bei deinem Problem, eigentlich eine Lösung ergeben?
Ich habe auch genau das Problem. Der Sine-Testmode funktioniert und wenn
ich von der Festplatte eine MP3-Datei sende findet er keinen Valid
MP3-Header und bleibt stumm.
Es ist auch kein knacken zu hören.
--
Schwigi
hey stefan!
mein vs funktioniert jetzt wunderbar!!
ganz wichtig ist, dass du die testfunktionen wie sinustest und so für
den normalen betrieb abschaltest...
in was schreibst du denn deine programme?? ich könnt dir sonst meinen
asm-code mal rüberschicken :)
glg
zero_gravity
Moin,
ursprünglich sollte das eigentlich nen Projekt in C werden, allerdings
bin ich dann doch wieder auf asm zurückgekommen, als ein paar
kleinigkeiten nicht wollten.
Das ganze läuft auf AtMega. Zurzeit noch auf nem 16 später solls dann
auf nen 128. Das mit dem Sinetest werde ich mal testen.
Ich hatte bis eben noch einen Sinetest am Start meines Programmes, den
ich inzwischen entfernt habe, allerdings macht der VS1011 immer noch
nichts.
Hier sind noch die wichtigen Teile des Programms, ansonsten würde ich
mir deines gerne einmal anschauen.
1
event_I_func:
2
sbi SPCR, SPE ;Festplatte hängt am selben PORT, z.z. noch probleme mit Atmega16, weil zu wenig IOs
hallo zu faul das durchzulesen,
hier mal mein sinustest (DREQ an PB1, XDCS an PB2, XCS an PB3, SI an
PB5, SO an PB6, SCLK an PB6). pass den code nach deinen portanschlüssen
an und gut!! aso verwende den NEW MODE(vs1002 mode). (temp1=r16)
wenn der geht, haste alles richtig angeschlossen dann kümmern wir uns
gerne um den rest, aber vorher^^......
gruss
oh looool,
wer lesen kann iss klar im vorteil^^.
der sinustest funzt ja!!! dann sach i mal du hast sicher wie ZERO
vergessen den testmode auszustellen^^.
gruss an zero und den rest.
Moin,
ich hab auch den anderen Sinustest noch einmal laufen lassen und auch
der erzeugt ein wundervollen Pfeifen.
Ich habe selber noch nicht geschaut und ein kleinen Fehler in dem
Festplattenteil gefunden. Der ist allerdings jetzt raus und die
gesendeten Daten stimmen mit der Datei überein.
Der VS1011, hat allerdings immer noch keine Lust sich irgendwie zum
Spielen einer MP3 Datei bewegen zu lassen.
Der Test ist inzwischen auch aus und wird auch nicht mehr aktiviert.
Anbei ist noch einmal der aktuelle Quellcode zum Senden der Datei.
PD2 ist der Reset, PD4 ist DREQ, PD5 ist XDCS und PD6 ist XCS
--
Schwigi
hallo,
bin zu müde um deinen code zu ende zu lesen, aber dein reset timing iss
sehr arg, schau mal ins datenblatt da musste ne zeit warten, bis dreq
auf high ist und dann rufste deine event_i_func oder so... auf.
änder das mal und frag im code den pin ab.
so aber erstmal n8, den rest schau i moin mal an.
gruss
Moin,
ich hab jetzt den Reset am Anfang der event_play routine eingefügt und
warte ab bis DREQ auf 0 ist und anschließen bis es wieder auf 1 ist.
Das hat allerdings nicht viel geändert, denn in der Senderoutine ist
auch eine Überprüfung ob DREQ auf 1 ist.
Aber, jetzt schon einmal vielen dank für eure Mühen.
--
Schwigi
hallo,
wenn du willst gebe i dir meine routinen komplett.
dann weisste danach obs deine ide-code oder dein VS1011-code war, der
faslsch ist!!!
gruss fubula
Moin,
Danke, für den Code.
Er hat mich auf die kleinen Fehler die in der Senderoutine waren
aufmerksam gemacht.
ich hatte anstelle immer 32 byte zu lesen 33 gelesen, so das natürlich
immer 1 byte gefehlt hat. Nebenher habe ich noch einen dummen Fehler mit
VS_CLOCKF gemacht erst das LOW-Byte zu senden.
Danke für die Unterstützung.
--
Schwigi