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
Du willst doch nicht ernsthaft die SD-Karte per Software SPI ansprechen. Was für eine Verschwendung;)
Wieso? Ich denke, dass ich damit flexibler bin, als wenn ich SD + VS1011 am selben Bus hängen habe. Wieso Verschwendung? meinst Du CPU Power? Gruß Tom
Dank Dir! Das ist mir vorhin beim Signalumbenennen passiert. Gruß Tom
Spannungsversorgung an dem SD-Karten-Slot direkt an den Slotbeinchen mit 10µF und 0,1µF Kerkos abblocken.
Oh, Mist, sonst hab ich dran gedacht. danke! Hat es eigentlich eine bewandnis wieso mache leute 100nF, andere 0,1µ schreiben? Gruß Tom
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.
Die 3 100nF paralell bei der Spannungsversorgung für den VS1011 hab ich aus dem Datenblatt so übernommen. Was für einen Sinn macht es hier eigentlich 3 getrennte Kondesatoren zu nehmen und nicht einfach einen 330nF? Gruß Tom
>SD mit fast CPU/2 auslesen.
Das sollte natürlich FCPU heissen.
Mit ner halben CPU wirds eh nix ;)
> 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.
Ach so!Dann kann ich die da ja wieder rausnehmen. Wie sehen es denn die anderen bezüglich des SoftSPI ? Wird das zu langsam? Sonst muss ich halt doch nen 16Mhz und nen Pegelshifter nehmen. Ist vielleicht sicherer. Gruß Tom
Da du das SOIC28-Gehäuse benutzt, brauchen die Audi-Out-Ausgänge jeweils einen 100µF Auskoppel-Elko. Das SOIC28-Gehäuse hat keinen GBUF-Pin.
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
ok, wenn du da keinen Kopfhörer anschließen willst, kannst du auch 10µF Kerkos nehmen.
>Hat es eigentlich eine bewandnis wieso mache leute 100nF, andere 0,1µ >schreiben? Hängt von den Vorlieben des einzelnen ab...
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.
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
Hab mir das gerade mal etwas näher angeschaut. Das mit dem direkten Weiterleiten von SD-CARD and den VS1011 ist ja ne nette Idee, aber wird wohl nur gut zu realisieren sein wenn ich raw von der Karte lesen kann und ken FAT Filesystem dazwischen habe oder? Gruß Tom
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
>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.
@Holger: Und dabei wechselseitig den Hardware SPI für SD-CARD und VS teilen? Ok, ich denke so mache ich es Gruß Tom
>@Holger: Und dabei wechselseitig den Hardware SPI für SD-CARD und VS >teilen? Jupp.
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. Gruß Tom
warum nimmst du nicht einen ATmega328, der geht bei 3,3V bis über 12MHz.
>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.
> 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 die beiden MP3-Player mit einem ATmega erschlagen soll?
>> 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.
@... 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
> ATMega128 mit 16MHz könnte durchaus zwei VS bedienen.
Ja, mit dem kann er dann auch gleichzeitig noch seine Mischpultsteuerung
machen.
>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ß.
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
> Wenn nicht sollte AREF nur über einen Serien-C (100n) an VCC angebunden > werden. Eh? Eher an GND.
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
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
>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
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
... 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
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
>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.
@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
Hi, bin gerade dabei mit Hilfe der Suchfunktion des Forums über diesen Thread gestolpert. Ich möchte diesen Thread gleich nutzen um eine Frage bez. der Versorgung des VS1011 loszuwerden. Ist es zwingend erforderlich, die analoge und die digitale Versorgung des ICs zu trennen?
Zwingend notwendig dürfte es eigentlich nicht sein, aber Der Musikqualität wird es wohl helfen. @Tom Was ist aus deinen USB-Plänen geworden? Sebastian
>@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
@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
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
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
Hallo, Mal aufs Datum des Threads geschaut? Mach mal besser einen neuen auf. Gruß Jannis
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
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.