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 |
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
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, das wäre nett, denn ein wenig nervt es schon, das er nicht so richtig will. EMail: schwigi@gmx.de -- Schwigi
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.