Contruye tu propio reproductor de mp3. Hilo para postear

Iniciado por jokerman, 23 de Mayo de 2008, 08:17:16 PM

Tema anterior - Siguiente tema

0 Usuarios y 1 Visitante están viendo este tema.

jokerman

Cita de: jokerman en 23 de Mayo de 2008, 08:14:11 PM
             Capítulo 0. Definición de intenciones.

      -¿Có, y esto de qué va?
      Vamos a intentar hacer un tutorial de como construir un reproductor de mp3 desde cero, comprando los componentes electrónicos necesarios y programando el microprocesador que maneja el dsp, así como de la conexión de los circuitos integrados.

      -¿Cuánto se necesita saber y cuanto va a durar está colección? ¿Tiene oferta de promoción?
      Los conocimientos en electrónica son deseables, sobre todo en la programación de pics que es en lo que se centra el proyecto; pero aún así quiero hacerlo simple y que lo pueda entender cualquiera. Si sabéis algo de cualquier lenguaje de programación mucho mejor. No obstante ya digo que quiero explicar todo con mucho detalle y de manera simple, pues el abordar un tema así no tiene porque ser complicado

      -¿Quién eres tú? ¿Realmente sabes en lo que te estás metiendo, quillo?
      Actualmente estoy acabado ingeniería industrial superior con la especialidad de electrónica, no soy un genio de la electrónica ni nada; de hecho este proyecto está un poco más allá de mis conocimientos a priori, pero en teoría y por lo ya mirado, nada que no se pueda resolver leyendo y aprendiendo poco a poco. En la carrera he trabajado con un microprocesador en una asignatura, hace poco programé mi primer dspic por mi cuenta totalmente a base de leer en internet llegando a desarrollar un proyecto de dificultad media diría, y actualmente estoy trabajando con un dsp en el proyecto fin de carrera.

      -Ahhh....todo eso está muy bien, pero... que es un PIC
      Un PIC es un microprocesador o microcontrolador (en realidad no significan lo mismo pero por entendernos) que se programa para manejar/comunicarse con el mundo exterior, ya sea un teclado matricial, un display lcd, unos botones, un DAC o un chip decodificador de mp3.

      -Bueno vale, pero ¿te flipas o en realidad sabes tanto?
      Realmente me flipo :mrgreen: No, fuera de bromas, siempre me ha gustado el tema de como funciona internamente un mp3, y me parece un proyecto muy interesante. Como desde luego no es que tenga conocimientos extraordinarios para empezar desde cero, me apoyaré básicamente en el diseño de esta página: http://www.ladyada.net/make/minty/index.html Lo que muy posiblemente cambié sea el microcontrolador que usan ellos por el que ya he comentado que he usado; así no es un copy y paste de código y podemos trabajar a nuestro gusto.

      -Bueno pues nada chico, ahí te dejo. ¿Algo más que deba saber?
      Sólo decir, que posiblemente se que no tenga mucho tirón este hilo, pero me parece interesante y así me obliga a semanalmente a mirarme algo del tema e ir avanzando y no tirar la toalla. En caso de que os moleste realmente el hilo, o ver que hay nulo interés lo cerraría; además me gustaría duplicar el hilo: uno para colgar los fascículos en el que estará prohibido postear para que queden todos los fascículos, y otro en el que podáis postear comentarios y cualquier tipo de preguntas. Se me olvidaba: los componentes serán fáciles y baratos de obtener a través de internet, saliendo el reproductor con pcb incluido por unos 50€ puesto en casa a ojo estimador borrachero. Un saludo, en unos minutos colgaré el primer capítulo, en el que hablaremos de componentes y haremos una aproximación a como funciona el núcleo del reproductor.

             Bueno, aquí os dejo este hilo para postear. Por cierto obarriel, hay alguna manera para que no aparezcan los dos hilos en la portada, sólo uno de ellos? Qué ya está bastante sobrecargada para que de yo guerra con un hilo doble

Saludos

jokerman

Cita de: jokerman en 24 de Mayo de 2008, 09:44:10 AM
      Capítulo 1. Componentes Internos


      Bueno lo primero citar el diseño en el que nos estamos basando, ahí podéis ver todo el hardware que lleva:   http://www.ladyada.net/make/minty/hardware.html

      Por partes:
      
              1.Chip decodificador de mp3: Los archivos mp3 que se encuentren en nuestra memoria del reproductor, necesitamos decodificarlos, ya que el formato mp3 codifica (comprime) los datos para que ocupen menos espacio. Por medio de este chip, decodificaremos esos archivos y se los pasaremos directamente a nuestro DAC. Digamos que este chip es el interprete o traductor, de los archivos de mp3, que a priori no tiene ningún sentido, a la señal digital de audio, que se la pasará al DAC para que la convierta en analógica y podamos escucharla

              2. DAC: conversor analógico digital. Éste cogera los datos que le pase el DAC y los sacará al exterior convertidos ya en la señal analógica de audio que escucharemos

             3.Memoria: en dicha página usan una tarjeta de memoria de las típicas de las cámaras. Puestos a elegir preferiría usar una flash integrada, como cualquier mp3 de memoria, así que es un aspecto que dejaremos de momento en el aire.

             4.Microcontrolador: el corazón de nuestro reproductor de mp3. Él es el director de orquesta y el que se comunicará con el resto de componentes. Básicamente se encargará de leer de la memoria, y pasarle los datos al decodificador de mp3. Él es el que programaremos y el resto de componentes serán pasivos por así decirlo, respondiendo ante él según él les pida. En la página usan un PIC18F452, pero seguramente acabe usando el dsPIC 30f4013, que es el que ya he usado y tengo por casa, además de ser más potente, de cualquier manera la programación es muy similar

   Bueno espero que nadie se haya perdido, no entro a describir más en profundidad las cosas por no enrrollarnos si tenéis alguna duda, preguntar por el hilo de posteos, o mirar en wikipedia que vienen muchas cosas muy bien explicadas.

   Componentes y dónde comprarlos.

   Intentaremos comprar todos los componentes a futurlec.com, es una web de EEUU pero tiene precios muy baratos y los gastos de envío también son bastante baratos (por debajo de 10$ depende de la cantidad que compres), yo siempre he comprado las cosas ahí si podía y la verdad es que muy bien, los más baratos (más que la tienda de la ciudad de electrónica) y además sin salir de casa.

   -Chip decodificador: http://www.futurlec.com/ICSFSTMicro.shtml el mismo que indican en la web del minty player. 7$
   -DAC: cs4340 mismo que usan en el minty: 2.90$ en futurlec (hacer una búsqueda)
   -El microcontrolador intentaremos pedir samples a la casa de microchip, que se portan bastante bien en este aspecto, para obtenerlos gratis (no es nada ilegal ni nada, tranquilos).
   -El tema de la memoria de momento lo dejamos en el aire a la espera de ver cual elegimos finalmente

(En construcción)

Nadescap

Los dos primeros capitulos me parecen interesantes, pero el tema de construir un propio mp3 para un novato como yo me parece una cosa imposible.
Pero sigue con esta guia que es muy interesante. :dios: :dios:
Reproductores: Meizu SP 4gb, Cowon S9 16gb, Sansa Clip 8gb, iPad 16gb
Auriculares: Panasonic RP-HJE 200, Sennheiser CX300, Koss PortaPro, Westone 3      
Amplificador: FiiO E5
Anteriores: Sansa Fuze, Cowon D2, Jays d-jays, Ultimate Ears Super.Fi 5, Audio-Technica ATH-ES7, Westone UM1, S-Jays, C-Jays, Beta Brainwavz, Corda Headsix

La respuesta a muchas de tus preguntas del foro esta AQUI

Atreyu

Un par de sugerencias.

Sobre el tema de la memoria. Supongo que la integrada en placa sera mas rapida.

Pero seria mas facil utilizar almacenamiento externo, por ejemplo en tarjestas SD. Porque seria mas facil de ampliar (siempre que la controladora puede diereccionarla).

E incluso nos podriamos ahorrar el modulo de conexion USB.

Salu2s.

jokerman


             Seguramente al final usaré tarjeta de memoria por el tema de usb y que la guía en la que me estoy basando usan tarjeta de memoria, así hay que mirar menos cosas.
             Nadescap, aunque si que es cierto que desde cero y sin conocimientos previos pueda parecer fuera del alcance, de momento se entiende todo, no? Luego cuando entremos en detalle pueda parecer que se complica algo, pero quiero ponerlo todo sencillo, y aunque no se entienda todo, que si que se vea como funciona o qué es lo que hace en esencia.

Un saludo

jokerman

Cita de: jokerman en 25 de Mayo de 2008, 04:48:17 PM
            Capítulo 2. El microcontrolador: dspic 30f4013

                      Vamos a usar este microcontrolador, porque nos permitirá de sobra cumplir con las necesidades del proyecto y es con el que estoy familiarizado. Encontraremos mucha información sobre él en el fabricante (que es microchip):

               dsPIC30f4013

           ahí tenemos multitud de pdf a los que acudiremos para conocer nuestro microcontrolador, entre todos el más importante por así decirlo es el manual de su familia:
         
            dsPIC30F Family Reference Manual

            este manual es el genérico para todos los dspic30fxxxx, en él es dónde está explicado con todo detalle su arquitectura, para hilar más fino deberemos acudir al manual propio de nuestro microcontrolador, el 4013:

         dsPIC30f4013 Data Sheet

           en este último encontramos lo mismo que en el genérico pero menos detallado y más especificado a nuestro microcontrolador; de hecho muchas veces nos referenciará al anterior. ¿Cuál usar? Si con este último nos quedan las cosas claras pues bien, sino tendremos que recurrir al genérico dónde las descripciones son más detalladas.


          ¿Cómo empezamos a jugar con este bicho?

             Bueno primeramente necesitaríamos un llamado programador:



          este cacharro lo enchufaremos a nuestro ordenador por medio de usb, y por medio de cables enchufaremos también este cacharro a unas determinadas patas de nuestro microcontrolador para flashear nuestro programa previamente escrito en la memoria flash del dsPIC. Yo en su día compre el winpic800 que véis en las fotos (unos 60€ puesto en casa) es un poco caro pero es de los mejores por no decir el mejor, por la red también encontraréis multitud de diseños para fabricaros el vuestro, o incluso en ebay se pueden encontar algunos muy baratos, sólo aseguraos que es compatible con el modelo de micro que queréis programar. No entro más en el tema de como se programa porque hay mucha información en internet y en la misma web del winpic800.

        ¿Cómo escribo mi primera aplicación para el dsPIC?

           El entorno de desarrollo que usaremos será MPLAB Hay una versión de 30 días que podemos descargar, además funciona el truco de cambiarle la fecha para poder seguir usándolo.
            Con el propio mplab encontraremos un archivo que contiene la siguiente plantilla para empezar a escribir código en C:

          *    Filename:       temp_6014.c                                      *

*    Date:           8/20/2004                                        *

*    File Version:   1.30                                             *

*    Other Files Required: p30f6014.gld, libpic30.a                   *

*    Tools Used: MPLAB GL  -> 6.60                                    *

*                Compiler  -> 1.30                                    *

*                Assembler -> 1.30                                    *

*                Linker    -> 1.30                                    *

*                                                                     *

*    Devices Supported:                                               *

*                dsPIC30F2011                                         *

*                dsPIC30F3012                                         *

*                dsPIC30F2012                                         *

*                dsPIC30F3013                                         *

*                dsPIC30F3014                                         *

*                dsPIC30F4013                                         *

*                dsPIC30F5011                                         *

*                dsPIC30F6011                                         *

*                dsPIC30F6012                                         *

*                dsPIC30F5013                                         *

*                dsPIC30F6013                                         *

*                dsPIC30F6014                                         *

*                                                                     *

***********************************************************************

*                                                                     *

* Other Comments:                                                     *

*                                                                     *

* 1) C attributes, designated by the __attribute__ keyword, provide a *

*    means to specify various characteristics of a variable or        *

*    function, such as where a particular variable should be placed   *

*    in memory, whether the variable should be aligned to a certain   *

*    address boundary, whether a function is an Interrupt Service     *

*    Routine (ISR), etc. If no special characteristics need to be     *

*    specified for a variable or function, then attributes are not    *

*    required. For more information about attributes, refer to the    *

*    C30 User's Guide.                                                *

*                                                                     *

* 2) The __space__(xmemory) and __space__(ymemory) attributes are     *

*    used to place a variable in X data space and Y data space,       *

*    respectively. Variables accessed by dual-source DSP instructions *

*    must be defined using these attributes.                          *

*                                                                     *

* 3) The aligned(k) attribute, used in variable definitions, is used  *

*    to align a variable to the nearest higher 'k'-byte address       *

*    boundary. 'k' must be substituted with a suitable constant       *

*    number when the ModBuf_X(k) or ModBuf_Y(k) macro is invoked.     *

*    In most cases, variables are aligned either to avoid potential   *

*    misaligned memory accesses, or to configure a modulo buffer.     *                           

*                                                                     *

* 4) The __interrupt__ attribute is used to qualify a function as an  *

*    interrupt service routine. An interrupt routine can be further   *

*    configured to save certain variables on the stack, using the     *

*    __save__(var-list) directive.                                    *

*                                                                     *

* 5) The __shadow__ attribute is used to set up any function to       * 

*    perform a fast context save using shadow registers.              *

*                                                                     *

* 6) Note the use of double-underscores (__) at the start and end of  *

*    all the keywords mentioned above.                                *

*                                                                     *

**********************************************************************/





/* Include the appropriate header (.h) file, depending on device used */

/* Example (for dsPIC30F5013): #include <p30f5013.h>                  */



/* Alternatively, the header file may be inserted from the Project    */

/* window in the MPLAB IDE                                            */



#include <p30f6014.h>





/* Define constants here                            */



#define CONSTANT1 10

#define CONSTANT2 20





/************* START OF GLOBAL DEFINITIONS **********/





/* Define arrays: array1[], array2[], etc.          */

/* with attributes, as given below                  */



/* either using the entire attribute                */

int array1[CONSTANT1] __attribute__((__space__(xmemory), __aligned__(32)));

int array2[CONSTANT1] __attribute__((__space__(ymemory), __aligned__(32)));



/* or using macros defined in the header file       */

int array3[CONSTANT1] _XBSS(32);

int array4[CONSTANT1] _YBSS(32);





/* Define arrays without attributes                 */



int array5[CONSTANT2];   /* array5 is NOT an aligned buffer */



/* ------------------------------------------------ */



/* Define global variables with attributes          */



int variable1 __attribute__((__space__(xmemory)));

int variable2 __attribute__((__space__(ymemory)));



/* Define global variables without attributes       */



int variable3;





/************** END OF GLOBAL DEFINITIONS ***********/







/************* START OF MAIN FUNCTION ***************/



int main ( void )

{





/* Code goes here                                   */





}







/****** START OF INTERRUPT SERVICE ROUTINES *********/



/* Replace the interrupt function names with the    */

/* appropriate names depending on interrupt source. */



/* The names of various interrupt functions for     */

/* each device are defined in the linker script.    */





/* Interrupt Service Routine 1                      */

/* No fast context save, and no variables stacked   */



void __attribute__((__interrupt__)) _ADCInterrupt(void)

{





/* Interrupt Service Routine code goes here         */

       

}





/* Interrupt Service Routine 2                      */

/* Fast context save (using push.s and pop.s)       */



void __attribute__((__interrupt__, __shadow__)) _T1Interrupt(void)

{



/* Interrupt Service Routine code goes here         */

       

}





/* Interrupt Service Routine 3: INT0Interrupt       */

/* Save and restore variables var1, var2, etc.      */



void __attribute__((__interrupt__(__save__(variable1,variable2)))) _INT0Interrupt(void)

{



/* Interrupt Service Routine code goes here         */



}





/********* END OF INTERRUPT SERVICE ROUTINES ********/



                   
             En principio no preocuparse por el tremendo tocho que ahí, pues la mayoría son comentarios y es simplemente una plantilla. De momento vamos a dejarlo aquí, el próximo día veremos de modificarla un poco para hacer nuestro primer hola mundo: un programa que nos haga hacer parpadear un led externo, y ya después de esa entrega volveremos a centrarnos en nuestro reproductor mp3.

Las palabras en verde conducen a enlaces. Por cierto, dejo este post así, y no voy a citarlo en el de comentarios, si alguien quiere preguntar algo o decir cualquier cosa, por favor, que cite este allí y a continuación exponga su pregunta (por no tener dos hilos en la portada)
               



        Aprovechando que el hilo de respuestas ya está en portada me autocito del otro post por tenerlo ordenado. Un saludo

Inox

Buenas: pregunto en este hilo porque el tema me parece relacionado y me aseguro que lo vea alguien con conocimientos altos del tema.
Como verás en este http://www.mp3dap.com/component/option,com_smf/Itemid,36/topic,5527.0/ hilo instalé un reproductor (más bien un decodificador o algo así) en el coche y me encuentro con que sólo reproduce mp3.
Mirando las referencias de los chips por la red veo que uno de ellos es un Micronas MAS 3539 F; y en su web veo que pertenece a una "familia" de cuatro chips con características diferentes entre ellos.
Este es el documento en el que se muestran sus prestaciones:
http://soft.laogu.com/datasheet/40/MAS3509F_MICRONAS_1213953.pdf
Desgraciadamente mis conocimientos de electrónica son nulos, pero sí que he visto en la página 6 del documento que el chip 3509 (de la misma familia por lo que supongo que de igual tamaño y forma)  reproduce AAC, o sea, tiene mejores prestaciones.
Resumiendo: ¿sería posible sustituir una pieza por la otra y que reprodujese más formatos sin tener que modificar más cosas del aparato?
Esto a nivel casi solo teórico, porque viendo la foto creo que desoldar y volver a soldar una pieza como esa debe ser poco menos que imposible.
Un saludo y decirte que tú proyecto me parece muy interesante.

jokerman

#7
          Vi tu hilo el otro día, pero como últimamente voy justo de tiempo no conteste nada. Es básicamente imposible, aunque sustituyeses el chip no conseguirías nada, ya que el firmware que lleve el aparato no contempla los archivos AAC así que los ignoraría igualmente, aunque tuviese un chip preparado para ello. Y modificar el firmware de un aparato, pues bueno imposible no es, ahí está rockbox.org en la que hacen firmwares alternativos para reproductores mp3, pero detrás de cada firmware hay un trabajo de la ostia y varias personas trabajando durante largo tiempo. Ya lo siento, pero básicamente es imposible.

Un saludo

Inox