| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- /**
- * @file AD5933_ATY.c
- *
- * @param Project DEVICE_GENERAL_ATY_LIB
- *
- * @author ATY
- *
- * @copyright
- * - Copyright 2017 - 2025 MZ-ATY
- * - This code follows:
- * - MZ-ATY Various Contents Joint Statement -
- * <a href="https://mengze.top/MZ-ATY_VCJS">
- * https://mengze.top/MZ-ATY_VCJS</a>
- * - CC 4.0 BY-NC-SA -
- * <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">
- * https://creativecommons.org/licenses/by-nc-sa/4.0/</a>
- * - Your use will be deemed to have accepted the terms of this statement.
- *
- * @brief Familiar functions of AD5933 for all embedded device
- *
- * @version
- * - 1_01_24015 > ATY
- * -# Preliminary version, first Release
- ********************************************************************************
- */
- #ifndef __AD5933_ATY_C
- #define __AD5933_ATY_C
- #include "AD5933_ATY.h"
- /******************************* For user *************************************/
- /******************************************************************************/
- uint8_t AD5933_Write(uint8_t addr, uint8_t* data_t, uint8_t len, struct AD5933_ATY_Dev* dev)
- {
- uint8_t errCode = 0;
- __ATY_LOCK(dev);
- errCode = dev->i2cProcess(dev->addr, data_t, len, _ATY_RW_W);
- __ATY_UNLOCK(dev);
- return errCode;
- }
- uint8_t AD5933_Read(uint8_t addr, uint8_t* data_t, uint8_t len, struct AD5933_ATY_Dev* dev)
- {
- uint8_t errCode = 0;
- __ATY_LOCK(dev);
- errCode = dev->i2cProcess(dev->addr, data_t, len, _ATY_RW_R);
- __ATY_UNLOCK(dev);
- return errCode;
- }
- uint8_t AD5933_WriteReg(uint8_t reg, uint8_t data, struct AD5933_ATY_Dev* dev)
- {
- uint8_t errCode = 0;
- uint8_t data_t[2] = {reg, data};
- errCode = AD5933_Write(dev->addr, data_t, 2, dev);
- return errCode;
- }
- uint8_t AD5933_ReadReg(uint8_t reg, uint8_t* data, struct AD5933_ATY_Dev* dev)
- {
- uint8_t errCode = 0;
- uint8_t data_t[2] = {reg, 0xB0};
- errCode = AD5933_Write(dev->addr, data_t, 2, dev);
- errCode = AD5933_Read(dev->addr, data_t, 2, dev);
- *data = data_t[1];
- return errCode;
- }
- void AD5933_Init(struct AD5933_ATY_Dev* dev)
- {
- // Transmit to start frequency register
- // program 30khz start frequency assuming internal osc of 16.776Khz
- AD5933_WriteReg(0x84, 0x45, dev);
- AD5933_WriteReg(0x83, 0xA6, dev);
- AD5933_WriteReg(0x82, 0x0E, dev);
- // Transmit to frequency increment register
- // program 1Khz frequency increment assuming internal osc of 16.776Khz
- AD5933_WriteReg(0x87, 0x02, dev);
- AD5933_WriteReg(0x86, 0x7D, dev);
- AD5933_WriteReg(0x85, 0x00, dev);
- // Transmit to NUMBER OF INCREMENTS register
- // program 10 frequency increments
- AD5933_WriteReg(0x89, 0x0A, dev);
- AD5933_WriteReg(0x88, 0x00, dev);
- // Transmit to settling time cycles register
- // program 15 output cycles at each frequency before a adc conversion
- AD5933_WriteReg(0x8B, 0x0F, dev);
- AD5933_WriteReg(0x8A, 0x00, dev);
- // Transmit to CONTROL register
- // place the AD5933 in standby mode
- AD5933_WriteReg(0x80, 0xB0, dev);
- // Choose the internal system clock
- AD5933_WriteReg(0x81, 0x00, dev);
- // Choose range 1 (2vp-p, 1.6v) PGA = x1
- AD5933_WriteReg(0x80, 0x01, dev);
- // initialise the sensor with contents of start frequency regsister with range 1 (2vp-p, 1.6v) PGA = x1
- AD5933_WriteReg(0x80, 0x10, dev);
- // start of frequency swee, devp (2vp-p, 1.6v) PGA = x1
- AD5933_WriteReg(0x80, 0x20, dev);
- // initialise the sweep sequence
- AD5933_Measure(dev);
- // //issue a measure temperature command to the control register
- // AD5933_WriteReg(0x80, 0x90, dev);
- // // read the temperature data and send to uart
- // Measure_Temp(dev);
- }
- // status reg D0 = valid temp, D1 = valid real/imag data, D2 = frequency sweep complete
- void AD5933_Measure(struct AD5933_ATY_Dev* dev)
- {
- while(1){
- // D1 status reg loop
- uint8_t status = 0;
- AD5933_ReadReg(0x8F, &status, dev);
- status = (status & 0x02); // mask off the valid data bit
- for(uint16_t i = 0; i < 10000; i++){}
- // printf("Status: %02X\r\n", status);
- if(((status) | 0xFD) == 0xFF) // valid data should be present after start freqy command
- {
- // D1 true condition
- AD5933_ReadReg(0x8F, &status, dev);
- if((status | 0xFB) != 0xFF)// D2 test condition
- {
- uint8_t real_byte_high = 0, real_byte_low = 0, imag_byte_high = 0, imag_byte_low = 0;
- AD5933_ReadReg(0x94, &real_byte_high, dev);
- AD5933_ReadReg(0x95, &real_byte_low, dev);
- AD5933_ReadReg(0x96, &imag_byte_high, dev);
- AD5933_ReadReg(0x97, &imag_byte_low, dev);
- uint16_t real_data = ((real_byte_high << 8) | real_byte_low);
- uint16_t imag_data = ((imag_byte_high << 8) | imag_byte_low);
- // printf("Original real register = 0x%02x\r\n", (unsigned int)((unsigned short)real_data));
- // printf("Orocessed real register = %d(decimal equivilant)\r\n", (int)real_data);
- // printf("Original imag register = 0x%02X\r\n", (unsigned int)((unsigned short)imag_data));
- // printf("Orocessed imag register = %d(decimal equivilant)\r\n", (int)imag_data);
- printf("%d %d\r\n", (uint16_t)real_data, (uint16_t)imag_data);
- // increment to the next frequency
- status = 0x30;
- AD5933_WriteReg(0x80, status, dev);
- }
- else // End of frequency sweep exit loop
- {
- // printf("Status: %02X\r\n", status);
- // printf("end sweep\r\n");
- break;
- }
- }
- }
- }
- #endif /* __AD5933_ATY_C */
- /************************************ etc *************************************/
- // void LOG_ALL(uint8_t* str){ printf((const char*)str); }
- /* init */
- // uint8_t AD5933_1_I2C(uint8_t addr, uint8_t* data_t, uint8_t len, uint8_t rw){
- // if(rw == _ATY_RW_W)
- // return (uint8_t)HAL_I2C_Master_Transmit(&hi2c1, (addr << 1 | 0), data_t, len, 1000);
- // else if(rw == _ATY_RW_R)
- // return (uint8_t)HAL_I2C_Master_Receive(&hi2c1, (addr << 1 | 1), data_t, len, 1000);
- // }
- // struct AD5933_ATY_Dev AD5933_ATY_t_1 = {
- // .addr = AD5933_ADDRESS,
- // .i2cProcess = AD5933_1_I2C,
- // .lock = _ATY_UNLOCKED,
- // .debugEnable = 0,
- // .LOG = printf
- // };
- /* use */
- // AD5933_SetValue(0xF0, &AD5933_ATY_t_1);
- // AD5933_GetValue(&getValue, &AD5933_ATY_t_1);
- /******************************************************************************/
- /******************************** End Of File *********************************/
|