Looking for a hal component

More
10 Jul 2023 20:14 #275155 by beefy
Does a hal component exist where for example you can have a 5 input binary value is used to activate one of 32 output pins (bit out). 

Ideally I could select the number for the input and output pins, i.e. 5 digit binary input value to activate one of 32 output pins, or 6 digit binary input value to activate one of 64 output pins.

Or would I have to write a custom component to achieve this.

Please Log in or Create an account to join the conversation.

More
10 Jul 2023 20:39 #275156 by roland

Please Log in or Create an account to join the conversation.

More
10 Jul 2023 20:55 #275160 by rodw
Replied by rodw on topic Looking for a hal component
mux_generic should do this with a standard component
linuxcnc.org/docs/2.9/html/man/man9/mux_generic.9.html

Please Log in or Create an account to join the conversation.

More
10 Jul 2023 21:03 #275161 by tommylight
Mux = multiplexer = many inputs to less outputs
DeMux = demultiplexer = less inputs to many outputs
That is the rough explanation, depends a lot on what and how they are used.
He needs the latter, as noted by him and Roland.

Please Log in or Create an account to join the conversation.

More
10 Jul 2023 23:48 #275178 by rodw
Replied by rodw on topic Looking for a hal component
My bad, There is a Demux component that will handle it as well
linuxcnc.org/docs/devel/html/man/man9/demux.9.html

Half the battle is to know what terminology has been used with the hal names!
It would be better to use the standard components wherever possible.
 
The following user(s) said Thank You: tommylight

Please Log in or Create an account to join the conversation.

More
11 Jul 2023 00:06 #275179 by tommylight

Half the battle is to know what terminology has been used with the hal names!
 

That is becoming difficult at an alarming rate, earlier had a search for CAN bus, everything came back as "control area network"!!! WTF is control area????
I vividly recall it being named "Car area network" back when i first read about it as it was designed especially for use in cars, now i could not find that naming through several pages of results, despite all of them referring to it's use in cars!

Please Log in or Create an account to join the conversation.

More
11 Jul 2023 06:42 #275190 by beefy
Replied by beefy on topic Looking for a hal component
Thanks a lot everyone.

I had actually looked at DEMUX previously but the description left me somewhat confused. I find so many things in Lcnc are explained like the reader is some experienced programmer or developer and it makes it hard to get to the intermediate stage.
Example, from the DEMUX description:
One of these bits will be set based on interpreting the bit-inputs as a binary number and then adding on the integer input.
Most uses will use only one or the other, but it is possible to use the bits as a ""shift"" if required

Ha ha, I was left thinking what the heck does that mean. I bet it's easy as pie once it's understood though.

Roland,
I checked out your component and I love it. I really like the way you used a FOR loop, and that makes it so easy to modify the code for any number of I/O. Myself, if I hadn't seen your example, I'd probably have done a lengthy switch-case statement LOL.
I haven't made a custom hal component before so I just need to better understand the first half of the code where most of the setup is done. I'll look into this further.

Keith

Please Log in or Create an account to join the conversation.

More
11 Jul 2023 07:32 #275195 by rodw
Replied by rodw on topic Looking for a hal component
Great you have a solution, I certainly agree the docs are very confusing with some of these components. IN fact it's probably easier to write a component than work out how to use the component!
If you want an interesting C coding exercise which is rarely seen would be to use a union where one variable  is overlaid over each other. This way, the actual bits in the input number becomes the output bit. Without checking it compiles, I think it looks like this:
struct operator {
    unsigned  in;
    union {
      int out[32]:1;
    } types;
};

The component could then have a personality to determine how many bit pins are published by the loop. No maths at all!

Please Log in or Create an account to join the conversation.

More
11 Jul 2023 08:48 #275198 by rmu
Replied by rmu on topic Looking for a hal component

Great you have a solution, I certainly agree the docs are very confusing with some of these components. IN fact it's probably easier to write a component than work out how to use the component!
If you want an interesting C coding exercise which is rarely seen would be to use a union where one variable  is overlaid over each other. This way, the actual bits in the input number becomes the output bit. Without checking it compiles, I think it looks like this:
struct operator {
    unsigned  in;
    union {
      int out[32]:1;
    } types;
};

The component could then have a personality to determine how many bit pins are published by the loop. No maths at all!

The datastructure as written does not overlay "in" with "out", in fact it doesn't overlay anything. Unions are not really "rarely seen", but are somewhat tricky to use and carry a bunch of foot-guns. You have to carefully think about C aliasing and undefined behaviour rules or the compiler may optimize your code away. 

Please Log in or Create an account to join the conversation.

More
12 Jul 2023 01:33 - 12 Jul 2023 01:35 #275248 by rodw
Replied by rodw on topic Looking for a hal component


Yes you are right. I forgot I had a real example. Here is an example from a component I wrote to decode an Ethercat CIA402 status word that shows breakup of the individual bits.

//CIA Status Word
typedef union
{
  struct
  {
    unsigned char ReadyToSwitchOn  : 1;  // 00
    unsigned char SwitchOn         : 1;  // 01
    unsigned char OperationEnabled : 1;  // 02
    unsigned char Fault            : 1;  // 03
    unsigned char VoltageEnabled   : 1;  // 04
    unsigned char QuickStop        : 1;  // 05
    unsigned char SwitchOnDisabled : 1;  // 06
    unsigned char Warning          : 1;  // 07
    unsigned char keep1            : 1;  // 08
    unsigned char Remote           : 1;  // 09
    unsigned char TargetReached    : 1;  // 10
    unsigned char bit11            : 1;  // 11
    unsigned char bit12            : 1;  // 12
    unsigned char keep2            : 3;  // 13-15
  }b;
    hal_u32_t Word;
}Status_t;

hal_u32_t statusword;       // IN  - Drives CiA402 Statusword, index 0x6041

Just in this case, you don't overlay the bitmap structure but instead should be able to use an array of unsigned chars the same length as the word.
Last edit: 12 Jul 2023 01:35 by rodw.

Please Log in or Create an account to join the conversation.

Time to create page: 0.417 seconds
Powered by Kunena Forum