Skip to content

Commit

Permalink
Add ad4696 adcmon driver.
Browse files Browse the repository at this point in the history
  • Loading branch information
moslehu committed Oct 23, 2023
1 parent b154f8f commit 83c5c91
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 0 deletions.
96 changes: 96 additions & 0 deletions adi/ad4696.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Copyright (C) 2023 Analog Devices, Inc.
#
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
# - Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# - Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in
# the documentation and/or other materials provided with the
# distribution.
# - Neither the name of Analog Devices, Inc. nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
# - The use of this software may or may not infringe the patent rights
# of one or more patent holders. This license does not release you
# from the requirement that you obtain separate licenses from these
# patent holders to use this software.
# - Use of the software either in source or binary form, must be run
# on or directly connected to an Analog Devices Inc. component.
#
# THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A
# PARTICULAR PURPOSE ARE DISCLAIMED.
#
# IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, INTELLECTUAL PROPERTY
# RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import re
import numpy as np
from typing import Dict, List

from adi.context_manager import context_manager
from adi.rx_tx import rx

class ad4696(rx, context_manager):
"""AD4696 Easy Driver Multiplexed SAR ADC"""

_rx_output_type = "SI"
_rx_unbuffered_data = True
_complex_data = False
_rx_channel_names: List[str] = []

_rx_data_si_type = np.double

_device_name = ""

def __init__(self, uri="", device_name=""):

context_manager.__init__(self, uri, self._device_name)

self._rxadc = self._ctx.find_device(device_name)
if not self._rxadc:
raise Exception(f"Cannot find device with name '{device_name}'")
self._ctrl = self._rxadc

for ch in self._rxadc.channels:
self._rx_channel_names.append(ch._id)

# Sort channel names alphabetically
self._rx_channel_names.sort(key=self._sort_key)

rx.__init__(self)
self.rx_buffer_size = 1

def _sort_key(self, ch_names):
return list(map(int, re.findall(r'\d+', ch_names)))[0]

def rx(self):
"""Overridden rx method to properly compute and format capture data"""
adc_data = super().rx()

# create dictionary of channels to the value
capture_dict = {}

for idx, ch in enumerate(self._rx_channel_names):
# scale is off by 1000, compensate here
adc_data[idx] /= 1000.0
capture_dict[ch] = adc_data[idx][0]

return capture_dict

def reg_read(self, reg):
"""Direct Register Access via debugfs"""
self._set_iio_debug_attr_str("direct_reg_access", reg, self._rxadc)
return self._get_iio_debug_attr_str("direct_reg_access", self._rxadc)

def reg_write(self, reg, value):
"""Direct Register Access via debugfs"""
self._set_iio_debug_attr_str("direct_reg_access", f"{reg} {value}", self._rxadc)

2 changes: 2 additions & 0 deletions adi/fmc_8p_vna.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
from adi.adrf5720 import adrf5720
from adi.adrf6780 import adrf6780
from adi.ad5664 import ad5664
from adi.ad4696 import ad4696
from adi.gen_mux import genmux
from adi.one_bit_adc_dac import one_bit_adc_dac

Expand All @@ -53,6 +54,7 @@ def __init__(self, uri):
self.lo = adf4371(uri)
self.bpf = admv8818(uri, device_name="admv8818")
self.ndac = ad5664(3.3, uri, device_name="ad5664r5")
self.adcmon = ad4696(uri, device_name="ad4696")
self.rfin_attenuator = adrf5720(uri, device_name="adrf5720-rfin")
self.rfin2_attenuator = adrf5720(uri, device_name="adrf5720-rfin2")
self.sig_upconv = adrf6780(uri, device_name="adrf6780-sig")
Expand Down

0 comments on commit 83c5c91

Please sign in to comment.