anton ahmad / Mbed 2 deprecated STM32_AD7606

Dependencies:   mbed

Committer:
antonmadto
Date:
Fri Apr 09 06:27:33 2021 +0000
Revision:
0:d47d291acdf4
nnn

Who changed what in which revision?

UserRevisionLine numberNew contents of line
antonmadto 0:d47d291acdf4 1 /***************************************************************************
antonmadto 0:d47d291acdf4 2 * @author Francesco Adamo
antonmadto 0:d47d291acdf4 3 *
antonmadto 0:d47d291acdf4 4 * @section LICENSE
antonmadto 0:d47d291acdf4 5 *
antonmadto 0:d47d291acdf4 6 * Copyright (c) 2015 Francesco Adamo, Italy
antonmadto 0:d47d291acdf4 7 *
antonmadto 0:d47d291acdf4 8 * @section DESCRIPTION
antonmadto 0:d47d291acdf4 9 *
antonmadto 0:d47d291acdf4 10 * AD7606.CPP
antonmadto 0:d47d291acdf4 11 * Source file for AD7606 class library
antonmadto 0:d47d291acdf4 12 * The AD7606BSTZ is a 16-bits, 8-channels, SPI/Parallel-interfaced ADC from Analog Devices
antonmadto 0:d47d291acdf4 13 *
antonmadto 0:d47d291acdf4 14 *****************************************************************************/
antonmadto 0:d47d291acdf4 15
antonmadto 0:d47d291acdf4 16 #include "ad7606.h"
antonmadto 0:d47d291acdf4 17
antonmadto 0:d47d291acdf4 18
antonmadto 0:d47d291acdf4 19 // Constructor
antonmadto 0:d47d291acdf4 20 AD7606::AD7606(PinName MISO, PinName SCLK, PinName CS, PinName CONVST, PinName BUSY, PinName RESET, int frequency) : _spi(NC, MISO, SCLK), _cs(CS), _convst(CONVST), _busy(BUSY), _reset(RESET) {
antonmadto 0:d47d291acdf4 21 _spi.frequency(frequency);
antonmadto 0:d47d291acdf4 22 _spi.format(8, 0);
antonmadto 0:d47d291acdf4 23 _cs = 1;
antonmadto 0:d47d291acdf4 24 _convst = 1;
antonmadto 0:d47d291acdf4 25 _reset = 0;
antonmadto 0:d47d291acdf4 26 _q = 0.0;
antonmadto 0:d47d291acdf4 27 reset();
antonmadto 0:d47d291acdf4 28 };
antonmadto 0:d47d291acdf4 29
antonmadto 0:d47d291acdf4 30 // Resets the AD7606
antonmadto 0:d47d291acdf4 31 void AD7606::reset() {
antonmadto 0:d47d291acdf4 32 _reset = 1;
antonmadto 0:d47d291acdf4 33 _reset = 0;
antonmadto 0:d47d291acdf4 34 }
antonmadto 0:d47d291acdf4 35
antonmadto 0:d47d291acdf4 36 // Computes and stores the quantization step of the AD7606 as a function of its dynamic range (10 V or 20 V)
antonmadto 0:d47d291acdf4 37 void AD7606::setDR(double DR) {
antonmadto 0:d47d291acdf4 38 _q = (double) DR/65535.0; // Quantization step
antonmadto 0:d47d291acdf4 39 }
antonmadto 0:d47d291acdf4 40
antonmadto 0:d47d291acdf4 41 // Read raw values from all 8 channels
antonmadto 0:d47d291acdf4 42 // rawDataBuffer is a pointer to an array of 8 16-bit integers
antonmadto 0:d47d291acdf4 43 void AD7606::readRAW(int16_t *rawDataBuffer) {
antonmadto 0:d47d291acdf4 44 uint8_t lowByte, highByte;
antonmadto 0:d47d291acdf4 45
antonmadto 0:d47d291acdf4 46 _convst = 0; // Pulse CONVSTA/CONVSTB to start conversion
antonmadto 0:d47d291acdf4 47 _convst = 1;
antonmadto 0:d47d291acdf4 48 wait_us(5);
antonmadto 0:d47d291acdf4 49 //while (_busy) {
antonmadto 0:d47d291acdf4 50 // wait for conversions to be completed (low level on BUSY)
antonmadto 0:d47d291acdf4 51 //}
antonmadto 0:d47d291acdf4 52 _cs = 0; // Enable DOUTA/DOUTB lines and shift-out the conversion results
antonmadto 0:d47d291acdf4 53 for (char k = 0; k < 8; k++) {
antonmadto 0:d47d291acdf4 54 highByte = _spi.write(0x00);
antonmadto 0:d47d291acdf4 55 lowByte = _spi.write(0x00);
antonmadto 0:d47d291acdf4 56 *(rawDataBuffer + k) = (int16_t) ((highByte << 8) + lowByte);
antonmadto 0:d47d291acdf4 57 }
antonmadto 0:d47d291acdf4 58 _cs = 1;
antonmadto 0:d47d291acdf4 59 }
antonmadto 0:d47d291acdf4 60
antonmadto 0:d47d291acdf4 61 // Read analog values from all 8 channels
antonmadto 0:d47d291acdf4 62 // analogDataBuffer is a pointer to an array of 8 doubles
antonmadto 0:d47d291acdf4 63 void AD7606::readAnalog(double *analogDataBuffer) {
antonmadto 0:d47d291acdf4 64 uint8_t lowByte, highByte;
antonmadto 0:d47d291acdf4 65
antonmadto 0:d47d291acdf4 66 _convst = 0; // Pulse CONVSTA/CONVSTB to start conversion
antonmadto 0:d47d291acdf4 67 wait_us(1);
antonmadto 0:d47d291acdf4 68 _convst = 1;
antonmadto 0:d47d291acdf4 69 wait_us(5);
antonmadto 0:d47d291acdf4 70 //while (_busy) {
antonmadto 0:d47d291acdf4 71 // wait for conversions to be completed (low level on BUSY)
antonmadto 0:d47d291acdf4 72 //}
antonmadto 0:d47d291acdf4 73 _cs = 0; // Enable DOUTA/DOUTB lines and shift-out the conversion results
antonmadto 0:d47d291acdf4 74 for (char k = 0; k < 8; k++) {
antonmadto 0:d47d291acdf4 75 highByte = _spi.write(0x00);
antonmadto 0:d47d291acdf4 76 lowByte = _spi.write(0x00);
antonmadto 0:d47d291acdf4 77 *(analogDataBuffer + k) = (double) ((int16_t) ((highByte << 8) + lowByte))*_q;
antonmadto 0:d47d291acdf4 78 }
antonmadto 0:d47d291acdf4 79 _cs = 1;
antonmadto 0:d47d291acdf4 80 }