Thursday, February 5, 2015

BÀI 2: (MSP430_BASIC) TẠO PROJECT, LÀM QUEN VỚI GPIO

 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 :
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.
Link tải IAR : IAR Embedded Workbench Kickstart - Free 4KB IDE - IAR-KICKSTART - TI Software Folder 
1.Tạo Project
Video hướng dẫn sử dụng :
Các thắc mắc và thảo luận về các vấn đề về soft này, các thành viên có thể thảo luận ở dưới

Tạo file hex tong IAR- Lập trình MSP430

Để có thể mô phỏng 1 mạch điện có sự tham gia của MCU MSP430 trong Proteus hoặc 1 phần mềm mô phỏng mạch điện nào đó thì chương trình để nạp vào cho MCU sẽ là từ file hex.
File hex (trong trường hợp này) là file chương trình đã được biên dịch từ 1 mã nguồn bởi 1 trình biên dịch, sau đó có thể nạp trực tiếp vào MCU.
(Muốn chia sẻ Project mà không muốn chia sẻ code thì cũng có thể dùng cách này. :D)
Để có thể tạo ra được file hex trong IAR thì cần phải cấu hình những thứ sau:
1. Tạo Project mới.
2. Cấu hình cho Project này:
Tại mục General Options -> tab Output -> Output File: chọn Executable

Tại mục Linker :
– Điền tên file HEX sẽ tạo ra trong ô Output file, tick chọn Override default.
– Tick chọn OtherOutput formatintel-standard
Tại mục Debugger -> DriverSimulator
Để chuyển về debug qua KIT LaunchPad thì chuyển về chọn FET-Debugger.
File HEX xuất ra tại:
“IAR Project\Project-Name\Debug\Exe\*.hex”
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.
 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;
       }
}


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





0 nhận xét :

Post a Comment

Note: Only a member of this blog may post a comment.