But there were still murmurs of discontent in wx-land, and they centered on two bits of criticism. The first, of course, was this was no plug and play solution. Wires would need to be cut and soldering irons plugged in to get anywhere. That was until SLOweather pitched in and started selling ready to go serial adapters based on the console logger pinout. It is nice to know that this discovery enabled a cottage industry to spring up, though it must be said that it is an extremely small cottage.
The second criticism was that my hack did not have a data logging feature. Indeed, this did suck. I knew the pinout at the back of the console, but this wasn't enough for me to figure out how the logging function worked.
|The Pinout That Started It All|
It wasn't until I tripped over this post by wxforum member wxtech that things got really interesting. This is a guy who obviously isn't afraid of letting the magic smoke out of his electronic devices. He actually unpotted the Davis dongle to see what made it tick. He wrote "U1 is an Atmel 45DB memory", and it was already well known that the logger had one megabit of memory. That was all we really needed to figure out the datasheet for the Atmel 45DB011 Dataflash chip.
Technically, it all became clear with the datasheet in hand. The console talks to the flash chip via I2C, and the remote PC talks to the console. The remote PC is not directly connected to the flash chip. That's why my homebrew serial interface works: the datalogger and interface functions are completely separate. And that's why Davis brought out the I2C lines to the rear connector.
It gets better. The 1Mbit version of the 45DB011 will set you back less than a dollar. So you know what that means...
It Means A Cheap Excuse To Embed A Song I Really Like
After a summer spent preparing to feed the rabbits this winter, I got off my butt and ordered up some parts to see if I could make a DIY version of the Datalogger. I ended up putting my order in to Mouser Electronics, rather than the usual suspect. The reason was quite simple really. They were the only outfit I could find that both stocked 1mm pitch ribbon cable by the foot rather than the roll and also had an SOIC breakout board. The flash chips can be found just about anywhere. Here is what I ordered up.
- A couple Atmel 4Mbit Flash Chips and a couple 1MBit Flash Chips to store my data. I wanted to try an experiment here to see if the console could actually read chips of the larger capacity. I bought a couple of each just in case I wrecked one.
- A 20 pin, dual row, 2mm pitch IDC header to plug into the back of the console. I bought four of these to stock up.
- A 16 pin SOIC to DIP adapter so I could prototype this on a breadboard. Why 16 pins for 8 pin parts? My plan was to solder on one chip of each capacity, and try the bigger one first to see if it would work. This way I wouldn't have to mess with desoldering one to try the other.
- Some 1mm pitch ribbon cable to connect it all together. I bought three feet, so I could make a couple cables if need be. Note that the pitch of the ribbon cable is twice as fine as the header, because it has to pack twice as many conductors in to the same width.
This first shot at things was going to take a prototype approach in case I had any wiring incorrect. A 1Mbit and a 4 Mbit flash chip were soldered to the SOIC to DIP adapter. I followed the Curious Inventor's most excellent instructions for soldering these fine pitch components like I did when I built my GoodFET.
And here is how it came out. The stuff that looks like water droplets on there is just some flux that didn't burn off. This is way bigger than actual size, BTW. 4 Mbit on the left, 1 Mbit on the right.
|Not Bad, Given My Crappy Eyesight|
Undaunted, I next built up my cable to go from the console to the breadboard. It is easy to build up your own insulation-displacement flat ribbon cables as you can see here. All you need is a vise or some kind of flat clamp to apply even pressure across the connector as the insulation is displaced in each contact (hence the name, Insulation Displacement Connector). It actually takes a decent amount of force to press these on, so don't think you can do it with your fingers or mash it on with a screwdriver. That will just ruin the connector and make you angry.
Of course, Davis would throw a wrench into things. The connection on the back of the console doesn't leave room for the top clip on the IDC connector or the key that makes sure you get the orientation right. I had to pull the top clip off and use an Exacto knife to shave the extraneous plastic bits off. That got the console side of the cable done. On the other side, I tinned the wires and soldered them to some 0.1" breakout headers stuck through a piece of perfboard. This gave me something that was fairly robust with lots of flexibility for future prototyping.
|Turned Out Pretty Well, I Must Say|
Next I had to wire things up. Based on the datasheet and the expansion port pinout, I came up with this pinout to connect the console to the flash memory chip.
And now a word of caution:
Console Pin 45DB0x1 Pin
1 - SS 4 - CS*
2 - SCLK 2 - SCK
3 - MOSI 1 - SI
4 - MISO 8 - SO
7 - RST 3 - RESET*
14 - VCC 6 - VCC
14 - VCC 5 - WP*
16 - GND 7 - GND
Before you get all excited and start wiring something yourself, be aware of this: in the pinout diagram above, Pin 1 is shown on the bottom right. If you use an IDC connector like I did, Pin 1 will be on the top right. So the blue edge of the cable that normally represents Pin 1 will actually be Pin 2, the second wire over will be Pin 1, etc. Now don't go blaming me for the confusion. Way back when I was determining the pinout, I picked Pin 1 as I did because that one has the square pad on the circuit board where the rest are round (proof here). So I called that pin to be Pin 1 because Davis did. Now we are stuck with that. Just remember that the console pin numbers shown above correspond to the diagram at the top of this post and you should be fine.I wired the cable connecting to the breadboard to the 4Mbit part for my first attempt. I then powered off the console and plugged in the cable. Note that the console only looks for the logger on powerup. If you plug it in after that, it won't be recognized. Note also that Davis recommends that you enter setup mode before popping the batteries on the console (press and hold Done, then press the '-' down arrow button).
Here is what everything looked like plugged into my breadboard.
|L-R: USB to Serial Converter, Cable to Console, SOIC to DIP Breakout with Two Flash Chips|
So once I hooked everything up, I powered up the console and none of the magic smoke escaped from the station or my circuit. A good sign. I then fired up Cumulus, told it to use the datalogger, and set the archive interval. I then shut Cumulus down and left it for 10 minutes, hoping to see archived data when I fired it back up.
I did't get it. When I fired up Cumulus, I saw the LED activity lights on my USB to Serial interface flashing like crazy for some length of time, but there was no data? It didn't make sense. I thought it might have been because I started with the 4Mbit part, but it did seem to recognize the chip or the converter LED's wouldn't have been flashing like they were. I tried a bunch of things until I came across this post on the Sandaysoft forums. Just because you specify to use the datalogger on the GUI and are able to set the archive interval, that doesn't mean that it actually configures the console to use the datalogger or sets the archive interval.
That post said you "have to" use Davis' Weatherlink software to actually activate archiving and set the interval, but that isn't exactly true. You just need the Davis serial protocol document I linked back in the original post.
Here is the magic incantations I entered.
"SETPER 1": Sets archive period to 1 minute. 1, 5, 10, 15, 30, 60, and 120 are OK tooRemember you need these commands to be entered using a terminal program set to 19,200 8N1. Set half duplex to see what you are typing and make sure all commands ARE ALL IN CAPS. Like this:
"START": Enables the creation of archive records.
|Activating The Logger... Hopefully|
So I gave that a shot and fired up Cumulus again. This time it spent less time looking for the data but actually showed a progress bar during the download - something it didn't do before. And then I got this.
|Six Records Is More Than Zero|
|First Third Party Archived Data Ever|
By the way, this is the capacity of the standard 1MBit data logger.
1 Minute Archive Interval . . . . . . . . . . . . . . . . . . . . 42 hoursWill I get more capacity because I'm using a 4Mbit part? I guess I'll find out in a few days. I'll let you know in a future post.
5 Minute Archive Interval . . . . . . . . . . . . . . . . . . . . . 8 days
10 Minute Archive Interval . . . . . . . . . . . . . . . . . . . . 17 days
15 Minute Archive Interval . . . . . . . . . . . . . . . . . . . . 26 days
30 Minute Archive Interval . . . . . . . . . . . . . . . . . . . . 53 days
60 Minute Archive Interval . . . . . . . . . . . . . . . . . . . . 106 days
120 Minute Archive Interval . . . . . . . . . . . . . . . . . . . 213 days
So like the post that started all this off, the title of this blog also has not one, not two, but three exclamation points. I thought it rated that. Good luck to anyone else that gives this a shot. I'll keep an eye on the comments for anybody who needs a hand.