Welcome Guest,Register Now
Log In

ANT Forum

Welcome guest, please Login or Register

   

Unused channel and collision

Avatar
RankRankRankRank

Total Posts: 123

Joined 2013-10-07

PM

Hi,

I am developing an application that make use of 8 channels simultaneously (for search list - pairing device)
For testing, I use two HR sensors (1 real and 1 emulated) and would like to minimize the channel collision.
I would like to get some tips in order to decrease channel collision.

1- I read in "ANT_AN15" that minimizing the channel period could help (I get a few collision already with 2 sensor)
For the HR sensors, I use a period of "8070", I get 4 message per second, I wouldn't mind getting 1 or 2 message per seconds if it helps.

2- Also read that unused channels increase the odds of channel collision. For the pairing, I open 8 channel with the wildcard so I can find to a max of 8 device of the same type, are the channel opened that doesn't find a master causing collision to my other channel (the ones that found a master). I guess so...maybe I should decreased the device not found timeout timer or number of channel to help?


Using Too Many Simultaneous Channels
Some ANT devices can currently have up to 8 simultaneous channels. Unused channels do not add any overhead to a design, but each time an additional channel is opened on a device, the amount of free radio bandwidth is decreased, which in turn increases the odds of channel collision occurring. The severity of this is application specific, but it becomes more of a concern when using slave channels mixed with master channels.


a bit contradictory with :

Misconception: Unused channels burden a device.
Truth: Unused channels do not impact device performance.



[code example]
pairingMode true;
    
int RadioFreq 0;                 // 57=HR
    
int DeviceNum 0;                 // 0=PAIRING, MyHR=16868
    
int DeviceType 0;                // 0=PAIRING, 120=HR, 121=S&C, 11=POWER
    
int TransType 0;                 // 0=PAIRING
    
int ChannelPeriod 8070;          // 8700=4msg/sec (4.06Hz)
    //TODO: try reduce channel period (less collision ?)
    
UCHAR ucNetKey[8] USER_NETWORK_KEY;

    if (
sensorType == "HR"{
        RadioFreq 
57;
        
DeviceType120;
        
TransType 1;
        for (
int channel channel 8channel++) {
            pclMessageObject
->SetNetworkKey(USER_NETWORK_NUMucNetKeyMESSAGE_TIMEOUT);
            
pclMessageObject->AssignChannel(channel0USER_NETWORK_NUMMESSAGE_TIMEOUT);
            
pclMessageObject->SetChannelID(channelDeviceNumDeviceTypeTransTypeMESSAGE_TIMEOUT);
            
pclMessageObject->SetChannelRFFrequency(channelRadioFreqMESSAGE_TIMEOUT);
            
pclMessageObject->SetChannelPeriod(channelChannelPeriod);
            
pclMessageObject->OpenChannel(channelMESSAGE_TIMEOUT);
        
}
    } 


Thank you      

Signature

——————————————————
Free Indoor Cycling Software - https://maximumtrainer.com

Avatar
RankRankRankRank

Total Posts: 745

Joined 2012-09-14

PM

Hi,

I'd like to clarify what a "channel collision" is a bit first here. A collision is when more than one channel must open it's timing window to send or receive at that point in time on the same device. In this case your only opening slave channels which predominantly receive. If there are multiple master channels (such as 1 per sensor) transmitting in an area, as long as they're set to bi-directional mode, they will avoid interfering with each other automatically (not transmitting on top of each other's timeslots).

Thus, I wouldn't be too concerned with coexistence if your only implementing slave channels as the master channels are performing it for you smile
The benefit of implementing slower slave channels (something we call "decimated" receive rates) in regards to channel collisions for this use case is extremely minimal, and is more of an action taken to reduce power consumption.

Unused channels are channels which are not "open" and will have no affect on each other when they are closed.

A channel which is searching can interrupt other "tracking" channels (including slave channels) though if the default priority search timeout is being used (instead of only using low priority search timeout), this is discussed in AN11 ANT Channel Search and Background Scanning Channel.

Cheers      
Avatar
RankRankRankRank

Total Posts: 123

Joined 2013-10-07

PM

Thanks Harrison for your detailed explanation.

Maybe i'll open more channels only when previous channel found a master already, opening 8 channel is a bit overkill smile

[edit : reading the brick I found this function that already does this :
BOOL ANT_SetChannelSearchPriority(UCHAR ucChannelNum, UCHAR ucSearchPriority)
perfect for my needs, merci]      

Signature

——————————————————
Free Indoor Cycling Software - https://maximumtrainer.com

Avatar
RankRankRankRank

Total Posts: 123

Joined 2013-10-07

PM

Talking about the doc.

The function :
BOOL ANT_ConfigHighDutySearch(UCHAR ucChannel, UCHAR ucEnable, UCHAR ucSuppressionCycle);

the first parameters is the Channel?
It's a bit misleading because in the doc it says it's not a channel command, but an ANT command (for all channel)
And this example right after helps to confuse :

ANT_ConfigHighDutySearch (0, 1, 4); // High duty search on channel 0, enable 1/1.25s low priority search

Thank you      

Signature

——————————————————
Free Indoor Cycling Software - https://maximumtrainer.com

Avatar
RankRankRankRank

Total Posts: 745

Joined 2012-09-14

PM

Hi,

Thanks for the improvement suggestion, you are correct, that byte should actually just be a filler byte (0) similar to other whole chip commands and is not actually a channel number.

It will be corrected in the next revision of the doc.

The library itself in the framer does have it without the channel correctly so you don't need to fix that smile

Cheers      
Avatar
RankRankRankRank

Total Posts: 123

Joined 2013-10-07

PM

Cool if I can help improve the doc

I'm setting the high duty search with :

// Fast Search that uses all ressource
    
pclMessageObject->ConfigHighDutySearch(03); 


but I get an error :
Error configuring high duty search: Code 040 (Returned when message has invalid parameters)

Not sure why the parameters seems fine 0= filler, 3=documentation default

I don't really need the high duty search anyway
Thank you      

Signature

——————————————————
Free Indoor Cycling Software - https://maximumtrainer.com

Avatar
RankRankRankRank

Total Posts: 745

Joined 2012-09-14

PM

Just to be complete...from ANT_LIB:

BOOL DSIFramerANT::ConfigHighDutySearch(UCHAR ucEnable_UCHAR ucSuppressionCycles_ULONG ulResponseTime_


Most of the ANT commands in the PC library have a response time value in the signature to account for serial communication, zero would work fine.

Cheers