2013年4月30日 星期二

[ 認識與使用 Gertboard ] 首部曲 - 瞭解 GertBoard 電路板、建置編輯環境與測試程式碼下載與安裝

Gertboard 可說是 Raspberry Pi (樹莓派) 一個理想的添加裝置,特色有:
  • 可直接插入到樹莓派上

  • 可以檢測與響應外部物理事件

  • 檢測與輸出類比電壓

  • 驅動 (直流、步進) 馬達 (18V, 2A max)

  • 檢測按鍵動作

  • 點亮 LED

  • 驅動繼電器

  • 六大區塊各自獨立,可互相結合使用,更富使用上的彈性 ! (請看下面說明)

  • 以上全部都可由樹莓派直接做控制

  • 豐富的軟體資源與使用者手冊,讓使用上更加的方便 !
原廠盒裝內容物:Gertboard x 1, Jumper x 18, 杜邦線 x 10, Software CD x 1,  塑膠六角柱 x 6

Gertboard 使用者手冊、電路圖、C 函式庫與範例和 Python 函式庫與範例,請至網頁最下方下載。


文中的內容取自英文版的使用手冊,並在其中加入更詳細的說明與補充,如果您有購買 GertBoard,就一起來認識、測試和設置這塊板子吧!!!


Gertboard 六大功能區塊

Gertboard 分為下面六大功能區塊,每一個區塊都有其應用之處,在 "Gertboard User Manual" 裡面有非常詳細的說明與教學, PDF 檔案點擊上面的連結就可以下載。

[ 1. ] Buffered I/O (+switchs and LEDs)

[ 2. ] Atmel Atmega chip

[ 3. ] GPIO Pins

[ 4. ] Open collector driver

[ 5. ] Motor controller

[ 6. ] A to D and D to A converters

Gertboard 六大功能區塊, source: http://www.raspberrypi-spy.co.uk

Gertboard 電路元件名稱, source: Gertboard User Manual (Rev 2.0)

電路板上標示符號的認識:

上圖是由 GertBoard 電路板中的網印與焊接標示組合而來的圖面,上面有很多元件以及文字標註,不同的元件有不同的標註方式:例如,
  • 電阻與電容,標示名稱為 Rn 和 Cn,n 表示號碼。

  • 二極體 (Diode) 標示名稱為 Dn,例如板上的 12 顆 LEDs ( 發光二極體 ) 就是 D1 至D12;緊鄰在 LED 旁邊的就是其限流電阻。

  • 三顆按鈕開關 (Pushbutton) 標示名稱為 S1、S2 和 S3,位置在 LEDs 的下方。

  • 積體電路 ( IC 或晶片) 的標示名稱為 Un。例如在板子中間位置的那三顆 I/O 緩衝 IC ( SN74HC244 ) 就標示為 U3、U4 和 U5。每顆 IC 接腳號碼是有順序的,缺口朝上正視 IC ,左手最上方的接腳就是 1,然後逆時針開始數,右手最上方就是 IC 的最後一個接腳號碼。這觀念很基礎對於接線時也很重要!!!

  • 在 GertBoard 有很多凸出的排針頭 (Header ),標示名稱為 Jn。

    例如在板子的左邊有一組兩排的排針頭,可以讓您存取板子左邊的三顆晶片 ( U6、U8 和 U10 ):J28 ( AD0, AD1 ) 是用來輸入類比訊號到 U6 ( MCP3002,  Dual Channel 10-Bit A/D Converter with SPI™ Serial Interface ) 晶片的接腳;J29 ( DA0, DA1 ) 是U10 ( MCP4802, 8-Bit Dual Voltage Output Digital-to-Analog Converter with Internal VREF and SPI Interface ) 的數位訊號轉類比訊號後的輸出接腳;J25 就是 ATMega328P 各 IO 接腳的名稱,這就是我們之後會特別介紹的 Android 的核心晶片,只不過使用上有些許的不同,到時我們會更詳細的說明。

    另外,並非所有的 Jn 都是排針頭的形式,像 J19 ( 在板子右上方 ) 就是螺絲端子座。

GertBoard 上的電源:

只要是電源,都會在排針接腳處標示相對應的電壓,例如 5V 或是 3V3 ( 就是 3.3V 的意思 )。5V 的電源是從樹莓派所供應,需要時可接在 J24 ( 板子右下角處 ) 取電,注意這兩根接腳都是 +5V;名稱標示為 GND 或是  符號就是表示接地 ( Ground ) 。
Gertboard 3V3 電壓輸出選擇, source: Assembled Gertboard Schematics
GertBoard "高" 準位或是邏輯 "1" 的電壓是 3V3,可以由 J1 ( 也就是樹莓派的 GPIO P1 與 GertBoard 連接的地方 ) 提供的 5V 經由 LDO1117x33 降壓成 3V3  ( 將 J7 的接腳 1 與 2 短路 ) 提供 GertBoard 使用;也可以直接將 J7 的接腳 2 與 3 短路直接由 J1 提供 3V3 的電 (如下圖)。

只要一提供 3V3 的電源之後,就會看到 D1 - D12 的 LED 全部亮起。

source: Gertboard User Manual (Rev 2.0)
因此當您要獨立使用 GertBoard,可以提供外部電源 +5V 在 J24 其中一接腳並找一 GND 接腳接上,或是提供外部電源 3V3 在 J7 的接腳 2 處,這樣就可以將 GertBoard 與外部微控制器一起使用。不過要注意的是,GertBoard 上的邏輯準位以及晶片所使用的電壓都是 3V3 的,如果微控制器的邏輯準位不是 3V3 的,千萬要加上電壓準位轉換晶片做準位的轉換,不然 GertBoard 上的晶片會燒掉 !!!


接著,介紹完上面的一些東西之後,下面就開始進入到 GertBoard 的六大部分。不過由於不管是程式撰寫或是線路都與樹莓派的 GPIO P1 有著重要關係,因此緊接著必須先說明 [3] GPIO Pins,這樣在 GertBoard 其他部份的時候才不需要再贅述。


[3] GPIO Pins

GertBoard 使用 J1 與樹莓派連接在一起,可以直接連結也可以使用排線 ( 如下圖所示 )。

Gertboard 直接與樹莓派接合
Gertboard 使用專用排線與樹莓派連接

連接之後,GertBoard 將樹莓派的 GPIO # 由小到大重新排列在 J2 一字排開,只留下可用 I/O 接腳在 J2 上面,其餘只留下一組 5V0 和 3V3 電源給 GertBoard 使用。
GPIO 的在 GertBoard 上的排列, source: Assembled Gertboard Schematics
GPIO 在 Gertboard 的命名是依據 BCM2835 晶片上的接腳號碼,因此Gertboard J2 上面的名稱 GP25 就是代表樹莓派 GPIO #25,但是這是使用在 Rev 1.0 的樹莓派可以成立,對於 Rev 2.0 的樹莓派就不成立。

詳細的情形可以參考下面的對照表格,這只與在寫程式時所使用的腳位宣告有關係,使用時注意一下就好。紅色虛線框起來的部分就是樹莓派 Rev 1.0 與 Rev 2.0 所不同的腳位。

其中一些 GPIO 接腳還有其它的附屬功能被使用在一些測試程式上,這些其他功能 ( Alt function ) 也列在下面表格中 ( 在最後兩行 )。在 GertBoard 的 C 語言測試程式碼中使用巨集指令來切換存取 GPIO 的其他功能,方法可在類比轉數位,或是數位轉類比的 C 語言程式碼中看到;在 Python 使用 RPI.GPIO 或是 wiringpi 函式庫來提供轉換與存取 GPIO 的其他功能。

另外在表格中,GP0 和 GP1 ( Rev1.0:GPIO0 和 GPIO1;Rev2.0:GPIO2 和 GPIO3 ) 的其他功能是 I2C bus,而且在樹莓派內部已經有了 1800Ω 的提升電阻 ( pull-up resistor ),當使用在輸入時因為分壓的關係沒有辦法正確的讀到按鈕狀態,所以要避免與板上的按鈕一起使用,這在 [1[ Buffered I/O (+switchs and LEDs) 會再提到。

Gertboard 與樹莓派 Rev 1.0 與 Rev 2.0 腳位對照表, source: Gertboard User Manual (Rev 2.0)
(GB 表示 Gertboard,RPi1 表示樹莓派 Rev 1.0,RPi2 表示樹莓派 Rev 2.0)

請注意之後對於 GertBoard 每一個部分的電路圖的說明,這對於熟悉以及正確的使用 GertBoard 很重要。因為 GertBoard 就是一片電子周邊實驗板,而且每一個部分區塊都是分開的並沒有將控制接腳 layout 死,因此給了使用者很大的接線與控制空間。除了使用時需要注意電壓準位之外,你 ( 妳 ) 也可以使用其他的微控制器來控制它;不僅如此,各部份的電路設計以及 PCB layout 排板也可以作為往後電路設計的參考,一舉多得!千萬不要只是照圖施工而已。

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

建議安裝軟體:

在開始介紹六大區塊之前,有一些前置動作需要做一下,如果您不需要這些東西,就直接下載網頁最下面的範例程式後,跳到六大區塊的部分看就行了 !

使用 Gertboard 建議各位使用 PC ,再利用 SSH 登入至樹莓派作業系統環境下操作會方便許多 !

如果您是使用新的記憶卡,建議參考 " [PiFace Digital 首部曲] 樹莓派作業系統 (2013-02-09-wheezy-raspbian) 之環境設定" 設置作業系統,並參考下面三個賣場部落格中的文章,設置您的編輯環境,選一個用的最上手的來用就好了
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

安裝好編輯環境的軟體在你的電腦之後,打開 MobaXterm ( puTTy 也可以,只要是可以使用 SSH 連線就行了

先在視窗左邊按下 "New session",然後點擊 "SSH" 按鈕產生一個新的 SSH session,在 "SSH settings" 頁面下的 "Remote hostname" 輸入樹莓派的 IP 位置 ( 我是使用 192.168.1.9 ),其餘的維持預設值。

MobaXterm:產生一個新的 SSH session

切換頁面到 "Advanced terminal settings",如果你有使用中文字的話,修改 "Charset" 為 "UTF-8" (或是其它的字元集) ,就可以顯示中文字。其餘的看自己需要做修改,我是維持預設值。

MobaXterm:修改 Charset 使其可以顯示中文字

切換頁面到 "Session settings",修改 "Session name"。這裡輸入的是我喜歡的名稱,你可以自己命名這個 SSH session 的名稱。

MobaXterm:修改 Session name

修改之後按下 "OK" 按鈕後,就會新開一個剛剛設定 session 頁面,此時輸入使用者名稱 ( 預設使用者名稱是:pi,有題是要輸入密碼時再輸入 ),連線成功後就會出現   pi@raspberrypi ~ $  提示字元

MobaXterm

接著,輸入 startx 進入 LXDE 桌面環境, (錯 ! 錯 ! 錯 !) 這是 Windows 作業系統 !

如果 MobaXterm 就只是這樣的功能,就使用 PuTTY 就好,也就不會介紹這個軟體 !

在命令提示字元下輸入 lxsession& ,就會看到跟下面圖示一樣的東西出現,完整的 LXDE 桌面環境出現在 Windows 作業系統下。

往後只要開啟任一個應用程式,就會開啟另一個 MobaXterm 工作室窗在 Windows 工作列下,如同 windows 應用程式一樣,只不過所做的任何動作都會反應到樹莓派去。

MobaXterm:Windows 作業系統下開啟樹莓派作業系統的 LXDE 桌面

MobaXterm 這是一個很好用的軟體,讓你可以在 Windows 連線到樹莓派又可以在 Windows 作業系統下操作樹莓派的 LXDE 桌面,可以一邊寫程式一邊編譯,非常的方便 !

若覺得這樣還不夠用,想要能夠直接撰寫程式直接編譯直接執行,那就使用個人覺得是樹莓派殺手級軟體的 WebIDE:它是使用瀏覽器作為編寫程式的介面,可直接在網頁寫程式以及編譯,雖然原設計是給 Python 使用,但是做為其他程式的 IDE 介面也是一個不錯的選擇。該軟體另外結合了命令提示字元的功能視窗,可以直接在下方作指令輸入,這樣就可以做到編譯其他語言的功能,以及控制作業系統環境的作用)

下面是 webIDE 的安裝與介紹影片,詳細的安裝方法請參考這篇安裝說明文件:PDF

WebIDE 現在雖然還在 beta 測試階段,或多或少存在一些小 bug ,但是無傷大雅 ! 因為 WebIDE 在使用上非常容易上手,能在學習與開發階段讓你省下不少寶貴時間,是非常值得使用的一套軟體 !

WebIDE 在樹莓派的安裝與設定影片



WebIDE 程式碼與程式庫使用說明影片

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

下載測試 Gertboard 的函式庫與範例程式

若系統已經很久沒更新了,建議先更新之後再繼續往下做!

由於我的作業系統是全新安裝的,因此執行下面指令執行更新
pi@raspberrypi ~ $ sudo apt-get update && sudo apt-get upgrade -y

Gertboard 測試程式有兩種,C 與 Python 兩種,可直接到網頁最下方下載,這裡所提供的版本是:

下面指令操作是連貫的,只是拆開分為 C 語言與 python 程式碼下載與安裝。因為 python 程式碼使用了 wiringpi 函式庫,因此也必須安裝。

GertBoard - C 語言程式碼下載與編譯

pi@raspberrypi ~ $ mkdir GertBoard
pi@raspberrypi ~ $ cd GertBoard/
pi@raspberrypi ~/GertBoard $ wget -O gertboard_sw.zip http://goo.gl/OR7D6
...<<中間省略>>...
pi@raspberrypi ~/GertBoard $ ls -l
total 36
-rw-r--r-- 1 pi pi 36239 Apr 28 23:57 gertboard_sw.zip
pi@raspberrypi ~/GertBoard $ unzip gertboard_sw.zip
...<<中間省略>>...
pi@raspberrypi ~/GertBoard $ ls -l
total 40
drwxr-xr-x 2 pi pi  4096 Jan  6 15:07 gertboard_sw
-rw-r--r-- 1 pi pi 36239 Apr 28 23:57 gertboard_sw.zip
pi@raspberrypi ~/GertBoard $ cd gertboard_sw/
### 進行編譯 ###
pi@raspberrypi ~/GertBoard/gertboard_sw $ make all
...<<中間省略>>...
pi@raspberrypi ~/GertBoard/gertboard_sw $ ls -l
total 312
-rwxr-xr-x 1 pi pi 11987 Apr 29 00:00 atod
-rw-r--r-- 1 pi pi  3522 Jun  2  2012 atod.c
-rw-r--r-- 1 pi pi  2716 Apr 29 00:00 atod.o
-rwxr-xr-x 1 pi pi 10704 Apr 29 00:00 butled
-rw-r--r-- 1 pi pi  3781 Jan  5 08:00 butled.c
-rw-r--r-- 1 pi pi  2172 Apr 29 00:00 butled.o
-rwxr-xr-x 1 pi pi 10877 Apr 29 00:00 buttons
-rw-r--r-- 1 pi pi  4041 Jun  7  2012 buttons.c
-rw-r--r-- 1 pi pi  2396 Apr 29 00:00 buttons.o
-rwxr-xr-x 1 pi pi 12110 Apr 29 00:00 dad
-rw-r--r-- 1 pi pi  3868 Jun  2  2012 dad.c
-rw-r--r-- 1 pi pi  2864 Apr 29 00:00 dad.o
-rwxr-xr-x 1 pi pi 12433 Apr 29 00:00 decoder
-rw-r--r-- 1 pi pi  6080 Jan  5 07:46 decoder.c
-rw-r--r-- 1 pi pi  4136 Apr 29 00:00 decoder.o
-rwxr-xr-x 1 pi pi 11968 Apr 29 00:00 dtoa
-rw-r--r-- 1 pi pi  4426 Jun  2  2012 dtoa.c
-rw-r--r-- 1 pi pi  2896 Apr 29 00:00 dtoa.o
-rw-r--r-- 1 pi pi  9356 Jan  4 19:57 gb_common.c
-rw-r--r-- 1 pi pi  2171 Jan  4 21:42 gb_common.h
-rw-r--r-- 1 pi pi  5384 Apr 29 00:00 gb_common.o
-rw-r--r-- 1 pi pi  4943 Jun  2  2012 gb_pwm.c
-rw-r--r-- 1 pi pi  2440 Jun  2  2012 gb_pwm.h
-rw-r--r-- 1 pi pi  1540 Apr 29 00:00 gb_pwm.o
-rw-r--r-- 1 pi pi  4297 Jun  2  2012 gb_spi.c
-rw-r--r-- 1 pi pi  3040 May 28  2012 gb_spi.h
-rw-r--r-- 1 pi pi  1648 Apr 29 00:00 gb_spi.o
-rw-r--r-- 1 pi pi  2551 Jan  6 16:21 LEDmeter.ino
-rwxr-xr-x 1 pi pi 13609 Apr 29 00:00 leds
-rw-r--r-- 1 pi pi  8908 Jan  4 22:47 leds.c
-rw-r--r-- 1 pi pi  5400 Apr 29 00:00 leds.o
-rw-r--r-- 1 pi pi  2688 Jul 10  2012 makefile
-rwx------ 1 pi pi   265 Jul  6  2012 minirc.ama0
-rwxr-xr-x 1 pi pi 11973 Apr 29 00:00 motor
-rw-r--r-- 1 pi pi  4057 Jun  7  2012 motor.c
-rw-r--r-- 1 pi pi  2892 Apr 29 00:00 motor.o
-rwxr-xr-x 1 pi pi 10626 Apr 29 00:00 ocol
-rw-r--r-- 1 pi pi  2746 Jul 13  2012 ocol.c
-rw-r--r-- 1 pi pi  2084 Apr 29 00:00 ocol.o
-rwxr-xr-x 1 pi pi 12933 Apr 29 00:00 potmot
-rw-r--r-- 1 pi pi  5945 Jun  8  2012 potmot.c
-rw-r--r-- 1 pi pi  3316 Apr 29 00:00 potmot.o
-rw-r--r-- 1 pi pi   304 Jan  6 15:06 README
pi@raspberrypi ~/GertBoard/gertboard_sw $

GertBoard 每一個部份至少都有一份測試程式,每一個程式編譯時都會有兩個或更多的程式一起編譯才能成功。

gb_comon.c ( 標頭檔 gb_common.h ):包含測試程式所需要用的自定義函式庫,除了一些其它功能需要其他檔案 ( 例如,SPI Bus 使用 gb_spi.c,或是 PWM 使用 gb_pwm.c ) 之外,都在這檔案裡面。

使用 gb_common.c 須要先呼叫 setup_io 函式初始化相對應的 GPIO、SPI Bus 和 PWM 等裝置才可以開始使用,在程式的最後應再呼叫 restore_io 函式將所得到的記憶體重新配置與歸還樹莓派。

gb_common.cgb_spi.cgb_pwm.c 使用到多個自定義的巨集指令,可以用來設定 GPIO 的輸出、輸入或是 PWM 的速度...等,如下表所示
gertboard_sw 中常用巨集指令, source: Gertboard User Manual (Rev 2.0)
上表是作者自行定義的巨集指令,這些都用在 GertBoard 的 C 語言測試程式中,這程式釋出的時間是在 2012/07/25,到現在已經經過幾次改版,但只針對程式碼做修正,而且未使用任何套件函式庫 ( 例如,bcm2735 或 wiringPi ),所以若你已經習慣使用某一種函示庫套件的話,建議您可以再自行修改,gertboard_sw 所提供的程式碼就作為參考以及測試用就好,接下來的各部份說明與測試並不會針對 gertboard_sw 程式碼做說明,請自行閱讀 ( Assembled Gertboard Manual Rev2.0.pdf 檔案中 Page 12 和 Page 13 ) 。


GertBoard - Python 程式碼下載與函式庫安裝

pi@raspberrypi ~/GertBoard/gertboard_sw $ cd ..
pi@raspberrypi ~/GertBoard $ wget http://raspi.tv/download/GB_Python.zip
...<<中間省略>>...
pi@raspberrypi ~/GertBoard $ unzip GB_Python.zip
...<<中間省略>>...
pi@raspberrypi ~/GertBoard $ cd GB_Python/
pi@raspberrypi ~/GertBoard/GB_Python $ ls -l
total 80
-rw-r--r-- 1 pi pi 3993 Apr 10 10:41 atod.py
-rw-r--r-- 1 pi pi 2404 Apr 10 10:54 butled-rg.py
-rw-r--r-- 1 pi pi 2610 Apr 10 11:21 butled-wp.py
-rw-r--r-- 1 pi pi 2609 Apr 10 11:05 buttons-rg.py
-rw-r--r-- 1 pi pi 3038 Apr 10 11:12 buttons-wp.py
-rw-r--r-- 1 pi pi 4256 Apr  9 21:37 dad.py
-rw-r--r-- 1 pi pi 3351 Apr 10 10:41 dtoa.py
-rw-r--r-- 1 pi pi 3627 Apr 10 11:42 leds-rg.py
-rw-r--r-- 1 pi pi 4383 Apr 10 11:58 leds-wp.py
-rw-r--r-- 1 pi pi 3983 Apr 10 14:08 motor-rg.py
-rw-r--r-- 1 pi pi 3538 Apr 10 13:34 motor-wp.py
-rw-r--r-- 1 pi pi 2572 Apr 10 10:41 ocol-rg.py
-rw-r--r-- 1 pi pi 2672 Apr 10 10:41 ocol-wp.py
-rw-r--r-- 1 pi pi 5476 Apr 10 14:21 potmot-wp.py
-rw-r--r-- 1 pi pi 9466 Apr 10 22:41 README.txt
pi@raspberrypi ~/GertBoard/GB_Python $ cd
pi@raspberrypi ~ $ sudo apt-get install python-dev python-pip
...<<中間省略>>...
pi@raspberrypi ~ $ sudo pip install wiringpi                               
...<<中間省略>>...
Successfully installed wiringpi
Cleaning up...
pi@raspberrypi ~ $

GB_Python 使用 pyhto 用的 wiringpi 套件函式庫撰寫,因此在使用前必須先安裝,不然執行會出現錯誤。


以上,就是拿到 GertBoard 板子所需要作的前置動作與對板子的基本認識,需要的文件與資料請自行由網頁中或是下方連結先行下載使用。

有了這些之後就可以開始來玩 GertBoard 了 !!!



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

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

沒有留言:

張貼留言

留言屬名為"Unknown"或"不明"的用戶,大多這樣的留言都會直接被刪除掉,不會得到任何回覆!

發問問題,請描述清楚你(妳)的問題,別人回答前不會想去 "猜" 問題是什麼?

不知道怎麼發問,請看 [公告] 部落格提問須知 - 如何問問題 !