# Forum: DSP MATLAB SHARC BTC failure

Rate this post
 • ▲ useful ▼ not useful
hi guys,

i am working on a student bachelor thesis where i should implement a BTC
from matlab to the SHARC ADSP-21369 EZ-Kit to edit parameters for a
simple 3-band-EQ during the board's runtime.

i have now a class in matlab including the methods for accessing,
writing and reading the BTC and i have initialized the channels in
VisualDSP++ like shown in the getting started example.

now i have the following problem:

i will transmit filter coefficients für a biquad filter, so the
numerator-coefficients are 3x1 cell array, the denominator-coeffs 2x1
cell array

if i try to send these values through the BTC, the BTC memory window
shows me, that only one single coefficient of the array is edited, the
others get 0. a very interesting point is, that in the 3x1 cell array
the 2nd coefficient is edited, the first and the third get zero.

has anyone an idea how to fix this? i would need quite a quick solution,
because i have to presentate my project on monday.

here is the code ob my accessBTC.m

 1 classdef accessBTC < handle  2 3 4 5 properties  6 7  numChannels = [];  8 9  isInitialized = 0; %Logical 0 or 1 to indicate if the class is instantiated to connect to the VisualDSP session  10 11 end  12 13 14 15 properties(SetAccess = private)  16 17  channelList = {}; % Array of channel objects  18 19 end  20 21 22 23 methods  24 25 26 27  function initialize(obj)  28 29  a = actxserver('VisualDSP.ADspApplication');  30 31  btcPlugin = a.PluginList.invoke('Item','BtcManager');  32 33  btcManager = btcPlugin.Open;  34 35  btcChannelList = btcManager.ChannelList(int16(0)); % Get the channel list in processor #0 (always INT16)  36 37  obj.numChannels = btcChannelList.Count;  38 39  disp(['Total Number of Channels: ', num2str(obj.numChannels)]);  40 41  % Create the BTC Channel interfaces  42 43  for i = 1: obj.numChannels  44 45  obj.channelList{i} = btcChannelList.invoke('Item',int32(i-1));  46 47  end  48 49  obj.isInitialized = 1;  50 51  % S=saveobj(obj);  52 53  end % End of Method: INITIALIZE  54 55 56 57  function outVal = read(obj,channelNum,width)  58 59  % Default width is 32; other possible values: 16, 8  60 61  % Channel num starts frm 0  62 63  if nargin ==2  64 65  width = 32;  66 67  end  68 69  widthStr = ['btcWidth',num2str(width)];  70 71  btcChan = obj.channelList{channelNum};  72 73  out_val = btcChan.Read(widthStr);  74 75  outVal = cell2mat(out_val);  76 77  end % End of Method: READ  78 79 80 81  function write(obj, channelNum, val)  82 83  % input val needs to be a scalar or a vector of int32 or in16 or  84 85  % int8 values  86 87  % Channel num starts frm 0  88 89  if nargin ~=3  90 91  error('WRITE method for accessBTC object needs 2 inputs.')  92 93  end  94 95 96 97  btcChan = obj.channelList{channelNum+1};  98 99  btcChan.Write('btcWidth32',num2cell(val));  100 101  end %End of Method: WRITE  102 103 104 105  function reset(obj)  106 107  obj.numChannels = [];  108 109  obj.isInitialized = 0;  110 111  obj.channelList = [];  112 113  end %End of Method: RESET  114 115 116 117 end 

so if i sending for example these single arrays

 1  num_1 = [1.324; -1.45; 0.83]  2  den_1 = [-1.45; 0.74] 

i am getting in my BTC memory window as floating point

 1  num_1 = [0.0000000; -1.45; 0.0000000]  2  den_1 = [-1.45; 0.0000000] 

has anybody an idea how to fix this?

thanks a lot and best regards,

markus

• $formula (LaTeX syntax)$