www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Audio-Player mit AT91SAM7S256


Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich hab vor mir mit dem AT91SAM7S256 einen Audio-Player zu basteln. Ich 
schreibe bewusst nicht Mp3-Player oder Vorbis-Player weil ich der 
Schwierigkeit halber vorerst nur PCM-Dateien abspielen möchte. Als Codec 
hab ich mir den TLV320AIC23B vorgestellt - der wurde ja auch schon bei 
ähnlichen Projekten benutzt. Als Datenquelle für die PCM-Dateien möchte 
ich gern eine SD/MMC-Karte benutzen. Weil auf der "AT91SAM7S256 ARM 
Entwicklungsplatine" schon alles drauf ist außer der Codec werde ich 
wohl diese benutzen. Ich hab mich über PCM und den WAVE / RIFF-Container 
schon informiert und denk, dass ich den selbst implementieren kann. Von 
den Verarbeitungsschritten hab ich das Vorstellung:

SD/MMC-Karte ---(SPI)---> AT91SAM7S256 ---(SPI + I2S)---> TLV320AIC23B 
--> Kopfhörer

Im Controller werden die Daten dann eben aus dem RIFF-Container geholt 
und über I2S an den TLV320AIC23B geschickt. Klingt das ganze realistisch 
und was haltet ihr davon? Welche Tipps habt ihr für mich? Danke!

mfg blan

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sollte sicherlich machbar sein.
das einzige was evtl. kritisch ist das du genug zwischenpuffer hast 
damit der audio-datenstrom nicht abreisst.
ansonsten sollte das denke ich machbar sein.
würde auch gern sowas ähnliches machen, stehe aber irgendwie mit den 
arm's auf kriegsfuß, denn ich krieg da keinen gescheiten fuß rein. :-((
ansonsten viel glück.

gruß
rene

Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also der AT91SAM7S256 hat 64kByte RAM. ich kann jetzt aber überhaupt 
nicht einschätzen wie viel so ein Zwischenpuffer braucht bzw. wie viel 
mein Programm brauchen wird - das Programm sollte aber egtl nicht so 
groß sein. Gibt es da eine Formel mit der ich den Zwischenpuffer für so 
ein PCM-Stream berechnen kann?

Er sollte eine Sample-Rate von 44100Hz mit 16bit haben.

mfg blan

Autor: TheMason (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also eine formel gibt es denke ich nicht dafür. es hängt davon ab wie 
schnell du deine sd-karte auslesen kannst.
aber ich denke ein puffer von einigen kB (2-3) sollte schon reichen.

Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also ich hab hier mal ein Bild zu diesen PCM-Samples gefunden und 
versuch es zuverstehen:

http://www.it.fht-esslingen.de/~schmidt/vorlesunge...

Sehe ich das richtig, dass ich bei 16bit Stereo einfach nur zwei 8bit 
Kanäle habe? Irgendwie erscheint mir das wenig - stimmt das so?

mfg blan

Autor: sniper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

das mit der Formel ist in der Tat nicht pauschal beantwortbar, es hängt
sehr davon ab, wie verläßlich die PCM Daten über einen längeren Zeitraum 
isochron bereitgestellt werden können.

Ich hab das Thema gerade gemacht und brauche für die reine I2S 
tatsächlich nur 2x1024 Byte, jedoch davorgeschaltet nochmal 512kB, weil 
die PCM Daten
bei mir über das Netzwerk kommen.

TIP 1:
In deinem Fall (hab grad mal das Product Data sheet der AT91 Serie 
überflogen) könntest du glaube ich eine DMA für SPI und eine für I2S 
nutzen.

TIP 2:
Denk doch mal über folgenden Vorschlag nach:
* I2S-Interrupt triggert DMA, die DMA lädt dann I2S Register nach
* Die I2S-DMA hat immer einen 1024 Byte Block in Arbeit
* ein weiterer Block ist im Standby.
* Bei DMA Interrupt (1024 Byte abgearbeitet) auf Standby Block 
umschalten
* nach Umschalten einen neuen Standby Block vorbereiten

Falls ich richtig gerechnet habe, mußt du es schaffen, ca. alle 5,8ms
1024 Byte bereitzustellen, damit HiFi Freuden aufkommen.

TIP 3:
Bring nicht die Links-Rechts Ordnung im Datenstrom durcheinander, so
wie es mir passiert ist...

Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal danke.
Ja also so wie ich das mitbekommen habe kann der AT91SAM7**** für jede 
Komponente DMA benutzen. Benutzt du den gleichen Codec wie ich vor habe 
zu benutzen? Und kommen deine Daten im PCM-Format übers Netzwerk?
Also theoretisch sollte es doch machbar sein wenn es leute schaffen mit 
dem gleichen Mikrocontroller in der gleichen Zeit noch mp3 zu decodieren 
oder?

mfg blan

Autor: seb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

bin grade an einem ähnlichen Projekt. Hardwaretechnisch habe ich mich an 
den Arm-mp3-Player Projekt gehalten 
(http://www.mikrocontroller.net/articles/ARM-MP3-Player).

Ich will aber was interaktives daraus bauen, mit Display, Tasten und 
allem Schnick und schnack. Um möglichst flexibel zu sein, habe ich das 
ganze auf FreeRTOS aufgebaut und für die Entwicklung die mp3-decodierung 
erstmal weggelassen.

Aktueller Stand: Wave (16 Bit, 44.1 kHz) geht prima, auch mit doppelter 
Abspielgeschwindigkeit (mit irgend einer ollen 256 MB-Karte). Der Buffer 
ist nicht besonders groß; schau mal beim oben genannten Projekt, die 
ganze DMA-Geschichte habe ich fast wörtlich übernommen.

Autor: sniper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich hab nur einen DAC gebraucht und daher den PCM1770 genommen.
Ja, bei mir kommt bereits PCM übers Netzwerk und zwar von einem Win-PC,
der bekanntermaßen recht unvorhersehbar schedult - daher brauche
ich soviel Zwischenspeicher.

Du hast ja gute Hardware-Unterstützung. Wenn du die sinnvoll nutzt,
hat dein AT91 bestimmt Langeweile beim PCM abspielen. Viel Puffer
brauchst du jedenfalls nicht, wenn du von MMC streamen möchtest

Also viel Erfolg...

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau das habe ich mit der selben Hardware schon gemacht:
http://www.mikrocontroller.net/articles/ARM_MP3/AAC_Player -> play_wav.c

RIFF-Auswertung habe ich nicht implementiert, ich schicke die WAV-Files 
einfach direkt an den Codec.

Autor: blan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

okay das klingt schonmal sehr gut, dass der zwischenspeicher reichen 
wird. also ich werde den WAVE / RIFF Container wohl selbst 
implementieren - will mir ja nicht nur Code zusammensuchen. Also hab ich 
das jetzt richtig verstanden, dass 16bit-Stereo pro Kanal (links, 
rechts) jeweils 8bit hat - klingt für mich bischen wenig?

Ein problem wird noch sein, dass der Codec so ein kleines SMD-Bauteil 
ist - weiss noch nicht wie ich das löten soll.

mfg blan

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Üblich sind 16 Bit pro Kanal.

> weiss noch nicht wie ich das löten soll

http://www.mikrocontroller.net/articles/IC-Gehäuse...
oder
Audio Codec Board mit TLV320AIC23b

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@blan
Nein 16Bit-Stereo, hat für jeden Kanal 16Bit, siehe auch deine eigene 
Grafik die du online gestellt hast.
Diese 16Bit kann man aus 2x8Bit zusammensetzen.

Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@tom
dann sollte ein Sample bei Stereo ja 4byte groß sein - für jeden Kanal 
16bit. Was mich dann aber verwundert ist die Ausgabe meines 
Audio-Players (mplayer)
AO: [esd] 44100Hz 2ch s16le (2 bytes per sample)

Warum sinds denn hier 2bytes / Sample bei 16bit Stereo?

mfg blan

Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@andreas
Danke für den Link! Ich hab jetzt vor mir das hier zu bestellen: 
http://www.futurlec.com/SMD_Adapters.shtml (28 pin SSOP Adapter). Würde 
das passen, weil der Codec ein 28-Pin TSSOP Gehäuse hat - ich hab aber 
keine Ahnung was das T für ein unterschied macht.

mfg blan

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>ich hab aber keine Ahnung was das T für ein unterschied macht.

T = Thin. Die Gehäuse sind niedriger (dünner).

Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
also ich hab den TLV320AIC23B jetzt auf meine Adapterplatine gelötet. 
Allerdings weiss ich nicht ob er heil geblieben ist. Kann ich ihn 
irgendwie testen ohne unnötige Fehlerquellen ( zB. i2c, spi Ansteuerung 
) zu benutzen? Vielleicht durch das Messen einer bestimmten Spannung an 
einem Pin?

mfg blan

Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,
ich komm momentan ins stutzen. kann es sein, das die Olimex 
AT91SAM7S256-Platine die Pins für SSC (I2S) für was anderes benutzt und 
ich das SSC in die Tonne treten kann?

mfg blan

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, SSC ist voll nutzbar. Siehe ARM MP3/AAC Player.

Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, das hab ich auch schon gesehen. allerdings sind die Pins für TK, TF, 
TD schon für andere Zwecke missbraucht worden. Wenn ich dem Plan hier 
trauen kann: 
http://www.olimex.com/dev/images/ARM/SAM/SAM7-Pxxx...

mfg blan

Autor: B. Lan (blan)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann mir niemand sagen wie ich ohne zu löten an alle SSC Transmit-Pins 
herankomme?
Laut dem Schaltplan kann ich nähmlich nur TF ohne weiteres abgreifen. 
TD ist mit der LED verbunden - das würde sich vielleicht noch 
einrichten lassen aber TK führt zum USB-Anschluss und da seh ich keine 
möglichkeit das abzugreifen. Niemand eine Idee?

mfg blan

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, da hat sich ja in der Rev. E leider einiges geändert. Ich fürchte 
das wird ein Gebastel TK abzugreifen. Schau dir als Alternative 
vielleicht mal das SAM7-EX256 an, da sind alle benötigten Signale am 
EXT-Anschluss verfügbar.

Autor: Heinzel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Embedded ohne löten ... hmmm...
Macht doch dann keinen Spaß

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.