《電子系統(tǒng)設(shè)計》課件 5.6 I2C總線擴(kuò)展技術(shù)_第1頁
《電子系統(tǒng)設(shè)計》課件 5.6 I2C總線擴(kuò)展技術(shù)_第2頁
《電子系統(tǒng)設(shè)計》課件 5.6 I2C總線擴(kuò)展技術(shù)_第3頁
《電子系統(tǒng)設(shè)計》課件 5.6 I2C總線擴(kuò)展技術(shù)_第4頁
《電子系統(tǒng)設(shè)計》課件 5.6 I2C總線擴(kuò)展技術(shù)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

5.6單片機(jī)I2C總線擴(kuò)展技術(shù)賈立新jlx@1.I2C總線及軟件模擬1.I2C總線的定義和特點I2C總線(Inter-Integrated-Circuit)是由Philips公司開發(fā)了一個簡單的、高性能的芯片間串行傳輸總線,由一根數(shù)據(jù)線(SDA)和一根時鐘線(SCL)組成。I2C總線系統(tǒng)擴(kuò)展圖(1)所有I2C總線接口器件都包含了一個片上接口,使器件之間直接通過I2C總線通訊。

1.I2C總線及軟件模擬(2)掛在I2C總線上的器件有主機(jī)和從機(jī)之分。

主機(jī)是指主動發(fā)起一次傳送的器件,它產(chǎn)生起始信號、終止信號和時鐘信號;從機(jī)是指被主器件尋址的器件。

在單片機(jī)系統(tǒng)中,主機(jī)一般由單片機(jī)擔(dān)當(dāng),從機(jī)則為其它器件,如存儲器、A/D轉(zhuǎn)換器、實時時鐘器件等。(3)每個連接到I2C總線的器件都有唯一的地址。主機(jī)在發(fā)出起始信號以后,傳送的第一個字節(jié)總是地址字節(jié),以指示由哪個器件來接收該數(shù)據(jù)。1.I2C總線及軟件模擬(1)數(shù)據(jù)有效位定義:數(shù)據(jù)在時鐘高電平期間保持穩(wěn)定。2.I2C總線基本時序1.I2C總線及軟件模擬(2)起始信號:時鐘信號高電平期間數(shù)據(jù)由高到低切換(3)停止信號:時鐘信號高電平期間數(shù)據(jù)由低到高切換1.I2C總線及軟件模擬(4)應(yīng)答信號1.I2C總線及軟件模擬3.I2C總線數(shù)據(jù)傳送模式模式一:主機(jī)發(fā)送,從機(jī)接收,而且傳輸方向始終不變。

模式二:主機(jī)發(fā)送地址字節(jié)后立即讀從機(jī)數(shù)據(jù)。

模式三:主機(jī)先向從機(jī)寫數(shù)據(jù),再向從機(jī)讀數(shù)據(jù)。

1.I2C總線及軟件模擬4.I2C總線基本時序的軟件模擬(1)I/O引腳的初始化#defineSDA_HIGH()GPIO_SetBits(GPIOB,GPIO_Pin_9) //將SDA置高#defineSDA_LOW()GPIO_ResetBits(GPIOB,GPIO_Pin_9) //將SDA置低#defineSCL_HIGH()GPIO_SetBits(GPIOB,GPIO_Pin_8) //將SCL置高#defineSCL_LOW()GPIO_ResetBits(GPIOB,GPIO_Pin_8) //將SCL置低#defineSDAGPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9) //讀SDA引腳1.I2C總線及軟件模擬(1)I/O引腳的初始化voidI2C_Configuration(void){RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType=GPIO_OType_OD;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;GPIO_Init(GPIOB,&GPIO_InitStructure);}1.I2C總線及軟件模擬(2)啟動信號子程序在SCL高電平期間SDA發(fā)生負(fù)跳變。voidI2Cstart(){ SDA_HIGH(); delay();

SCL_HIGH(); delay();SDA_LOW(); delay();SCL_LOW(); delay();SDA_HIGH();}1.I2C總線及軟件模擬(3)終止信號子程序在SCL高電平期間SDA發(fā)生正跳變。voidI2Cstop(){ SDA_LOW(); delay(); SCL_HIGH(); delay(); SDA_HIGH();}1.I2C總線及軟件模擬(4)發(fā)送應(yīng)答位子程序ACK在SDA低電平期間,SCL發(fā)生一個正脈沖。voidack(){ SDA_LOW(); delay(); SCL_HIGH(); delay(); SCL_LOW(); delay(); SDA_HIGH();delay();}(5)發(fā)送非應(yīng)答位子程序NACK在SDA高電平期間SCL發(fā)生一個正脈沖。voidnack(){ SDA_HIGH(); delay(); SCL_HIGH(); delay(); SCL_LOW(); delay();}1.I2C總線及軟件模擬(6)檢查應(yīng)答位子程序CHECK

在檢查應(yīng)答位子程序中,設(shè)置了標(biāo)志位F0,當(dāng)檢查到正常應(yīng)答位時F0=0,否則,F(xiàn)0=1。voidI2Ccheck(){ F0=0x00; SDA_HIGH(); delay(); SCL_HIGH(); delay(); if(SDA==1)F0=0x01; SCL_LOW(); delay();}1.I2C總線及軟件模擬(7)寫一個字節(jié)數(shù)據(jù)子程序WRBYTEbyte=byte<<1;delay();SCL_HIGH();delay();SCL_LOW();delay();}SDA_HIGH(); }voidI2Cwrbyte(u8byte){u8i;for(i=0;i<8;i++){if((byte&0x80)==0x80){SDA_HIGH();}else{SDA_LOW();}1.I2C總線及軟件模擬(8)讀一個字節(jié)子程序RDBYTEu8I2Crdbyte(){u8i,q,byte=0;for(i=0;i<8;i++){ SDA_HIGH(); SCL_HIGH(); delay();q=SDA;delay();SCL_LOW();byte=byte<<1;if(q==0x01){ byte=byte|0x01;}delay();}returnbyte;}1.I2C總線及軟件模擬2.導(dǎo)線長度測量儀設(shè)計

1.設(shè)計題目設(shè)計一導(dǎo)線長度測量儀,原理框圖如圖所示。圖中Rx表示被測導(dǎo)線。導(dǎo)線采用網(wǎng)線(直徑0.51mm~0.58mm)內(nèi)的銅芯。被測導(dǎo)線的長度范圍為50~100cm,誤差的絕對值不大于1.0cm。2.導(dǎo)線長度測量儀設(shè)計

2.理論分析導(dǎo)線的電阻與長度成正比。通過導(dǎo)線電阻,根據(jù)阻值計算導(dǎo)線長度。導(dǎo)線的長度可以由下式得到:其中,

ρ為銅芯網(wǎng)線的線路電阻系數(shù),L為導(dǎo)線長度,Rx為單片機(jī)測出的導(dǎo)線電阻,R0為除導(dǎo)線外的其它電阻,如接觸電阻等。

2.導(dǎo)線長度測量儀設(shè)計

3.硬件電路設(shè)計2.導(dǎo)線長度測量儀設(shè)計

4.ADS1115的功能框圖和引腳排列

ADS1115內(nèi)部包括模擬開關(guān)、一個∑-△型A/D轉(zhuǎn)換器核、可編程增益放大器PGA、基準(zhǔn)電壓源、時鐘振蕩器和I2C總線接口。2.導(dǎo)線長度測量儀設(shè)計

ADS1115以二進(jìn)制補(bǔ)碼格式提供16位數(shù)據(jù),正滿量程輸入產(chǎn)生7FFFH的輸出代碼,負(fù)滿量程輸入產(chǎn)生8000H的輸出代碼。ADS1115有一個地址引腳ADDR配置器件的I2C地址。當(dāng)ADDR引腳接地時,器件地址為1001000。PGA設(shè)置滿量程輸入/VPGA設(shè)置滿量程輸入/V2/3±6.1444±1.0241±4.0968±0.5122±2.04816±0.2562.導(dǎo)線長度測量儀設(shè)計

5.軟件設(shè)計2.導(dǎo)線長度測量儀設(shè)計

無論是啟動A/D轉(zhuǎn)換還是讀取A/D轉(zhuǎn)換值,單片機(jī)都是通過I2C接口訪問ADS1115內(nèi)部寄存器實現(xiàn)的。與本設(shè)計相關(guān)的寄存器有以下3個:(1)指針寄存器(PointerRegisterByte)該寄存器只能寫,用最低兩位D1~D0來選擇后續(xù)要訪問的寄存器:00:轉(zhuǎn)換寄存器;01:配置寄存器;10:低閾值寄存器;11:高閾值寄存器(2)轉(zhuǎn)換寄存器該寄存器只能讀,用于存放16位轉(zhuǎn)換結(jié)果。2.導(dǎo)線長度測量儀設(shè)計

(3)配置寄存器配置寄存器配置值配置字位配置值功能說明D151啟動一次A/D轉(zhuǎn)換D14~D12111AINP=AIN3,AINN=GNDD11~D9100PGA=8,滿量程電壓=0.512VD81單次轉(zhuǎn)換D7~D5100轉(zhuǎn)換速率=128SPSD4~D000011禁止內(nèi)部窗口比較器,降低功耗2.導(dǎo)線長度測量儀設(shè)計

(1)啟動A/D轉(zhuǎn)換子程序voidWrite_AD_AIN3(){I2Cstart(); //發(fā)送起始位I2Cwrbyte(0x90); //送器件地址(寫)I2Ccheck(); //等待應(yīng)答I2Cwrbyte(0x01); //寫指針寄存器,指向配置寄存器I2Ccheck(); //等待應(yīng)答I2Cwrbyte(0xF9); //寫配置字高字節(jié)I2Ccheck(); //等待應(yīng)答I2Cwrbyte(0x83); //寫配置字低字節(jié)I2Ccheck(); //等待應(yīng)答I2Cstop(); //發(fā)送停止位}2.導(dǎo)線長度測量儀設(shè)計

(2)讀A/D轉(zhuǎn)換值子程序voidRead_AD(){

u8adcdath,adcdatl;I2Cstart();I2Cwrbyte(0x90); //發(fā)送器件地址(寫)I2Ccheck();//等待應(yīng)答I2Cwrbyte(0x00);//寫配置寄存器指針,指向轉(zhuǎn)換寄存器I2Ccheck();//等待應(yīng)答I2Cstop();I2Cstart(); //再次發(fā)起始位I2Cwrbyte(0x91); //發(fā)送器件地址(讀)I2Ccheck();adcdath=I2Crdbyte();//讀轉(zhuǎn)換結(jié)果高字節(jié)ack();adcdatl=I2Crdbyte();

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論