Autor Tema: Como manejar el DFPlayer con un PIC  (Leído 2444 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Como manejar el DFPlayer con un PIC
« en: 30 de Marzo de 2017, 17:05:17 »
Hola, como les va a todos, compre un modulo DFPlayer mini pero no entiendo como son los comandos para manejarlo, en primer lugar dice el datasheet que el data bit es de 1 pero en los ejemplos de envio de comandos, los datos son de varios bytes, por otro lado cuando configuro la conexion con un adaptador rs232 no existe la posibilidad de tener un data bits de 1.
alguien me orienta un poco?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Como manejar el DFPlayer con un PIC
« Respuesta #1 en: 30 de Marzo de 2017, 17:49:10 »
Apartir de la pagina 3 esta bien explicado como enviar un comando:

http://www.picaxe.com/docs/spe033.pdf

Incluso te da un ejemplo:

Citar
1).For example, select the first song played, serial transmission section: 7E FF 06 03 00 00 01 FF E6 EF
7E --- START command
FF --- Version Information
06 --- Data length (not including parity)
03 --- Representative No.
00 --- If need to acknowledge [0x01: need answering, 0x00: do not need to return the response]
00 --- Tracks high byte [DH]
01 --- Tracks low byte [DL], represented here is the first song played
FF --- Checksum high byte
E6 --- Checksum low byte
EF --- End Command

La unica duda que puede suceder es como calcula el Checksum (Porque cada uno lo calcula de distinta forma). Del codigo acontinuacion suma los datos, es decir luego del primer FF hasta antes del checksum, y luego devuelve el valor negativo de este numero para almacenarlo correctamente: en Big endian....

Aca el codigo de esa parte:

Código: C
  1. static void fill_uint16_bigend (uint8_t *thebuf, uint16_t data) {
  2.         *thebuf =       (uint8_t)(data>>8);
  3.         *(thebuf+1) =   (uint8_t)data;
  4. }
  5.  
  6.  
  7. //calc checksum (1~6 byte)
  8. uint16_t mp3_get_checksum (uint8_t *thebuf) {
  9.         uint16_t sum = 0;
  10.         for (int i=1; i<7; i++) {
  11.                 sum += thebuf[i];
  12.         }
  13.         return -sum;
  14. }
  15.  
  16. //fill checksum to send_buf (7~8 byte)
  17. void mp3_fill_checksum () {
  18.         uint16_t checksum = mp3_get_checksum (send_buf);
  19.         fill_uint16_bigend (send_buf+7, checksum);
  20. }

O un ejemplo practico para que te guies:

Citar
[7E FF 06 0D 00 00 00 FF EE EF]

0x06 + 0x0D = 0x13

El numero negativo es 0xFFFF - 0x13 + 0x1 = 0xFFEE
el byte numero 8 es 0xFF y el 9 es 0xEE

Todo lo demas queda en vos. Hay algunas cosas que tenes que leer y ver que este listo antes de poder enviarle instrucciones, el PDF aclara como es que debes proceder y que debes enviar. Asi como tambien las respuestas que puede darte el reproductor si es que le pedis un feedback.
« Última modificación: 30 de Marzo de 2017, 17:52:03 por KILLERJC »

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:Como manejar el DFPlayer con un PIC
« Respuesta #2 en: 01 de Abril de 2017, 10:59:26 »
Hola, gracias por responder, mi duda es que el PDF dice data bits=1? Le mande el codigo de ejemplo con una sd con musica y no hizo nada
7E FF 06 03 00 00 01 FF E6 EF

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Como manejar el DFPlayer con un PIC
« Respuesta #3 en: 01 de Abril de 2017, 13:40:57 »
Seguramente en la traduccion se equivocaron y era el "Stop Bits = 1"

Respecto a los comandos, parece haber una inicializacion, vas a tener que leer el datasheet y probar, o sino buscar algun codigo para arduino y tratar de pasarlo para que lo puedas usar vos.