2013年5月2日 星期四

[ 認識與使用 Gertboard ] 第二部曲 - 輸出入緩衝線路 ( 開關和 LED )

學習樹莓派週邊不容錯過的學習利器 "Assembled Gertboard (Rev2.0)",心動不如馬上行動!!露天賣場:

Assembed Gertboard (Rev2.0) - 利用 Raspberry Pi (樹莓派) 學習與開發電子 (週邊) 的最佳拍檔

PiGertboard 套件 (A) - Raspberry Pi (樹莓派) Gertboard 嵌入式套件

PiGertboard 套件 (B) - Raspberry Pi (樹莓派) Gertboard 外接式套件

Gertboard - Buffer I/O ( + switches and LEDs ),source: Gertboard User Manual (Rev 2.0)
緩衝器可以作為輸出的驅動也可以保護內側的電路。也就是將原本的輸出訊號在經過緩衝器之後可以驅動更多的元件;或是當外部輸出短路或是有突波訊號時,會先衝擊到緩衝器,進而保護接收輸出訊號的元件。

另外,在網路上找到這英文的說明可作為參考,若還是存在疑問請自行 Google 一下 !!!

Buffers (in analog circuits) are used when you need to lower the impedance/increase current capability. They're also useful if you want to tap a signal in a circuit and don't want to put a load on that circuit that might cause the voltage to drop. For example, you might have a circuit that generates a signal and you want to bring that signal out to an external connector that you can plug a data logger or whatever into. If you put a buffer in between the original signal and the data logger output, you don't have to worry about the data logger causing a voltage drop on the original signal. Or if you accidentally short out the output, the circuit won't be affected or damaged.

Another use for a buffer is if you have a chip that has a high output impedance (such as an accelerometer) which you want to feed into a ADC that has a lower input impedance. The ADC would load the accelerometer too much and the voltage will drop; the buffer will prevent that.

Digital buffers are used as logic inverters (inverting buffers) or as simple buffers similar to the analog example above (to increase fan-out capabilities or to protect circuits against shorts when going to an external connector).

[1] 輸出入緩衝線路 (Buffered I/O (+switchs and LEDs))

下面的電路圖是 GertBoard 輸出入緩衝線路,因為原廠圖面與電路板上的標示不一樣,因此我對電路圖標註名稱做了一些更正,不過下面只列出其中一組輸出入緩衝線路來做說明。

BUF_1 ~ BUF_12 就是對應到電路板上的 J3 B1 ~ B12,為了避免相同名稱造成誤解所以未修改,之後若說到 BUF_# 就是表示電路板上 J3B#B# 分顏色表示輸出與輸入的設定


Gertboard 輸出與輸入緩衝線路 ( 已修正對應的接點號碼 ), source: Assembled Gertboard Schematics
GertBoard 使用三顆 SN74HC244 晶片做為輸出入緩衝,每一顆有八組緩衝器:四組作為輸出緩衝,另外四組作為輸入緩衝,共有 12 組輸出以及 12 組輸入。

對照 GertBoard 的電路板,輸出與輸入緩衝的設定是經由緩衝晶片上下兩端的  Jumper 來作設定,兩端都各有八支接腳,兩兩為一組,晶片上方是 OUT ( 輸出 ),下方是 IN ( 輸入 )。

如何設定呢 ? 請記住,輸出:是從樹莓派輸出 ( BUF_# ),然後將對應的緩衝晶片 OUT ( B# ) 的接腳用 Jumper 短路,當樹莓派輸出為高準位時,就會將 LED 點亮並輸出到 BUF#;相反的,若是做為輸入,就是從 GertBoard 輸出 ( BUF# ),然後將對應的緩衝晶片 IN ( B# ) 的接腳用 Jumper 短路,當 BUF# 輸出為高準位就會點亮 LED 並將訊號輸入到樹莓派。請注意上面輸出與輸入緩衝的設定方式,請必須熟記在心 !!!

Port 1 ~ 12 剛好對應到 LED D1 ~ D12;三顆按鈕標示名稱為 S1、S2 和 S3,接在 port 1 ~ 3。

下圖是緩衝 IO Port 4 ~ 12 的電路示意圖
ports 4 ~ 12 的電路圖,source: Gertboard User Manual (Rev 2.0)

按鈕的使用:

GertBoard 電路板上有三顆按鈕,是接到緩衝 IO Port 1 ~ 3,下圖是其電路示意圖,類似上面 緩衝 IO Port 4 ~ 12 的電路,只是多加了按鈕開關與電阻在其左邊。當按下按鈕時,"Raspi" 經由電阻接到地端,所以樹莓派會讀到低準位 ( Low )。

ports 1 ~ 3 的電路圖,source: Gertboard User Manual (Rev 2.0)

雖然按鈕是作為輸入,但是使用時並不需要將 ports 1 ~ 3 的 IN 處用 Jumper 短路,但是你可以藉由將 OUT 處用 Jumper 短路使用 LED 來觀察按鈕的輸入狀態 ( 你要先設置 J7 供應 3V3 電源,這時所有的 LED 都會亮起,這時按鈕沒按下時 LED 亮,按鈕按下時 LED 滅 )。另外重要的一點,因為按鈕並未接任何電源,因此樹莓派的 GPIO 接腳必須要 PULL-UP,這樣才能在按鈕未按下時讀到邏輯 "1" 的準位;否則就只能讀到按鈕按下時的邏輯 "0" 準位。



所有的緩衝 IO ports 幾乎都可以搭配 GPIO pins 使用,除了將按鈕配合 GPIO0 與 GPIO1使用之外。因為 GPIO0 和 GPIO1 是 I2C 的接腳,已裝設了  1800Ω 的提升電阻在樹莓派內部,當按鈕按下時,在輸入端的電壓會變成


這不是一個合理可視為低準位的電壓。


下圖是一個設定 B1、B2 和 B3 為輸出,B10 和 B11 設為輸入的例子,圖中黑色圓圈處就是各個 Jumper 連接的地方。若現在假設條件如下:

樹莓派 GPIO #25#24#23 為輸出,GPIO #7#8 為輸入,除了必須先將輸出與輸入的 Jumper 接好,( 輸出 ) 就是將 GertBoard J2 上的 GP25GP24GP23 接到 J3 上的 B1B2B3;( 輸入 ) 就是要將外部要輸入到 GertBoard 上的訊號先接到 BUF10BUF11,如果還要將訊號輸入到樹莓派,就將 J3 B10 B11 接到 J2GP7 GP8 就行了 !

緩衝 IO 設定為輸出和輸入的例子,source: Gertboard User Manual (Rev 2.0)

瞭解 Buffer IO 的設定方法之後,現在我們就開始測試。測試分為按鈕輸入測試與 LED 輸出測試,每個部份都有接線以及 C 語言與 Python 測試,手邊如果有板子,請照著圖面接線做測試。

********************
按鈕測試 - 接線圖:

下面兩張是按鈕測試的接線圖,其中接線照片接線是對的,但是原廠資料上接線圖是錯的,所以我修改了圖面加上了 J7 的 3V3 Jumper 連接的圖示在上面,這樣才不會在執行程式時有誤動作
按鈕測試接線照片,source: Gertboard User Manual (Rev 2.0)


按鈕測試接線圖,source: Gertboard User Manual (Rev 2.0)

按鈕測試 - 程式測試:

C 語言的按鈕測試程式為 buttons,Python 是 buttons-rg.pybuttons-wp.py ( "程式名稱-rg.py" 表示是使用 RPi.GPIO 函式庫, "程式名稱-wp.py"表示是使用 wiringpi 函式庫 ),程式的說明請自行參考 Assembled Gertboard Manual Rev2.0, Page 19 - 20。

兩種程式的執行結果都一樣,請看如下影片的展示:



********************
LEDs 測試 - 接線圖:

LEDs 測試的階法請參照下面的照片與接線圖,其中接線跳過 GP14 和 GP15 是因為這兩根是 TxD 和 RxD,因為已經被 Linux 設定為 UART 模式,所以能不用就不用。由於 LEDs 共有 12 顆,因此原廠附的杜邦線 (10 條) 是不夠用的,因此你可以只接前面 10 根做測試也可以。
LEDs 接線照片 - 1

LEDs 接線照片 - 2

LEDs 接線圖,source: Gertboard User Manual (Rev 2.0)
這線路的 J7 處,可接亦可不接,但是在程式未做任何初始化之前,LEDs 會有不同的狀態:
  1. J7 不接:LEDs 全部熄滅

  2. J7 ( J7-1 + J7-2 短路或 J7-2 + J7-3 短路 ):LEDs 隨機亮滅。用手在板子附近遊走,LEDs 會亂亮滅一通,這屬已知且正常狀態,因為程式還未做 GPIO 接腳做初始化動作,只要在程式初始化過之後,就不會有這種隨機亮滅的狀態出現。可看以下的影片與相關資料的補充說明
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
注意影片中的 GertBoard 有使用 J7,而且燈會隨機亮滅,我想這時作者只接好線並通電而還未執行程式,只要依執行程式並過了 GPIO 初始化這一段程式,LEDs 就不會再隨機亮滅,而在正常的操作狀態下。

關於上面這個狀態,在 Gertboard User Manual (Rev2.0) 的 Page 14 中有一段說明,其中 Figure 8 就是之前提到過的 " ports 4 ~ 12 的電路圖",整段原文如下:

The resistor on the right side of Figure 8 is a pull-up. If it were not there, the LED would turn off and 
on with the smallest of electronic changes, for example, when the board is simply touched. Turning 
the LED on when it is not being driven prevents this seemingly random behaviour and also serves as 
an indicator that your Gertboard is receiving power properly. Note that if the output jumper is 
installed but the ‘Raspi’ point is not driven, the random behaviour will return. 
source:source: Gertboard User Manual (Rev 2.0)

意思就是,如果沒有右邊的提升電阻,LED 就會因為電絲毫的改變讓 LED 亮或滅,例如:只需簡單的碰觸。要避免這種狀態就是設置好緩衝線路與程式裡的設定,不然這種狀態會再設定好之前一直存在。

下面是有關於這種情形的說明與討論網頁

其他若還有其它疑問的話,建議翻一下數位邏輯的書籍瞭解一下數位 IC 在使用上要注意的地方 ( 該接地的要接地,要接電源的接電源,可千萬不要浮接使用 ) !!!
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

LEDs 測試 - 程式測試:

C 語言的 LEDs ( D1 - D12 ) 測試程式是 leds,Python 的測試程式是 leds-rg.py leds-wp.py ( "程式名稱-rg.py" 表示是使用 RPi.GPIO 函式庫, "程式名稱-wp.py"表示是使用 wiringpi 函式庫 ),程式的說明請自行參考 Assembled Gertboard Manual Rev2.0, Page 21 - 22。

兩種程式的執行結果都一樣,請看如下影片的展示:




********************
輸出入測試 - 接線圖:

上面的兩個例子只使用 port 存取 LEDs 和按鈕,所以接下來的這個範例程式 ( C:butled,Python:butled-rg.py ) 就是由樹莓派的輸出,然後再將輸出訊號傳回輸入到樹莓派,中間經過緩衝晶片的佈線方式,接線方式如下:
輸出入測試接線圖,source: Gertboard User Manual (Rev 2.0)

在您接好線之後,若已經接上樹莓派就會看到所有 LEDs 燈亮起,除了 D6 的 LED 是熄滅的。若在此時將手伸過去接近 Gertboard 板,當接近 D6 時 LED 就會開始慢慢亮起,這是因為 BUF_6 現在是在浮接的狀態,而因為我們有使用按鈕,所以必須要將連接到 BUF3 的 GP23 PULL-UP 後才可以使用按鈕,這時 D6 就會恢復到正常亮起的狀態。

這狀態我們剛在上面已經解釋過了,請各位準備開啟程式,執行中都會是正常的!

輸出入測試 - 程式測試:

C 語言的輸出入測試程式是 butled,Python 的測試程式是 butleds-rg.py 和 leds-wp.py ( "程式名稱-rg.py" 表示是使用 RPi.GPIO 函式庫, "程式名稱-wp.py"表示是使用 wiringpi 函式庫 ),程式的說明請自行參考 Assembled Gertboard Manual Rev2.0, Page 24。

程式執行的情形都一樣,如下操作命令:
pi@raspberrypi ~/GertBoard/gertboard_sw $ sudo ./butled
These are the connections for the button-LED:
GP23 in J2 --- B3 in J3
GP22 in J2 --- B6 in J3
U3-out-B3 pin 1 --- BUF6 in top header
jumper on U4-in-B6
When ready hit enter.  ### 按下 <ENTER> 之後,GPIO 做出初始化,LED 亮起在正常狀態 !

11
01
00
10
11
00
10
11
01
00
10
11
01
00
10
11
01
00
10
11
pi@raspberrypi ~/GertBoard/gertboard_sw $


以上就是有關於 GertBoard 輸出入緩衝線路的測試與介紹,這是 GertBoard 最基本也最重要的一節,所有的東西都是由這邊開始,請一定要搞清楚接線以及設定的方式,不然你就沒法好好控制 GertBoard 了!



賣場部落格 "認識 GertBoard " 系列文章:


<< Gertboard 相關資料文件下載>>

沒有留言:

張貼留言