Forum: Mikrocontroller und Digitale Elektronik vs1011 mp3-datenstrom


von zero_gravity (Gast)


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

von fubu1000 (Gast)


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

von zero_gravity (Gast)


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

von zero_gravity (Gast)


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

von fubu1000 (Gast)


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.

von zero_gravity (Gast)


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

von fubu1000 (Gast)


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

von zero_gravity (Gast)


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

von Stefan S. (schwigi)


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

von zero_gravity (Gast)


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

von Stefan S. (schwigi)


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.
1
event_I_func:
2
  sbi SPCR, SPE ;Festplatte hängt am selben PORT, z.z. noch probleme mit Atmega16, weil zu wenig IOs
3
  cbi PORTD, 6 ;geht an XCS
4
  ldi r16, 0x02
5
  rcall send_spi
6
  ldi r16, 0x00
7
  rcall send_spi
8
  ldi r16, 0b00001000
9
  rcall send_spi
10
  ldi r16, 0b00000010
11
  rcall send_spi
12
  sbi PORTD, 6
13
14
  cbi PORTD, 6
15
  ldi r16, 0x02
16
  rcall send_spi
17
  ldi r16, 0x0B
18
  rcall send_spi
19
  ldi r16, 0x00
20
  rcall send_spi
21
  ldi r16, 0x00
22
  rcall send_spi
23
  sbi PORTD, 6
24
  
25
  cbi PORTD, 6
26
  ldi r16, 0x02
27
  rcall send_spi
28
  ldi r16, 0x03
29
  rcall send_spi
30
  ldi r16, LOW( 12288 )
31
  rcall send_spi
32
  ldi r16, HIGH( 12288 )
33
  rcall send_spi
34
  sbi PORTD, 6
35
  ldi r24, LOW( 2048 )
36
  ldi r25, HIGH( 2048 )
37
38
  ldi r16, 0
39
40
  cbi PORTD, 5 ;geht an XDCS
41
42
event_I_func_zero:
43
  rcall send_spi
44
  sbiw r24, 1
45
  brne event_I_func_zero
46
47
  sbi PORTD, 5
48
  cbi SPCR, SPE
49
  ret
50
51
52
event_play:
53
  rcall event_I_func
54
55
  ldi ZL, LOW( MP3_CurrentCluster )
56
  ldi ZH, HIGH( MP3_CurrentCluster )
57
58
  ld r18, Z+
59
  ld r19, Z+
60
  ld r20, Z+
61
  ld r21, Z+
62
63
event_play2:
64
  rcall fat_get_cluster_addr
65
66
  rcall hdd_sectcount_chs
67
  rcall hdd_read_cluster
68
69
  ldi ZL, LOW( FS_ClusterSize )
70
  ldi ZH, HIGH( FS_ClusterSize )
71
72
  ld r16, Z
73
  
74
  push r16
75
event_play_cluster_loop:
76
  rcall hdd_read_datareg2
77
78
  ldi ZL, LOW( FS_WorkSector )
79
  ldi ZH, HIGH( FS_WorkSector )
80
  
81
  ldi r16, 16
82
83
event_play_send_sector:
84
  push r16
85
  ldi r16, ( 1 << SPE ) | (1 << MSTR ) | (0 << SPR1) | (0 << SPR0)
86
  out SPCR, r16
87
  cbi PORTD, 5
88
  rcall send_spi_32byte
89
  sbi PORTD, 5
90
  pop r16
91
event_play_dreq:
92
  sbis PIND, 4 ;DREQ
93
  rjmp event_play_dreq
94
  dec r16
95
  brne event_play_send_sector
96
  ldi r16, ( 0 << SPE ) | (1 << MSTR ) | (0 << SPR1) | (0 << SPR0)
97
  out SPCR, r16
98
  
99
  pop r16
100
  dec r16
101
  push r16
102
  brne event_play_cluster_loop
103
  pop r16
104
105
106
  ldi ZL, LOW( MP3_CurrentCluster )
107
  ldi ZH, HIGH( MP3_CurrentCluster )
108
109
  ld r18, Z+
110
  ld r19, Z+
111
  ld r20, Z+
112
  ld r21, Z+
113
114
  rcall fat_get_next_cluster
115
116
  cpi r19, 0xFF
117
  brlo event_play_save_cluster
118
  cpi r18, 0xF8
119
  brsh event_play_stop
120
121
event_play_save_cluster:
122
  ldi ZL, LOW( MP3_CurrentCluster )
123
  ldi ZH, HIGH( MP3_CurrentCluster )
124
  st Z+, r18
125
  st Z+, r19
126
  st Z+, r20
127
  st Z+, r21
128
  
129
  mov r16, RXByte ;Abbruch über serielle schnittstelle
130
  cpi r16, 'n'
131
  breq event_play_stop
132
  rjmp event_play2
133
134
event_play_stop:
135
  ret

--
Schwigi

von daniel düsentrieb (Gast)


Angehängte Dateien:

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


von daniel düsentrieb (Gast)


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.

von Stefan S. (schwigi)


Angehängte Dateien:

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

von fubu1000 (Gast)


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

von Stefan S. (schwigi)


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

von fubu1000 (Gast)


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

von Stefan S. (schwigi)


Lesenswert?

Moin,

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

EMail: schwigi@gmx.de

--
Schwigi

von fubu1000 (Gast)


Lesenswert?

email iss losgeschickt

gruss fubu

von Stefan S. (schwigi)


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

von fubu1000 (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.