MP3 Player Schaltplan zum Review

#1489040
Lesenswert?

Hi,

im Anhang findet Ihr den Schaltplan für meinen geplanten MP3 Player mit
dem VS1011.

Schaut doch bitte mal, ob ich irgendwo eien Schnitzer reingebaut habe.

Das Muxen bei der SD-Karte ist notwendig, weil später ein zweiter AVR
der das gesamte System kooridiniert auch auf die SD-Karte zugreifen
soll.

Danke & Gruß

Tom
Angehängte Dateien:
Gast #1489089
Lesenswert?

vsdatarequest ist nicht angeschlossen.

>Wieso Verschwendung? meinst Du CPU Power?

Ja. Dein ATMega läuft mit 8MHz. Mit Hardware SPI
könntest du die SD mit fast CPU/2 auslesen.
Per Pintoggle wird das wohl eher so bei 1MHz
oder noch weniger liegen. Wenn das mal reicht
um MP3 ohne zu ruckeln abzuspielen.
Gast #1489145
Lesenswert?

> Die 3x 100nF paralell bei der Spannungsversorgung für den VS1011 hab ich
> aus dem Datenblatt so übernommen.

Ja, da sind 3 x 100nF gezeichnet, weil die Versorgungsspannung dann auf 
3 Pins geht.
Bedeutet: jeder Pin bekommt direkt am entsprechenden IC-Pin einen 100nF 
spendiert. Der 10µF, der auch noch eingezeichnet ist, kommt in die 
Zuleitung der Spannungsversorgung. Natürlich in der Nähe des IC.
#1489199
Lesenswert?

Mit Koppelkondesator meinst Du doch einen Kondensator in Reihe 
geschaltet oder?

Ok, das mit den Kodensatoren kommt noch. Sind da wirklich 100µ notwendig 
wenn ich von dort nur an einen OPV gehe? Würden da nicht 2,2µ Folie 
reichen?

Im Datenblatt steht

If GBUF is not used, LEFT and RIGHT must be provided with 1-100 µF 
capacitors depending on load
resistance.

Gruß
Tom
#1489632
Lesenswert?

Sebastian ... schrieb:
> Würde auch Hard-SPI nehmen, ist sonst echt reinste Verschwendung. Wenn
> SD und VS am selben SPI hängen, kannst du sogar die Daten direkt von der
> SD-Karte zum VS weiterreichen, ohne, dass sie erst in den µC müssen.
> Musst nur noch takten.

Aber habe ich dann die volle Kontrolle über den Datenstrom? Wie mach ich 
das denn genau?

Gruß
Tom
#1490426
Lesenswert?

Du musst natürlich erst den FAT-overhead und die Blockanforderungen 
zwischen SD-Karte und AVR ausmachen. Wenn dann die Daten dran sind 
schaltest du den VS wieder an den SPI und taktest nur noch die Daten 
rüber. Nach einem Block muss der VS wieder weg vom Bus und der nächste 
Block vom AVR angefordert werden.

Die größten Bedenken hätte ich wegen den Zugriffszeiten. Du hast dann ja 
nur die 2kB(?) Ram des VS. Die Idee kommt aber nicht von mir, denke also 
dass es läuft.

Sebastian
Gast #1490441
Lesenswert?

>Die größten Bedenken hätte ich wegen den Zugriffszeiten. Du hast dann ja
>nur die 2kB(?) Ram des VS. Die Idee kommt aber nicht von mir, denke also
>dass es läuft.

Das geht schon so. Selbst wenn man die Daten von der SD erst
in den ATMega liest und dann in den VS schiebt, reichen
8MHz Takt für 320kBps MP3 Dateien aus. Auch mit FAT Overhead.
Gast #1490478
Lesenswert?

>warum nimmst du nicht einen ATmega328, der geht bei 3,3V bis über 12MHz.

Da hat man einfach zu wenig Pins frei!

Allerdings frage ich mich was der zweite ATMega da an der
SD Karte machen soll? Songs draufspielen? Viel zu langsam.
Gast #1490492
Lesenswert?

>> Da hat man einfach zu wenig Pins frei!
>Für was? Für die drei LEDs aus dem Stromlaufplan von oben?

>Oder bist du auf dem Trip, dass er die Mischpultsteuerung und

Oh, von seinem Mischpult wusste ich nichts.

>die beiden MP3-Player mit einem ATmega erschlagen soll?

ATMega128 mit 16MHz könnte durchaus zwei VS bedienen.
#1490500
Lesenswert?

@... Du blickst schon ziemlich gut durch mein geplantes System durch ;-)

@Holger: Doch, eigentlich sollte der AVR der die Kontrolle des 
Gesamtsystems (zigBee Empfänger, Mischpult, 2x MP3 Player) auch per 
USB-Songs vom PC übernehmen und auf die SD-Karte schreiben. Ist das 
wirklich soo langsam?

Gibt es USB-Chips, die ein direktes Interface zu einer SD-Karte (und 
idealerweise auch noch ein 232-Interface realisieren?

Gruß
Tom
Gast #1490520
Lesenswert?

>auch per
>USB-Songs vom PC übernehmen und auf die SD-Karte schreiben. Ist das
>wirklich soo langsam?

Unter idealen Bedingungen hab ich mal 450kB/s geschafft.
Und das auch nur mit meiner schnellsten Karte.
Da war aber nix mit Datenübertragung dazwischen.
Wenn du Glück hast kommst du auf 100-200kB/s.
Für ne 3MB MP3 dauert das dann sagen wir einfach mal 30s.
Um eine Gigabyte Karte zu füllen......... Spinnenweben
unter den Achseln;)

Schraub die Songs per SD-Kartenleser/schreiber drauf.
Mit ATMega macht das keinen Spaß.
#1490770
Lesenswert?

Ist das mit den 2 SPI-Mastern noch aktuell? Wieso nimmst du keinen 
74HC157? Du bräuchtest dann nur einen Chip. MISO kann man ja problemlos 
dauerhaft durchverbinden. Und dass man nicht beide Master abschalten 
kann sollte doch eigenltich auch nicht stören.
Oder du regelst das ganze gleich per Software... AVR1 signalisiert AVR2, 
dass er jetzt dran ist und schaltet seinen SPI in Slave-mode. Dann darf 
AVR2 ran, bis er wieder die Kontrolle abgibt.

Nutzt du den ADC? Wenn nicht sollte AREF nur über einen Serien-C (100n) 
an VCC angebunden werden.

vsXDCS, vsXCS und VSReset finde ich überhaupt nicht beim AVR. Die müssen 
ja irgendwo gesteuert werden. vsDataRequest ist zwar beim AVR 
eingezeichnet, aber nicht angeschlossen...
Den CS-Leitungen des VS darst du dann auch gleich einen Pullup 
spendieren.

Weil hier noch über die Geschwindigkeit geredet wurde: 8MHz reicht dicke 
für mp3 aus einem FAT-system. Ich Spiel hier wav von Festplatte mit 
16Mhz. Ich hatte nur etwas bedenken wegen des Puffers. Meine Festplatte 
hat halt doch recht lange Zugriffszeiten, was einen extra Puffer nötig 
macht. Mit SD-Karten hab ich noch nie gearbeitet und kann es also auch 
nicht einschätzen. War reine Vorsicht.

Gruß, Sebasian
#1490838
Lesenswert?

holger schrieb:
>>auch per
>>USB-Songs vom PC übernehmen und auf die SD-Karte schreiben. Ist das
>>wirklich soo langsam?
>
> Unter idealen Bedingungen hab ich mal 450kB/s geschafft.
> Und das auch nur mit meiner schnellsten Karte.
> Da war aber nix mit Datenübertragung dazwischen.
> Wenn du Glück hast kommst du auf 100-200kB/s.
> Für ne 3MB MP3 dauert das dann sagen wir einfach mal 30s.
> Um eine Gigabyte Karte zu füllen......... Spinnenweben
> unter den Achseln;)
>
> Schraub die Songs per SD-Kartenleser/schreiber drauf.
> Mit ATMega macht das keinen Spaß.

Na im Bespielmodus wäre ja sonst nichts los, vielleicht komme ich dann 
ja auf Deine 450 ;-)

Problem ist, ich will für die von mir geplante Lösung die SD-Karten 
nicht zum Rausnehmen machen.

Daher die Frage ob es einen USB Baustein gibt, der gleich zwei 
Enddevices implementiert, einmal SD und einmal RS232.

Gruß

Tom
#1490842
Lesenswert?

Sebastian ... schrieb:
> Ist das mit den 2 SPI-Mastern noch aktuell? Wieso nimmst du keinen
> 74HC157? Du bräuchtest dann nur einen Chip. MISO kann man ja problemlos
> dauerhaft durchverbinden. Und dass man nicht beide Master abschalten
> kann sollte doch eigenltich auch nicht stören.
> Oder du regelst das ganze gleich per Software... AVR1 signalisiert AVR2,
> dass er jetzt dran ist und schaltet seinen SPI in Slave-mode. Dann darf
> AVR2 ran, bis er wieder die Kontrolle abgibt.
>
> Nutzt du den ADC? Wenn nicht sollte AREF nur über einen Serien-C (100n)
> an VCC angebunden werden.
>
> vsXDCS, vsXCS und VSReset finde ich überhaupt nicht beim AVR. Die müssen
> ja irgendwo gesteuert werden. vsDataRequest ist zwar beim AVR
> eingezeichnet, aber nicht angeschlossen...
> Den CS-Leitungen des VS darst du dann auch gleich einen Pullup
> spendieren.
>
> Weil hier noch über die Geschwindigkeit geredet wurde: 8MHz reicht dicke
> für mp3 aus einem FAT-system. Ich Spiel hier wav von Festplatte mit
> 16Mhz. Ich hatte nur etwas bedenken wegen des Puffers. Meine Festplatte
> hat halt doch recht lange Zugriffszeiten, was einen extra Puffer nötig
> macht. Mit SD-Karten hab ich noch nie gearbeitet und kann es also auch
> nicht einschätzen. War reine Vorsicht.
>
> Gruß, Sebasian

Danke für die vielen Hinweise. Ja, das mit den zwei Mastern ist noch 
aktuell. Problem ist, das beide AVRs den SPI Bus jeweils auch für sich 
selber Nutzen, d.h. ich muss Sie trennen.

Danke für den Hinweis mit dem 74HC157 das ist ja ein richtiger 
Umschalter, also keine Tristate Schaltung. So was hatte ich ursprünglich 
gesucht. Bin einfach noch nicht lange genug dabei um diese 
Standardbauteile zu kennen.

Gruß
Tom
Gast #1490910
Lesenswert?

>Ich hatte erst das mit den 32 Byte Puffer falsch verstanden, ich dachte
>der VS würde nicht mehr puffern, da hätte ich mir dann doch Sorgen
>gemacht ständig zwischen SD und VS zu switchen. Aber die 32 byte sind ja
>nur sicherheitspuffer.


Das musst du mir ma genauer erklären.
Ich habe mir auch ein MP3 Player gebaut mit VS1011 + ATMega644 + SD + 
FAT es spielt auch ohne große Probleme 320kBit/s.

Aber ich lade immer nur 32Byte in den VS1011 und warte ab bis er neue 
Daten brauchen.

Du schreibst ja das mann auch mehr Daten in denn VS1011 laden kann und 
so mit auch nicht so oft von Sd zu vs1011 springen muss.

Wie hast du das gemacht?^^

Ich habe auch die zeile in den Features gelesen: "5.5 KiB On-chip RAM 
for user code / data"...

Kannste mir vll ein tipp geben wie ich das machen kann?

danke
mfg Max
#1490920
Lesenswert?

Hast Du es schon mal probiert? So wie ich das Datenblatt verstehe und 
was ich aus einigen anderen Diskussionen hier verstanden habe.
Wird DataReq erst auf low wenn er keine Daten mehr annehmen kann:

The DREQ pin/signal is used to signal if VS1011e’s FIFO is capable of 
receiving data. If DREQ is high,
VS1011e can take at least 32 bytes of SDI data or one SCI command. When 
these criteria are not met,
DREQ is turned low, and the sender should stop transferring new data.


Da steht at least 32 bytes, d.h. wenn er wenigstens 32 Byte aufnehmen 
kann.

Because of a 32-byte safety area, the sender may send upto 32 bytes of 
SDI data at a time without
checking the status of DREQ, making controlling VS1011e easier for 
low-speed microcontrollers.
Note: DREQ may turn low or high at any time, even during a byte 
transmission. Thus, DREQ should
only be used to decide whether to send more bytes. It should not abort a 
transmission that has already
started.

D.h. wenn DREQ einmal high ist, kannst Du problemlos 32Byte auf einmal 
senden. Wenn es immer noch high ist, einfach noch mal 32 Byte. zumindest 
verstehe ich das so.

Wie schaffst Du es bei den 32Byte häppchen die rechtzeitig von der SD zu 
bekommen? Hast Du SD und VS am selben  Bus?

gruß

Tom
#1490969
Lesenswert?

... schrieb:
>> Wenn nicht sollte AREF nur über einen Serien-C (100n) an VCC angebunden
>> werden.
>
> Eh? Eher an GND.

GND ist natürlich richtig. War einfach schon zu spät gestern...

Zum Puffer: So wie Tom es schreibt passts. Der Puffer ist größer als 
32Byte (weiß jetzt nicht wie viel genau). DREQ zeigt nur an, ob 
mindestens 32 Byte platz ist.

Sebastian
#1491452
Lesenswert?

Thomas Burkhart schrieb:

> Daher die Frage ob es einen USB Baustein gibt, der gleich zwei
> Enddevices implementiert, einmal SD und einmal RS232.

Dürfte selten sein. Aber du kannst ein Hub einbaun und an den eine SD 
und eine RS232 Brücke hängen.

SD-Brücke musst du dir aber selbst suchen. Ich hab grad nur ne 
HDD-USB-Bridge (CY7C68300B) zum laufen gebracht. Die ist mitlerweile 
recht zahm und geht auf Befehl auch vom Bus runter. Ist aber natürlich 
P-ATA, braucht also ein paar Pins mehr...

Sebastian
Gast #1491809
Lesenswert?

>Wie schaffst Du es bei den 32Byte häppchen die rechtzeitig von der SD zu
>bekommen? Hast Du SD und VS am selben  Bus?


Mein Porgramm Code sieht so aus:
1
while(!feof_(stream))
2
{
3
     for(i = 0; i < 32; i++)        
4
       mp3stream[i] = fgetc_(stream);
5
        
6
  vs_wait();
7
      
8
  DCS_VS1011_ENABLE();
9
      
10
  for(i = 0; i < 32; i++)
11
  {
12
    
13
    spi_out(mp3stream[i]);
14
  }
15

16
  DCS_VS1011_DISABLE();  
17
}
18

19
void vs_wait(void)
20
{
21
  while(!(PINA & (1 << PINA2)))
22
  {
23
    PORTA |= (1 << VS_LED);
24
    cmd();  //Termial programm auswerten
25
  }
26
  PORTA &= ~(1 << VS_LED);
27
}

Also mein Programm sendet mehr als 32Byte. Hatte vorher gedacht das er 
gleich nach 32Byte auf Low schaltet.
#1493967
Lesenswert?

@Max: Was passiert bei Deinem Programm eigentlich wenn Du in der for 
schleife beim lesen der 32 Byte über die das Fileende hinausschreibst??

Auch wäre es sehr viel effizienter die Zeichen nicht einzeln zu lesen 
und nur 32Byte zu verarbeiten. Ließ mehr auf einmal in den Puffer.

Gruß

Tom
Gast #1509751
Lesenswert?

>@Max: Was passiert bei Deinem Programm eigentlich wenn Du in der for
>schleife beim lesen der 32 Byte über die das Fileende hinausschreibst??

Dann gibt er ein EOF zurück (0x00).

>Auch wäre es sehr viel effizienter die Zeichen nicht einzeln zu lesen
>und nur 32Byte zu verarbeiten. Ließ mehr auf einmal in den Puffer.
>
>Gruß
>
>Tom

Ja das ich richtg, Optimieren kann man da noch einiges. War erst mal 
froh das alles ging (bis 320kbits). Hab aber leider bissl die lust 
verloren bzw. frage ich mich für wenn ich mir eigentlich die arbeit 
mache^^.

Max
#1510044
Lesenswert?

@Max: Das ist bei mir das Gute. Ich hab wirklich ne konkrete Anwendung 
für die Dinge die ich baue ;-)


@Sebastian: Ich hab mir das USBKey Board von ATMEL besorgt und werde 
demnächst mal testen wie schnell ich auf die SD Card schreiben kann. Auf 
jeden Fall gut ein Bauteil weniger zu brauchen.

Gruß

Tom
#1510784
Lesenswert?

Dann schon mal viel Erfolg.
Mit AVR kommst du halt SPI-Seitig maximal auf Clk/2, also 8Mbit/s, also 
1MByte/s (und selbst das stimmt ja nicht ganz...)
Also Im besten Fall brauchst du für einen Song noch über 3 Sekunden bzw. 
über 30 Sekunden für ein Album.
Mir persönlich wärs zu langsam (Meine ATA-Bridge macht knapp 30MByte/s 
:-)), aber ich weiß ja nicht, was für Datenmengen du rüberspielen 
willst.
Wie gesagt: Viel Erfolg mit dem Key. Und meld dich wenns was neues gibt.

Sebastian
#2352061
Lesenswert?

Hallo!
Sebastian schreibt, man kann von der SD-Karte die Daten direkt an den 
MP3-Dekoder weiterleiten, wenn man den richtigen Datenblock erwischt:

"Du musst natürlich erst den FAT-overhead und die Blockanforderungen
zwischen SD-Karte und AVR ausmachen. Wenn dann die Daten dran sind
schaltest du den VS wieder an den SPI und taktest nur noch die Daten
rüber. Nach einem Block muss der VS wieder weg vom Bus und der nächste
Block vom AVR angefordert werden."

Wie muss ich das ganze denn dann verdrahten? SP0 der SD-Karte an SPI des 
VLSI-Dekoders? Und kann der Controller dem VLSI Befehle senden?

Ich vermute mal, du denkst da an so eine Hardware, wie ich sie angehängt 
habe (sie ist unter diesem Link zu finden: 
http://www.teuthis.com/html/mmc_mp3.html)

Das funktioniert also quasi per Weiterleitung? Dann müsste es ja doppelt 
so schnell sein, wie die anderen Varianten und außerdem weniger Speicher 
verbrauchen?
Viele Grüße,
Christoph
Angehängte Dateien:
#2352183
Lesenswert?

Ja, sowas in die Richtung meinte ich. Muss aber zugeben, dass ich selbst 
noch nie was mit geteiltem SPI-"BUS" gemacht habe. Man müsste das ganze 
eigetnlich auch kaskadieren können (also als Ring aufbauen). Dann 
verliert man zwar bei einigen Konstellationen wieder etwas Bandbreite, 
kann dafür aber auch Daten vom mp3-decoder wieder empfangen. Aber prüfe 
das besser selbst nochmal, bevor du es so aufbaust.

Die direkte Weiterleitung dürfte sogar mehr als doppelt so schnell sein, 
weil du dir den Verwaltungs-overhead im Controller sparst. Zumindest 
teilweise.

Viele Grüße,
Sebastian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren