Reprogramming the AAG RS485 Weather Station

As you can see from the schematic, there are 8 Hall effect devices going to inputs to the Atmega. The data sheet identifies them as open drain switches so even though they are attached to what we might normally assume are analog inputs they must be being used as digital inputs with internal pull-ups enabled.

On the circuit board the Hall effects are arranged on about a 25mm circle with 45 degrees between them. Above them rotates the little circuit board, whose picture I've attached, that is mounted to the end of the shaft that the vane rotates. Those little gray things will just fit between two of the Hall devices or will line up over two of the devices as the shaft rotates. I presume that when a magnet is between two of the Hall devices, both are switched on.

Now, the question is, how does one compute the direction of the vane pointer? The weather station reports 1 of 16 unique positions.

First question, why have 8 if they are spaced at 45 degrees, surely that means 4 of them are redundant?

Apart from that just read the value as a byte and have a switch statement to get the direction.

switch (reading)
0x12:
// north
0x23:
// north west

A bit ugly but will work.

Or have a loop that shifts and tests the reading's LSB.


Rob

EmilyJane:
Now, the question is, how does one compute the direction of the vane pointer? The weather station reports 1 of 16 unique positions.

You'll need to define one of the 'positions' as North - obviously this is installation dependent. The rest is basic trigonometry. Determining current position and direction of travel is most likely similar to handling rotary encoders.

Graynomad:
First question, why have 8 if they are spaced at 45 degrees, surely that means 4 of them are redundant?


Rob

I don't understand why you say 4 are redundant. How would you get 16 unique directions with only four switches? I see that 24 = 16 but I don't see that that helps.

Graynomad:
switch (reading)
0x12:
// north
0x23:
// north west

Where does "reading" come from?

I was thinking that with the HE sensors at 45 degrees they are effectively operating in pairs as you would always have both opposites on at the same time.

Would that not be the case?

I can see that if the magnet actuates adjacent pairs when it's in the centre that would double the resolution, but I still can't see the point in having sensors directly opposite each other.

"reading" is the value read from the IO port that these sensors are on. In this case PORTC, so

byte reading;

reading = PINC;
switch (reading)
0x12:
// north
0x23:
// north west

maybe "direction" is a better name.


Rob

So, if I number the HEs 0-7 like in the attached drawing and they are wired to PC0-PC7 for purposes of this discussion and the top of the drawing is North. Let's also assume that an activated HE has a value of "1", regardless of how we would accomplish that.

Then if the rotor is pointing North, what would be the value of "reading"? If the rotor was pointing South, what would it be?

hall effects.jpg

The original Dallas 1-wire instrument used a DS2450 4 input A/D converter with 8 reed switches and rotating magnets to determine direction. Someone wrote a sketch to read the speed and direction with an Arduino. I am using it as part of my weather station. Find it here...

http://www.audon.co.uk/1-wire_weather.html

Maybe the new AAG instrument is using a similar method.

billcramer07:
The original Dallas 1-wire instrument used a DS2450 4 input A/D converter with 8 reed switches and rotating magnets to determine direction. Someone wrote a sketch to read the speed and direction with an Arduino. I am using it as part of my weather station. Find it here...

http://www.audon.co.uk/1-wire_weather.html

Maybe the new AAG instrument is using a similar method.

Your link didn't work for me. I believe the original 1-wire instrument switched resistors with its reed switches so as to get unique A/D readings for each direction. This one doesn't appear to be switching any resistors.

Yea the link is dead. I have the sketch and a schematic of the old wind instrument. I will post here.

Then if the rotor is pointing North, what would be the value of "reading"? If the rotor was pointing South, what would it be?

North = 0 and 4 on = 00010001
South = 4 and 0 on = 00010001

That's my point.

East of north = 0,1 and 4,5 = 00110011
West of south = 4,5 and 0,1 = 00110011

So you have better resolution but again, I don't see how you can tell the difference.

Unless I'm missing something here (it wouldn't be the first time :)) you have to remove one of the magnets.


Rob

I believe the original 1-wire instrument switched resistors with its reed switches so as to get unique A/D readings for each direction.

That would make a difference. Still I think removing a magnet would be easier. Maybe add a similar weight to keep the balance.


Rob

Graynomad:

I believe the original 1-wire instrument switched resistors with its reed switches so as to get unique A/D readings for each direction.

That would make a difference. Still I think removing a magnet would be easier. Maybe add a similar weight to keep the balance.


Rob

Very good. That's exactly what those inscrutable Chinese did. That gray thing that looks exactly like the other one is a dummy. Only one is a magnet.

I'm proud to say I figured it out before I actually verified it. Like Sherlock Holmes said, whenever you've exhausted all the possibilities, whatever is left, no matter how improbable, is the answer.

So maybe that's what the patent is for. :slight_smile:

He he, do I get a prize :slight_smile:


Rob

Graynomad:
He he, do I get a prize :slight_smile:


Rob

Sorry, no. :slight_smile: Good job, though!

The remaining mystery to me is why they went to such trouble to hide what they are doing. The dummy looks EXACTLY like the real magnet. It's like they had a big batch of defective ceramic magnets to use up. The rotor that operates the HE for wind speed does have two functional magnets and looks identical to the Wind direction rotor. Curiouser and curiouser.

I'm still left with the problem of reprograming the stock chip. Anyone with any suggestions about that please step in.

reprograming the stock chip

I'd buy a $20 programmer like this

from Pololu or someone (there are a few around) and make up a 6-way to 5-way cable.


Rob

Graynomad:

reprograming the stock chip

I'd buy a $20 programmer like this

http://www.pololu.com/catalog/product/1300

from Pololu or someone (there are a few around) and make up a 6-way to 5-way cable.


Rob

I might end up doing that but there's no reason why I can't use an Arduino for this project unless the manufacturer has burned the fuses to disable reprogramming.

EmilyJane:
The remaining mystery to me is why they went to such trouble to hide what they are doing. The dummy looks EXACTLY like the real magnet. It's like they had a big batch of defective ceramic magnets to use up. The rotor that operates the HE for wind speed does have two functional magnets and looks identical to the Wind direction rotor. Curiouser and curiouser.

Unlikely that they're hiding anything. Perhaps a counterweight? Provided for balance?

EmilyJane:
I'm still left with the problem of reprograming the stock chip. Anyone with any suggestions about that please step in.

Adafruit sells a little ISP programmer (usbtiny) that should do the job nicely. It's supported directly by avrdude.

BTW, the Bus Pirate that I mentioned yesterday also fulfills this purpose. Also supported by avrdude. Just sayin'...

Oh, and my earlier suggestion regarding position is based upon experience with my own AAG weather station. You really don't get a useful position until it moves.

buzzdavidson:

EmilyJane:
The remaining mystery to me is why they went to such trouble to hide what they are doing. The dummy looks EXACTLY like the real magnet. It's like they had a big batch of defective ceramic magnets to use up. The rotor that operates the HE for wind speed does have two functional magnets and looks identical to the Wind direction rotor. Curiouser and curiouser.

Unlikely that they're hiding anything. Perhaps a counterweight? Provided for balance?

EmilyJane:
I'm still left with the problem of reprograming the stock chip. Anyone with any suggestions about that please step in.

Adafruit sells a little ISP programmer (usbtiny) that should do the job nicely. It's supported directly by avrdude.

BTW, the Bus Pirate that I mentioned yesterday also fulfills this purpose. Also supported by avrdude. Just sayin'...

Oh, and my earlier suggestion regarding position is based upon experience with my own AAG weather station. You really don't get a useful position until it moves.

Those are all good suggestions. Thank you!

Well, I'm going to call it a night.

buzzdavidson:

EmilyJane:
The remaining mystery to me is why they went to such trouble to hide what they are doing. The dummy looks EXACTLY like the real magnet. It's like they had a big batch of defective ceramic magnets to use up. The rotor that operates the HE for wind speed does have two functional magnets and looks identical to the Wind direction rotor. Curiouser and curiouser.

Unlikely that they're hiding anything. Perhaps a counterweight? Provided for balance?

EmilyJane:
I'm still left with the problem of reprograming the stock chip. Anyone with any suggestions about that please step in.

Adafruit sells a little ISP programmer (usbtiny) that should do the job nicely. It's supported directly by avrdude.

BTW, the Bus Pirate that I mentioned yesterday also fulfills this purpose. Also supported by avrdude. Just sayin'...

Oh, and my earlier suggestion regarding position is based upon experience with my own AAG weather station. You really don't get a useful position until it moves.

I'm sure it's a counterweight as you suggest but it is made out of the same material that the magnet is made from. Maybe they are readily available from another process/product.

I finally got avrdude/ArduinoISP to talk to the WS but I'll probably order one of the Adafruit programmers to use in the future. The problem was I needed to over-ride the baud rate in avrdude. Coding Badly figured that one out.

The new AAG will be even easier to determine wind direction now that I realize that there is only one magnet. It will work when the vane is stopped as well.

I decided to go ahead and bump the clock frequency up to 16 MHz so as soon as a crystal arrives, I'll get back on this project. I'll be using a USBtinyisp and a USB/TTL serial interface instead of an Arduino for programming and communication also, so everything should go smoothly.