當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀] 最近在使用AD7708采集數(shù)據(jù)-本來是想使用LPC1788自帶的SSP進(jìn)行控制,但是在多次實驗過程中發(fā)現(xiàn),單個讀取寄存器是沒有問題的,但是在連續(xù)讀取時出現(xiàn)問題,一直沒有解決,項目著急使用就直接用IO口模擬

最近在使用AD7708采集數(shù)據(jù)-本來是想使用LPC1788自帶的SSP進(jìn)行控制,但是在多次實驗過程中發(fā)現(xiàn),單個讀取寄存器是沒有問題的,但是在連續(xù)讀取時出現(xiàn)問題,一直沒有解決,項目著急使用就直接用IO模擬SPI,比較簡單就準(zhǔn)確讀出了數(shù)據(jù),也沒有出現(xiàn)上述問題,記之!

個人還是覺得是自己配置的原因,后續(xù)會繼續(xù)研究SSP的控制AD7708,希望能夠搞清楚!

主函數(shù)只需要調(diào)用兩個函數(shù)---AD7708_Reg_Init();----AD7708_ReadAD_Data();

/*-------ad7708_spi_io.h-------------*/


#ifndef __AD7708_SPI_IO_H
#define __AD7708_SPI_IO_H

#include"lpc177x_8x.h"

#define AD7708_CS_LOW() (LPC_GPIO0->CLR |=(1<<6))
#define AD7708_CS_HIGH() (LPC_GPIO0->SET |=(1<<6))

#define AD7708_SCLK_LOW() (LPC_GPIO0->CLR |=(1<<7))
#define AD7708_SCLK_HIGH() (LPC_GPIO0->SET |=(1<<7))

#define AD7708_DIN_LOW() (LPC_GPIO0->CLR |=(1<<9))
#define AD7708_DIN_HIGH() (LPC_GPIO0->SET |=(1<<9))

#define AD7708_RESET_LOW() (LPC_GPIO0->CLR |=(1<<18))
#define AD7708_RESET_HIGH() (LPC_GPIO0->SET |=(1<<18))

#define AD7708_RDY_LOW() (((LPC_GPIO0->PIN) & (1<<17)) == 0x00)

#define AD7708_DOUT_HIGH() (((LPC_GPIO0->PIN) & (1<<8)) != 0x00)

void AD7708_Reg_Init(void);
void AD7708_Reset(void);

void AD7708_Write8Bit(uint8_t data);
uint8_t AD7708_Read8Bit(void);
uint16_t AD7708_Read16Bit(void);

uint16_t AD7708_ReadAD_Data(uint8_t Channel);

#endif


/*--------ad7708_spi_io.c------------------------*/

#include "ad7708_spi_io.h"

/*----------短延時---------*/
void AD7708_Delay(uint16_t time)
{
uint16_t i;

for(i=0;i}
/*-----------AD7708-IO初始化-------*/
uint8_t AD7708_IO_Init(void)
{
LPC_IOCON->P0_6=0x30; //CS
LPC_GPIO0->DIR |=(1<<6);
LPC_GPIO0->SET |=(1<<6);

LPC_IOCON->P0_7=0xA0; //SCLK
LPC_GPIO0->DIR |=(1<<7);
LPC_GPIO0->SET |=(1<<7);

LPC_IOCON->P0_8=0xA0; //DOUT-MISO
LPC_GPIO0->DIR &=(~(1<<8));//輸入

LPC_IOCON->P0_9=0xA0; //DIN-MOSI
LPC_GPIO0->DIR |=(1<<9);
LPC_GPIO0->SET |=(1<<9);

LPC_IOCON->P0_17=0x20; //RDY
LPC_GPIO0->DIR &=(~(1<<17));//輸入

LPC_IOCON->P0_18=0x30; //RESET
LPC_GPIO0->DIR |=(1<<18);
LPC_GPIO0->SET |=(1<<18);
}
/*------------------復(fù)位AD7708-------------------*/
void AD7708_Reset(void)
{
AD7708_IO_Init();
AD7708_RESET_HIGH(); //RESET=1
AD7708_Delay(10);
AD7708_RESET_LOW(); //RESET=0
AD7708_Delay(100);
AD7708_RESET_HIGH();//RESET=1
AD7708_Delay(10);
AD7708_CS_HIGH(); //CS=1
AD7708_DIN_HIGH(); //DIN=1
AD7708_SCLK_HIGH(); //SCK=1
}
/*-----------判斷AD7708是否忙狀態(tài)----監(jiān)測RDY引腳------------*/
uint8_t AD7708_Busy()
{
uint16_t i;
uint8_t temp;
temp = 0;
for(i=0;i<1000;i++)
{
if(AD7708_RDY_LOW())
{
temp = 1;
break;
}
AD7708_Delay(10);
}
return (temp);
}
/*-----------寫入8位數(shù)據(jù)-------------*/
void AD7708_Write8Bit(uint8_t data)
{
uint8_t i,temp;

AD7708_CS_LOW();
AD7708_Delay(5);
for(i=0;i<8;i++)
{
AD7708_Delay(5);
AD7708_SCLK_LOW();
AD7708_Delay(10);
temp = data & 0x80;
if(temp)
{
AD7708_DIN_HIGH();
}
else
{
AD7708_DIN_LOW();
}
AD7708_Delay(20);
AD7708_SCLK_HIGH();
data <<= 1;
AD7708_Delay(5);
}
AD7708_SCLK_HIGH();
AD7708_DIN_HIGH();
AD7708_Delay(10);
AD7708_CS_HIGH();
}
/*---------------讀取8位數(shù)據(jù)--------------------*/
uint8_t AD7708_Read8Bit(void)
{
uint8_t i,temp=0x00;

AD7708_CS_LOW();
AD7708_Delay(5);
for(i=0;i<8;i++)
{
AD7708_Delay(5);
AD7708_SCLK_LOW();
AD7708_Delay(30);
if(AD7708_DOUT_HIGH())
{
temp += 0x01;
}
AD7708_Delay(5);
AD7708_SCLK_HIGH();
if(i != 7)
{
temp <<= 1;
}
AD7708_Delay(5);
}
AD7708_SCLK_HIGH();
AD7708_Delay(2);
AD7708_CS_HIGH();
return (temp);
}
/*-------------讀取16位數(shù)據(jù)-----------------*/
uint16_t AD7708_Read16Bit(void)
{
uint8_t i;
uint16_t temp= 0x0000;

AD7708_CS_LOW();
AD7708_Delay(5);
for(i=0;i<16;i++)
{
AD7708_Delay(5);
AD7708_SCLK_LOW();
temp = temp << 1;
AD7708_Delay(30);
if(AD7708_DOUT_HIGH())
{
temp |= 0x01;
}
AD7708_Delay(10);
AD7708_SCLK_HIGH();
AD7708_Delay(5);
}
AD7708_SCLK_HIGH();
AD7708_Delay(2);
AD7708_CS_HIGH();
return (temp);
}
/*----------------內(nèi)部校準(zhǔn)------------------*/
void AD7708_Cal(uint8_t channel)
{
AD7708_Write8Bit(0x02);
AD7708_Write8Bit((channel<<4)|0x0f);//ADC控制寄存器
AD7708_Delay(2);

AD7708_Write8Bit(0x01); //模式寄存器
AD7708_Write8Bit(0x04);//內(nèi)部零標(biāo)量校準(zhǔn)
AD7708_Busy();
AD7708_Delay(2);

AD7708_Write8Bit(0x01);
AD7708_Write8Bit(0x05);//內(nèi)部滿量程校準(zhǔn)
AD7708_Busy(); //等待校準(zhǔn)完成
AD7708_Delay(2);
}
/*----------------初始化AD7708寄存器---------------*/
void AD7708_Reg_Init(void)
{
uint8_t i;
AD7708_Reset();
AD7708_Delay(10);
for(i=0;i<8;i++)
{
AD7708_Cal(i);//校準(zhǔn)
}
AD7708_Write8Bit(0x07);//IO寄存器
AD7708_Write8Bit(0x00);
AD7708_Delay(2);
AD7708_Write8Bit(0x03);//濾波寄存器
AD7708_Write8Bit(0x12);
AD7708_Delay(2);
AD7708_Write8Bit(0x02);//ADC控制寄存器-0通道-單極性
AD7708_Write8Bit(0x0f);
AD7708_Delay(2);
AD7708_Write8Bit(0x01);//模式寄存器
AD7708_Write8Bit(0x02);
AD7708_Delay(2);
}
/*******************************************************************************************************/
/*-------------讀取AD轉(zhuǎn)換數(shù)據(jù)------------------*/
uint16_t AD7708_ReadAD_Data(uint8_t Channel)
{
uint16_t temp;
AD7708_Write8Bit(0x02);//ADC控制寄存器--通道號--單極性
AD7708_Write8Bit(0x0f|(Channel<<4));
AD7708_Delay(2);

AD7708_Write8Bit(0x01);
AD7708_Write8Bit(0x02); //啟動單次轉(zhuǎn)換
AD7708_Delay(2);
AD7708_Busy(); //轉(zhuǎn)換完成

AD7708_Write8Bit(0x44); //讀
temp = AD7708_Read16Bit();//讀取轉(zhuǎn)換數(shù)據(jù)

return (temp);
}


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉