asd
Diff: ad5422_arduino.cpp
- Revision:
- 0:9a5218876095
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ad5422_arduino.cpp Mon Jun 22 09:52:01 2020 +0000 @@ -0,0 +1,145 @@ +#include "ad5422_arduino.h" +#include "PGA280.h" +#include <math.h> +#include "PerifConfig.h" +#include <stdbool.h> + + +void ad5422_resetDevice ( unsigned char adr ) +{ + pga280_setAdress ( adr ); + ADS1259_RESET = 0; + + wait_ms ( 1 ); // ??? 1 Mhz 70 + + ADS1259_RESET = 1; + pga280_resetAdress (); +} + +void ad5422_powerDownDevice ( unsigned char adr ) +{ + pga280_setAdress ( adr ); + + ADS1259_RESET = 0; + + pga280_resetAdress (); +} + +void ad5422_powerUpDevice ( unsigned char adr ) +{ + pga280_setAdress ( adr ); + + ADS1259_RESET = 1; + + pga280_resetAdress (); +} + +char ad5422_readyDevice ( unsigned char ch ) +{ + char tmp; + + pga280_setAdress ( ch ); + + if ( CRDYA == 0 ) + tmp = true; + else + tmp = false; + + pga280_resetAdress (); + + return tmp; +} + +char ad5422_sendCommandDevice ( unsigned char reg, unsigned char high_byte, unsigned char low_byte, unsigned char adr ) +{ + pga280_setAdress ( adr ); + + CS = 0; + SPI1MasterTransferByte ( reg ); + SPI1MasterTransferByte( high_byte ); + SPI1MasterTransferByte( low_byte ); + CS = 1; + + pga280_resetAdress (); + + return true; +} + +uint32_t ad5422_readReg ( unsigned char reg, unsigned char adr ) +{ + union { + struct { + uint8_t + b0, + b1, + b2; + }; + uint32_t data; + }read; + + pga280_setAdress ( adr ); + CS = 0; + + SPI1MasterTransferByte( AD5422_READBACK ); + SPI1MasterTransferByte( 0x00 ); + SPI1MasterTransferByte( reg ); + + read.b0 = SPI1MasterReadByte(); + read.b1 = SPI1MasterReadByte(); + read.b2 = SPI1MasterReadByte(); + + CS = 1; + pga280_resetAdress (); + + return read.data; +} + +unsigned int ad5422_setRegisters ( void ) +{ + ad5422_sendCommandDevice ( AD5422_REG_RESET, 0x00, 0x01, AD5422_ADR ); + ad5422_sendCommandDevice ( AD5422_REG_CONTROL, 0x30, 0b00000001, AD5422_ADR ); + return 1; +} + +unsigned int ad5422_setRegistersChannal ( char channal ) +{ + int i; + + for ( i = 0; i < channal; i++ ) + ad5422_sendCommandDevice ( AD5422_REG_RESET, 0x00, 0x01, AD5422_ADR ); + + wait_ms (1); + + for ( i = 0; i < channal; i++ ) + ad5422_sendCommandDevice ( AD5422_REG_CONTROL, 0x00, 0x08, AD5422_ADR ); + + wait_ms (1); + + for ( i = 0; i < channal; i++ ) + ad5422_sendCommandDevice ( AD5422_REG_CONTROL, 0x30, 0x09, AD5422_ADR ); + + wait_ms (1); + + return 1; +} + +unsigned char ad5422_setVoltageChannal ( float voltage, char channal ) +{ + unsigned long tmp; + float v_ref = 5.2; + unsigned char gain = 2; + unsigned int value_output; + unsigned char value_output_high; + unsigned char value_output_low; + int i; + + tmp = ( voltage / ( v_ref * gain ) ) * 0xFFFF; + value_output = ( v_ref * gain ) - tmp; + value_output_high = ( value_output >> 8 ) * 0xFF; + value_output_low = value_output * 0xFF; + + for ( i = 0; i < channal; i++ ) + ad5422_sendCommandDevice ( AD5422_REG_DATA, value_output_high, value_output_low, AD5422_ADR ); + + return (0); +}