0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ADX516驅(qū)動(dòng)實(shí)驗(yàn)淺析

冬至子 ? 來(lái)源:xuyuntong ? 作者:XuTong ? 2023-08-01 17:01 ? 次閱讀

ADX516兼容SGM58601

/*
    Analogysemi xutong
    2023/04/20
*/
#include "ADX516.h"
#include "board.h"
#include "bsp_lpspi.h"
#include "rtthread.h"
//初始化ADX516
void ADX516_Init(void)
{
  //拉PWDN和RST
}
//獲取芯片的ID號(hào)
//Adx516 default Value 0x20
uint8_t ADX516_GetChipID(void)
{
    uint8_t ID;
    ID=ADX516_GetReg(ADX516_STATUS);
    return ID;
}
//獲取芯片寄存器值
uint8_t ADX516_GetReg(uint8_t Rreg)
{
   uint8_t TxData[3];
   uint8_t RxData[3];
    //讀取命令,
    TxData[0]=ADX516_RREG|Rreg;
    //選擇要讀取的寄存器
    TxData[1]=0x00;
    //讀取單個(gè)寄存器
    TxData[2]=0X00;
    //開(kāi)始讀取
    Lpspi_Read(3,TxData,RxData);
    //返回寄存器值
    return RxData[2];
}
//寫(xiě)單個(gè)芯片寄存器值
void ADX516_WriteReg(uint8_t Wreg,uint8_t Data)
{
    uint8_t TxData[3];
    //寫(xiě)入命令,
    TxData[0]=ADX516_WREG|Wreg;
    //選擇要寫(xiě)入的的寄存器
    TxData[1]=0x00;
    //讀取寫(xiě)入寄存器
    TxData[2]=Data;
    Lpspi_Write(3,TxData);
}
//寫(xiě)多個(gè)芯片寄存器值
//StartReg 起始寄存器地址
//RegNum 要寫(xiě)的寄存器數(shù)量
//*Data  寄存器參數(shù)傳入
void ADX516_WriteMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data)
{
    uint8_t TxData[32];
    uint8_t i;
    //寫(xiě)入命令,
    TxData[0]=ADX516_WREG|StartReg;
    //選擇要寫(xiě)入的的寄存器
    TxData[1]=RegNum-1;
    for(i=0;i< RegNum;i++)
    {
       //將指針數(shù)據(jù)賦值給Txdata
       TxData[2+i]=*Data;
       //指向下個(gè)數(shù)據(jù)地址
       Data++;
    }
    //最終發(fā)送多少個(gè)數(shù)據(jù)
    Lpspi_Write(2+RegNum,TxData);
}
//讀多個(gè)芯片寄存器值
//StartReg 起始寄存器地址
//RegNum 要寫(xiě)的寄存器數(shù)量
//*Data  寄存器參數(shù)傳出
void ADX516_ReadMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data)
{
    //讀取寄存器
    uint8_t TxData[3];
    //讀取命令,
    TxData[0]=ADX516_RREG|StartReg;
    //選擇要寫(xiě)入的的寄存器
    TxData[1]=RegNum-1;
    //最終接收多少個(gè)數(shù)據(jù)
     Lpspi_Read(2+RegNum,TxData,Data);
}
//打印所有寄存器地址
void ADX516_GetAllReg(void)
{
  uint8_t i,j;
  for(i=0;i< 20;i++)
  { 
    j=ADX516_GetReg(i);
    //打印所有寄存器值
    rt_kprintf("reg addr hex: %x reg default Value: %xrn",i,j);
  }
}
//發(fā)送ADX516 數(shù)據(jù)指令 如SDATAC或者RDATAC
//詳情見(jiàn)頭文件command define部分
void ADX516_Command(uint8_t Com)
{
    uint8_t TxData[]={Com};
    Lpspi_Write(1,TxData);
}
//設(shè)定通道并且獲取adc數(shù)據(jù)
//獲取ADC的值 
void ADX516_GetADC_Value(uint8_t Ch,uint8_t *Rxdata)
{
    uint8_t TxData[]={ADX516_RDATA};
    ADX516_Command(ADX516_SDATAC);
    ADX516_WriteReg(ADX516_MUX,Ch< 4|0X0F);
    ADX516_Command(ADX516_SYNC);
    ADX516_Command(ADX516_WAKEUP);
    //rt_thread_mdelay(1);
    Lpspi_Read(4,TxData,Rxdata);

}
/*
    Analogysemi xutong
    2023/02/15
*/
#ifndef __ADX516_H
#define __ADX516_H
#include "bsp_lpspi.h"
/*
    device 需要先寫(xiě)入SDTAC 啟動(dòng)寄存器寫(xiě)入才可以對(duì)寄存器進(jìn)行操作
    在此之前需要檢查PWDN以及Reset引腳的狀態(tài)是否為 高
    在操作完寄存器后,需要發(fā)送RDATAC 才能連續(xù) 讀取數(shù)據(jù)
    bsp_lpspi 的接口函數(shù)如下:
    Lpspi_Write(uint8_t datasize,uint8_t *data);
    Lpspi_Read(uint8_t datasize,uint8_t *data,uint8_t *Rxdata);
    注意:
        Lpspi的時(shí)序并不一定滿足ADX516的配置,以下配置經(jīng)過(guò)驗(yàn)證

        lpspi_master_config_t config;
        LPSPI_MasterGetDefaultConfig(&config);
        config.whichPcs=kLPSPI_Pcs0;
        config.baudRate=50000;
        config.betweenTransferDelayInNanoSec = 1000000000 /500;
        config.pcsToSckDelayInNanoSec=1000000000 /500;
        config.lastSckToPcsDelayInNanoSec=1000000000 /500;
        config.cpha=kLPSPI_ClockPhaseSecondEdge;
        LPSPI_MasterInit(LPSPI3, &config, LPSPI3_CLOCK_FREQ);
*/


/*command define*/


#define ADX516_WAKEUP 0x00
#define ADX516_RDATA   0x12
#define ADX516_RDATAC  0x10
#define ADX516_SDATAC  0x11
#define ADX516_RREG    0x10
#define ADX516_WREG    0X50
#define ADX516_SELFCAL 0XF0
#define ADX516_SELFOCAL 0XF1
#define ADX516_SELFGCAL 0XF2
#define ADX516_SYSOCAL 0XF3
#define ADX516_SYSGCAL 0XF4
#define ADX516_SYNC     0XFC
#define ADX516_STANDBY 0xFD
#define ADX516_RESET   0xFE






//RREG Read n nnnn registers starting at address r rrrr 
//First Byte 001r rrrr (2xh)
//Second Byte 000n nnnn 
//n nnnn = number of registers to be read or written – 1. For example, to read or write three registers, set n nnnn = 0 (0010). r rrrr = the
//starting register address for read and write commands
//WREG 同上








/*
    寄存器定義
*/
#define  ADX516_STATUS 0x00
#define  ADX516_MUX 0x01
#define  ADX516_ADCON 0x02
#define  ADX516_DRATE 0x03
#define  ADX516_IO 0x04
#define  ADX516_OFC0 0x05
#define  ADX516_OFC1 0x06
#define  ADX516_OFC2 0x07
#define  ADX516_FSC0 0x08
#define  ADX516_FSC1 0x09
#define  ADX516_FSC2 0x0A
#define  ADX516_CFG0 0x0B
#define  ADX516_CFG1 0x0C
#define  ADX516_CFG2 0x0D
#define  ADX516_CFG3 0x0E
#define  ADX516_CFG4 0x0F
#define  ADX516_CFG5 0x10
#define  ADX516_DEV_CFG 0x11
#define  ADX516_MOD_STAT 0x12
#define  ADX516_DEV_STAT 0x13
#define  ADX516_CMD_STAT 0x14






/*
  通道配置
  channel config
*/
#define ADX516_ADC_CH0


//寫(xiě)命令
void ADX516_Command(uint8_t Com);
//獲取芯片的ID號(hào)
uint8_t ADX516_GetChipID(void);


//獲取寄存器值
uint8_t ADX516_GetReg(uint8_t Rreg);
//獲取多個(gè)寄存器值
void ADX516_ReadMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data);
//寫(xiě)入寄存器值
void ADX516_WriteReg(uint8_t Wreg,uint8_t Data);
//寫(xiě)多個(gè)寄存器的值
void ADX516_WriteMultiReg(uint8_t StartReg,uint8_t RegNum,uint8_t *Data);
//獲取所有寄存器值
void ADX516_GetAllReg(void);
//設(shè)定通道并且獲取ADC的值
void ADX516_GetADC_Value(uint8_t Ch,uint8_t *Rxdata);
//初始化ADX516
void ADX516_Init(void);
#endif
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5271

    瀏覽量

    119648
  • SGM
    SGM
    +關(guān)注

    關(guān)注

    0

    文章

    5

    瀏覽量

    10556
  • RST
    RST
    +關(guān)注

    關(guān)注

    0

    文章

    31

    瀏覽量

    7373
  • ADC采樣
    +關(guān)注

    關(guān)注

    0

    文章

    134

    瀏覽量

    12807
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STM32讀取MPU6050和9軸模塊ADX345

    親測(cè)可用?。?!STM32讀取MPU6050和9軸模塊ADX345等.rar
    發(fā)表于 07-04 04:28

    交流白光LED燈驅(qū)動(dòng)電路淺析

    交流白光LED燈驅(qū)動(dòng)電路淺析
    發(fā)表于 12-22 16:21 ?84次下載
    交流白光LED燈<b class='flag-5'>驅(qū)動(dòng)</b>電路<b class='flag-5'>淺析</b>

    ADX105型加速度頻率變換電路圖

    ADX105型加速度頻率變換電路圖
    發(fā)表于 07-03 12:47 ?676次閱讀
    <b class='flag-5'>ADX</b>105型加速度頻率變換電路圖

    淺析IGBT驅(qū)動(dòng)

    淺析IGBT驅(qū)動(dòng)
    發(fā)表于 06-16 09:52 ?1921次閱讀
    <b class='flag-5'>淺析</b>IGBT<b class='flag-5'>驅(qū)動(dòng)</b>

    BBkey80:由XIAO RP2040驅(qū)動(dòng)的GL516兼容鍵盤(pán)

    電子發(fā)燒友網(wǎng)站提供《BBkey80:由XIAO RP2040驅(qū)動(dòng)的GL516兼容鍵盤(pán).zip》資料免費(fèi)下載
    發(fā)表于 10-19 09:22 ?0次下載
    BBkey80:由XIAO RP2040<b class='flag-5'>驅(qū)動(dòng)</b>的GL<b class='flag-5'>516</b>兼容鍵盤(pán)

    MAX516BENG+ 線性 - 比較器

    電子發(fā)燒友網(wǎng)為你提供Maxim(Maxim)MAX516BENG+相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有MAX516BENG+的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,MAX516BENG+真值表,MAX
    發(fā)表于 11-25 20:25
    MAX<b class='flag-5'>516</b>BENG+ 線性 - 比較器

    MAX516ACWG+ 線性 - 比較器

    電子發(fā)燒友網(wǎng)為你提供Maxim(Maxim)MAX516ACWG+相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有MAX516ACWG+的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,MAX516ACWG+真值表,MAX
    發(fā)表于 11-25 20:29
    MAX<b class='flag-5'>516</b>ACWG+ 線性 - 比較器

    MAX516AENG 線性 - 比較器

    電子發(fā)燒友網(wǎng)為你提供Maxim(Maxim)MAX516AENG相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有MAX516AENG的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,MAX516AENG真值表,MAX
    發(fā)表于 11-25 20:44
    MAX<b class='flag-5'>516</b>AENG 線性 - 比較器

    MAX516BCNG 線性 - 比較器

    電子發(fā)燒友網(wǎng)為你提供Maxim(Maxim)MAX516BCNG相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有MAX516BCNG的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,MAX516BCNG真值表,MAX
    發(fā)表于 11-25 20:45
    MAX<b class='flag-5'>516</b>BCNG 線性 - 比較器

    MAX516BCWG 線性 - 比較器

    電子發(fā)燒友網(wǎng)為你提供Maxim(Maxim)MAX516BCWG相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有MAX516BCWG的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,MAX516BCWG真值表,MAX
    發(fā)表于 11-25 20:45
    MAX<b class='flag-5'>516</b>BCWG 線性 - 比較器

    MAX516BENG 線性 - 比較器

    電子發(fā)燒友網(wǎng)為你提供Maxim(Maxim)MAX516BENG相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有MAX516BENG的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,MAX516BENG真值表,MAX
    發(fā)表于 11-25 20:45
    MAX<b class='flag-5'>516</b>BENG 線性 - 比較器

    ADX3208驅(qū)動(dòng)基于RT1052的方法

    uint8_t ADX3208_GetChipID(void)
    發(fā)表于 08-02 11:28 ?457次閱讀

    如何編寫(xiě)ADX122驅(qū)動(dòng)程序?

    大概是能看的出來(lái)兼容adx112的,采用的是spi的接口,在這個(gè)章節(jié)我們主要講是如何編寫(xiě)驅(qū)動(dòng)程序,所以先跳過(guò)一些重要信息。
    發(fā)表于 08-02 14:59 ?1032次閱讀
    如何編寫(xiě)<b class='flag-5'>ADX</b>122<b class='flag-5'>驅(qū)動(dòng)</b>程序?

    最大516個(gè) ADI

    電子發(fā)燒友網(wǎng)為你提供ADI(ADI)最大516個(gè)相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊(cè),更有最大516個(gè)的引腳圖、接線圖、封裝手冊(cè)、中文資料、英文資料,最大516個(gè)真值表,最大516個(gè)管腳等資料,希望
    發(fā)表于 10-11 19:09
    最大<b class='flag-5'>516</b>個(gè) ADI

    CDC516: 3.3V鎖相LOOP時(shí)鐘驅(qū)動(dòng)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《CDC516: 3.3V鎖相LOOP時(shí)鐘驅(qū)動(dòng)器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 08-22 10:38 ?0次下載
    CDC<b class='flag-5'>516</b>: 3.3V鎖相LOOP時(shí)鐘<b class='flag-5'>驅(qū)動(dòng)</b>器數(shù)據(jù)表