---
# System prepended metadata

title: Upboard Lab01
tags: [Embedded, Upobard]

---

Upboard Lab01
==
###### tags: `Upobard` `Embedded`
[TOC]
## Some Useful Functions

#### mraa_gpio_context mraa_gpio_init ( int pin )	
功能：初始化 GPIO 針腳。
參數： (int) gpio pin
回傳：gpio context or NULL

#### mraa_result_t mraa_gpio_dir ( mraa_gpio_context dev, mraa_gpio_dir_t dir )
功能：設定 GPIO 針腳輸出 / 入方向。
參數：
a. ( mraa_gpio_context ) dev：代表 GPIO 針腳狀態內容。
b. ( mraa_gpio_dir_t ) dir：GPIO 方向。
回傳：( mraa_result_t  ) 指令執行結果

#### mraa_result_t mraa_gpio_write	( mraa_gpio_context dev, int value )	
功能：設定 GPIO 針腳高電位或低電位。
參數：
a. ( mraa_gpio_context ) dev：代表 GPIO 針腳狀態內容。
b. ( int ) value：欲寫入之電位高低，1 表示高電位、0 表示低電位。
回傳：( mraa_result_t  ) 指令執行結果

#### int mraa_gpio_read ( mraa_gpio_context dev ) 
功能：讀取 GPIO 針腳狀態為高電位還是低電位
參數：
( mraa_gpio_context ) dev：指定讀取哪個 GPIO 針腳。
回傳：( int ) 電位高低。
針腳為高電位時回傳 1，當針腳為低電位時回傳0

## 擴充GPIO腳位數量
1. 遇到的問題
UpBoard所有的針腳只有 20 個，如果遇到欲讀取的bit超過 20 個的狀況，用一般的方法將無法全部進行輸入
2. 解決辦法
使用 Phillips 公司開發的 ==74HC165 晶片==來擴充輸入腳位的數量

## 74HC165晶片

#### 1. 介紹
若是用最直覺的方法，每當需要讀取一個 bit 的值，就必須使用一支針腳進行讀取，==若要讀取的 bit 數很多，則針腳數量可能會不夠用==，透過 74HC165 晶片可以==將並行資料轉成串列資料==，因此可以實現==單一支針腳讀取 8 個 bit 的值==
#### 2. 原理
==原先並行的 8 bit data 先傳入 74HC165 晶片==，==透過 74HC165 晶片中的暫存器與串列輸出，通過資料右移把暫存器內的值依序傳出==
![](https://i.imgur.com/1R4d8ap.png)
![](https://i.imgur.com/S9pLGX5.png)

#### 3. 74HC165晶片 腳位介紹
    (1) PL:
        a. 當 PL 為低時資料並行載入 74HC165 晶片的暫存器
        b. 當 PL 為高時停止並行載入資料
    (2) CE:
        a. CE 腳位為低時致能 CLK 訊號
        b. CE 腳位為高時 CLK 訊號無效
    (3) CLK:
        時鐘每次產生正脈衝 ( 低→高 ) 時，DATA 進行右移
    (4) DATA:
        資料最後 bit 的值 ( 上張投影片中的Q7 )

#### 4. ==74HC165晶片 操作步驟==
Step1:	將 CE 調高以忽略CLK訊號
Step2:	將 PL 調為低以將資料並行載入暫存器
Step3:	將 PL 調為高停止並行載入資料
Step4:	將 CE 調低致能CLK訊號
Step5:	為了待會產生正脈衝，將 CLK 調低
Step6:	讀取DATA的值
Step7:	讓 CLK 產生正脈衝，使 DATA 位移
重複Step5~7，直到所有暫存器的值讀完


## Hands-on Practicing
1. 在終端中輸入 ssh em_dev 進入dev環境
2. 在終端中輸入 cd Lab1-ENV_GPIO/Code 進入Code資料夾
3. 依序輸入以下指令
        (1) chmod +x result_example/*
        (2) ==scp result_example/* em_up:==
        (3) ssh em_up　(備註: 輸入此行後會進入dev_up環境)
4. 輸入 ls 查看檔案名稱
5. 輸入 sudo ./<欲執行的程式名稱>，以執行程式password:embedded (輸入密碼時終端不會顯示出來，輸入完後直接按enter即可
6. 欲結束程式時按下 ctrl+c 退出程式，接著按下 ctrl+d 回到 em_dev 環境


## Visual Studio Code
1. 開啟 Visual Studio Code ( 需安裝 遠端插件 )
2. 點左下角的綠色按鍵
3. 在下拉選單中選：
    a.“Remote SSH: Connect Current Window to Host…”
    b. “em_dev”               
    c. 連線完成後左下角應如右圖：
4. 在上方選單開啟資料夾：
    a. 點選 " File > Open Folder… " 
    b. 資料夾選  "Lab1-ENV_GPIO/Code/"
    c. 按 OK
5. 按 Ctrl-` ( Tab 上面那個鍵) 開啟內建終端
6. 在裡面執行 sh ./set_env.sh ( 一次性的初始化 ) 
7. 修改程式後儲存 ( 內建檔案已寫好了程式骨架 )
8. 依序輸入以下指令
   a. make bin/<程式名>
   b. scp bin/* em_up:
   c. ssh em_up　　( 備註: 輸入此行後會進入up環境 )
9. 輸入sudo ./<欲執行的程式名稱>，以執行程式
10. 欲結束程式時按下 ctrl+c 退出程序，接著按下 ctrl+d 回到 em_dev 環境


## 作業繳交
在 DEV 上 cd 進入 Code/資料夾後
執行 sh ./make_zip.sh
這會產生 archive.tar.gz