PDA

View Full Version : Lightning fast Gray to Binary encoder needed any ideas ??



OzStamp
10-25-2006, 05:34 PM
Hi to all

I have an 8 bit Gray output type rotary encoder that rotates fairly slow and we wish to decode this 8 bit gray value to a binary value as quick as possible.
I was wandering what would be absolute quickest method ..

Write some assembly code or create a lookup table and jump to the locations and get the Binary value out of the lookup table.. ???··

I recall working on a machine a few years ago and it had an eeprom laoded with the lookup table and positiong data loaded in the various locations ( like a programmable cam switch in a packaging machine)

I reckon the Propeller would be awesome for this application..

Ronald Nollet·· Australia
·

Kevin Wood
10-25-2006, 06:56 PM
This thread in the SX forum may help: http://forums.parallax.com/showthread.php?p=606916

OzStamp
10-25-2006, 08:20 PM
Hi All

I have just sorted it .. just need to fill in the table but you can see the principle of operation.
This program will run in a COG and gives us feedback from an absolute 8 bit gray encoder.

{{Gray_bin tester.. just need to fill in the conversion
in the table below presently it is a direct conversion in..out
Ronald Nollet Australia }}

CON
_clkmode = xtal1 + pll16x
_xinfreq = 5_000_000

DAT

Mydata
byte $00,$01,$02,$03,$04,$05,$06,$07
byte $08,$09,$0A,$0B,$0C,$0D,$0E,$0F
byte $10,$11,$12,$13,$14,$15,$16,$17
byte $18,$19,$1A,$1B,$1C,$1D,$1E,$1F
byte $20,$21,$22,$23,$24,$25,$26,$27
byte $28,$29,$2A,$2B,$2C,$2D,$2E,$2F
byte $30,$31,$32,$33,$34,$35,$36,$37
byte $38,$39,$3A,$3B,$3C,$3D,$3E,$3F
byte $40,$41,$42,$43,$44,$45,$46,$47
byte $48,$49,$4A,$4B,$4C,$4D,$4E,$4F
byte $50,$51,$52,$53,$54,$55,$56,$57
byte $58,$59,$5A,$5B,$5C,$5D,$5E,$5F
byte $60,$61,$62,$63,$64,$65,$66,$67
byte $68,$69,$6A,$6B,$6C,$6D,$6E,$6F
byte $70,$71,$72,$73,$74,$75,$76,$77
byte $78,$79,$7A,$7B,$7C,$7D,$7E,$7F
byte $80,$81,$82,$83,$84,$85,$86,$87
byte $88,$89,$8A,$8B,$8C,$8D,$8E,$8F
byte $90,$91,$92,$93,$94,$95,$96,$97
byte $98,$99,$9A,$9B,$9C,$9D,$9E,$9F
byte $A0,$A1,$A2,$A3,$A4,$A5,$A6,$A7
byte $A8,$A9,$AA,$AB,$AC,$AD,$AE,$AF
byte $B0,$B1,$B2,$B3,$B4,$B5,$B6,$B7
byte $B8,$B9,$BA,$BB,$BC,$BD,$BE,$BF
byte $C0,$C1,$C2,$C3,$C4,$C5,$C6,$C7
byte $C8,$C9,$CA,$CB,$CC,$CD,$CE,$CF
byte $D0,$D1,$D2,$D3,$D4,$D5,$D6,$D7
byte $D8,$D9,$DA,$DB,$DC,$DD,$DE,$DF
byte $E0,$E1,$E2,$E3,$E4,$E5,$E6,$E7
byte $E8,$E9,$EA,$EB,$EC,$ED,$EE,$EF
byte $F0,$F1,$F2,$F3,$F4,$F5,$F6,$F7
byte $F8,$F9,$FA,$FB,$FC,$FD,$FE,$FF


PUB Getdata |Temp,ins
dira[0..7]~
dira[16..23]~~

repeat
ins := ina [7..0]
Temp := Mydata [ins]
outa[16..23] := Temp

Mike Green
10-25-2006, 08:37 PM
Just so you know, you can combine the last 3 statements to get "outa[16..23] := Mydata[ina[0..7]]". It doesn't make much difference in this case, but, in a large and complex program, can make what you're trying to do much clearer.

OzStamp
10-25-2006, 08:42 PM
Hi Mike
Awesome suggestion thanks alot.

Will work on that conversion list and post it also when done.
Using an Omron E6CP 8 bit gray encoder and this is just great being able to do this all in a COG
while other stuff is happening as well...

Ronald Nollet Australia

Cliff L. Biffle
10-25-2006, 10:08 PM
It's weird that I've recommended this book twice in as many days, but "Hacker's Delight" has an excellent section on Gray codes, including translation and arithmetic directly on the Gray-sequence integers.

If you find yourself needing this sort of thing often, it's worth a look. (No, I don't get a kickback.)

Graham Stabler
10-25-2006, 11:13 PM
I didn't need telling twice, I suspect I have a note from the postman waiting for me when I get home :)

pjv
10-26-2006, 01:04 AM
Hi OzStamp;

If speed is the criteria here, then the SX-28 will be faster than the propeller...... 120 nano seconds for one conversion at 50 Mhz.

Cheers,

Peter (pjv)

OzStamp
10-26-2006, 04:44 AM
Hi Peter ( PJV) and Cliff L.

Thanks to both for the suggestions.

Cliff who wrote that book..? will have to put that on my Xmas pressie list..

Peter .. I did not think of using the SX chip in this case as the Propeller will be doing other stuff as well.
Keeping it all inside the Propeller at the end of the day will be faster I think..
( meaning we have to get the data across from the SX into the Propeller.)

But as a standalone solution just doing that I agree with you totally thanks for the pointer Peter.

Ronald Nollet Australia

Cliff L. Biffle
10-26-2006, 05:26 AM
OzStamp said...

Cliff who wrote that book..? will have to put that on my Xmas pressie list..


Henry S. Warren. It's like crack for geeks.

OzStamp
10-27-2006, 10:34 AM
Hi All

This post is in relation to my initial posting of a small SPIN program that reads an absolute encoder 8 bit·with GRAY output format.
As promised I have added in a text file format the conversion list from Gray <> Bin
The format is in HEX..
So with this list you can do all sort of stuff.
Create a lookup table .. at various angles turn outputs on etc etc. ie the data to outa ... whatever ..Electronic cam type output...

Cheers Ronald Nollet·· Australia