3-Bit BCD into integer
07 Sep 2016 13:02 #80124
by terkaa
3-Bit BCD into integer was created by terkaa
Hi,
I have ATC forced mode rotary switch it has 3-bit output these 3 outputs form a BCD number. My question is how to read these three binary inputs and output as integer.(for case switch)
Tero
I have ATC forced mode rotary switch it has 3-bit output these 3 outputs form a BCD number. My question is how to read these three binary inputs and output as integer.(for case switch)
Tero
Please Log in or Create an account to join the conversation.
07 Sep 2016 14:08 - 07 Sep 2016 14:09 #80125
by emcPT
Replied by emcPT on topic 3-Bit BCD into integer
you can write a simple component or you can use a already made one, if available.
Look at this
www.linuxcnc.org/docview/html//man/man9/weighted_sum.9.html
Look at this
www.linuxcnc.org/docview/html//man/man9/weighted_sum.9.html
Last edit: 07 Sep 2016 14:09 by emcPT.
Please Log in or Create an account to join the conversation.
07 Sep 2016 14:25 #80126
by terkaa
Replied by terkaa on topic 3-Bit BCD into integer
Hi,
I was thinking of writing a comporent. Any examples how to do this?
Tero
I was thinking of writing a comporent. Any examples how to do this?
Tero
Please Log in or Create an account to join the conversation.
07 Sep 2016 16:19 #80128
by andypugh
Replied by andypugh on topic 3-Bit BCD into integer
The carousel component undertands BCD.
It is also intended to be used on ATCs. But you should be able to use it to just read out the number, I think.
It is also intended to be used on ATCs. But you should be able to use it to just read out the number, I think.
Please Log in or Create an account to join the conversation.
07 Sep 2016 16:32 #80130
by terkaa
Replied by terkaa on topic 3-Bit BCD into integer
So it is this part?
case 'D': // BCD
i = 0;
pow = 1;
while (i < inst_sense){
if (i < inst_sense) d += sense(i) << (i % 4);
i++;
if (i < inst_sense) d += sense(i) << (i % 4);
i++;
if (i < inst_sense) d += sense(i) << (i % 4);
i++;
if (i < inst_sense) d += sense(i) << (i % 4);
i++;
p += d * pow;
pow *= 10;
d = 0;
}
I will try to understand it and borrow it to my code![:) :)](/media/kunena/emoticons/smile.png)
Tero
case 'D': // BCD
i = 0;
pow = 1;
while (i < inst_sense){
if (i < inst_sense) d += sense(i) << (i % 4);
i++;
if (i < inst_sense) d += sense(i) << (i % 4);
i++;
if (i < inst_sense) d += sense(i) << (i % 4);
i++;
if (i < inst_sense) d += sense(i) << (i % 4);
i++;
p += d * pow;
pow *= 10;
d = 0;
}
I will try to understand it and borrow it to my code
![:) :)](/media/kunena/emoticons/smile.png)
Tero
Please Log in or Create an account to join the conversation.
07 Sep 2016 16:43 #80131
by andypugh
Replied by andypugh on topic 3-Bit BCD into integer
Alternatively, why don't you tell me why the carousel company isn't right for your ATC? Perhaps it makes sense to enhance it for everyone
Please Log in or Create an account to join the conversation.
07 Sep 2016 16:47 - 07 Sep 2016 16:48 #80133
by terkaa
Replied by terkaa on topic 3-Bit BCD into integer
This is not for carousel position. This is for manual moving of ATC arm. Machine has two selector switches for selecting which move to make. Ie. arm_in arm_out, arm etc. These switches output BCD. And if you remember i made a custom HAL component for ATC, and now I am adding this manual functionality in case of there is something wrong with ATC like chips between tool and arm preventing automatic tool change.
Tero
Tero
Last edit: 07 Sep 2016 16:48 by terkaa.
Please Log in or Create an account to join the conversation.
07 Sep 2016 18:31 #80154
by andypugh
Replied by andypugh on topic 3-Bit BCD into integer
Are there _only_ 4 bits? If so, then there is absolutely no difference between BCD and binary.
Decimal binary BCD
1 00000001 00000001
2 00000010 00000010
3 00000011 00000011
...
9 00001001 00001001
10 00001010 00010000
11 00001011 00010001
...
And the HAL "weighted sum" component is all you need.
You could also use a mux8 component
Decimal binary BCD
1 00000001 00000001
2 00000010 00000010
3 00000011 00000011
...
9 00001001 00001001
10 00001010 00010000
11 00001011 00010001
...
And the HAL "weighted sum" component is all you need.
You could also use a mux8 component
Please Log in or Create an account to join the conversation.
Time to create page: 0.096 seconds