www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik vs1011 mp3-datenstrom


Autor: zero_gravity (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: zero_gravity (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: zero_gravity (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: zero_gravity (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: zero_gravity (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan Schwieger (schwigi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: zero_gravity (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan Schwieger (schwigi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.
event_I_func:
  sbi SPCR, SPE ;Festplatte hängt am selben PORT, z.z. noch probleme mit Atmega16, weil zu wenig IOs
  cbi PORTD, 6 ;geht an XCS
  ldi r16, 0x02
  rcall send_spi
  ldi r16, 0x00
  rcall send_spi
  ldi r16, 0b00001000
  rcall send_spi
  ldi r16, 0b00000010
  rcall send_spi
  sbi PORTD, 6

  cbi PORTD, 6
  ldi r16, 0x02
  rcall send_spi
  ldi r16, 0x0B
  rcall send_spi
  ldi r16, 0x00
  rcall send_spi
  ldi r16, 0x00
  rcall send_spi
  sbi PORTD, 6
  
  cbi PORTD, 6
  ldi r16, 0x02
  rcall send_spi
  ldi r16, 0x03
  rcall send_spi
  ldi r16, LOW( 12288 )
  rcall send_spi
  ldi r16, HIGH( 12288 )
  rcall send_spi
  sbi PORTD, 6
  ldi r24, LOW( 2048 )
  ldi r25, HIGH( 2048 )

  ldi r16, 0

  cbi PORTD, 5 ;geht an XDCS

event_I_func_zero:
  rcall send_spi
  sbiw r24, 1
  brne event_I_func_zero

  sbi PORTD, 5
  cbi SPCR, SPE
  ret


event_play:
  rcall event_I_func

  ldi ZL, LOW( MP3_CurrentCluster )
  ldi ZH, HIGH( MP3_CurrentCluster )

  ld r18, Z+
  ld r19, Z+
  ld r20, Z+
  ld r21, Z+

event_play2:
  rcall fat_get_cluster_addr

  rcall hdd_sectcount_chs
  rcall hdd_read_cluster

  ldi ZL, LOW( FS_ClusterSize )
  ldi ZH, HIGH( FS_ClusterSize )

  ld r16, Z
  
  push r16
event_play_cluster_loop:
  rcall hdd_read_datareg2

  ldi ZL, LOW( FS_WorkSector )
  ldi ZH, HIGH( FS_WorkSector )
  
  ldi r16, 16

event_play_send_sector:
  push r16
  ldi r16, ( 1 << SPE ) | (1 << MSTR ) | (0 << SPR1) | (0 << SPR0)
  out SPCR, r16
  cbi PORTD, 5
  rcall send_spi_32byte
  sbi PORTD, 5
  pop r16
event_play_dreq:
  sbis PIND, 4 ;DREQ
  rjmp event_play_dreq
  dec r16
  brne event_play_send_sector
  ldi r16, ( 0 << SPE ) | (1 << MSTR ) | (0 << SPR1) | (0 << SPR0)
  out SPCR, r16
  
  pop r16
  dec r16
  push r16
  brne event_play_cluster_loop
  pop r16


  ldi ZL, LOW( MP3_CurrentCluster )
  ldi ZH, HIGH( MP3_CurrentCluster )

  ld r18, Z+
  ld r19, Z+
  ld r20, Z+
  ld r21, Z+

  rcall fat_get_next_cluster

  cpi r19, 0xFF
  brlo event_play_save_cluster
  cpi r18, 0xF8
  brsh event_play_stop

event_play_save_cluster:
  ldi ZL, LOW( MP3_CurrentCluster )
  ldi ZH, HIGH( MP3_CurrentCluster )
  st Z+, r18
  st Z+, r19
  st Z+, r20
  st Z+, r21
  
  mov r16, RXByte ;Abbruch über serielle schnittstelle
  cpi r16, 'n'
  breq event_play_stop
  rjmp event_play2

event_play_stop:
  ret

--
Schwigi

Autor: daniel düsentrieb (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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


Autor: daniel düsentrieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Stefan Schwieger (schwigi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan Schwieger (schwigi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan Schwieger (schwigi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

das wäre nett, denn ein wenig nervt es schon, das er nicht so richtig 
will.

EMail: schwigi@gmx.de

--
Schwigi

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
email iss losgeschickt

gruss fubu

Autor: Stefan Schwieger (schwigi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: fubu1000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kein problem,
freut mich geholfen zu haben.
hoffe es funzt jetzt alles bei dir.
gruss aus der schönen documenta stadt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.