Jump to content

ehv

Newcomers
  • Posts

    2
  • Joined

  • Last visited

ehv's Achievements

Newbie

Newbie (1/4)

0

Reputation

  1. Ok, thank goodness for open source. https://github.com/mccdaq/daqhats/blob/e6d96c8fb621c83696536a037f1c4fa373c46068/lib/mcc118.c#L1376 It's clear to me now that OptionFlags.NOCALIBRATEDATA and OptionFlags.NOSCALEDATA interact. The bitwise OR gives the raw ADC codes, as I wanted. I suppose that I expected a single scaling to happen, not two. It's a bit weird to separate the calibration from the scaling and not provide a way to modify both. If I had it my way, it would be a single scaling step that combines calibration and scaling. I understand how to work around this, now. Calibrate the raw ADC codes against the calibration reference that I have, then use OptionFlags.NOSCALEDATA with my scaling values. Sorry for the noise.
  2. Hi, I'm working on getting my MC118 to output scaled data using the mccdaq daqhats Python library, but it's not working as I would expect. If I call calibration_coefficient_write() with a scale of 1 and an offset of 0, I expect OptionFlags.DEFAULT and OptionFlags.NOSCALEDATA to output raw ADC codes when calling either a_in_read() or a_in_scan_start(). ai_hat.calibration_coefficient_write(0, 1.0, 0.0) print(ai_hat.a_in_read(0, OptionFlags.DEFAULT)) print(ai_hat.a_in_read(0, OptionFlags.NOSCALEDATA)) This outputs: -0.029296875 2042.0 The documentation says: https://mccdaq.github.io/daqhats/python.html#daqhats.mcc118.calibration_coefficient_write The coefficients are applied in the library as: calibrated_ADC_code = (raw_ADC_code * slope) + offset This looks like a bug to me, unless I'm doing something wrong. Here is a test program that demonstrates the bug: #!/usr/bin/python3 """ Demonstration of a bug with scaling in a_in_read() and a_in_scan_start() OptionFlags.NOSCALEDATA does not do what I expect. ai_hat.calibration_coefficient_write() affects the result. https://mccdaq.github.io/daqhats/python.html#daqhats.mcc118.calibration_coefficient_write """ from daqhats import mcc118, OptionFlags address_118 = 0 ai_hat = mcc118(address_118) def simple_read(): print(ai_hat.a_in_read(0, OptionFlags.DEFAULT)) print(ai_hat.a_in_read(0, OptionFlags.NOSCALEDATA)) def scan_finite(nsamples): ai_hat.a_in_scan_start(0b1111, nsamples, 10000, OptionFlags.DEFAULT) print(ai_hat.a_in_scan_read(nsamples, 1.0)) ai_hat.a_in_scan_cleanup() ai_hat.a_in_scan_start(0b1111, nsamples, 10000, OptionFlags.NOSCALEDATA) print(ai_hat.a_in_scan_read(nsamples, 1.0)) ai_hat.a_in_scan_cleanup() def set_coefficients(): print(ai_hat.calibration_coefficient_read(0)) ai_hat.calibration_coefficient_write(0, 1.0, 0.0) ai_hat.calibration_coefficient_write(1, 1.0, 0.0) ai_hat.calibration_coefficient_write(2, 0.0, 0.0) ai_hat.calibration_coefficient_write(3, 0.0, 10000.0) print(ai_hat.calibration_coefficient_read(0)) simple_read() scan_finite(1) set_coefficients() simple_read() scan_finite(1) Here is my output: $ ./bugtest.py -0.000786520708334848 2046.795118641332 MCC118ScanRead(running=False, hardware_overrun=False, buffer_overrun=False, triggered=True, timeout=False, data=[-0.010979898809909017, -0.0017999143186528954, 0.030290890733175146, 0.48317093277360357]) MCC118ScanRead(running=False, hardware_overrun=False, buffer_overrun=False, triggered=True, timeout=False, data=[2044.70751480613, 2048.674508288587, 2056.298605373789, 2147.9981528073927]) MCC118CalInfo(slope=1.0438019176008568, offset=-82.56079326441613) MCC118CalInfo(slope=1.0, offset=0.0) -0.0390625 2041.0 MCC118ScanRead(running=False, hardware_overrun=False, buffer_overrun=False, triggered=True, timeout=False, data=[-0.0439453125, -0.0390625, -10.0, 38.828125]) MCC118ScanRead(running=False, hardware_overrun=False, buffer_overrun=False, triggered=True, timeout=False, data=[2038.0, 2040.0, 0.0, 10000.0]) Only when slope=1 and offset=0 is when NOSCALEDATA outputs the raw ADC code. That's not right.
×
×
  • Create New...