Autor Tema: Comunicar PIC16F876A con Modulo MP3 por USART  (Leído 2270 veces)

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

Desconectado CMG73

  • PIC10
  • *
  • Mensajes: 6
Comunicar PIC16F876A con Modulo MP3 por USART
« en: 03 de Julio de 2016, 13:38:32 »
El módulo mp3:
http://www.dx.com/es/p/uart-control-serial-mp3-music-player-module-for-arduino-avr-arm-pic-blue-silver-342439#.V3k-atSLRkg
trae un software que se ejecuta en el pc y comunica a traves del rs232 del pc con dicho módulo, enviadole las diferentes tramas de datos podemos poner play, pausa, siguiente cancion ect.... por ejemplo la trama de play en hex. es la siguiente: 7E FF 06 03 00 00 01 EF.

El código es el siguiente:

Código: [Seleccionar]
#include <16f876a.h>
#fuses xt,nowdt,noprotect,noput
#use delay (clock=4M)
//solo transmitimos datos pin_c6 del pic//7E FF 06 03 00 00 01 EF PLAY MP3
#use rs232(baud=9600, xmit=pin_c6,rcv=pin_c7,bits=8,parity=n)
#use standard_io(c)
int a=0x7E;
int b=0xFF;
int c=0x06;
int d=0x03;
int e=0x00;
int f=0x00;
int g=0x01;
int h=0xEF;

void main ()
{
         
   while (true)
   {
      if(input(pin_b0)==1)
         {
           //printf ("7E FF 06 03 00 00 01 EF "); enviariamos una string de caracteres.
           printf ("%X%X%x%x%x%x%x%X",a,b,c,d,e,f,g,h);
           while(input(pin_b0)==1);
         }
         
   }
}

No se aprecia bien la siguiente línea del código:
printf ("%X%X%x%x%x%x%x%X",a,b,c,d,e,f,g,h);

Lo simulamos en PROTEUS y todo parace funcionar.


Pero cuando lo monto físicamente no me funciona.

Agradezco la ayuda un saludo y muchas gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #1 en: 03 de Julio de 2016, 13:56:08 »
Si observas bien

Al hacer el printf de %X de 0x7E

Lo que esta haciendo no es enviar 0x7E ,sino el ASCII de 7 y luego el ASCII de E es decir esta enviando 0x37 y 0x45.

Codigo no probado:
Código: C
  1. int8 envio[8] = {0x7E,0xFF,0x06,0x03,0x00,0x00,0x01,0xEF};
  2. void main ()
  3. {
  4.          
  5.    while (true)
  6.    {
  7.       if(input(pin_b0)==1)
  8.          {
  9.                for ( i=0 ; i < sizeof(envio); i++) putc(envio[i]);
  10.                while(input(pin_b0)==1);
  11.          }
  12.          
  13.    }
  14. }

Solo para guiarse.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #2 en: 03 de Julio de 2016, 17:23:43 »
Buscando en google encontre varios sitios donde hablan de este modulo y  tambien encontre una hoja que define todos los comandos que acepta, asi como la hoja tecnica del integrado que lleva, (YX5300), aunque esta ultima solo esta en chino.
Se ve muy interesante este modulo y facilmente controlable por un PIC, Alduino o PC. Admite tarjetas microSD y aunque en sus caracterisitcas dice que solo hasta 2 GB, una persona dice haberlo probado con una de 32 GB con exito.
CMG73 si no tienes la info que te digo, avisa y la subo, es que en este momento no puedo hacerlo.

Saludos.

Desconectado CMG73

  • PIC10
  • *
  • Mensajes: 6
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #3 en: 04 de Julio de 2016, 02:46:38 »
Muchas gracias por la rápida respuesta, KILLERJC probaré el código y te digo algo, ACORANTF la documentación técnica del módulo la tengo en pdf pero no la pude subir porque excedía el máximo permitido, por eso puse el enlace, pero gracias por el aporte.

Un saludo y muchas gracias.

Desconectado CMG73

  • PIC10
  • *
  • Mensajes: 6
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #4 en: 04 de Julio de 2016, 13:59:19 »
Hola KILLERJC he probado tú código:

Código: [Seleccionar]
#include <16f876a.h>
#fuses xt,nowdt,noprotect,noput
#use delay (clock=4M)
//solo transmitimos datos pin_c6 del pic//7E FF 06 03 00 00 01 EF PLAY MP3
#use rs232(baud=9600, xmit=pin_c6,rcv=pin_c7,bits=8,parity=n)
#use standard_io(c)
int8 envio[8] = {0x7E,0xFF,0x06,0x03,0x00,0x00,0x01,0xEF};
int8 i;
void main ()
{
         
   while (true)
   {
      if(input(pin_b0)==1)
         {
               //for ( i=0 ; i <=8; i++) putc(envio[i]);
               for ( i=0 ; i < sizeof(envio); i++) putc(envio[i]);
               while(input(pin_b0)==1);
         }
         
   }
}

Compila bien sin errores, pero mí gozo en un pozo, lo he probado físicamente y no funciona.
no obstante seguiré intentándolo.
Adjunto foto de las tramas de datos que controla el MP3 para clarificar un poco dichas tramas sacadas del pdf:


Un saludo y muchas gracias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #5 en: 04 de Julio de 2016, 14:10:58 »
Antes de elegir canciones, no tenes que configurarlo ?, fijate bien en eso.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #6 en: 04 de Julio de 2016, 14:56:53 »
Antes de elegir canciones, no tenes que configurarlo ?, fijate bien en eso.

KILLERJC segun entendi yo, la unica configuracion requerida es seleccionar una fuente de entre las tres posibles, (SD, USB y PC), asi como poner un volumen que permita su escucha.

Saludos.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #7 en: 04 de Julio de 2016, 15:42:03 »
Claro Acoran pero en el programa que el paso, que luego se le aporto un poco de codigo esta usando el codigo de "Play the First Song"

Es decir esta intentando elegir la primer cancion sin siquiera definirle la fuente ni volumen. A eso me referia, como yo jamas lo use al modulo no puedo aportar demasiado.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #8 en: 04 de Julio de 2016, 19:37:42 »
Claro Acoran pero en el programa que el paso, que luego se le aporto un poco de codigo esta usando el codigo de "Play the First Song"

Es decir esta intentando elegir la primer cancion sin siquiera definirle la fuente ni volumen. A eso me referia, como yo jamas lo use al modulo no puedo aportar demasiado.

Tienes razon, yo tambien creo que despues de un reset habra que volver a seleccionar la fuente y el volumen. Aunque leyendo de nuevo el manual, dice que solo soporta la entrada desde tarjeta.

After power up, you should send the command [Select device] first. Serial MP3 Player
only supports micro sd card,
so you should send “ 7E FF 06 09 00 00 02 EF ”.
Then you can send the command [Play with index] to play some song.
You can send the command [Set volume] to set the volume(0 ~ 30 class).
7E FF 06 22 00 1E 01 EF Set the volume to 30 (0x1E is 30), and play the first song. En estos dos bytes en negrita el 1E es el nivel de volumen, que puede ir desde 0 hasta 1E y el 01 es el numero de la cancion, supongo que podra ser de 01 a 99. Aunque tambien hay comandos para seleccionar carpetas dentro de la tarjeta.

Saludos.

Desconectado CMG73

  • PIC10
  • *
  • Mensajes: 6
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #9 en: 05 de Julio de 2016, 15:59:32 »
Hola buenas, os cuento, el código de KILLERJC funcionando:

Código: [Seleccionar]
#include <16f876a.h>
#fuses xt,nowdt,noprotect,noput
#use delay (clock=4M)
//solo transmitimos datos pin_c6 del pic//
#use rs232(baud=9600, xmit=pin_c6,rcv=pin_c7,bits=8,parity=n)

#byte puerto_a=0x05         
#byte puerto_b=0x06
#byte puerto_c=0x07

int8 play1[8] ={0x7E,0xFF,0x06,0x03,0x00,0x00,0x01,0xEF};
int8 play2[8] ={0x7E,0xFF,0x06,0x03,0x00,0x00,0x02,0xEF};
int8 stop[8]  ={0x7E,0xFF,0x06,0x0E,0x00,0x00,0x00,0xEF};

int8 i;

void main ()
{
   set_tris_a (0x00) ;
   set_tris_b (0b00000111) ;
   set_tris_c (0x00) ;
   
   while (true)
   {
      if(input(pin_b0)==1)
         {
               //for ( i=0 ; i <=8; i++) putc(play[i]);
               for ( i=0 ; i < sizeof(play1); i++) putc(play1[i]);
               while(input(pin_b0)==1);
         }
      if(input(pin_b1)==1)
         {
               
               for ( i=0 ; i < sizeof(play2); i++) putc(play2[i]);
               while(input(pin_b0)==1);
         }
       if(input(pin_b2)==1)
         {
               
               for ( i=0 ; i < sizeof(stop); i++) putc(stop[i]);
               while(input(pin_b0)==1);
         }             
   }
}

Inicialmente conecte el MP3 con el PC y con el software del MP3 lo primera trama que le mande  “ 7E FF 06 09 00 00 02 EF ” y luego play de la primera canción 0xFF,0x06,0x03,0x00,0x00,0x01,0xEF
como pone el datasheets:

After power up, you should send the command [Select device] first. Serial MP3 Player
only supports micro sd card, so you should send “ 7E FF 06 09 00 00 02 EF ”.
Then you can send the command [Play with index] to play some song.

Cuando sustituyo el PC por el PIC entiendo que no hace falta volver a enviarle trama de  [Select device] porque me ha funcionado sin enviarla.

El error de principiante que tenía era que había conectado  TX del PIC con TX del MP3 por eso no me funcionaba.

Agradecer la ayuda de KILLERJC y ACORANTF.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Comunicar PIC16F876A con Modulo MP3 por USART
« Respuesta #10 en: 05 de Julio de 2016, 16:02:39 »
Citar
El error de principiante que tenía era que había conectado  TX del PIC con TX del MP3 por eso no me funcionaba.

Mejor dicho "la suerte" de que ninguno de los pin se quemo :P