Hallo, ich möchte mal so zum Spaß einen MP3-Player selber bauen. Als Controller wollte ich einem STM32F4 nehmen. Als DAC möchte ich gerne einen externen Audio-DAC nehmen. Welche gibt es da so und welche könntet ihr mir empfehlen? Die Audiodateien(mp3, wav ..) sollen Software mäßig decodiert werden. Außerdem soll man auch nicht nur Kopfhörer anschließen können sondern auch Passiv-Boxen. (Welche Spannungen hat ein Audiosignal für Passiv-Boxen? Geht das mit weniger als 20V?) Moritz
Einen DAC kann ich nicht empfehlen, aber die Spannung für deinen Verstärker hängt von der gewünschten Leistung ab.
Nimm doch erstmal das STM32F4 Discovery Board, das hat schon einen recht guten Audio-DAC drauf.
Hallo, >Du kriegst ja nicht mal DMA auf dem DAC zum laufen;) Mit den Beispielen von ST geht es ja. Wenn ich das genau so programmiere wie ST geht es nicht (ST hat bestimmt ein geheimen Trick :)) >Beitrag "STM32F4 Discovery MP3 Player - komplett mit Code" Ich möchte gerne ohne OS arbeiten (hab ich auch noch nie gemacht). Aber Vielen Dank trotzdem!
bei der Grösse eines solchen Projektes rentiert sowas durchaus. Und keine Angst...nach ein wenig Einarbeitung wird man ein OS nicht mehr missen wollen. Es vereinfacht das Handling und vor allem die Erweiterbarkeit ungemein. ist nur meine Meinung, die jetzt sicherlich wieder von irgendwelchen ich-programmiere-alles-in-ASM-mit-goto Freaks in Grund und Boden gebasht wird ;)
Moritz M. schrieb: > nicht nur Kopfhörer anschließen können sondern > auch Passiv-Boxen Wenn es nur für kleine Boxen ist, dann kann ich die "Boomer" von Texas Instruments (vormals National Semiconductor) sehr empfehlen. Die sind stromsparend und brauchen nur eine minimale, externe Beschaltung. http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?sectionId=630&tabId=2701&family=analog&uiTemplateId=AUDIO_PRDSRCH_T&familyId=925 z.B. den LM4890 mit 1W: http://www.ti.com/lit/ds/snas138k/snas138k.pdf Zum Thema OS oder nicht OS; für so ein Projekt wäre ein einfaches OS schon nicht schlecht. Hat man erst mal was lauffähiges, kommen schnell mal Wünsche nach mehr. Vielleicht soll mal noch ein farbiges TFT ran und das Cover angezeigt werden können. Dann brauchts noch eine Library um JPEG's zu decodieren. Wenn schon alles sauber programmiert ist, sollte sich das dann einfacher integrieren lassen, als wenn man ein Gebastel hat. Ein OS verleitet eher dazu, sauber zu programmieren.
Hallo, vielen Dank! Also ich wollte erstmal klein anfangen ohne ein OS und einfach nur Musik aus dem Speicher über einen DAC ausgeben. Kennt jemand vllt. eine Seite wo der Aufbau von MP3-Dateien beschrieben ist? Moritz
NXP hat für ihre ARM7-basierten Controller mal eine Application Note mit Beispiel für MP3 in Software vorgestellt. Vielleicht wäre das eine Anregung, einen anderen Controller zu benutzen. Wenn jemand die Vorarbeit schon gemacht hat, kann das viel Zeit sparen. Ansonsten ist MP3 schon eine ganze Menge Arbeit, deswegen gibt es fertige Chips, entweder von dieser Firma: http://www.vlsi.fi/ oder solche Klassiker wie den STA015 von ST.
Moin, für den Pic32 gibts auch ne ApNote, mit dem Helix MP3 Decoder, der lauft super auf dem F4. Was die "Lib" für den Codec auf dem Discovery angeht. Sind dort Fehler in der Takt Einstellung für den I2S. Sieh mal in der I2S Init nach. Die Formel dort ist falsch, den Fehler hab ich aber auch nicht gefunden, bzw. nicht lange gesucht, dort sind Konstanten für die gängigen Sampleraten im Kommentar. Ich hab dann einfach n switch dort eingefügt. MfG Tec Edit: Beitrag "Re: MP3 Anlage STM32" Oder schau einfach hier rein. Oder hier http://code.google.com/p/thundercyer-the-alarm-clock/source/browse/
Hallo, vielen Dank erstmal. Ich versuche grade den Audio DAC auf dem Discovery zum laufen zu bringen. Beitrag "STM32F4 Discovery Audio DAC CS43L22" Weiß jemand was genaueres zu dem Fehler der oben genannt wird? Die Funktion I2S_Init() hab ich gar nicht gefunden. Moritz
Moin, ich hab mal nach gesehen, in der STM32f4_spi.c ist die Funktion I2S_Init in dieser wird der Takt für den I2S anhand der samplerate eingestellt. Im RM findest du die richtigen werte oder oben in der File wo I2S_AudioFreq_Default gesetzt wirdt. MfG Tec
1 | /**
|
2 | * @brief Initializes the SPIx peripheral according to the specified
|
3 | * parameters in the I2S_InitStruct.
|
4 | * @param SPIx: where x can be 2 or 3 to select the SPI peripheral (configured in I2S mode).
|
5 | * @param I2S_InitStruct: pointer to an I2S_InitTypeDef structure that
|
6 | * contains the configuration information for the specified SPI peripheral
|
7 | * configured in I2S mode.
|
8 | *
|
9 | * @note The function calculates the optimal prescaler needed to obtain the most
|
10 | * accurate audio frequency (depending on the I2S clock source, the PLL values
|
11 | * and the product configuration). But in case the prescaler value is greater
|
12 | * than 511, the default value (0x02) will be configured instead.
|
13 | *
|
14 | * @note if an external clock is used as source clock for the I2S, then the define
|
15 | * I2S_EXTERNAL_CLOCK_VAL in file stm32f4xx_conf.h should be enabled and set
|
16 | * to the value of the the source clock frequency (in Hz).
|
17 | *
|
18 | * @retval None
|
19 | */
|
20 | void I2S_Init(SPI_TypeDef* SPIx, I2S_InitTypeDef* I2S_InitStruct) |
21 | {
|
22 | uint16_t tmpreg = 0, i2sdiv = 2, i2sodd = 0, packetlength = 1; |
23 | uint32_t tmp = 0, i2sclk = 0; |
24 | #ifndef I2S_EXTERNAL_CLOCK_VAL
|
25 | uint32_t pllm = 0, plln = 0, pllr = 0; |
26 | #endif /* I2S_EXTERNAL_CLOCK_VAL */ |
27 | |
28 | /* Check the I2S parameters */
|
29 | assert_param(IS_SPI_23_PERIPH(SPIx)); |
30 | assert_param(IS_I2S_MODE(I2S_InitStruct->I2S_Mode)); |
31 | assert_param(IS_I2S_STANDARD(I2S_InitStruct->I2S_Standard)); |
32 | assert_param(IS_I2S_DATA_FORMAT(I2S_InitStruct->I2S_DataFormat)); |
33 | assert_param(IS_I2S_MCLK_OUTPUT(I2S_InitStruct->I2S_MCLKOutput)); |
34 | assert_param(IS_I2S_AUDIO_FREQ(I2S_InitStruct->I2S_AudioFreq)); |
35 | assert_param(IS_I2S_CPOL(I2S_InitStruct->I2S_CPOL)); |
36 | |
37 | /*----------------------- SPIx I2SCFGR & I2SPR Configuration -----------------*/
|
38 | /* Clear I2SMOD, I2SE, I2SCFG, PCMSYNC, I2SSTD, CKPOL, DATLEN and CHLEN bits */
|
39 | SPIx->I2SCFGR &= I2SCFGR_CLEAR_MASK; |
40 | SPIx->I2SPR = 0x0002; |
41 | |
42 | /* Get the I2SCFGR register value */
|
43 | tmpreg = SPIx->I2SCFGR; |
44 | |
45 | /* If the default value has to be written, reinitialize i2sdiv and i2sodd*/
|
46 | if(I2S_InitStruct->I2S_AudioFreq == I2S_AudioFreq_Default) |
47 | {
|
48 | i2sodd = (uint16_t)1;//0; //changed due to calc issues |
49 | i2sdiv = (uint16_t)53;//2; |
50 | }else if(I2S_InitStruct->I2S_AudioFreq == I2S_AudioFreq_48k) { |
51 | i2sodd = (uint16_t)1; |
52 | i2sdiv = (uint16_t)12; |
53 | }
|
54 | /* If the requested audio frequency is not the default, compute the prescaler */
|
55 | else
|
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.