Sunday, March 30, 2014

Bài 3.(MSP430_Basic)UART

        Bài trước chúng ta đã được học về GPIO,bài này mình sẽ hướng dẫn các bạn giao tiếp UART,mục đích là để có một công cụ hiển thị thông tin,cho phép tiếp cận với các module khác của MSP430 một cách dễ dàng hơn.Ngoài ra,việc thành thạo UART còn cho phép các bạn kiểm tra hoạt động của mạch bên cạnh chức năng debug có sẵn,bằng việc chèn lệnh gửi vào các đoạn của code.Trước mắt các bạn chưa cần hiểu chi tiết về chuẩn giao tiếp này,chỉ cần hiểu cách sử dụng các hàm truyền nhận,về chi tiết mình sẽ hướng dẫn trong các bài sau.

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

         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. 

      1.Chuẩn giao tiếp UART
      Có thể nói đây là một trong những giao tiếp phổ biến và dễ sử dụng nhất,dùng để truyền nhận dữ liệu giữa 2 hay nhiều thiết bị khác nhau không nhất thiết là vi điểu khiển.UART là chuẩn truyền thông không đồng bộ (nghĩa là 2 thiết bị giao tiếp với nhau cần phải biết được các thông số của khung truyền như tốc độ,độ dài khung,số bit stop,bit parity....).Khi muốn dùng giao tiếp UART thì chúng ta phải khai báo hàm khởi tạo giá trị cho các thanh ghi UART,cụ thể:
     - Chọn các chân dùng UART(VĐK MSP430G2553 là P1.1 và P1.2) để ở chức năng giao tiếp ngoại vi,tùy vào thứ tự ưu tiên chúng ta chọn thanh ghi PxSEL và PxSEL2 cho phù hợp.
     - Định dạng khung truyền dữ liệu,số bit stop,bit parity,số bit dữ liệu bằng thanh ghi UCA0CTL0
     - Cài đặt nguồn cấp xung clk
     - Định tần số giao tiếp(Chú ý là module trên kit Lauchpad chỉ hỗ trợ duy nhất tần số 9600,muốn dùng tần số khác các bạn buộc phải nối với module UART to Com bên ngoài.
     - Set cờ cho phép ngắt nhận tín hiệu.
Một số chip MSP430 không có module UART,thường là các chip cũ dùng module truyền thông loại USI,để biết chi tiết các bạn nên đọc trực tiếp trong datasheet
      2.Thiết lập giao thức UART
  Như đã nói ở trên,trong bài này các bạn chưa cần hiểu rõ về chuẩn UART,chi tiết sẽ được trình bày cụ thể trong bài khác,mục đích là để tạo ra một công cụ hiển thị có sẵn giúp học các bài sau dễ dàng hơn.Vì vậy dưới đây mình đưa ra thư viện UART do mình viết,về cơ bản có sẵn hầu hết các kiểu truyền dữ liệu cần thiết.Ở đây mình giới thiệu giao tiêp giữa máy tình và Kit lauchpad

      2.1.Thiết lập đường truyền
 Việc thiết lập đường truyền gồm 2 bước:
B1.Kết nối Kit launchpad và Máy tính,các bạn nối jump cắm như hình.

     Các bạn để ý  chân RXD và TXD nối với cổng UART của máy tính,nên jump cắm phải cắm ngang,nối TXD-P1.2 , RXD-P1.1.

    2.2.Thiết lập giao diện máy tính
    Đầu tiên các bạn cần biết là cổng USB của máy tính thực chất là quá trình đánh địa chỉ và tạo cổng COM ảo cho các thiết bị giao tiếp USB,tất cả các thiết bị sẽ sử dụng chung giao tiếp USB nhưng sau đó sẽ được giải mã ra đúng giao tiếp thực của thiết bị.Do vậy các thiết bị cắm vảo cổng USB sẽ được cấp phát 1 địa chỉ cổng COM ảo nhất định.Kit Launchpad cũng vậy,tuy nhiêu mỗi Kit launchpad được đánh 1 địa chỉ,nên khi sử dụng UART lần đầu chúng ta cần tìm địa chỉ của nó,các lầnsau địa chỉ sẽ không thay đổi.
   Trước tiên bạn Kích chuột phải vào biểu tượng My computer ->Manager ->Device Manager.
Tại đây bạn kich vào mục Port và xem cổng Com ảo được quy định cho Kit,như hình sau là COM3
    
    2.3.Phần mềm truyền nhận UART qua máy tính
 Mình sử dụng phần mềm Hercules,và thấy khá tiện và dễ sử dụng.Các bạn có thể Download tại đây,hoàn toàn miễn phí : Hercules
   Bật phần mềm lên vào mục Serial.
   Ví dụ các bạn có thể cài đặt cấu hình như trên,Cổng COM của KIT của mình là cổng COM3

      3.Làm quen các hàm UART
         Thư viện UART các bạn có thể download ở đây : UART.h
         Thư viện math.h kèm theo dùng khi tính số thực trong UART, các phép toán nhanh chuyên dùng cho VĐK : Mymath.h
        Việc sử dụng không có gì khó khăn cả.
     - Đầu tiên khi muốn sử dụng chức năng UART ,các bạn phải khai báo hàm khởi tạo UART_Init(); ,để cài đặt chức năng cho module UART,chỉnh lại biến SMCLK_F cho đúng với tần số đang sử dụng,BAUDRATE đúng với tần số đồng bộ giữa 2 thiết bị.
     - Khi muốn truyền dữ liệu từ máy tính các bạn dùng các hàm UART_Write...: truyền ký tự 8bit(Char),chuỗi(String),Số Integer không dấu(Int),Mã nhị phân(Reg),Số thực(Float)  ;Đọc ký tự từ máy tính truyền xuống bằng UART_Read hoặc dùng ngắt UART_RX.
Dưới đây là đoạn code mẫu:

#include "msp430g2553.h"
#include "Library/UART.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
 */
int abc=134;
float float1=14454.3486;

char temp;
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
    P1DIR|=BIT0;
    UART_Init();
    UART_Write_Char(10);  //Ký tự xuống dòng
    UART_Write_Char('A'); //A
    UART_Write_Char(10);
    UART_Write_String("Chuong trinh test UART");
    UART_Write_Char(10);
    UART_Write_Reg("P1IN",P1IN); //0b00000010
    UART_Write_Char(10);
    UART_Write_Int(abc);
    UART_Write_Char(10);
    UART_Write_Float(float1,5);
    UART_Write_Char(10);
    abc=UART_Read_Char();
    UART_Write_Char(abc);
    __bis_SR_register(LPM0);
}
Kết quả chương trình:

Download tất cả project tại đây: Project UART

Bài tiếp theo : Bài 4.(MSP430_Basic) Ngắt




 

14 comments:

  1. bạn cho minh hỏi chút xíu là khi mà jumper thì cái náo cùng màu thì mình nối chung lại đúng không? Cám ơn bạn rất nhiều

    ReplyDelete
    Replies
    1. Không phải đâu bạn,các jump VCC Test Reset nối dọc,còn 2 jump kia nối ngang

      Delete
  2. cám ơn bạn nhiều, mình làm được rồi

    ReplyDelete
  3. cho mình hỏi cái hàm UART_Read_Char(); có luôn nhận dữ liệu từ máy tính không
    sao mình truyền được có 1 lần. lần sau truyền cái khác thì nó không nhận nữa

    ReplyDelete
    Replies
    1. Không bạn ạ,bao h muốn nhận thì bạn phải gọi nó ra,nó chỉ nhận 1 ký tự rồi thoát khỏi hàm đấy về chương trình chính thôi

      Delete
    2. mình đang test chương trình này của bạn trên kit msp430g2553 nhưng nó.chỉ nhận và truyền lại một số ký tự vd như 3,5,6,9...
      các ký tự khác như 1,2,4,7,8 ...thì không nhận, và truyền lên lại máy tính được. cho mình hỏi lỗi này là gì? cám ơn

      Delete
    3. Cái này mình quên không báo,mình làm cũng bị như vậy.Trước mình có đọc qua về vấn đề này,mình nhớ là nó gặp vấn đề ở bit parity,cài đặt của máy tính xuống khác msp430,nhưng mà quên chưa sửa lại.

      Delete
    4. ok sửa lại parity thành "odd" là gửi được hết

      Delete
  4. Hi anh! Em muốn giao tiếp với 2 uart thì sao ạ anh. Có cách nào làm được k. Vi ở chỗ em k có điều kiện chơi con dán 80 pin 2 uart

    ReplyDelete
  5. Nếu thế thì em chỉ còn cách là dùng các IC chuyển kênh thôi,như kiểu 4052 chẳng hạn

    ReplyDelete
  6. Anh ơi cho em hỏi, có thư viện UART rồi, giờ mình muốn hiển thị lên LCD thì làm như thế nào

    ReplyDelete
  7. Em đọc thêm bài này nhé http://thuanbk55.blogspot.com/2014/05/giao-tiep-msp430-va-lcd16x2.html

    ReplyDelete
  8. Em muốn hiển thị lên lcd qua giao tiếp UART anh ạ

    ReplyDelete

END COMMENT FACEBOOK-->