Thursday, March 27, 2014

Bài 2.(MSP430_Basic)Tạo Project,làm quen với GPIO


Bài này mình sẽ hướng dẫn chi tiết cách tạo 1 project mới trong CCS để lập trình MSP430.
Trước hết trước khi bắt đầu các bạn nếu chưa có datasheet của dùng MSP430 thì có thể download tại đây : http://www.ti.com/general/docs/lit/getliterature.tsp?baseLiteratureNumber=slaa559&fileType=pdf.
Lưu ý Datasheet vẫn luôn là tài liệu quan trọng nhất khi bạn tiếp cận bất cứ dòng vi điều khiển nào , nên việc thành thạo tiếng Anh và khả năng đọc Datasheet vẫn là quan trọng nhất. 

Tài liệu được viết cho MSP430G2553,các chip khác có module khác mã sẽ không sử dụng được thư viện đi kèm.

1.Tạo Project
Bật CCS lên,vào File ->New ->CCS Project.
Cửa sổ hiện ra bạn điền theo mẫu dưới,Phần Location thì chọn nơi lưu Project ->Finish



Để CCS xuất ra file Hex trong trường hợp bạn muốn copy file hex hoặc nạp code bằng boodloader,có thể kích chuột phải vào Project trong "Project Explorer" ->Properties ->Build ->Step>Apply Predefined Step ->Create flash image :Intel-HEX ->OK

2.Lý thuyết:
    - Thanh ghi dữ liệu vào PxIN :
 Mỗi Bit trong mỗi thanh ghi PxIN phản ảnh giá trị của tín hiệu vào ở chân I/O tương ứng khi các chân này được thiết lập chức năng I/O.
                     Bit = 0: Ngã vào mức thấp
                      Bit = 1: Ngã vào mức cao
-Thanh ghi dữ liệu xuất PxOUT:
        Mỗi Bit trong mỗi thanh ghi PxOUT là giá trị xuất ra trên các chân I/O tương ứng khi khi
các chân này được thiết lập chức năng I/O. Xuất dữ liệu có hướng và việc tăng giảm điện
trở thì không được phép.
         Bit = 0: Ngã ra mức thấp
         Bit = 1: Ngã ra mức cao
       Nếu các chân điều khiển tăng-giảm điện trở bị mất hiệu lực thì các Bit tương ứng trong
thanh ghi PxOUT có tác dụng lựa chọn việc tăng giảm điện trở.
         Bit = 0: Giảm xuống.
         Bit = 1: Tăng lên
    - Các thanh ghi định hướng PxDIR
Mỗi Bit trong mỗi thanh ghi PxDIR lựa chọn định hướng của chân I/O tương ứng, bất
chấp chức năng đã được chọn của chân. Những Bit PxDIR cho những chân I/O được lựa
chọn cho những chức năng khác phải được thiết lập theo yêu cầu của chức năng đó.
    Bit = 0: Những chân của Port được định hướng là ngã vào.
    Bit = 1: Những chân của Port được định hướng là ngã ra.

    - Thanh ghi cho phép tăng/giảm điện trở PxREN
Mỗi Bit của mỗi thanh ghi PxREN dùng để cho phép hoặc không cho phép sự tăng/giảm
điện trở của các chân I/O tương ứng. Những Bit tương ứng của thanh ghi PxOUT được
chọn nếu chân được tăng lên hoặc giảm xuống. 
    Bit = 0: Tăng/giảm điện trở không được cho phép.
    Bit = 1: Tăng/giảm điện trở được cho phép.
    - Thanh ghi chức năng lựa chọn PxSEL và PxSEL2
Các chân này được đa hợp với các các chức năng của các mô đun ngoại vi khác. Mỗi Bit
PxSEL và PxSEL2 được sử dụng cho việc lựa chọn chức năng của các chân: Chức năng
I/O xuất nhập dữ liệu hoặc chức năng mô đun giao tiếp ngoai vi. 

3.Bắt đầu chương trình đầu tiên
           Lưu ý là lập trình vi điều khiển hầu hết đều sử dụng ngôn ngữ lập trình C,vì vậy nhất thiết các bạn cần phải biết các kiến thức căn bản về C và lập trình nói chung trước khi bắt đầu,các bạn có thể đọc sách của tác giả Quách Tuấn Ngọc(Cơ bản) hoặc Phạm Văn Ất (Có nâng cao).
           Một chú ý nữa là khi dùng chip nào thì các bạn nên nhanh chóng vào trang chủ của TI để download datasheet của MCU đó và họ chip đó.

       Trước hết chúng ta cần biết các thành phần của kit Launchpad:

   
       Bài này chúng ta sẽ chỉ sử dụng đến nút bấm P1.3,đèn Led nối với chân P1.0 và P1.6,các bạn có thể luyện tập thêm bằng các nối chân ra board trắng.

   

   BT2.1:Nháy led chân P1.0 ,tần số 1Hz,Chip sử dụng là MSP430G2553

#include "msp430g2553.h"
/*    Khai báo loại chip đang dùng
 *     Thư viện này chứa các khai báo tên #define cho địa
 *     chỉ các thanh ghi
 */
void main(void)
{
    WDTCTL = WDTPW | WDTHOLD;    //Stop Watchdog
    BCSCTL1 = CALBC1_1MHZ;        //2 thanh ghi cài đặt tần số hoạt động
    DCOCTL = CALDCO_1MHZ;  //Ở đây là 1 Mhz,tức là 1 xung nhịp ~1us
                         P1DIR=0x01;                    //Thanh ghi quy định chức năng input,output
    //Hoac P1DIR=BIT0;            // 1 là output
    while(1)
    {
        P1OUT^=BIT0;            //Phép xor bit
        _delay_cycles(500000);//Hàm đặt giá trị trễ ,
        //tương đương với gần đúng số chu kỳ xung nhịp,tức là 0.5s
    }
}

Nhấn Ctrl+B : Kiểm tra lỗi code
          Nhấn F11 để đổ code xuống Chip và debug
Mẹo nhỏ là khi viết các thanh ghi hoặc các hàm,nhấn Ctrl+Space để xổ danh sách gợi ý,giúp code nhanh hơn và tránh nhầm lẫn.Viết P1 và Ctrl+Space ,các bạn có thể thấy toàn bộ các thanh nghi điều khiển việc vào ra dữ liệu của Cổng P1.
Download sách này về để hiểu rõ nhất về các thanh ghi vào ra dữ liệu,trang 31(GPIO) : Tài liệu lập trình MSP430(Tiếng Việt)

Các bạn nếu muốn tìm hiểu rõ hơn về các mặt nạ,file,hàm... có thể bôi đen đối tượng ->Chuột phải chọn Open Declaration hoặc F3,như thế này chẳng hạn.

       Các bạn hãy tự tạo các bài tập nhỏ cho mình dựa trên code có sẵn.
   BT2.2.Nhấn nút P1.3 bật đènP1.0,đèn P1.6 nháy liên tục

Các bạn cần hết sức chú ý vì MSP có khá nhiều thanh ghi GPIO và tạo ra rất nhiều kiểu hoạt động,dưới đây là kiểu lập trình điện trở trong kéo lên cho nút nhấn,giúp chống nhiễu điện từ tay chúng ta.

#include "msp430g2553.h"
/*     Khai báo loại chip đang dùng
 *     Thư viện này chứa các khai báo tên #define cho địa
 *     chỉ các thanh ghi
 */
void main(void)
{
       WDTCTL = WDTPW | WDTHOLD;  //Stop Watchdog
       BCSCTL1 = CALBC1_1MHZ;            //2 thanh ghi cài đặt tần số hoạt động
       DCOCTL = CALDCO_1MHZ;             //Ở đây 1 Mhz
       P1DIR|=BIT0+BIT6;    //Kiểu viết mặt nạ chỉ kéo BIT0 ->1
       //Cài đặt cấu hình ngắt ngoài cho P1.3
       //Như trong bài GPIO,chúng ta phải cài đặt chống nhiễu cho nút bấm P1.3
       // sự thay đổi của điện áp P1.3 thể tình tạo ra ngắt
       P1DIR&=~(BIT3);      //Chọn nhập
       P1REN|=BIT3;  //Cho phép trở treo
       P1OUT|=BIT3;  //Trở treo lên nguồn
       while(1)
       {
              P1OUT^=BIT6;               //Phép xor bit
              _delay_cycles(1000000);    //Hàm đặt giá trị trễ ,
              //tương đương với gần đúng số chu kỳ xung nhịp
              if((P1IN&BIT3)==0)P1OUT|=BIT0;
              else P1OUT&=~BIT0;
       }
}

Download thư viện nút bấm : Switch.h
Đọc thêm bài :Giao tiếp MSP430 và LCD Nokia 5110 
Các bạn hãy tự tạo ra bt cho riêng mình để luyện tập nhé!

  Bài tiếp theo : Bài 3.(MSP430_Basic) UART





2 comments:

  1. Em chào anh ! em đọc trong datasheet thấy chân P2.6 cũng có chức năng I/O nhưng sao em không code được cho nó nhấp led tại chân đó . hay có phải cấu hình gì không ạ ?? em cảm ơn !!

    ReplyDelete
    Replies
    1. Có đấy bạn ạ,phải chỉnh lại các thanh ghi PSEL về 0 vì mặc định sau khi reset P2SEL = 0xC0.

      Delete

END COMMENT FACEBOOK-->