First Power up of the TCS decoder and the Bluetooth Enabled Control Widget
This is the first power on test of the decoder. I have not changed anything in the firmware or Android App from what I had with the Economi Decoder. I am using the 28/128 speed step which is the default in both decoders – so the extended packet format of DCC. The throttle, Bell and Horn all work out of the box, no configuration was done to the decoder before I tried this.
Because the TCS has some additional features and requirements, I will probably have to change the firmware and app side a little from the Economi implementation. It also has some sort of ‘mode’ to switch between the lights and sound functions so I will have to figure that out. That is the nice thing about a custom app, I can tailor it to each decoder.
I also will be controlling a few extra things with this particular installation – I’ve got a temperature sensor mounted on the heatsink of the DCC amp. I also had a current sensor in there but it proved to be defective so I had to remove it for now. I’ve got two fans wired to function outputs on the decoder so I can turn those on and off. Two servos will be used to control the couplers as well. These will be implemented in the widget layer, they won’t be controlled by DCC so I can tailor that profile as well. Just yanking the couplers open doesn’t work very well, you need a smooth motion.
One other option will require a PCB mod. I want to be able to ‘name’ each BT module so it shows up in the phone as a locomotive number and description. The docs say I can use up to 20 characters for this. However it requires that you power up the device with a pin held low, then let it go high so it enters ‘AT’ mode. This will require either a special app or an extension to the one I have to set this plus a jumper on the PCB. I can work around this for now but I will add it to the PCB layout along with a couple of other spacing fixes for the next pass.
I think I’ve finally gotten to a beta release point on my Phone App and Widget Firmware. The firmware is universal but the phone app is customized for the Soundtraxx Economi DCC decoder. This app lets you control and program a battery powered locomotive via wireless DCC on your Android phone.. Above are the four screens. Some of the controls, the couplers in particular, are not implemented quite yet, or are implemented but untested. Everything else works. The coupler buttons are intended to control servos to actuate the couplers ala switching moves.
Below is a (rather long) video of the app driving the decoder on my little test setup. The blue readout is a current meter. Not pulling much here.
I have a new locomotive, a USAT GP9, that I will be putting a TCS WOW decoder into. That will get it’s own phone app, although it should look very similar to this one. I’m finding the various decoders, while all adhering to the DCC spec, are a little different in certain areas, particularly the CV programming. Also, one thing I didn’t consider is getting data FROM the decoder. I have the circuit and s/w design for that but it’s not implemented yet. That’s next.
At some point I may try to merge the various incarnations of the phone app into one, but for now I’ll be doing one for each. I plan to support the three decoders I currently have, the QSI, the Economi and the TCS Wow.
Here is a demo of the phone app. It doesn’t actually do anything, just lets you change screens and move the throttle slider etc. But I’d be interested in feedback from other train folks – Drop me an email: firstname.lastname@example.org
Got my new boards in for the latest widget design. On the left is the DCC Amplifier, it turns the logic level signal from the widget into a 15v DCC signal. The board on the right is the new Megawidget.
I have moved away from SOIC components as they are hard as heck to solder by hand. So this one sports an Atmega328 28 pin thru-hole microcontroller. I still have one SOIC component, the 3.3v regulator for the network module but it’s a pretty easy hand solder and the thru-hole version is ridiculously large.
Another advantage to this microcontroller is I can run it at 16mhz using an external crystal. It’s a pretty speedy little sucker at that clock rate.
The boards came out perfect in terms of electrical connections, I didn’t have to cut any traces or add any jumper wires. However I do have a bit of a spacing problem on both the controller and the DCC amp that I will have to address on the next pass. The ISP programmer port is too close to the bluetooth module and the logic input on the AMP requires that I wire it instead of putting a pin header – but for now they are ok.
The plan is to refactor all of my existing code on the firmware side and get it all squeaky clean- bluetooth network, servo control and the DCC output. Hope to have that done this weekend. Eventually it will drive a TCS WOW Sound 5A DCC controller.
Here is an expansion of my R/C to DCC circuit. I now have all six channels of a cheap 2.4Ghz Radio Control System driving a 2Amp Economi DCC decoder. Throttle stick drives the speed, the other sticks trigger the bell, horn and other sounds. I have one of the switches doing the direction. The DCC amp can drive a 4A load with peak to 5A so more than enough for most G scale Here I’m driving a single USAT motor block. Still have a couple of small issues in the firmware but for the most part it works quite well. I am going to try to finish this off over the next few days and design a PCB for it.
Here is a diagram of the transmitter controls
A video of everything working. Can’t quite see the blue LED that is the backup light, but the Headlamp LED is quite bright. I still have channel 5 open, not sure what to do with that one at the moment. Basically, you can do throttle, direction and 8 functions with a six channel system.
I’ve been working with the series 1 Xbee for several years in order to control large scale model trains. For those not familiar with this device, the Xbee 1 is an integrated package that communicates on the 802.15.4 IEEE wireless network. This is the base level network, only the MAC layer, no mesh or other high level network layers. I have the device configured in ‘API’ mode, which means it accepts standard format messages with a header and checksum and passes those out to the network. It’s actually very simple- all of the nodes are on the network and any node (via a 16 bit address) can talk to any other node. So this means I can do anything with this from controlling trains to controlling turnouts or animations or sending back telemetry from the locomotives, etc, etc.
Well, it turns out that the 802.15.4 protocol is rapidly becoming one of the standards used in IoT, Internet of Things. From what I have read, it has about 65% or so of the wireless IoT market share. So I’ve been working on ways to control large scale trains with this in mind. I’ve had quite a bit of success with this and now one of the outputs of my control widget board can generate DCC messages to directly drive DCC decoders (up to 3Amps for now, I have a 5amp version I’m working on).
This is an open-ended algorithm, it can generate the proper DCC bit stream from any input of hex bytes. This lets me keep the network traffic down as the widget generates all the timing for the DCC signal. I only have to pass the basic commands over the network which keeps everything nice and small and fast.
Anyhow, here is the latest incarnation of the DCC 802.15.4 Widget driving a QSI decoder. This one is installed in an Ariso Dash9. Unlike previous designs this one has only one connection- the DCC output from the widget. This is fed to a ‘DCC amplifier’ that then drives the QSI DCC decoder. A 14.8v 5000mah battery provides the power.
This was an interesting install for a couple of reasons. First, the decoder is ‘plug and play’, I disconnected the track pickups and plugged the decoder into the socket- everything just works, no rewire of the motor blocks or LEDs! Very cool. The outputs of the DCC amplifier then drive the decoder directly, no motor controllers or relays or anything.
The second reason was the software. I’m not sure about the vintage of the QSI firmware but it was not happy with the extended DCC packet format for the throttle messages. So I branched the software and made a version that only sends the base DCC packets. I put the QSI into ’28’ step mode and all was good. I wasn’t particularly pleased by this but what can you do eh? I still need to do some CV tweaking for the momentum and braking but it’s working well.
At some point I will be trying out the new WOW large scale decoder and the Economi 400 to see how they react to the extended packets. I’ve played with the Econami 100 and 200 decoders so I assume the 400 will behave in a similar way. Nevertheless, I’m thinking I will need to re-work my firmware to include both the extended and the base level DCC packet generation. That is the official standard according to the DCC docs so I should support it.
Above is the basic circuit. On the left is the DCC driver, then next assembly is the 14v to 5v stepdown power supply which can deliver 2.5 amps of 5v (for servos, etc) to the IoT Widget. In the middle with the Xbee is (obviously) the Control Widget. On the right is speaker #2, I’ll be routing most of the horn and bell sounds to this one with the big sub in the engine compartment handling all of the prime mover sounds.
A picture of the main speaker driver. This is a tangbang full range speaker with passive radiator. Really nice bass from this unit. Here is link to it: tang-bang-speaker
Here is a shot of the ‘terminal’ (Hand held controller) I’ve developed for interacting with the IoT 802.15.4 network. This one is a back-lit alpha numeric display which works great- I can see it out on the layout as it gets dark at night.
Above is a new design I’m trying out- This is a full color graphic touch screen that has tons of features. It incorporates a usb programmer port, a speaker and a built in lipo charger circuit. I just can squeeze it into the same case as the alpha display so we shall see how it goes. Work in progress.
This is the widget driving an Econami 200. Since it’s only 2 amps, I will probably be using this in a critter or railcar of some type. Right now all I have it hooked to in this video is the speaker.
Here is a video of the widget controlling the QSI. I think all the firmware changes are in so I’ll be buttoning up the unit and taking it out to the layout soon for some real world testing. I may go ahead and run the servo lines out just so I don’t have to open it back up when I put servos on the couplers.
I continue to refine my control widgets. Here is the latest incarnation. I’ve shrunk the footprint down and boosted the clock speed to 12Mhz. This module ties into the 802.15.4 network via Xbee. I’m using the Series 1 not the Pro and Zigbee. I’m not real hip on the Pro Zigbee Mesh, it seems overly complex compared to say the Synapse SNAP mesh network.
Anyhow, according to what I’ve been following on the IoT blogs and sites, 802.15.4 has about 65% of the IOT market so I’ve decided to concentrate in that direction.
Basically, this module allows you to control things like servos and digital outputs, plus it gives you a DCC logic level signal output as well. Feed that into a motor driver like the ones from Pololu and you have a nice robust DCC implementation that is network based, rather than the point to point of Bluetooth or R/C.
I’m also looking into another implementation, via the Synapse RF266 SNAP module. I had initially though I could somehow make the RF266 work with the Xbee Series 1. While I think it’s technically possible to do this, the effort involved is quite extensive. Instead, I think a minor hardware platform will make things easier and actually, more flexible, so I’ve started down that road. Essentially, I’ll use the two serial ports on the Attiny to link the two modules together. With the right firmware I should be able to hang a Xbee Series 1 network off of the SNAP network for all sorts of diabolical mesh network fun. 🙂
One thing that I have not been real happy with as I build out my control network, is the hand held controller implementation. I had hoped this design would change that but after I’ve played with it a bit I don’t think so.
It features a uLCD-32 smart touch screen display unit, a large aluminum knob and four tactile hardware buttons. The display unit is a very full featured device including a Lipo battery charging circuit! Very cool. The custom graphics chip and language are very powerful and more importantly FAST. This will take all the UI load off the Xbee/Widget device. More info is here – Serial TFT Color LCD
So, I think I don’t like this one either. I’m going to scavenge the LCD and try to fit it in the case I’ve found for the alpha numeric monochrome unit. It’s a tight fit but the quality of this display is just too good to let it go to waste. I’m finding I like the off the shelf case I have (I bought two) better than I thought. I have somewhat large hands so I can hold it in my left and turn the knob with my thumb.
So this one is defunct now. More to come on this project later.
Well, I can’t believe I have not seen this module before. I may have but discounted it because it is about $11 more than an Xbee Series 1. However, the features in this module are very compelling, you really get a LOT of extra power and features for that $11.
This Synapse RF module-in-an-XBee-Pro-form-factor features OTA (Over-The-Air) speeds up to 2Mbps, maximum 1.2km (4000) range and a chip antenna for compact installation.
This particular RF module includes a user programmable (via python-based scripts), embedded ATmega128RFA1 microcontroller that can be programmed for all kinds of applications including remote sensor monitoring, remote control, or peripheral activation.
XBee Pro pin and footprint compatibility
Very high communication speeds (250kbps to 2Mbps)
Up to 1.2km (4000′) foot range (line-of-sight)
Built-in Python interpreter (Who needs additional microcontroller? This one has one built-in!)
Wide low voltage TTL operating range (2.7 – 3.6V)
Ultra low power consumption mode (1.18µA. Not mA, but µA!)
15 GPIO, featuring
4 10-bit A/D inputs
4 PWM Outputs
7 Interrupt capable pins
128k flash, with 58k free for over-the-air loaded user programs
Communication options include I2C (TWI) master mode, SPI (3 & 4 wire, master mode), 1 UART
Low power capabilities (2.3uA sleep current)
Embedded ATmega128RFA1 on-board
1 UART port (pin 2, 3) for LVTTL (3.3V) serial control or transparent data
Able to be configured to wirelessly program Arduino Uno & Mega 2560
Socket-able (2mm spacing) or solder-able
SNAP, instant-on, self-healing, mesh network operating system
802.15.4 Protocol at 2.4GHz
I2C communication (Pins 9, 13)
SPI communication (Pins 18, 19, 20)
128k flash memory (56k available for user applications)
Can be used stand-alone (no additional microcontroller required)
Low power mode of 2.3uA with internal timer running
I’ve been working on this Xbee DCC thing for quite some time now and have finally finished it off. Or more like, I’ve finally gotten to the point where I think I could ‘release’ the code and the hardware. I have created a version 2.0 release branch for the code and have most of the hardware in a PCB state so it’s getting pretty mature. And more importantly, it works pretty darn good now!
The basic problem I’m trying to solve is how to control my trains, both electric and live steam, with one network. This network would also control pretty much everything else- turnouts, lights in buildings, signals, whatever. Everything on the network- trains, towns, turnouts, signals, would be capable of talking to everyone else, in real time. This would then allow you to tap into the network with a standard interface to leverage whatever application you want on top of it.
This is the reason I went with the Xbee. Unlike simple R/C or even Bluetooth, the Xbee (and I am speaking specifically about the Series 1 Xbee, NOT the Pro Zigbee) is a low level point to multi-point network. It runs at 250Kbps and has a range outside of about 100 meters or 300 feet. Every node on the network has a 16 bit address and can talk or respond to any other node.
One thing that took quite a bit of time to develop and test was the DCC output. The widget generates 128 step DCC throttle messages and DCC Function Messages F0-F12. It’s a bit basic, you have to program your DCC decoder with an external DCC unit and (for now anyhow) you only get those specific DCC transaction but as you can see from the video, that gives you lights, sounds and throttle.
I also completely redesigned the Master side code as well. It’s now far more generic in terms of messages. So I designed a new hand-held controller for it to reside in:
Hand Held Controller 2.0
Here is a basic diagram of what is going on in the U25B in the video. These are the components and control and power flows. Red is power, orange is logic, blue is DCC. Also, it’s not on the diagram, but the economi is controlling the lights and the Widget is driving 2 servos to automate each coupler. The ‘other I/O’ is also hooked up, a current sensor monitors the amps flowing to the trucks and there is also a photo detector that gives a pulse on every wheel revolution (for speed and distance). (The software is not currently looking at these however)
Basic Control Diagram
All of the components in the client are now on PCBs, no more proto or perf boards: