Configuración DCCpp LMD


Debido a las múltiples posibilidades de la central DCCpp LMD existen muchas configuraciones posibles. Si bien están un poco diseminadas por todo el programa, aquí haré un resumen de las más comunes indicando en que archivo se encuentra y las opciones posibles


Archivo DCCpp.h

En este archivo se encuentra la configuración general, en ella podemos habilitar el uso de los puertos seriales, pantalla o debug.

Habilitar opciones:

	#define USE_TURNOUT
	#define USE_OUTPUT
	#define USE_SENSOR
	#define USE_S88
	#define USE_EEPROM
	#define USE_TEXTCOMMAND
	#define DCCPP_DEBUG_MODE // Muestra Información debug en monitor serial
	#define USE_SERIALWIFI      // Serial1
	#define USE_SERIALBLUETOOTH // Serial2
	#define USE_SERIALAUX       // Serial3 
	#define USE_OLED          	// Pantalla OLED 128x64 i2C. 
	#define USE_SOUND          	// Buzzer sonidos varios.
	#define USE_KEYBOARD		// Teclado y encoder.
	#define DCCPP_PRINT_DCCPP

#define USE_TURNOUT Habilita el uso de desvíos o accesorios

#define USE_OUTPUT Habilita el uso de pines disponibles en Arduino como salidas

#define USE_SENSOR Habilita el uso de pines disponibles en Arduino entrada como: sensores de presencia, barreras infrarrojas, pulsadores, etc..

#define USE_S88 Habilita la compatibilidad con los retromodulos S88. No es compatible con salidas y sensores.

#define USE_EEPROM Habilita el uso de la memoria EEPROM. Esta memoria es utilizada para asignar una ID a un elemento concreto. Por ejemplo en los desvíos, si no disponemos de esta memoria tendríamos que introducir el comando "a 10 3 1" que no tiene respuesta por parte de la central.

#define USE_TEXTCOMMAND Habilita el uso de los comandos seriales.

#define USE_DCCPP_DEBUG_MODE Habilita el modo debug, el cual nos dará información extra sobre la central. Solo disponible para comunicación serial con PC.

#define USE_SERIALWIFI Habilita el puerto serial 1.

#define USE_SERIALBLUETOOTH Habilita el puerto serial 2.

#define USE_SERIALAUX Habilita el puerto serial 3.

#define USE_OLED Habilita pantalla oled 128x64 I2C.

#define USE_SOUND Habilita un pequeño altavoz que emitirá sonido en las diferentes funciones.

Archivo Config.h

Aquí se ubican algunos de los parámetros básicos, como el número máximo de locomotoras que podemos operar simultáneamente o cuantas locomotoras en vía de programación.

Esta sección es casi automática dependiendo de la placa Arduino que estemos usando. Es este caso es la placa MEGA 2560

DEFINE NUMBER OF MAIN TRACK REGISTER

En este apartado se encuentra la configuración de los registros o locomotoras que podemos operar, en el caso de MAIN_REGISTERS lo locomotoras que se pueden pueden programar en el caso de PROG_REGISTERS


/////////////////////////////////////////
// DEFINE NUMBER OF MAIN TRACK REGISTER
/////////////////////////////////////////

#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO)      // Configuration for UNO or NANO

/** Number of track registers for the main line. 0 for transient orders, the others for continual orders. */
#define MAX_MAIN_REGISTERS 12

#elif defined(ARDUINO_AVR_MEGA2560)

/** Number of track registers for the main line. 0 for transient orders, the others for continual orders. */
#define MAX_MAIN_REGISTERS 21

#elif defined(ARDUINO_ARCH_ESP32)

/** Number of track registers for the main line. 0 for transient orders, the others for continual orders. */
#define MAX_MAIN_REGISTERS 41 
#endif

/** Number of track registers for the programming line. 0 for transient orders, the two others for continual orders for the only loco on this track. */
#define MAX_PROG_REGISTERS 3 

DEFINE PINS ACCORDING TO MOTOR SHIELD MODEL

Configuración de los pines por donde obtenemos la señal DCC y de programación dependiendo de la placa que estemos utilizando, en este caso la placa Arduino MEGA usaremos el pin 12 para la vía principal y el pin 2 para la vía de programación.

////////////////////////////////////////////////
// DEFINE PINS ACCORDING TO MOTOR SHIELD MODEL
////////////////////////////////////////////////


#ifdef ARDUINO_AVR_MEGA			// is using Mega 1280, define as Mega 2560 (pinouts and functionality are identical)
#ifndef ARDUINO_AVR_MEGA2560
#define ARDUINO_AVR_MEGA2560
#endif
#endif

#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO)	// Configuration for UNO or NANO

/** Interruption pin for main track. */
#define DCC_SIGNAL_PIN_MAIN 10          // Arduino Uno  - uses OC1B

/** Interruption pin for programming track. */
#define DCC_SIGNAL_PIN_PROG 5           // Arduino Uno  - uses OC0B

#elif defined(ARDUINO_AVR_MEGA2560)

/** Interruption pin for main track.*/
#define DCC_SIGNAL_PIN_MAIN 12          // Arduino Mega - uses OC1B

/** Interruption pin for programming track.*/
#define DCC_SIGNAL_PIN_PROG 2           // Arduino Mega - uses OC3B

#endif

SELECT MOTOR SHIELD

Selecciona el motor shield que tenemos instalado, en este caso "motor Shield", y los pines analógicos donde se leerá el consumo de corriente.

////////////////////////
// SELECT MOTOR SHIELD
////////////////////////

/** Interruption pin for main track.*/
#define MOTOR_SHIELD_SIGNAL_ENABLE_PIN_MAIN 3

/** Interruption pin for programming track.*/
#define MOTOR_SHIELD_SIGNAL_ENABLE_PIN_PROG 11


/** Analog pin for main track current monitor.*/
#define MOTOR_SHIELD_CURRENT_MONITOR_PIN_MAIN A0

/** Analog pin for main track current monitor.*/
#define MOTOR_SHIELD_CURRENT_MONITOR_PIN_PROG A1


/** Channel A pin (Main track)*/
#define MOTOR_SHIELD_DIRECTION_MOTOR_CHANNEL_PIN_A 12

/** Channel B pin (Programming track)*/
#define MOTOR_SHIELD_DIRECTION_MOTOR_CHANNEL_PIN_B 13

DEFINE S88 CONFIG

Configura el tamaño de bytes para un grupo de 8 sensores, número de módulos y los pines de lectura y sincronización con los retromodulos S88. Tienes toda la información de configuración en el archivo S88.h

///////////////////////
// DEFINE S88 CONFIG
///////////////////////
#ifdef USE_S88

/** S88 byte size as a group of 8 sensors. */
#define N_SIZE 8
/** S88 byte number, default = 64 */
#define N_MODULES 2	
/** Output DataFormat 0=binary 1=hexa 3=Q ID; 9=disabled */
#define S88_DATA_FORMAT 0

/** Configuration for UNO/NANO */
#if defined(ARDUINO_AVR_UNO) || defined(ARDUINO_AVR_NANO)
	/** output, Clock */    
  #define S88_Clock_PIN 2       
/** Configuration for MEGA */
#else
	/** output, Clock */
  #define S88_Clock_PIN 33      
#endif

/** output, Load request for slave devices */
#define S88_LOAD_PS_PIN 35
/** output, Reset request for slave devices */
#define S88_Reset_PIN   37
/** input,  DataL on left side */
#define S88_DataL_PIN   31
/** input,  DataR on right side */
#define S88_DataR_PIN   39

#endif

Keyboard & Encoder (MEGA only)

Activa el control de la central con el teclado y encoder rotativo. Es necesario tener la pantalla oled para correcto funcionamiento.

///////////////////////////////////
// Keyboard & Encoder (MEGA only)
///////////////////////////////////

#ifdef USE_KEYBOARD
//// Activa el encoder:

/** Encoder */
//	#define USE_ENCODER	

/** Selección del tipo de teclado: **/

#define USE_DIGITAL_4x3 // Teclado digital 4x3
// #define USE_DGITAL_4x4 // // Teclado digital 4x4

///// Fin Selección teclado

// Pines teclado digital 4x3: 
  		// PIN_ROW1 44; PIN_ROW2 46; PIN_ROW3 48; PIN_ROW4 50 
  		// PIN_COL1 45; PIN_COL2 47; PIN_COL3 49

// Pines teclado digital 4x4 
  		// PIN_ROW1 44; PIN_ROW2 46; PIN_ROW3 48; PIN_ROW4 50 
  		// PIN_COL1 43; PIN_COL2 45; PIN_COL3 47; PIN_COL4 49 

// Pines encoder 
  		// PINCLK 51; PINDT 53; PINSW 52

#endif

OLED CONFIGURATION 128x64 U8G2 Lib

Definiciones para la pantalla OLED.

///////////////////////////////////////
// OLED CONFIGURATION 128x64 U8G2 Lib	
///////////////////////////////////////

#ifdef USE_OLED

/** Activa animación al iniciar */
#define OLED_ANIMATION 

#endif
Speaker

SOUND CONFIG

Configuración para el sonido interno de la central que emitirá diferentes sonidos en los diferentes casos como, encendido, apagado, acción correcta o fallo.


/////////////////
// SOUND CONFIG
/////////////////

#ifdef USE_SOUND

 /** Pin donde ira conectado el altavoz. */
#define PIN_SOUND 6

#endif

Archivo DCCpp_Uno.h

En este archivo tenemos la configuración de la comunicación serial básica (PC) y Ethernet:

#if defined(USE_ETHERNET)

	#define DCCPP_INTERFACE eServer
	#define SDCARD_CS 4
  
#else

	#define DCCPP_INTERFACE Serial

#endif

#define DCCPP_INTERFACE eServer En caso de comunicación ethernet, DCCPP_INTERFACE deja de ser Serial.

#define DCCPP_INTERFACE Serial Habilita el puerto Serial. Este puerto queda reservado para la comunicación con el PC, programación y debug. Es recomendable no cambiar esta linea.

Como se puede ver estas opciones no se pueden usar simultáneamente. Al no haber usado nunca la comunicación ethernet, pero imagino que aunque perdamos la comunicación para el monitor serial, podremos programar el Arduino

Archivo SerialWifi.h

Desde este archivo podemos cambiar el puerto serial (no recomendado) al que se conecta el dispositivo Wifi.

#define WIFI Serial1				// Puerto de comunicación serial con modulo WiFi.
#define WF_MAX_COMMAND_LENGTH	30	// Número de caracteres máximos que puede recibir.

Archivo SerialBluetooth.h

Desde este archivo podemos cambiar el puerto serial (no recomendado) al que se conecta el dispositivo Bluetooth.

#define BLUETOOTH Serial2         // Puerto de comunicación serial con modulo Bluetooth HC-06.
#define BT_MAX_COMMAND_LENGTH 30  // Número de caracteres recibidos.

Archivo SerialAux.h

Desde este archivo podemos cambiar el puerto serial (no recomendado) al que se conecta cualquier dispositivo auxiliar, como por ejemplo otro arduino.

#define SERIALAUX Serial3         /**< Puerto serial. Puerto Serial3 por defecto. */
#define AUX_MAX_COMMAND_LENGTH 30 /**< Número de caracteres máximos que puede recibir. */

Oled.cpp

Desde Oled.cpp podemos cambiar los parámetros de la pantalla Oled e incluso seleccionar otra pantalla desde la lista que esta esta en el archivo Oled.h.

/** Actualiza cada 750ms, con un valor inferior deja de funcionar correctamente S88 */
#define ACTUALIZA_INFO 750 

/** Pausa de 2 segundos para mostrar la información. 2x750 = 1500ms */
#define PAUSA_          2

#define ACTUALIZA_INFO Tiempo de actualización de la pantalla

#define PAUSA_ Número de pausas para mostrar un mensaje.

Archivo de instalación .ino

#include "DCCpp.h"

void setup()
{
	Serial.begin(115200); // Inicia la comunicación serial USB 
	Serial1.begin(115200); // Inicia la comunicación serial para WiFi ( SOLO MEGA) 
	Serial2.begin(115200); // Inicia la comunicación serial para Bluetooth ( SOLO MEGA) 
	Serial3.begin(115200); // Inicia la comunicación serial para SerialAux ( SOLO MEGA) 

	DCCpp::begin();

Activamos los puertos seriales con una velocidad de 115200 baudios y con DCCpp::begin(); iniciamos la central y sus configuraciones.

 DCCpp::beginMainMotorShield();
 DCCpp::beginProgMotorShield();

Para inicia el motorshield Ardumoto y

 DCCpp::beginMainPololu();
 DCCpp::beginProgPololu();

}

para el driver Pololu MC33926.

Por ultimo iniciamos el loop de la central en el void loop()

void loop()
{
  DCCpp::loop();  /** Función del Loop principal */
}
motorshield

Para esto existen diferentes escudos o Shields y drivers de potencia. En mi caso y puesto que no suelo usar muchas locomotoras al mismo tiempo, generalmente dos o tres, y el ahorro de espacio, En mi caso uso el Shield Ardumoto pero existen otros como Pololu o LMD18200.

Como hemos visto al principio el archivo config.h asigna los pines de estos drivers.

Para otros shields diferentes, puedes consultar la documentación en DCCpp.h.

En DCC++ original, teníamos que hacer unos puentes entre los pines D5 y D13 y otro puente entre los pines D10 y D12. Esos puentes ya no son necesarios.

Estos son algunas de las lineas de configuración más importantes que tenemos que modificar para el uso de la librería. Estas configuraciones son validas para la mayoría de las centrales que DCCpp que la usan. Aunque es mejor leer la documentación de cada central que estemos usando. La configuración de los retromodulos S88 tienen la misma configuración de pines que la central DCC-EX



Página siguiente

Volver al índice

Descargar Librería DCCpp_LMD 2.0.4 (Modificación Oled, S88, Sonido, wifi, Bluetooth, Serial3, teclado y encoder)

Seguiré actualizando!!!