Skip to content

Commit

Permalink
Add support and doc for AD7124
Browse files Browse the repository at this point in the history
Signed-off-by: Disha D <[email protected]>
  • Loading branch information
D-Disha authored and ribdp committed Mar 12, 2024
1 parent 5ef4134 commit 6e2d65a
Show file tree
Hide file tree
Showing 7 changed files with 187 additions and 0 deletions.
102 changes: 102 additions & 0 deletions +adi/+AD7124/Base.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
classdef Base < adi.common.Rx & adi.common.RxTx & ...
matlabshared.libiio.base & adi.common.Attribute & ...
adi.common.RegisterReadWrite & adi.common.Channel
% AD7124 Precision ADC Class
% AD7124-4 is a 8 channel ADC
% AD7124-8 is a 16 channel ADC

properties (Nontunable)
% SampleRate Sample Rate
% Baseband sampling rate in Hz, specified as a scalar
% in samples per second.
SampleRate = '19200'

% SamplesPerFrame Samples Per Frame
% Number of samples per frame, specified as an even positive
% integer.
SamplesPerFrame = 400
end

% isOutput
properties (Hidden, Nontunable, Access = protected)
isOutput = false
end

properties (Nontunable, Hidden, Constant)
Type = 'Rx'
end

properties (Nontunable, Hidden)
Timeout = Inf
kernelBuffersCount = 1
dataTypeStr = 'int32'
phyDevName
devName
end

properties (Hidden, Constant)
ComplexData = false
end

methods
%% Constructor
function obj = Base(phydev,dev,varargin)
coder.allowpcode('plain');
% Initialize the Rx object
obj = [email protected](varargin{:});
obj.enableExplicitPolling = false;
obj.EnabledChannels = 1;
obj.BufferTypeConversionEnable = true;
obj.phyDevName = phydev;
obj.devName = dev;
obj.uri = 'ip:analog.local';
end

function flush(obj)
% Flush the buffer
flushBuffers(obj);
end

function delete(obj)
% Destructor
[email protected](obj);
end

function set.SampleRate(obj, value)
% Set device sampling rate
obj.SampleRate = value;
if obj.ConnectedToDevice
obj.setDeviceAttributeRAW('sampling_frequency', value);
end
end
end

%% API Functions
methods (Hidden, Access = protected)
function setupInit(obj)
% Write all attributes to device once connected through set
% methods
% Do writes directly to hardware without using set methods.
% This is required since Simulink support doesn't support
% modification to nontunable variables at SetupImpl
obj.setDeviceAttributeRAW('sampling_frequency',num2str(obj.SampleRate));
end
end

%% External Dependency Methods
methods (Hidden, Static)
function tf = isSupportedContext(bldCfg)
tf = matlabshared.libiio.ExternalDependency.isSupportedContext(bldCfg);
end

function updateBuildInfo(buildInfo, bldCfg)
% Call the matlabshared.libiio.method first
matlabshared.libiio.ExternalDependency.updateBuildInfo(buildInfo, bldCfg);
end

function bName = getDescriptiveName(~)
bName = 'AD7124 ADC';
end
end

end
27 changes: 27 additions & 0 deletions +adi/+AD7124_4/Rx.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
classdef Rx < adi.common.Rx & adi.common.RxTx ...
& adi.AD7124.Base
% AD7124-4 Precision ADC Class
% adi.AD7124-4.Rx Receives data from the AD7124 ADC
% The adi.AD7124-4.Rx System object is a signal source that can receive
% data from the AD7124-4.
%
% rx = adi.AD7124_4.Rx;
% rx = adi.AD7124_4.Rx('uri','ip:192.168.2.1');
%
% <a href="https://www.analog.com/media/en/technical-documentation/data-sheets/ad7124-4.pdf">AD7124-4 Datasheet</a>

properties (Nontunable, Hidden)
channel_names = {'voltage0','voltage1','voltage2'...
'voltage3','voltage4','voltage5','voltage6','voltage7'};
end

methods
%% Constructor
function obj = Rx(varargin)
obj = [email protected]('ad7124-4','ad7124-4',varargin{:});
end
end

end


27 changes: 27 additions & 0 deletions +adi/+AD7124_8/Rx.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
classdef Rx < adi.common.Rx & adi.common.RxTx ...
& adi.AD7124.Base
% AD7124-8 Precision ADC Class
% adi.AD7124-8.Rx Receives data from the AD7124 ADC
% The adi.AD7124-8.Rx System object is a signal source that can receive
% data from the AD7124-8.
%
% rx = adi.AD7124_8.Rx;
% rx = adi.AD7124_8.Rx('uri','ip:192.168.2.1');
%
% <a href="https://www.analog.com/media/en/technical-documentation/data-sheets/ad7124-8.pdf">AD7124-8 Datasheet</a>


properties (Nontunable, Hidden)
channel_names = {'voltage0','voltage1','voltage2','voltage3',...
'voltage4','voltage5','voltage6','voltage7','voltage8','voltage9',...
'voltage10','voltage11','voltage12','voltage13','voltage14','voltage15'};
end

methods
%% Constructor
function obj = Rx(varargin)
obj = [email protected]('ad7124-8','ad7124-8',varargin{:});
end
end

end
2 changes: 2 additions & 0 deletions +adi/Contents.m
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,5 @@
% <a href="matlab:help adi.AD5781 ">AD5781</a> - DAC
% <a href="matlab:help adi.AD5790 ">AD5790</a> - DAC
% <a href="matlab:help adi.AD5791 ">AD5791</a> - DAC
% <a href="matlab:help adi.AD7124_4 ">AD7124_4</a> - ADC
% <a href="matlab:help adi.AD7124_8 ">AD7124_8</a> - ADC
2 changes: 2 additions & 0 deletions CI/gen_doc/docs/_pages/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,5 @@ The following have device-specific implementations in MATLAB and Simulink. If a
| AD4020 | Zedboard | Yes | No | ADI (2021b) |
| AD4021 | Zedboard | Yes | No | ADI (2021b) |
| AD4022 | Zedboard | Yes | No | ADI (2021b) |
| AD7124-4 | Zedboard | Yes | No | ADI (2021b) |
| AD7124-8 | Zedboard | Yes | No | ADI (2021b) |
2 changes: 2 additions & 0 deletions CI/gen_doc/docs/gen_sysobj_doc.m
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@
, {'AD5781', {'Tx'}}...
, {'AD5790', {'Tx'}}...
, {'AD5791', {'Tx'}}...
, {'AD7124_4', {'Rx'}}...
, {'AD7124_8', {'Rx'}}...
%{'QuadMxFE',{'Rx','Tx'}}...
};

Expand Down
25 changes: 25 additions & 0 deletions examples/ad7124_DataCapture.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
%% Script for capturing and displaying a continuous set of samples from a
%% connected AD7124-4 board

% Instantiate the system object
rx = adi.AD7124_4.Rx();
rx.uri = 'ip:analog.local';

% Samples per frame cannot exceed 500 if all 16 channels need to be captured on ad7124-8
rx.SamplesPerFrame = 500;
rx.EnabledChannels = [1 2 3 4 5 6 7 8];
rx.SampleRate = 19200;

% Capture data
data = rx();

enabledChannels = size(data,2);
figure(1);
for i = 1:enabledChannels
subplot(enabledChannels, 1, i);
plot(data(1:rx.SamplesPerFrame, i));
title("Channel " + num2str(rx.EnabledChannels(i)));
end

% Delete the system object
release(rx);

0 comments on commit 6e2d65a

Please sign in to comment.