1. 程式人生 > >踏實每一小步,成就一大步

踏實每一小步,成就一大步

時序圖讀法

        從上到下,從左到右,高電平在上,低電平在下,高阻態在中間。雙線表示可能高也可能低,視資料而定。交叉線表示狀態的高低變化點,可以是高變低,也可以是低變高,也可以不變。

        豎線是生命線,代表時序圖的物件在一段時期內的存在,時序圖中每個物件和底部中心都有一條垂直段的虛線,這就是物件的生命線,物件的訊息存在於兩條生命線之間。

時序要滿足建立時間和保持時間的約束才能保證鎖存到正確的地址資料或地址線的時序圖畫0/1兩條線,表示是一個固定的電平,可能是“0”,也可能是“1”,視具體的地址或資料而定;交叉的線表示電平變化,狀態不確定,數值無意義。

舉例:

操作時序永遠使用是任何一片IC晶片的最主要的內容。一個晶片的所有使用細節都會在它的官方器件手冊上包含。所以使用一個器件事情,要充分做好的第一件事就是要把它的器件手冊上有用的內容提取,掌握。介於中國目前的晶片設計能力有限,所以大部分的器件都是外國幾個IC巨頭比如TI、AT、MAXIM這些公司生產的,器件資料自然也是英文的多,所以,英文的基礎要在閱讀這些資料手冊時得到提高哦。即便有中文翻譯版本,還是建議看英文原版,看不懂時不妨再參考中文版,這樣比較利於提高。

我們首先來看1602的引腳定義,1602的引腳是很整齊的SIP單列直插封裝,所以器件手冊只給出了引腳的功能資料表:

2.jpg

我們只需要關注以下幾個管腳:

3腳:VL,液晶顯示偏壓訊號,用於調整LCD1602的顯示對比度,一般會外接電位器用以調整偏壓訊號,注意此腳電壓為0時可以得到最強的對比度。

4腳:RS,資料/命令選擇端,當此腳為高電平時,可以對1602進行資料位元組的傳輸操作,而此腳為低電平時,則是進行命令位元組的傳輸操作。命令位元組,即是用來對LCD1602的一些工作方式作設定的位元組;資料位元組,即使用以在1602上顯示的位元組。值得一提的是,LCD1602的資料是8位的。

5腳:R/W,讀寫選擇端。當此腳為高電平可對LCD1602進行讀資料操作,反之進行寫資料操作。筆者認為,此腳其實用處不大,直接接地永久置為低電平也不會影響其正常工作。但是尚未經過複雜系統驗證,保留此意見。

6腳:E,使能訊號,其實是LCD1602的資料控制時鐘訊號,利用該訊號的上升沿實現對LCD1602的資料傳輸。

7~14腳:8位並行資料口,使得對LCD1602的資料讀寫大為方便。

現在來看LCD1602的操作時序:

1.jpg3.jpg

在此,我們可以先不讀出它的資料的狀態或者資料本身。所以只需要看兩個寫時序:

① 當我們要寫指令字,設定LCD1602的工作方式時:需要把RS置為低電平,RW置為低電平,然後將資料送到資料口D0~D7,最後E引腳一個高脈衝將資料寫入。

② 當我們要寫入資料字,在1602上實現顯示時:需要把RS置為高電平,RW置為低電平,然後將資料送到資料口D0~D7,最後E引腳一個高脈衝將資料寫入。

發現了麼,寫指令和寫資料,差別僅僅在於RS的電平不一樣而已。以下是LCD1602的時序圖:

大家要慢慢學會看時序圖,要知道操作一個器件的精華便蘊藏在其中,看懂看準了時序,你操控這個晶片就是非常容易的事了。1602的時序是我見過的一個最簡單的時序:

3.jpg

1、注意時間軸,如果沒有標明(其實大部分也都是不標明的),那麼從左往右的方向為時間正向軸,即時間在增長。

2、上圖框出並註明了看懂此圖的一些常識:

(1).時序圖最左邊一般是某一根引腳的標識,表示此行圖線體現該引腳的變化,上圖分別標明瞭RS、R/W、E、DB0~DB7四類引腳的時序變化。

(2).有線交叉狀的部分,表示電平在變化,如上所標註。

(3).應該比較容易理解,如上圖右上角所示,兩條平行線分別對應高低電平,也正好吻合(2)中電平變化的說法。

(4).上圖下,密封的菱形部分,注意要密封,表示資料有效,Valid Data這個詞也顯示了這點。

3、需要十分嚴重注意的是,時序圖裡各個引腳的電平變化,基於的時間軸是一致的。一定要嚴格按照時間軸的增長方向來精確地觀察時序圖。要讓器件嚴格的遵守時序圖的變化。在類似於18B20這樣的單匯流排器件對此要求尤為嚴格。

4、以上幾點,並不是LCD1602的時序圖所特有的,絕大部分的時序圖都遵循著這樣的一般規則,所以大家要慢慢的習慣於這樣的規則。

也許你還注意到了上面有許多關於時間的標註,這也是個十分重要的資訊,這些時間的標註表明了某些狀態所要維持的最短或最長時間。因為器件的工作速度也是有限的,一般都跟不上主控晶片的速度,所以它們直接之間要有時序配合。話說現在各種處理器的主頻也是瘋狂增長,日後搞不好出現個雙核微控制器也不一定就是夢話。下面是時序引數表:

4.jpg

大家要懂得估計主控晶片的指令時間,可以在官方資料手冊上查到MCU的一些級別引數。比如我們現在用AVR M16做為主控晶片,外部12MHz晶振,指令週期就是一個時鐘週期為(2/12MHz)s,所以至少確定了它執行一條指令的時間是us級別的。我們看到,以上給的時間引數全部是ns級別的,所以即便我們在程式裡不加延時程式,也應該可以很好的配合LCD1602的時序要求了。怎麼看這個表呢?很簡單,我們在時序圖裡可以找到TR1,對應時序引數表,可以查到這個是E上升沿/下降沿時間,最大值為25ns,表示E引腳上的電平變化,必須在最大為25ns之內的時間完成。大家看是不是這個意思?

現在我來解讀我對這個時序圖的理解:

當要寫命令位元組的時候,時間由左往右,RS變為低電平,R/W變為低電平,注意看是RS的狀態先變化完成。然後這時,DB0~DB7上資料進入有效階段,接著E引腳有一個整脈衝的跳變,接著要維持時間最小值為tpw=400ns的E脈衝寬度。然後E引腳負跳變,RS電平變化,R/W電平變化。這樣便是一個完整的LCD1602寫命令的時序。

提供參考連結:

IIC時序詳解

http://www.21ic.com/jichuzhishi/mcu/shixu/2013-04-24/179947.html

PS:

(1/12MHz)s是振盪週期,而不是時鐘週期,因為時鐘週期(狀態週期)等於兩個振盪週期,換句話說就是對振動頻率進行“二分頻”的振盪訊號,所以(2/12MHz)s才是晶振為12MHz時的時鐘週期。

微控制器的基本操作週期為機器週期,一個機器週期分為六個狀態,每個狀態由兩個脈衝組成,也就是所謂的兩箱(前一個脈衝P1叫相位1,後一個脈衝P2為相位2)。所以一個機器週期共有12個振盪脈衝。因此可以根據時鐘頻率計算出一個機器週期的時間。

例如:系統的時鐘是11.0592MHZ,那麼用它除以12,得到了每秒執行的機器週期書,然後取反就得到了機器週期的時間。


原文:http://blog.csdn.net/ce123_zhouwei/article/details/6990130#comments