利用24CXXX系列E2PRAM存儲(chǔ)器實(shí)現(xiàn)機(jī)器人的路徑記憶。 首先,利用PIC16F877A單片機(jī)將機(jī)器人的路徑采集轉(zhuǎn)換成數(shù)據(jù),單片機(jī)進(jìn)行處理。但是,由于單片機(jī)RAM太小不能夠存儲(chǔ)大量的數(shù)據(jù)。因此,這里用24CXXX系列的存儲(chǔ)器存儲(chǔ)大量的數(shù)據(jù),單片機(jī)實(shí)現(xiàn)的是對(duì)數(shù)據(jù)的采集和處理。
本文引用地址:http://m.butianyuan.cn/article/201611/321068.htm 此過(guò)程用的是PIC16F877A單片機(jī)的I2C協(xié)議。
具體I2C使用如下:
1.寫(xiě)過(guò)程
(1)上電后等待一個(gè)延時(shí)(1ms)。
(2)器件尋址,給一個(gè)起始信號(hào)(SCL為高電平時(shí)SDA給一個(gè)下降沿)。發(fā)送從器件地址,高5位為10110,然后根據(jù)A1/A0(如果和器件的地址相同則那個(gè)器件會(huì)應(yīng)答)進(jìn)行讀/寫(xiě)控制(O為讀)。
(3)應(yīng)答,器件在SCL的第9個(gè)周期時(shí)SDA給出一個(gè)低電平,作為應(yīng)答信號(hào)。
(4)開(kāi)始寫(xiě)有兩種模式:字節(jié)寫(xiě)模式和頁(yè)寫(xiě)模式。
·字節(jié)模式:給出A15~A8應(yīng)答,給出A7~A0應(yīng)答;然后給出DATA和停止信號(hào) (SCL為高電平時(shí),SDA給出一個(gè)上升沿),接著要等待一個(gè)擦寫(xiě)時(shí)間。
·頁(yè)寫(xiě)模式:給出地址以后連續(xù)給出64個(gè)數(shù)據(jù)。如果多于64個(gè)數(shù)據(jù),則地址計(jì)數(shù)器自動(dòng)翻轉(zhuǎn)。(如果少于64昵,估計(jì)是沒(méi)有問(wèn)題的,但是需要實(shí)驗(yàn)驗(yàn)證。)
(5)判斷擦寫(xiě)操作是否完畢的一個(gè)方法(應(yīng)答查詢),如果器件還處于擦寫(xiě)狀態(tài),則不會(huì)應(yīng)答器件尋址;如果有應(yīng)答,則說(shuō)明擦寫(xiě)完畢。
2.讀過(guò)程
(1)上電以后等待一個(gè)延時(shí)(lms)。
(2)器件尋址。
(3)應(yīng)答。
(4)開(kāi)始讀有三種模式:立即當(dāng)前地址讀、選擇/隨機(jī)讀、連續(xù)讀。
·立即當(dāng)前地址讀:如果上次讀/寫(xiě)的操作地址為N,則現(xiàn)在是N+1。不需要ACK,但是需要Stop信號(hào)。
·選擇/隨機(jī)讀:先偽寫(xiě)(用于給出一個(gè)地址),然后再次啟動(dòng),讀取數(shù)據(jù)。
·連續(xù)讀:讀取一個(gè)以后給一個(gè)應(yīng)答,這樣器件會(huì)再給出下一個(gè)地址的數(shù)據(jù)內(nèi)容。
(5)開(kāi)始數(shù)據(jù)傳輸Start后、停止數(shù)據(jù)傳輸Stop前,SCL高電平期間,SDA上為有效數(shù)據(jù)。
最終實(shí)現(xiàn)的效果
I2C模式7位尋址數(shù)據(jù)接收過(guò)程時(shí)序圖
評(píng)論