數位輸出 + 使LED燈閃爍

  • 前言 - 讓基板上的LED燈閃爍

現在我們要來學習Launchpad上的第一個程式,設計一個簡單範例。基本上我們會藉由CCSv5.1來撰寫程式。目的讓晶片核心控制連接到板子上LED的燈號,藉由改變暫存器的設定值讓某一端點的隨著時間而開關閃爍LED,接下來要介紹如何使用基板內建的LED來達成以下的基本步驟。

  • 基本功一 使紅色LED燈1個閃爍

  • 基本功二 改變LED閃爍的間隔時間

  • 基本功三 使另一個綠色LED燈閃爍

  • 基本功四 讓多個LED(紅色與綠色)同時閃爍

  • 進階功夫 視覺暫留POV LED

  • 確認連接線路與位置

1. 我們利用原本的LaunchPad基板上就有的LED。其中一個為連接P1.0紅色LED燈位置在左下方,確認J5的PIN2有連接短路。

2. 確認已連接上USB線到電腦。

LED如圖

在電路圖上符號。

  • 開始撰寫程式前的電腦準備工作

在尚未開始正式撰寫之前,我們先檢查電腦的環境是否已經準備好相關軟體:

    • 已安裝整合開發環境 CCS - Code Composer Studio v5 (詳見這裡說明)

    • 驅動程式安裝完畢 (詳見這裡說明)

  • 上傳程式碼

初次使用還是認真點好,想試試看看範例程式可不可以正常使用呢?

-開啟CCS

-滑鼠右鍵,選NEW>>>CCS Project

-填入 專案名稱>>選擇晶片型號>>選擇空專案。

-複製底下的程式碼。

-貼到CCS程式編輯區裡面。

-小小研究一下註解說明。

-按下 Debug (ㄟ就是那一個綠色的小蟲圖案啦...)。

-按下 F8 (載入)。

-觀察 LED 的狀態有無改變。

-停止 Debug 動作。

-認真的玩家可以再次修改程式碼,試著調整更改LED閃爍時間或是更改其他燈號紅色或綠色顏色等。

  • 原始程式碼

原始程式碼led_toggle.c
  • 解說原始程式碼

接下來在這裡會試著解釋每一行C語言程式的用法。相信對玩家在日後撰寫自己的程式會有所助益,如果注重實作的玩家可以先跳過以下長篇大論,直接把上面的程式碼載入到LaunchPad 先玩玩看。

    • 引用檔 #include < >

一般都會看到引用msp430XXXX.h 這個標頭檔。

#include <msp430g2553.h> 或是 #include <msp430g2231.h>

    • 主程式 main()

告訴LaunchPad這是個主程式main()函式永遠會被優先執行,而且裝置從上電到斷電之前,主程式會被依序執行一次,然後進入睡眠狀態,等待下一個中斷來臨。特別說明一下,由主程式 main() 函數執行到迴圈之前的程式區段,非常適合拿來做初始化的工作

  • 迴圈 while()

接下來while(1) 會定義了整段LauchPad主要重複動作的區域,迴圈內函式則會不斷的被重複執行,也是迴圈撰寫區,在此例中先呼叫接腳輸出高電位,由於P1.0接腳正好連接著一顆紅色LED燈,所以就會看到紅燈亮起,接下來__delay_cycles

會延時100ms豪秒,緊接著又是改變接腳輸出電位,變成低電位,紅燈隨之熄滅,接著又是延時,如此不斷重複執行,就會看到紅燈不斷閃爍。

  • 數位輸出 P1OUT

當我們試著改變記憶體暫存的數值,就會改變LED1狀態在程式開始執行時,希望設定腳位的狀態為數位輸出。在此例中P1OUT 是設定digital output紅色LED1燈BIT0成為輸出埠,稍後就能呼叫控制燈號輸出高電位或低電位。

其中 P1OUT 屬於數位暫存器的一部份,參考User’s Guide (第359頁第8.2.2節),而常數定義在msp430g2231.cmd文件中。

P1OUT = 0x0021;

(預設路徑C:\Program Files\Texas Instruments\ccsv4\msp430\include\)

其中 BIT0 代表板子上的P1.0埠紅色LED燈。而常數定義在標頭檔msp430g2231.h文件中。

#define BIT0 (0x0001)

(預設路徑C:\Program Files\Texas Instruments\ccsv4\msp430\include\)

    • 上傳程式到基板

程式撰寫完畢後,在工具列中找尋Debug Launch點選(或找尋"一隻綠蟲"的圖示 )開始自動編譯過程;若編譯成功也會將程式上傳到LaunchPad。當傳輸結束後,再重新拔除USB線或斷電之後,重新上電,觀察基板上的P1.0連接的LED紅色燈開始閃爍,這代表程式已經成功上傳且開始運作。

  • 完成!! 使紅色LED閃爍的操作影片

  • 基本二 改變LED閃爍的間隔時間

在程式碼中可以找到一個函數調整LED閃爍間隔時間。

__delay_cycles(100000)

但是,比較要注意的是這裡填的數字為cycle次數。(並不是代表真正的延遲秒數)。而真正的延遲秒數必須根據裝置設定的工作時脈頻率與cycle次數而計算出來的。函數內的可填入的無號長整數unsigned long表示數值範圍為0到4294967295,(也就是2的32次方-1),注意!!如果填入數值超過4294967295除錯將會有溢值的錯誤訊息。範例中所使用預設的DCO工作頻率為1MHz,換算成時間週期為10^-6(s),函數內填數字如果為100000,經計算結果,則延遲時間為100ms。玩家可以試著改改看這個參數,調整閃爍間隔( 計算公式: 10^-6週期s * 100000 cycle = 0.1s = 100ms )

原稿

  • 基本三 使另一個綠色LED燈閃爍。

如果玩家想改用另一顆綠色LED2,位於LaunchPad板子上的P1.6埠,方法如下:

  • 設定P1.6原本GPIO Input改為GPIO Output。

P1DIR = BIT6;

  • 試著將led.c檔案內while迴圈內的BIT0改為BIT6,則會改由綠色LED2閃爍。

P1OUT ^= BIT6;

  • 完成!! 使綠色LED閃爍的操作影片

  • 基本四 使多個LED同時閃爍(紅色與綠色)。進

如果玩家想兩顆LED位於LaunchPad板子上的P1.0與P1.6埠一起閃爍,紅色LED1與綠色LED2,方法如下:

  • P1.0與P1.6原本GPIO Input都改為GPIO Output

P1DIR = BIT0 + BIT6;

  • 試著將led.c檔案內while迴圈內的BIT0改為BIT0 + BIT6,則會兩個LED同時閃爍。

P1OUT ^= BIT0 + BIT6;

  • 完成!! 使多個LED同時閃爍(紅色與綠色)的操作影片

  • 進階應用 - 視覺暫留 光殘影POV LED

須搭配外接擴充板,加上八顆LED與基板時脈閃爍巧妙變化,

視覺暫留的光殘像也可以製造出神奇的LED效果。

請參考<進階輸出與輸入控制>POV範例介紹。