Wednesday, March 5, 2014

BoosterPacks Galore

Over the last several months I've been collecting BoosterPacks for the LaunchPad and thinking up neat projects that can be constructed with them.  I must confess that I have had "plug-in" envy when I compared the available plug in boards for the Arduino versus those available for the LaunchPad.  Plug-in boards for the Arduino (called "shields") number, literally, into the hundreds; if not the thousands.  The number of BoosterPacks available are much smaller but, after doing some research, not nearly as few as I had originally thought.  In addition those that are available for the LaunchPad are really neat and powerful.


Many of the BoosterPacks, particularly those built by TI, are very powerful microcontroller products in their own right; sometimes more powerful than the MSP430 LaunchPad itself.  A case in point is the C5000 Audio Capacitive Touch BoosterPack.  This BoosterPack allows a LaunchPad to record and play back audio files in MP3 format.  In addition the BoosterPack has a capacitive "click wheel" type input device.  This BoosterPack is intended to allow the LaunchPad to become an MP3 player.  

C5000 Audio Capacitive Touch BoosterPack attached to a MSP430 LaunchPad

The C5000 Audio Capacitive Touch BoosterPack has a C5000 series Digital Signal Processor (DSP) on board. This procesor is far more powerful than the MSP430 processor on the LaunchPad.

What use would an audio recorder be to a model railroad? Well my first thought, and the reason that I bought one of these, is to build an automated train defect detector.  A prototype train defect detector uses sensors to scan each train as it passes and detect hotboxes, dragging equipment, etc.  After the last car has passed, the detector announces it's findings to the train crew via radio - either "no defects" or it annunciates the defect and the axle number where the defect occurred.   Here's a link to sound files of actual train detectors in operation:  http://www.n8rrb.com/trains/sounds/railsounds.html

As I envision this project, the LaunchPad would optically count the axles then, using a random number generator, determine if there was a defect and decide, again using a random number generator, which axle was at fault.  Then the LaunchPad would trigger the appropriate sound files on the BoosterPack to announce the defect or the "no defects". 

Since I model an era when there were no automated defect detectors, this project is not at the top of my list of things to do.  If you have an urge to tackle this one, drop me a line and I'll let you know how I think it can be done.

Another use for an audio player is an intelligent background sound generator - triggering sounds in response to complex events and routing those sounds to particular places on the layout.  Sort of a more flexible and programmable Dream Player.  At $35 for this BoosterPack it is the same price as the stand-alone sound modules for model railroads but with much more potential.

A trio of BoosterPacks are very exciting.  The CC110L RF BoosterPack operates in the 902-928 MHz band and allows LaunchPads to communicate with one another wirelessly. These are perfect for use with the LaunchPads used as signal controllers and can prevent having to string more wires under the layout.               These BoosterPacks apparently have extensive packet handling on-board for low rate data communication - just what's needed for a signal system. I bought a pair of these but I have yet to dig into them.  I'm thinking that a publish/subscribe architecture as well as  a method for TDMA or collision detection will have to be worked out (Sorry for the foregoing sentence, it's just my inner geek getting out).  At less than $20 for two RF BoosterPacks, they are not expensive either.

CC110L Boosterpacks


Another wireless product by TI/Anaren is the CC2530 AIR Module BoosterPack.  These BoosterPacks implement a wireless protocol similar to Wi-Fi called ZigBee.  ZigBee is capable of moving large amounts of data including audio and video.  They are probably overkill for most model railroad applications, and they are more expensive at 3 BoosterPacks for about $130.  

CC2530 AIR Module BoosterPack

The final wireless BoosterPack is the CC3000 Simple Link BoosterPack.  This module interfaces with a LaunchPad and implements the Wi-Fi Ethernet protocol, including an on board TCP/IP stack (sorry, the geek got loose again).  Probably more capability than the average model railroad project needs, the CC3000 or especially the CC2530 BoosterPack above, may be good candidates for taking NMRAnet wireless.

CC3000 Simple Link BoosterPack

A BoosterPack that I haven't bought, but which you may find attractive, is the Fuel Tank BoosterPack from Newark (Farnell in the UK)/Element14.  As it's name implies, this is a battery pack for all LaunchPads.  It has an on-board charging circuit and a lithium-ion battery.  The Fuel Tank plugs into the LaunchPad and can communicate battery condition to the LaunchPad.  It makes hand-held projects possible.  At $26.99 I find it a little pricey inasmuch as at last Christmastime one of the big PC retailers hereabouts had USB rechargeable battery packs of similar capacity for $10; and USB battery packs run LaunchPads just fine.  If I had a hand-held project I could probably live with the inconvenience of pulling the battery pack to recharge it externally and forgo the battery data being available to the LaunchPad.

Fuel Tank BoosterPack

There are display BoosterPacks for the MSP430 LauchPad. One of which is KTBCD430-D1 Bi-Stable Cholesteric Display BoosterPack.  This 128x64 pixel display uses a serial bus (SPI) to communicate with the LaunchPad and has on-board character generation. I have not bought this BoosterPack, but looking over the documentation I see male pins on the back of the display and I do not understand how this will interface with the male pins on the LaunchPad. 

KTBCD430-D1 Display BoosterPack

Displays are useful on model railroads for handheld throttles, fast clocks and many others.

The Educational BoosterPack also has a display, in this case a 2 line x 16 character display along with a suite of other devices which may not be too useful for a model railroad.

Educational BoosterPack

A BoosterPack that I have bought because of its potential uses in model railroading (but I have not had the time to dig into its guts yet) is the DLP-7970ABP RFID BoosterPack from DLP Design.  Radio Frequency Identification (RFID) is slowly finding its way into model railroading as a means of tracking cars and locomotives on the layout.  Especially for operators of large model railroads with hundreds of cars and the storage yards to hold them, RFID hooked to a computer system has the potential for locating a car in real time.  RFID tags are put into each piece of rolling stock and then tracked as they pass by receivers, such as this, at various locations on the layout.

DLP Design DLP-7970ABP BoosterPack

Designing a viable RFID system for model railroads is still a ways off, but the LaunchPad will be ready.

Now that I have all of these neat BoosterPacks, I still have to find the time to begin using them!

This begins to scratch the surface of available BoosterPacks.  I've only listed here some of the BoosterPacks available from the major electronics suppliers that are applicable to model railroading.There are many other BoosterPacks that are less useful for model railroads.  They can be found on the websites of the major electronics distributors; at Newark/Element 14 (scroll down the page); at Mouser and DigiKey search on "BoosterPack" as well as the alternate spelling "Booster Pack".

TI's master list of BoosterPacks (very outdated) can be found here. A forum discussing BoosterPacks can be found here.

I have not included in this survey any of the products from the hobbyist market making BoosterPacks.  That will be for another post.

One final note.  Several of the BoosterPacks mentioned here emit or use RF energy.  All of these BoosterPacks are certified and available for sale and unlicensed use in the USA.  If you live outside of the US, you will have to determine if you can purchase and/or use these items in your jurisdiction.







Monday, November 18, 2013

I am not at liberty to either confirm or deny...

I still have not been able to confirm the status of the MSP430G2 LaunchPad.  At TI website it's still marked active and I was able to order some today, although their confirmation e-mail is non-committal:

"You will receive an e-mail within 24 hours that includes the estimated shipping date for in stock items, or a backorder date for products not currently available. Once these items are packed and ready to be shipped from our warehouse, you will receive a shipping notification with the carrier name and tracking number of your item(s). Your credit card will not be charged until we ship the item(s) to you. If you would like a real time status of your order, please visit your personal My Account Page."

I checked my TI account and it shows my order for LaunchPads will ship on 11/21.  I just rechecked the TI store and the MSP430G2 LaunchPad is listed as a top seller (Yea!) and it's still in the list of LaunchPads. 

The distributor Newark (Element14) has over 300 in stock and clicking their check additional stock link indicates that they expect more on Dec. 2.  However their link for the Stellaris LaunchPad indicates that when current stock runs out there will be no more.  Element14 has been a proponent of the LaunchPad so I would expect them to be plugged into what is happening, so I feeling more assured.

I'm feeling better about the LaunchPad than I was this morning, but I wish that I could get confirmation from TI.  I have never been able to find a "Contact Us" link on the TI website so I cannot contact the LaunchPad's manager directly.  Maybe a post on their forum is in order.

Stay tuned!


Oh No!

I visit TI's web sites a lot searching for information about the LaunchPad.  Therefore, thanks to Google's omnipresent tracking, I get pop-up ads in sidebars hawking TI products.  Today I got one for the "All New" MSP430 LaunchPad.  I clicked on it with trepidation and was taken to a site with TI's all new lineup of development boards.  




The new MSP430 Launch Pad has a soldered-in-place processor, a double row of header pins on both sides. You can find the new LaunchPad here: http://www.ti.com/tool/msp-exp430f5529lp  The "All New" price is $12.99. This development is distressing for a number of reasons.  It's not clear if the old LaunchPad will be discontinued.  The new LaunchPad abandons the header arrangement of the old version and adopts the style of the Stellaris LaunchPad at least physically (I cannot determine if the pinout is the same).  That means any booster packs designed for the old LaunchPad have a limited future. 

The new LaunchPad claims to have USB and a faster clock, more I/O and a higher resolution on the analog to digital converter.  However, most of these will be overkill for the simple tasks that we have on model railroads (the exception may be Dave Loman's JMRI to LaunchPad interface). For $12.99 the Stellaris LaunchPad - which features a true ARM processor - may be the better deal.  The non-removable processor prevents exchanging the processor for a different type and it prevents removing a processor after programming for use on a dedicated PCB. And, while the $12.99 price is still one of the cheapest microcontroller boards around, it's a far cry from the $4.30 where the LaunchPad started. 

If you search the TI site for MSP430 LaunchPad, you'll be directed to the new version. However, the old version can be ordered here:
http://www.ti.com/tool/msp-exp430g2?DCMP=hpa_bestbets_estore&HQS=estore-tool-bb-launchpad

I blasted out an order for myself (I've been using a lot of these in my LaunchPad for Model railroading clinic).  I checked Mouser and Digikey who still have many in stock.  I did not check Farnell or any of the overseas distributors.  From how quickly these sell, I'm sure that we are not the only community building these boards into permanent projects.  If you want some of the older version, I suggest that you get them now, in case the version that we know and love is discontinued.

I'm going to see if there is someone at TI to whom we can appeal to save the old LaunchPad, if indeed it is going to be discontinued.  The LaunchPad design files are available, so more could be built.  But this would be a capital intensive project as they would have to be built in the thousands for the price to be anywhere near $10.

Stay tuned!




Wednesday, November 13, 2013

Jim Gifford's Grade Crossing V1.0

Moderator's Comment:  Here's a project that illustrates integration of a LaunchPad with other commercial products to implement a grade crossing flasher with bell sounds.

Grade Crossing V 1.0

This project uses a Launchpad to drive relays that operate the globe based crossing signals for a double track main with individual track current sensors and the need to sense any equipment that does not draw current that is over the crossing.

The givens are: crossing globes operate on 8-10V, relays operate on 12V, Block Watchers used for signal logic (switched output [J4]) operate on 12V but not on a common ground with rest, it is a double track crossing and needs IR detector at crossing to detect train without resistor axles (covers situation when locos of train have exited the power block leaving nothing to be detected by the Block Watcher).


I have built my own power supply board that utilises one of my 18V 4 Amp AC accessory power circuits and outputs 12V & 5V regulated DC.  I drive the lamps from the 12V through four diodes to drop the voltage to just under 10V.



In this project a LaunchPad, powered from the 5V regulated power supply, will control the (3) 12V Relays by monitoring the state of the switched outputs (J4) of two DCC Specialties Block Watchers providing track occupancy coupled with IR detection across the double track crossing operates the two sets of crossing lights and a sound module until a predetermined time is reached after all inputs are restored to an inactive state.  The crossing should operate if Track1 occupied, Track 2 occupied or the IR sensor is active.


Bill of Materials:

(1) 1 x LaunchPad with MSP430G2553IN20 processor.
(2) 1 x 4 way relay board ( this link ).
(3) 2 x switched output e.g. (J4) DCC Specialties Block Watcher ( link ) .
(4) 1 x 3mm Infrared phototransistor  ( link ).
(5) 1 x 3mm Infrared diode  ( link ).
(6) 1 x 150Ω ¼W resistor.
(7) 2 x Optocoupler  ( link )
(8) 1 x Innovative Train Technology Products HQ300-1 Grade Bell ( link )
(9) 1 x Innovative Train Technology Products  4" - 8Ω Speaker SPKR4 ( link )
(10) 1 x Power supply (see below)

Notes:

(1) remember to include a resistor to limit the current in the block watcher circuit to protect the LED embedded in the optocoupler.
(2) ( links ) were valid at the time of publication.

Power supply bill of materials:

(1) 8 x 1N4001 Diodes.
(2) 1 x LM7812CT 12 Volt Regulator
(3) 1 x LM7805CT 5 Volt Regulator.
(4) 1 x 1000µf 50V.
(5) 2 x 10µf 50V.



1 - Block Watcher


2 - Power Supply



3 - Quad Relay
4 - Sound Module



5 - Putting it all together
(Ammeter & Voltmeter included on power supply board)



6 - IR sensors mounted in PVC tubes (painted black)


7 - Scenery added (white glue applied)

Theory of Operation:

The Power on LED is connected to pin P1.0 and illuminates when the LaunchPad is running the program.

The switched output of each Block Watcher (J4) is connected to the LaunchPad via an optocoupler switching VCC to pins [Board (IC)] P2.0 & P2.1.  When a train is detected by a Block Watcher and its switch (J4) is closed the optocouplers operates and causes their respective pins to go "high" and the software in the LaunchPad causes relays 2 & 3 to turn on and relay 1 to cycle off and on for a predetermined time.  Similarly if the IR sensor goes "high" it has the same result.

This is achieved by monitoring 3 inputs: Block Watcher 1 - P2.0; Block Watcher 2 - P2.1; IR sensor - P2.2. If any or all of the inputs go high: set Inputs_Active (flag) to 1 and cycle light sequence 5 times with the sound module activated.  This is achieved by: setting P1.6 to ON (Light power); setting P1.7 to ON (Sound power); and cycling P1.5 ON & OFF 5 times.  If any input (P2.0, P2.1 or P2.2) remains high then the sequence is repeated.

Circuit Diagram:

While the diagram looks complicated, hookup is actually reasonably simple using wire wrap techniques.  It is good practice to solder wire wrapped joints for long term reliability once testing is complete.




Demonstration of the Prototype

Link to Video of prototype operation.

Link to Video of testing before installation

Demonstration of the Installation

Link to Video of IR operation.

Link to Video of Block & IR operation.

The Code

The code can be found here.

The code listing follows below.

/*
* Grade Crossing 1.0
* COPYRIGHT © 2013 Jim Gifford
* http://halletcovesouthern.blogspot.com.au
* Provided under a Creative Commons Attribution, Non-Commercial Share Alike,3.0 Unported License
*
* I wish to acknowledge code snippets initially written by:
* “Steve Hoffy Hofmeister” & “Terry Terrance”
*
* TARGETED TO MSP430 LANUCHPAD W/MSP430G2553N20 PROCESSOR
*
* Design Notes:
*
* This code is designed to receive an input from either of 2 DCC Specialties Block Watchers and a IR LED/Phototransistor Sensor pair that turns on the power to light Crossing lights via a relays, turn on a sound module and hold them on for a predefined period of time (currently set to about 3 seconds) after detection ceases.
*
*I have built my own power supply board that utilises one of my 18V 4 Amp AC accessory power circuits and outputs 12V & 5V regulated DC.  I drive the lamps from the 12V through four diodes to drop the voltage to just under 10V. I have connected the MSP430 to the 5V regulated supply.
*
*
* Circuit Pinout:
* PIN 1.0 = Circuit Power Indicator
* PIN 1.1 = UNASSIGNED - UART
* PIN 1.2 = UNASSIGNED - UART
* PIN 1.3 = UNASSIGNED
* PIN 1.4 = UNASSIGNED
* PIN 1.5 = Relay 1 Trigger
* PIN 1.6 = Relay 2 Trigger
* PIN 1.7 = Relay 3 Trigger
* PIN 2.0 = Input for Block Watcher 1
* PIN 2.1 = Input for Block Watcher 2
* PIN 2.2 = Input for IR sensor
* PIN 2.3 = UNASSIGNED
* PIN 2.4 = UNASSIGNED
* PIN 2.5 = UNASSIGNED
* PINS 1.1, 1.2, 1.3, 1.4, 2.3, 2.4 & 2.5 are left unused for integration into other projects.
* Note Anodes for the IR Emitter connect to VCC and Cathode to Ground
*/

#include <msp430g2553.h>

                /////////////////////////////////////////////
                //  Define variables
                ////////////////////////////////////////////


volatile unsigned long Relay_1_Timer = 30000;  //Define time for outputs to stay on
volatile int Active = 0;
volatile int Inputs_Active = 0;
volatile unsigned long Counter = 0;

// delay macros
#define DELAY_FLASHER(delay) doDelayFlasher(delay)

// routine definitions
void doDelayFlasher(unsigned long delay);

void main(void) {

   WDTCTL = WDTPW + WDTHOLD;        // Stop watchdog timer
   P2OUT = 0;                                            // Set All P2 to Off

//Configure Outputs

   P1DIR |= BIT5;                                     // Port P1.5 (Relay 1 Trigger) as output
   P1OUT &= ~BIT5;                                                // Port P1.5 (Relay 1 Trigger) Set to off State

   P1DIR |= BIT6;                                     // Port P1.6 (Relay 2 Trigger) as output
   P1OUT &= ~BIT6;                                                // Port P1.6 (Relay 2 Trigger) Set to off State

   P1DIR |= BIT7;                                     // Port P1.7 (Relay 3 Trigger) as output
   P1OUT &= ~BIT7;                                                // Port P1.7 (Relay 3 Trigger) Set to off State

// Configure Inputs

   P2DIR &= ~BIT0;                                 // sets Port 1, bit 7 to input from Blockwatcher
   P2OUT &= ~BIT0;                                                // sets pull-up resistor on Port 1, bit 7 to pull-up
   P2REN |= BIT0;                                   // pull up bit0

   P2DIR &= ~BIT1;                                 // sets Port 1, bit 7 to input from Blockwatcher
   P2OUT &= ~BIT1;                                                // sets pull-up resistor on Port 1, bit 7 to pull-up
   P2REN |= BIT1;                                   // pull up bit1

   P2REN |= BIT2;                                   // Port 2 Resistor enable
   P2OUT |= BIT2;                                   // pull up bit2

// Show Launchpad Active

    P1DIR |=  BIT0;                                  //  Circuit Power Indicator
    P1OUT |=  BIT0;                                 //  sets Port 1, bit 0 to on - use onboard LED

// Let's Get Down to Business


  while( 1 )                                              // begin infinite loop
   {

                // Do while any of 3 inputs are active
                //              1              Block Watcher 1 (J4 closes & goes high) P2.0
                //              2              Block Watcher 2 (J4 closes & goes high) P2.1
                //              3              IR sensor detection active (goes high)              P2.2
                // & if so activate the crossing signals

                if ( ((P2IN&BIT0) == 0) && ((P2IN&BIT1) == 0) && ((P2IN&BIT2) == 0) )             // No inputs active
                                {
                                // Set to Relays to off

                                P1OUT &= ~BIT5;   // Port P1.5 (Relay 1 Trigger) Set to off State
                                P1OUT &= ~BIT6;   // Port P1.6 (Relay 2 Trigger) Set to off State
                                P1OUT &= ~BIT7;   // Port P1.7 (Relay 3 Trigger) Set to off State
                                }
                else                                         // At least 1 input active
                                {
                                Inputs_Active = 1;
                                while (Inputs_Active < 6)  // Go through 5 cycles
                                                {

                                                // Start crossing working


                                                P1OUT |= BIT6;                                      // Set Relay 2 Trigger to ON - Light power
                                                P1OUT |= BIT7;                                      // Set Relay 3 Trigger to ON - Sound power

                                                DELAY_FLASHER(Relay_1_Timer);     // Let lights 1 stay on for value of Relay_1_Timer
                                                P1OUT |= BIT5;                                      // Set Relay 1 Trigger to ON
                                                DELAY_FLASHER(Relay_1_Timer);     // Let lights 2 stay on for value of Relay_1_Timer
                                                P1OUT &= ~BIT5;                                   // Set Relay 1 Trigger to OFF

                                                Inputs_Active ++;                                   // Index the counter

                                                }               // End of input detected While

                                }               // End of Input(s) active if

   }  // End of While (while( 1 ))

}  // END OF MAIN


// Function Delay_Flasher
void doDelayFlasher (unsigned long x)
{
Counter = 0;
while (Counter < x)
                {
                Counter ++;            // Index the counter
                }
}






Tuesday, November 12, 2013

GUIs, GUIs Everywhere

When I was giving the LaunchPad for Model Railroading clinic at the NMRA MER Convention in October, I mentioned that I wanted to come up with a GUI (Graphical User Interface) to enable the LaunchPad to be programmed graphically, without having any knowledge of the "C" programming language.  I lamented that this project would have to wait until after I retired because I did not have the time to devote to it right now.

Well, you and I may not have to wait that long.  I've recently come across several GUIs, either complete or under construction, that allow you to manipulate a LaunchPad without having to program in "C". These GUIs allow you to manipulate a LaunchPad while it is connected to your computer (rather than what I wanted, which would program the LaunchPad to operate stand-alone).  However, they are still useful for model railroading purposes and one of them, being built by Dave Loman, allows you to manipulate a LaunchPad using JMRI.

First, here's a link to Dave's work: http://therustyspike.com/2013/11/05/cmri-emulation-on-a-mps430/ This GUI holds the most promise for model railroaders.  When it is finished, JMRI will be able to manipulate your LaunchPad.  With it JMRI should be able to turn pins on and off.  This will allow the LaunchPad to manipulate signals, switches and other accessories allowing it to be part of JMRI's Panel Pro application.

I stumbled across two other GUIs written by hardware hackers to allow them to manipulate a LaunchPad while connected to a computer.  Both are available via TI's E2E website.  First is ControlWare:  http://e2e.ti.com/group/microcontrollerprojects/m/msp430microcontrollerprojects/665272.aspx  The second is ControlEasy: 
http://e2e.ti.com/group/universityprogram/students/m/students_repository/664591.aspx  

These GUIs add the capability to generate PWM (Pulse Width Modulation) which allows for blinking lights and servo control.  Both of these GUIs also require that the LaunchPad is connected to your computer to work.  This is not as much of a disadvantage as one might expect.  If you want to manipulate things connected to your LaunchPad in real time, you can do so now from a computer.  Want to be able manually throw a turnout, change a signal, move a servo; you can do it from your computer.

There are demonstration videos for both of these on the TI website. I have tried neither of these latter two GUIs, documentation is sparse and they may be difficult to install.  ControlEasy was written by a student.  I'm hoping that the source code for these will be released so that when I start my GUI, I can reuse some of their work.

If you give either of these a try, let us know how they work out.