widget compteur de visites gratuit widget compteur de visite  
Centrale DCC V3.4
Le DF PLAYER




PRÉAMBULE
Le DF Player permet d'enregistrer des pistes son sur un périphérique de stockage, carte SD, clé USB, qu'il est ensuite possible de sélectionner pour jouer ces pistes son.

La commande de ces pistes s'effectue soit :
• Par boutons-poussoirs,
• Par une liaison série.

L'utilisation de la commande série permet d'envoyer des commandes et également de recevoir des informations en provenance du DF Player.
De plus la liaison série permet d'avoir accès à la totalité des commandes possibles et la souplesse de fonctionnement s'en trouve grandement améliorée par rapport aux boutons-poussoirs.

L'utilisation d'une platine arduino associée à un DF Player en utilisant la liaison série et/ou l'utilisation de boutons-poussoirs permet de réaliser une centrale capable de sonoriser un réseau ferré.

Le nombre de pistes qu'il est possible de commander par la centrale DCC accessoire est de : 69195 pistes dans la limite de 32Go.
  
On peut penser que cela sera suffisant.

centrale utilisant un df player
Centrale utilisant un DF Player

Il existe plusieurs types de module sonore DF Player, FN-M16P, FN-M10P,..., qui possèdent des caractéristiques plus ou moins similaires. Par souci de simplicité on ne traitera pas des informations envoyées par le DF Player.

De même le nombre de commande série disponible sont assez conséquentes et il n'est pas nécessaire de les implémenter toutes pour obtenir une centrale suffisamment complète.

Il existe des bibliothèques spécifiques pour utiliser le DF PLayer, mais elles ne m'ont pas données satisfaction, soit parce qu'elle ne fonctionne que partiellement ou que les commandes disponibles sont trop limitatives. C'est pourquoi j'ai choisi d'utiliser les commandes séries pour commander le DF Player.

L'utilisation de la bibliothèque série de l'Arduino permettra de simplifier l'envoi des commandes séries.
 
Le PROTOCOLE SÉRIE
Les commandes séries qu'il faut envoyer vers le DF Player répondent à un protocole précis.

Le DF Player possède une particularité au niveau de son protocole.

En effet le protocole du DF Player intègre une somme de contrôle "Checksum" qui permet de sécuriser la transmission et qui est calculée en fonction des valeurs de commandes précédentes.
La particularité est que les valeurs de cette somme de contrôle ne sont pas obligatoire lors de la transmission du message série.

Le DF Player accepte la commande transmise même si la valeur de la somme de contrôle est absente.

L'idéal étant quand même d'effectuer la transmission série en incorporant les valeurs de la somme de contrôle "Checksum".

Les commandes séries envoyées vers le DF Player doivent être transmissent en format "Hexadécimal".

La vitesse de transmission doit être réglée sur 9600 bauds.

principe du protocole serie
Principe du protocole série
DÉTAILS du PROTOCOLE SÉRIE
Comme la transmission du checksum n'est pas obligatoire, le nombre de commande à envoyer au minimum est de 8 (10 avec le checksum).

Dans les explications et les exemples qui suivront, le "Checksum" sera pris en compte afin de sécuriser les transmissions.

Commandes fixes
$S
La commande "$S" représente le "byte Start" :
• Sa valeur est : 0x7E

Ver
La commande "Ver" contient une information sur la Version du module :
• Sa valeur est : 0xFF (par défaut)

Length
La commande "Length" contient le nombre de byte à transmettre et ne comptabilise pas :
• Le byte de "Start",
• Le byte de "Fin",
Le Check_MSB,
• Le Check_LSB.

La valeur de Length est : 0x06

$O
La commande "$O" contient le byte de "Fin" :
• Sa valeur est : 0xEF

Construction partielle de la commande série.

protocole serie partiel
Protocole série partiel

Commandes variables
CMD
La commande "CMD" contient la commande à faire exécuter par le DF Player :

Exemple :
Si l'on désire régler le niveau du volume :
• CMD : 0x06.

resume des commandes du df player
Commande du DF Player
Feedback
La commande "Feedback" détermine si le DF Player renvoi ou non des informations vers le microcontrôleur :

Si le "Feedback" est activé :
• Sa valeur est : 0x01,

Si le "Feedback" est désactivé :
• Sa valeur est : 0x00

Nous choisirons le protocole avec le "Feedback" désactivé.

Param_MSB (Poids Fort)
Ce paramètre complète la commande "CMD" sélectionnée.

Exemple :
Si l'on veut envoyer une commande pour régler le niveau de volume sur 15 :
La valeur doit être envoyée en "Hexadécimal" : 15 = 0xF,
• La valeur doit être envoyée en deux bytes (MSB et LSB) et représente un nombre décimal maximal de : 65535 = 0xFFFF,
    • Lorsque la conversion en "Hexadécimal" ne remplit pas les deux bytes on comble avec des zéros : 15 = 0x000F,
       • Poids Fort = 0x00,
       • Poids Faible = 0x0F.

Le Param_MSB est égale à : 0x00.

Param_LSB (Poids Faible)
Ce paramètre complète la commande "CMD" sélectionnée.

Exemple :
Si l'on veut envoyer une commande pour régler le niveau de volume sur 15 :
La valeur doit être envoyée en "Hexadécimal" : 15 = 0xF,
• La valeur doit être envoyée en deux bytes (MSB et LSB) et représente un nombre décimal maximal de : 65535 = 0xFFFF,
    • Lorsque la conversion en "Hexadécimal" ne remplit pas les deux bytes on comble avec des zéros : 0x000F,
       • Poids Fort = 0x00,
       • Poids Faible = 0x0F.

Le Param_LSB est égale à : 0x0F.

Check_MSB (Poids Fort)
Ce paramètre contient le byte de poids Fort du "Checksum".

Nota : 
 Le byte de "Start", le byte "Fin de byte", le  Check_MSB, le Check_LSB, ne sont pas pris en compte pour le calcul du "Checksum".

Calcul du "Checksum" :
Checksum = 0xFFFF - (Ver + Length + CMD +Feedback + Param_MSB + Param_LSB) + 1

Dans notre exemple :
Checksum = 0xFFFF - (0xFF + 0x06 + 0x06 +0x00 + 0x00 + 0x0F) + 1

Checksum = 0xFEE6

Le Check_MSB est égal à : 0xFE.

Check_LSB (Poids Faible)
Ce paramètre contient le byte de poids Faible du "Checksum".

Nota : 
Le byte de "Start", le byte "Fin de byte", le  Check_MSB, le Check_LSB, ne sont pas pris en compte pour le calcul du "Checksum".

Calcul du "Checksum" :
Checksum = 0xFFFF - (Ver + Length + CMD +Feedback + Param_MSB + Param_LSB) + 1

Dans notre exemple :
Checksum = 0xFFFF - (0xFF + 0x06 + 0x06 +0x00 + 0x00 + 0x0F) + 1

Checksum = 0xFEE6

Le Check_LSB est égal à : 0xE6.

$O
Ce paramètre contient le byte de "Fin" :
• Sa valeur est : 0xEF.

Construction complète de la commande série.
Avec l'exemple de la commande du volume réglée sur 15
 
protocole serie complet
Protocole série complet