Looking for a hal component
- beefy
 - Offline
 - Elite Member
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 227
 - Thank you received: 58
 
			
	
						10 Jul 2023 20:14				#275155
		by beefy
	
	
		
			
	
			
			 		
													
	
				Looking for a hal component was created 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.
					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.
- roland
 - 
				
											 - Offline
 - Premium Member
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 138
 - Thank you received: 63
 
			
	
						10 Jul 2023 20:39				#275156
		by roland
	
	
		
			
	
			
			 		
													
	
				Replied by roland on topic Looking for a hal component			
			
					Please Log in or Create an account to join the conversation.
- rodw
 - 
				
											 - Offline
 - Platinum Member
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 11472
 - Thank you received: 3848
 
			
	
						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
					linuxcnc.org/docs/2.9/html/man/man9/mux_generic.9.html
Please Log in or Create an account to join the conversation.
- tommylight
 - 
				
											 - Away
 - Moderator
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 20860
 - Thank you received: 7113
 
			
	
						10 Jul 2023 21:03				#275161
		by tommylight
	
	
		
			
	
			
			 		
													
	
				Replied by tommylight on topic Looking for a hal component			
			
				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.
					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.
- rodw
 - 
				
											 - Offline
 - Platinum Member
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 11472
 - Thank you received: 3848
 
			
	
						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.
 			
					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.
- tommylight
 - 
				
											 - Away
 - Moderator
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 20860
 - Thank you received: 7113
 
			
	
						11 Jul 2023 00:06				#275179
		by tommylight
	
	
		
			
				
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!
					
	
			
			 		
													
	
				Replied by tommylight on topic Looking for a hal component			
			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????Half the battle is to know what terminology has been used with the hal names!
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.
- beefy
 - Offline
 - Elite Member
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 227
 - Thank you received: 58
 
			
	
						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
					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.
- rodw
 - 
				
											 - Offline
 - Platinum Member
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 11472
 - Thank you received: 3848
 
			
	
						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:
The component could then have a personality to determine how many bit pins are published by the loop. No maths at all!
					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.
- rmu
 - 
				
											 - Offline
 - Elite Member
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 279
 - Thank you received: 100
 
			
	
						11 Jul 2023 08:48				#275198
		by rmu
	
	
		
			
				
					
	
			
			 		
													
	
				Replied by rmu on topic Looking for a hal component			
			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.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.
- rodw
 - 
				
											 - Offline
 - Platinum Member
 - 
				
			 
		Less
		More
		
			
	
		- Posts: 11472
 - Thank you received: 3848
 
			
	
						12 Jul 2023 01:33		 -  12 Jul 2023 01:35		#275248
		by rodw
	
	
		
			
				
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.
					
	
	
			 		
													
	
				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 0x6041Just 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.187 seconds