Encoder with gray code to decimal
- emcPT
-
Topic Author
- Offline
- Platinum Member
-
Less
More
- Posts: 702
- Thank you received: 139
05 Apr 2016 15:54 - 05 Apr 2016 15:57 #72784
by emcPT
Encoder with gray code to decimal was created by emcPT
Hello,
I need to use a absolute gray code encoder with 10 bits. Looking for information on gray code and linuxcnc I found a component that is called gray2bin that converts a u32 to u32.
My first question is to understand if is needed to use a gray code to a "decimal like" value to be used as a u32, correct?
For example the gray code:
bit 9 1
bit 8 1
bit 7 1
bit 6 0
bit 5 1
bit 4 0
bit 3 1
bit 2 1
bit 1 1
bit 0 1
should be converted to the number 1110101111 to be the input of the gray converter?
If so, is the u32 type capable of holding such a big number?
EDIT: Yes it is:
u32 - a 32 bit unsigned integer, legal values are 0 to 4,294,967,295
Thank you
I need to use a absolute gray code encoder with 10 bits. Looking for information on gray code and linuxcnc I found a component that is called gray2bin that converts a u32 to u32.
My first question is to understand if is needed to use a gray code to a "decimal like" value to be used as a u32, correct?
For example the gray code:
bit 9 1
bit 8 1
bit 7 1
bit 6 0
bit 5 1
bit 4 0
bit 3 1
bit 2 1
bit 1 1
bit 0 1
should be converted to the number 1110101111 to be the input of the gray converter?
If so, is the u32 type capable of holding such a big number?
EDIT: Yes it is:
u32 - a 32 bit unsigned integer, legal values are 0 to 4,294,967,295
Thank you
Last edit: 05 Apr 2016 15:57 by emcPT. Reason: Found answer to part of my question
Please Log in or Create an account to join the conversation.
- andypugh
-
- Away
- Moderator
-
Less
More
- Posts: 23315
- Thank you received: 4944
05 Apr 2016 16:22 #72786
by andypugh
Replied by andypugh on topic Encoder with gray code to decimal
Yes, gray2bin works with up to 32 bits.
Please Log in or Create an account to join the conversation.
- jtc
-
- Offline
- Elite Member
-
Less
More
- Posts: 229
- Thank you received: 13
06 Apr 2016 11:26 #72839
by jtc
Replied by jtc on topic Encoder with gray code to decimal
Based on gray2bin source code we are trying to implement this conversion on our custom hal component, but without sucess...
the relevant part of code is this:
with the following bits:
the result is:
15670030.0
that is clearly wrong as a binary number is expected. The correct result should be: 11111100
What I am doing wrong?
the relevant part of code is this:
int gray_to_decimal(bool bit0, bool bit1, bool bit2, bool bit3, bool bit4, bool bit5, bool bit6, bool bit7, bool bit8, bool bit9)
{
unsigned int in = 0;
unsigned int out = 0;
unsigned int mask;
unsigned int binary;
in = bit0 + bit1*10 + bit2*100 + bit3*1000 + bit4*10000 + bit5*100000 + bit6*1000000 + bit7*10000000 + bit8*100000000 + bit9*1000000000;
binary = in;
for(mask = in >> 1 ; mask != 0 ; mask = mask >> 1)
{
binary ^= mask;
}
return binary;
}
with the following bits:
the result is:
15670030.0
that is clearly wrong as a binary number is expected. The correct result should be: 11111100
What I am doing wrong?
Please Log in or Create an account to join the conversation.
- andypugh
-
- Away
- Moderator
-
Less
More
- Posts: 23315
- Thank you received: 4944
06 Apr 2016 11:41 - 06 Apr 2016 13:41 #72840
by andypugh
This is wrong.
You want to multiply by binary constants. This _might_ work or will give a compiler error
However, what I would do is the fractionally more efficient:
Replied by andypugh on topic Encoder with gray code to decimal
in = bit0 + bit1*10 + bit2*100 + bit3*1000 + bit4*10000 + bit5*100000 + bit6*1000000 + bit7*10000000 + bit8*100000000 + bit9*1000000000;
This is wrong.
You want to multiply by binary constants. This _might_ work or will give a compiler error
in = bit0 + bit1*0b10 + bit2*0b100 + bit3*0b1000 + bit4*0b10000 + bit5*0b100000 + bit6*0b1000000 + bit7*0b10000000 + bit8*0b100000000 + bit9*0b1000000000;
However, what I would do is the fractionally more efficient:
in = bit0 + bit1<<1 + bit2<<2 + bit3<<3 + bit4<<4 + bit5<<5 + bit6<<6+ bit7<<7 + bit8<<8 + bit9<<9;
Last edit: 06 Apr 2016 13:41 by andypugh.
The following user(s) said Thank You: jtc
Please Log in or Create an account to join the conversation.
- jtc
-
- Offline
- Elite Member
-
Less
More
- Posts: 229
- Thank you received: 13
06 Apr 2016 13:08 #72847
by jtc
Replied by jtc on topic Encoder with gray code to decimal
Thank you! with the last solution it works

Please Log in or Create an account to join the conversation.
Time to create page: 0.072 seconds