V5.4 Bug Fixes and Minor Chages

Bug Fix to allow maximum of 17 servos
Bug Fix to correct 2 reload #define definitions
Change to major Loop Delay cut in half to allow for fewer misses of DCC
packet detection
This commit is contained in:
Geoff Bunza
2016-11-26 12:42:30 -08:00
parent 4c1d5fd6e4
commit e622a596d7
18 changed files with 97 additions and 81 deletions

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -16,7 +16,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -299,7 +299,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -16,7 +16,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -299,7 +299,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -16,7 +16,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -293,7 +293,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// ******** UNLESS YOU WANT ALL CV'S RESET UPON EVERY POWER UP
// ******** AFTER THE INITIAL DECODER LOAD REMOVE THE "//" IN THE FOOLOWING LINE!!

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -16,7 +16,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -299,7 +299,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -19,7 +19,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -302,7 +302,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -16,7 +16,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -299,7 +299,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -16,7 +16,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -295,7 +295,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -16,7 +16,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -295,7 +295,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -16,7 +16,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -295,7 +295,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// ******** UNLESS YOU WANT ALL CV'S RESET UPON EVERY POWER UP
// ******** AFTER THE INITIAL DECODER LOAD REMOVE THE "//" IN THE FOOLOWING LINE!!
@@ -33,7 +33,7 @@ const int FunctionPin15 = 18; //A4
const int FunctionPin16 = 19; //A5
NmraDcc Dcc ;
DCC_MSG Packet ;
uint8_t CV_DECODER_MASTER_RESET = 120;
#define This_Decoder_Address 24
struct CVPair
@@ -47,6 +47,7 @@ CVPair FactoryDefaultCVs [] =
{CV_ACCESSORY_DECODER_ADDRESS_MSB, 0},
{CV_MULTIFUNCTION_EXTENDED_ADDRESS_MSB, 0},
{CV_MULTIFUNCTION_EXTENDED_ADDRESS_LSB, 0},
{CV_DECODER_MASTER_RESET, 0},
};
uint8_t FactoryDefaultCVIndex = 4;

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -15,7 +15,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -295,7 +295,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -15,7 +15,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[12];
SoftwareServo servo[13];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -16,7 +16,7 @@
#include <NmraDcc.h>
#include <SoftwareServo.h>
SoftwareServo servo[16];
SoftwareServo servo[17];
#define servo_start_delay 50
#define servo_init_delay 7
#define servo_slowdown 3 //servo loop counter limit
@@ -295,7 +295,7 @@ void loop() //****************************************************************
// from the Arduino loop() function for correct library operation
Dcc.process();
SoftwareServo::refresh();
delay(8);
delay(4);
for (int i=0; i < numfpins; i++) {
if (ftn_queue[i].inuse==1) {

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// LED control is dependent on direction of travel
// ******** UNLESS YOU WANT ALL CV'S RESET UPON EVERY POWER UP
// ******** AFTER THE INITIAL DECODER LOAD REMOVE THE "//" IN THE FOOLOWING LINE!!
@@ -44,6 +44,7 @@ const int FunctionPin15 = 18; //A4
const int FunctionPin16 = 19; //A5
NmraDcc Dcc ;
DCC_MSG Packet ;
uint8_t CV_DECODER_MASTER_RESET = 120;
#define This_Decoder_Address 24
struct CVPair
@@ -57,6 +58,7 @@ CVPair FactoryDefaultCVs [] =
{CV_ACCESSORY_DECODER_ADDRESS_MSB, 0},
{CV_MULTIFUNCTION_EXTENDED_ADDRESS_MSB, 0},
{CV_MULTIFUNCTION_EXTENDED_ADDRESS_LSB, 0},
{CV_DECODER_MASTER_RESET, 0},
};
uint8_t FactoryDefaultCVIndex = 0;
void notifyCVResetFactoryDefault()

View File

@@ -1,5 +1,5 @@
// Production 17 Function DCC Decoder
// Version 5.1 Geoff Bunza 2014,2015,2016
// Version 5.4 Geoff Bunza 2014,2015,2016
// NO LONGER REQUIRES modified software servo Lib
// Software restructuring mods added from Alex Shepherd and Franz-Peter
// With sincere thanks
@@ -66,6 +66,7 @@ const int FunctionPin15 = 18; //A4
const int FunctionPin16 = 19; //A5
NmraDcc Dcc ;
DCC_MSG Packet ;
uint8_t CV_DECODER_MASTER_RESET = 120;
#define This_Decoder_Address 24
@@ -80,6 +81,7 @@ CVPair FactoryDefaultCVs [] =
{CV_ACCESSORY_DECODER_ADDRESS_MSB, 0},
{CV_MULTIFUNCTION_EXTENDED_ADDRESS_MSB, 0},
{CV_MULTIFUNCTION_EXTENDED_ADDRESS_LSB, 0},
{CV_DECODER_MASTER_RESET, 0},
};
uint8_t FactoryDefaultCVIndex = 0;

View File

@@ -1,12 +1,13 @@
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\sl276\slmult1\b\f0\fs24 Decoder Configuration Details\par
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}}
{\*\generator Riched20 10.0.10586}\viewkind4\uc1
\pard\sl276\slmult1\b\f0\fs24 Decoder Configuration Details\par
\par
\b0 The multfunction decoder examples all for 4 functions to be assigned to any of the 17 available pins: on/off control, single line blinking with variable rate, servo control with start position/stop position/transit rate CV setting and end to end control via the function (on/off), and paired line blinking with variable rate.\par
\b0 The multfunction decoder examples all for 6 functions to be assigned to any of the 17 available pins: on/off control, single line blinking with variable rate, servo control with start position/stop position/transit rate CV setting and end to end control via the function (on/off), and paired line blinking with variable rate.\par
\par
When first loaded the decoder is set to short DCC address 24 (or 17 in Decoder_17LED_1Function). The decoder can be reset to the original parameters by loading CV 120 with 120 (decimal). This will reset everything including the decoder address, when the pushbutton on the Pro Mini is pushed (reset) or by powering the decoder off then on. You will know when the default CV setting are being reset as the decoder will flash Digital Pin 14 (A0) for one second.\par
The decoder address can be changed to another \ul\b short\ulnone\b0 DCC address by changing CV 1.\par
\par
\b The 7 Servo 10 LED decoder configuration\par
\b Example Only: 7 Servo 10 LED decoder configuration\par
\par
\b0 Arduino Pro Mini Pins are set as follows: 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19\par
\ul\b Pro Mini Pin\ulnone\b0\tab \ul\b Function\par
@@ -151,7 +152,8 @@ For example \b F0\b0 is initially set for \b servo\b0 control:\par
\par
Before changing the CV settings take a look at the initial settings and make small changes first to observe the effects. This should give modelers a starting point, and a better understanding for customizing their decoders.\par
\par
Please also note there is a new 17 LED (On/Off) decoder configuration (Decoder_17LED_4Function), which while providing the 17 LED on/off control like the very first decoder (Decoder_17LED_1Function) introduced in this project, whichh ONLY has on/off control. However, this new version can be reconfigured via CV control to perform the other functions too.\par
Please also note there is a new 17 LED (On/Off) decoder configuration (Dec_17LED_6Ftn), which while providing the 17 LED on/off control like the very first decoder (Dec_17LED_1Ftn) introduced in this project, which ONLY has on/off control. However, this new version can be reconfigured via CV control to perform the other functions too.\par
\pard\par
}

View File

@@ -1,38 +1,47 @@
Release Notes for the 5.1 SMA Decoder Examples
1. Automatic servo attachment and detachment has been implemented for all
servo control functions. When a servo has stopped at the end of its traverse,
it will be "detached" by the software. This has been demonstrated
to reduce power consumption greatly and reduce servo "chatter."
2. Several bug fixes including all reported bugs as of May 2016
3. In the fully conficurable verions. all 17 pins now can be configured for any of 6 functions
Config 0=On/Off,1=Blink,2=Servo,3=DBL LED Blink,4=variable Pulse ,5=fade on
4. Servo timing has a timing modifier added for extra slow servo traverse
#define servo_slowdown 3 //servo loop counter limit
Can be set from 0 to 255 -- the higher the number the slower the traverse
5. Software has been restructured to support new NmraDcc library releases
including the NmraDcc-MicroBahner library version.
6. 18 Predefined decoder skectekes are included:
Mobile Decoders:
Dec_2MotDrive_12LED_1Srv_6Ftn Dual motor drive, 12 LED 6 Function
Dec_7Serv_10LED_6Ftn 7 Servo 10 LED 6 Function
Dec_10Serv_7LED_6Ftn 10 Servo 7 LED 6 Function
Dec_13Serv_4LED_6Ftn 13 Servo 4 LED 6 Function
Dec_15Serv_2LED_6Ftn 15 Servo 2 LED 6 Function
Dec_17LED_1Ftn 17 LED ON/OFF Control
Dec_17LED_6Ftn 17 LED 6 Function
Dec_Dir_and_Fade 17 LED with Dual Direction Control and FADE
Dec_SMA12_LED_Groups LED Group Control for Euro Signaling
Accessory Decoders:
AccDec_7ServoBackandForth6Ftn 7 Servo 10 LED 6 Function
AccDec_7Servos_10LED_6Ftn 7 Servo 10 LED 6 Function
AccDec_10Servos_7LED_6Ftn 10 Servo 7 LED 6 Function
AccDec_13Servos_4LED_6Ftn 13 Servo 4 LED 6 Function
AccDec_15Servos_2LED_6Ftn 15 Servo 2 LED 6 Function
AccDec_17LED_1Ftn 17 LED ON/OFF Control
Release Notes for the 5.4 SMA Decoder Examples
1. Buf fix to allow maximum of 17 servos
2. Bug Fix to correct 2 reload #define definitions
3. Change to major Loop Delay cut in half to allow for fewer misses of DCC packet detection
4. File Decoders_MultiFunction_Description.rtf has minor edits for new file names and 6FTN version.
Release Notes for the 5.1 SMA Decoder Examples
1. Automatic servo attachment and detachment has been implemented for all
servo control functions. When a servo has stopped at the end of its traverse,
it will be "detached" by the software. This has been demonstrated
to reduce power consumption greatly and reduce servo "chatter."
2. Several bug fixes including all reported bugs as of May 2016
3. In the fully conficurable verions. all 17 pins now can be configured for any of 6 functions
Config 0=On/Off,1=Blink,2=Servo,3=DBL LED Blink,4=variable Pulse ,5=fade on
4. Servo timing has a timing modifier added for extra slow servo traverse
#define servo_slowdown 3 //servo loop counter limit
Can be set from 0 to 255 -- the higher the number the slower the traverse
5. Software has been restructured to support new NmraDcc library releases
including the NmraDcc-MicroBahner library version.
6. 18 Predefined decoder skectekes are included:
Mobile Decoders:
Dec_2MotDrive_12LED_1Srv_6Ftn Dual motor drive, 12 LED 6 Function
Dec_7Serv_10LED_6Ftn 7 Servo 10 LED 6 Function
Dec_10Serv_7LED_6Ftn 10 Servo 7 LED 6 Function
Dec_13Serv_4LED_6Ftn 13 Servo 4 LED 6 Function
Dec_15Serv_2LED_6Ftn 15 Servo 2 LED 6 Function
Dec_17LED_1Ftn 17 LED ON/OFF Control
Dec_17LED_6Ftn 17 LED 6 Function
Dec_Dir_and_Fade 17 LED with Dual Direction Control and FADE
Dec_SMA12_LED_Groups LED Group Control for Euro Signaling
Accessory Decoders:
AccDec_7ServoBackandForth6Ftn 7 Servo 10 LED 6 Function
AccDec_7Servos_10LED_6Ftn 7 Servo 10 LED 6 Function
AccDec_10Servos_7LED_6Ftn 10 Servo 7 LED 6 Function
AccDec_13Servos_4LED_6Ftn 13 Servo 4 LED 6 Function
AccDec_15Servos_2LED_6Ftn 15 Servo 2 LED 6 Function
AccDec_17LED_1Ftn 17 LED ON/OFF Control
AccDec_17LED_6Ftn 17 LED 6 Function