問:ADA4350可寫不可讀是怎么回事,如何實(shí)現(xiàn)串口讀寫?
1ADA4350簡介
ADA4350集成TIA、開關(guān)及差分放大器在一個(gè)封裝內(nèi),非常適合對(duì)光電器件輸出的電流進(jìn)行信號(hào)調(diào)理。芯片內(nèi)部的六組開爾文式開關(guān)有兩種用法,既可以六組都給TIA用,這樣外部可配置六個(gè)不同電阻實(shí)現(xiàn)六種增益,覆蓋不同的輸入電流范圍;也可以TIA用三組開關(guān),剩下的三組給后面的運(yùn)放使用,共實(shí)現(xiàn)3x3
= 9種的增益。輸出運(yùn)放可配置為差分輸出直接驅(qū)動(dòng)差分輸入ADC。
芯片內(nèi)部的六組開關(guān),可以通過IO口并行控制,也可以用SPI串行控制,SPI時(shí)序圖和寄存器Map定義見芯片資料。
圖|ADA4350內(nèi)部框圖
2SPI測試硬件環(huán)境
用STM32F103C8Tx的SPI口(PA4~PA7)控制ADA4350EVB.
ADA4350EVB配置如下:
DVDD短路到VCC, DGND短路到GND,E3631A提供+/-5V電源給VCC和VEE;
MODE接低(串行模式),ENABLE接高,LATCH接低;
并口模式下控制P0 ~ P4的開關(guān)切換到高電平(否則ADA4350的20~23腳接地,MCU無法進(jìn)行控制);
將MCU控制板的CS/SCK/SDI/SDO共5根線連接到ADA4350EVB的20~23腳(SPI管腳)進(jìn)行控制,兩板的地短接。用示波器抓取
CS/SCK/SDI/SDO時(shí)序。
3測試時(shí)序圖
測試時(shí)序圖見下,
先寫0x000820到ADA4350,即控制S11和S5導(dǎo)通;
再讀,先寫0x800000告訴芯片要讀寄存器,然后SDO線上會(huì)出現(xiàn)0x800820,最高位無效,最低12位為0x820,即剛寫進(jìn)去的值;
需要注意的是在讀寫過程中,SCK下降沿有效。
圖|ADA4350 SPI時(shí)序圖
4參考代碼
代碼無他,需要注意靈活配置MCU的SPI,使之與ADA4350時(shí)序需求匹配即可。
參考代碼
代碼無他,需要注意靈活配置MCU的SPI,使之與ADA4350時(shí)序需求匹配即可。
int main(void)
{
while (1)
{
//Write 0x000820(enable S5 and S11 of ADA4350)
SPI_write_ADA4350(3,0x000820);
//Read the register value
SPI_read_ADA4350(3,0x800000);
//Print the reading value by UART
HAL_UART_Transmit(&huart1,Read_dvalue,3,0xFFFF);
//LED Blink
Led_blink();
Delay_ms(200); }
}
/***** SPI1 Initialization Function /
static void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER;
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi1.Init.CLKPhase = SPI_PHASE_2EDGE;
hspi1.Init.NSS = SPI_NSS_SOFT;
hspi1.Init.BaudRatePrescaler =
SPI_BAUDRATEPRESCALER_64;
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
hspi1.Init.CRCCalculation =
SPI_CRCCALCULATION_DISABLE;
hspi1.Init.CRCPolynomial = 10;
if(HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
}
/ SPI WriteADA4350 /
void SPI_write_ADA4350(uint8_tsize,uint32_t data_value)
{
SPI_CS_HIGH //CS HIGH
SPI_CS_LOW //CS LOW
//SPI write 0x000820
SPI_write_buffer[0]=(uint8_t)((data_value&0x00ff0000)>>16);
SPI_write_buffer[1]=(uint8_t)((data_value&0x0000ff00)>>8);
SPI_write_buffer[2]=(uint8_t)(data_value&0x000000ff);
//write 3 bytes
HAL_SPI_Transmit(&hspi1, SPI_write_buffer, size, 0x2000);
SPI_CS_HIGH //CS HIGH
Delay_us(5);
}
/ SPI ReadADA4350 **/
uint8_t SPI_read_ADA4350(uint8_tsize,uint32_t data_value)
{
SPI_CS_HIGH //CS HIGH
SPI_CS_LOW //CS LOW
//SPI write 0x800000
SPI_write_buffer[0]=(uint8_t)((data_value&0x00ff0000)>>16);
SPI_write_buffer[1]=(uint8_t)((data_value&0x0000ff00)>>8);
SPI_write_buffer[2]=(uint8_t)(data_value&0x000000ff);
//write 3 bytes
HAL_SPI_Transmit(&hspi1, SPI_write_buffer, size, 0x2000);
SPI_CS_HIGH //CS HIGH
Delay_us(2);
//SPI RX
SPI_CS_LOW //CS LOW
//Read data into the Read_dvalue array
HAL_SPI_Receive(&hspi1,Read_dvalue,size,0x2000);
SPI_CS_HIGH //CS HIGH
Delay_us(5);
return 1;
}
-
放大器
+關(guān)注
關(guān)注
143文章
13590瀏覽量
213506 -
adc
+關(guān)注
關(guān)注
98文章
6498瀏覽量
544687 -
串口
+關(guān)注
關(guān)注
14文章
1554瀏覽量
76532 -
IO口
+關(guān)注
關(guān)注
3文章
170瀏覽量
24048
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論