LaCrosse WS-23xx (and other) Serial Port Operation

LaCrosse WS-23xx (and other) Serial Port Operation

There is a PDF of this. Thanks AL.

Al Testani 10/18/2011

This write-up is a compilation of what others have contributed on the subject and my own experimentation and design.

I needed to understand exactly how this worked to be able to design a pair of radio modems to allow at least 3⁄4 mile separation of the console and the Internet connected computer. The modems are built and operating (on the bench at this point) so the information below is correct.

The WS-23xx stations and probably other LaCrosse models use a strange physical serial communication scheme. The cable pinout is as follows (thanks to na1db for posting the following to the LaCrosse Yahoo group):

On RJ-11 Side (clip down, telephone style connector)
From left to right looking down on the connector
Color: Blue Brown Green White

On the 9 Pin D-Shell (PC Interface) Signal: RTS RXD TXD DTR
Pin…:7 2 3 4

So Blue -> Pin 7, Brown -> Pin 2 etc.
Note that there is NO connection
to the RS-232 ground (pin 5)!!!

A diagram of each end of the cable looking from the front:

DB9

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ \54321/

\9876/ ‐‐‐‐‐‐‐‐‐‐‐‐‐‐

RJ11 connections to DB9 |‐‐| (tab)

‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ || | 7|2|3|4 | ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐

RTS and DTR are typically used for handshaking in a serial link but are NOT used for that purpose here.

Lacrosse took this unique approach to serial communication to save a few cents in the hardware and while it does work with “real” com ports on PCs and the better grade of USB to serial adapters, it is a cheap kludge of a way to implement serial communications.

It appears that to avoid the cost of a MAX232 type device (used ubiquitously for RS-232 connections) and 6 capacitors, what they did was to “steal” +V and -V from the PC or USB to serial adapter if it supports all the handshake signals. By setting RTS to +V and DTR to -V they effectively have these voltages and a virtual ground between them and they got it all for free. Quite clever, actually, but it has caused hassles for lots of people.

For receiving commands from the PC they compare the incoming RXD signal (which swings +/-) to the virtual ground. For responses transmitted back to the PC they simply connect either the RTS or DTR “voltages” to the TXD pin. There is NO handshaking going on in this interface. It is a simple Rx/Tx interface.

In the simplest terms one could implement the “DTE” side of a link (e.g. from a microprocessor, radio modem, etc.) as follows:

For direct computer connections the polling software (e.g. WUHU, HeavyWeather, etc.) sets RTS to a high voltage level and DTR low so communication can commence.

A complete circuit implementation is like this:

This is how I did it for the radio modems I developed and it works well.

For those who aren’t engineers and wonder how this works, the circuit operation is as follows:

The MAX3232 IC uses one input voltage (VCC = 3.3V) and creates +/- voltages since RS-232 requires signals that swing +/-3V to +/-15V. In the case above, the MAX3232 creates about +/-6V. The overall operation is that the IC receives RS-232 level signals and converts them to logic levels (approx. 0 to 3V) and vice versa for outputs. So the RXD and TXD signals are logic level signals and the TXOUT and RXIN are RS-232 level signals.

The +/- 6V the IC creates are available on pins so the RTS_high signal is simply connected to the +V pin and puts +6V on pin 7 of the DB9 connector. For the DTR_low signal, -6V is required on DB9 pin 4. In this case I used one of the outputs of the IC (T2out) instead of tapping the V- pin directly. All of the gates in the MAX3232 are inverting so this is why 3.3V is connected to T2in which is inverted and results in -6V on T2out.

That’s all there is too it.
I hope this information proves useful in:

  1. 1)  Understanding why some USB to serial adapters don’t work where others do. It is simply that the bad ones do not connect anything to RTS, DTR, etc. or any other pin besides Rx and Tx (and ground).
  2. 2)  Having a clear picture of how LaCrosse implements the serial port on their units.
  3. 3)  For DIY projects, have the equivalent circuit and an example application circuit to refer to.

Thanks to all who have worked on this problem in the past and supplied information which I was able to use.

Posted in Default Category | Leave a comment

Pinout for RJ11 to DB9

-WS-3510or3610or8610 PC Cable DB9F RJ12 functions, colors

This is a pdf file.

 

A cable to connect the WS-3510 to a PC. It is true that the WS-3510 uses the same cable as the WS-3610. Same goes for the WS-8610.

Just for here are the pin connections:

RJ1 GND – DB9 pin 5 GND Black
RJ2 RD – DB9 pin 3 TD Yellow
RJ3 DSR – DB9 pin 4 DTR Blue
RJ4 CTS – DB9 pin 7 RTS Brown
RJ5 DTR – DB9 pin 6 DSR Green
RJ6 RTS – DB9 pin 8 CTS White
(normally DB9 pin 2 = RD)

The GND cable was broken in my case, probably by someone pulling the cable instead of the plug – had to repair it.

I used unshielded (UTP) Cat5e cable.

The RJ plug is referred to many ways. Most manufacturers seem to refer to this plug as RJ12. Wikipedia suggests it is an RJ25. And some people just call any 6-position plug an RJ11. Anyway, it is a 6-position 6-conductor modular plug (6P6C).

DB9F pinout:

RJ12 pinout:

Posted in Default Category | Leave a comment

Rounded corner buttons in iOS7, and Landscape by default

I’ve been struggling with how to make rounded corner buttons in iOS7 for ages now, and finally worked it out. It’s actually pretty easy – but fairly well hidden as usual.

I’ve also been trying to figure out how to to put the view controllers into Landscape mode.

So this is a post in two parts. landscape view controllers, and rounded UIButtons.

1, this is not using images, nor background images of any type. It’s just using the plain vanilla UIButton that comes with the standard XCode 5.1.1, and iOS7.1 SDK.

This is also a note for me for future reference as well.

You can test it out easily. Make a Test app. Call it errr, TestApp. You can set it up as a Universal if you like. Practice on both iPhone and iPad interfaces.

Firstly: Landscape view controller.

Click on the black bar just to the bottom of the actual view controller. This will cause the view controller and the bar to have a blue surrounding.

Now, click on the little shield fourth to the right in the top right hand side. The Show Attribute Inspector.

Set Orientation to Landscape. Don’t touch anything else. In this example I have already Embedded the view controller in a Navigation Controller so the rest of the app will work…

It’s done.

Image

 

Now, for the buttons. Note here, that the buttons DO NOT appear to be rounded when sitting in the viewcontroller. It’s only when compiled and running in the Simulator/Device that they are reounded. See the later screen shot.

Click on the Main_iPhone.storyboard and there, drag a UIButton into the view controller.

Still with the Attribute Inspector selected, change the button type to Custom. Note I set the button background to a purple colour so I can clearly see the shape when it runs.

Image

Now this bit isa bit trickier. Take your time with this.

With the button still selected, click on the little button Third from the left in the top tab bar, next to the Attribute inspector, called Identity Inspector. Not the Very top right row, the second top right row, it looks kind of like a tiny screen layout? Look in the image following here.

With the Button selected in the view controller – (Not the ViewController, or you will have a view controller with rounded corners. Not at all bad I guess … but not what we want here.)

Select in Custom Class -> Class -> UIButton. (If you don’t find it in the list from the drop-down, type it in… then look again.) I had to fiddle with this a bit to get it to appear.

Once you have UIButton in the Class field, time to do the next bit.

You have to add information to the “User Defined Runtime Attributes” by tapping the + button for that section.

Don’t be dismayed by what you see there, it’s a place holder. Double click the KeyPath and change it to what you see here in the image.

layer.cornerRadius          Number    10
layer.masksToBounds     Boolean    tick

Nothing will change, but when you run the app in the simulator – there is your rounded button.

Image

enjoy

Posted in iOS | Leave a comment

Video recording in Landscape mode only

Exploring Video Recording in Landscape Mode only, using AVCam from Apple for iOS

There are a lot of nice tutorials out there, but they are all in Portrait mode. Now I ask you – do you turn your 55″ Wide Screen TV on it’s side so you can watch X-Men in Portrait mode? Not even…. So I’m trying to force my Video app into Landscape ONLY mode. Experimenting with Apple’s AVCam code, available here on the development site. So far. this is what I’ve done. In the AVCam project settings, removed all but Orientation Left. Un-tick the boxes. I only want Orientation Left. I also want it to RECORD in Orientation Left, in the file AVCamViewController.m, about line 160 or there abouts,

AVCaptureMovieFileOutput *movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
 if ([session canAddOutput:movieFileOutput])
 {
 [session addOutput:movieFileOutput];

 // I added this bracket block
 AVCaptureConnection *connection = [movieFileOutput connectionWithMediaType:AVMediaTypeVideo];
 if ([connection isVideoOrientationSupported])
 {
 AVCaptureVideoOrientation orientation = AVCaptureVideoOrientationLandscapeLeft;
 [connection setVideoOrientation:orientation];
 }

 if ([connection isVideoStabilizationSupported])
 [connection setEnablesVideoStabilizationWhenAvailable:YES];
 [self setMovieFileOutput:movieFileOutput];
 }

 AVCaptureStillImageOutput *stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
 if ([session canAddOutput:stillImageOutput])
 {
 [stillImageOutput setOutputSettings:@{AVVideoCodecKey : AVVideoCodecJPEG}];
 [session addOutput:stillImageOutput];
 [self setStillImageOutput:stillImageOutput];
 }
 });

To force the Whole session into Landscape Left mode, I had to add this bit, same file. In AVCamViewController.m, about line 235 or there a bouts.

- (NSUInteger)supportedInterfaceOrientations
{
 // I changed this from ...MaskAll to ...MaskLandscapeLeft
 return UIInterfaceOrientationMaskLandscapeLeft;
}

Now, when I start the app, it starts in LandscapeLeft mode (Home button in my left hand) and also records the video in landscape mode, as evidenced by playback in the standard iPhone Camera Roll. Now, to translate this into any video app – especially the one I’m building.

Posted in iOS | Leave a comment

Follow Me example

Using the BWS Plugin, which interferes with the Twittter code – it works in both places.
[...] with the words follow_me between the brackets

So what I’m saying, just use the basic Twitter code, or the Plugin. Not both.

 


Posted in Default Category | Leave a comment

AppCoda Tutorials

Brilliant stuff. You need to visit the site. www.appcoda.com

 

Posted in iOS | Leave a comment

How to enter code into a WordPress post

-(instancetype)initWithDatabaseFilename:(NSString *)dbFilename{
    self = [super init];
    if (self) {

    }
    return self;
}

pre class="brush: c; highlight: [5, 15]"

Posted in Default Category | Leave a comment