Khóa học vi điều khiển MSP430
Khóa học vi điều khiển MSP430 căn bản
       HỌC VIÊN THU ĐƯỢC GÌ TRONG QUÁ TRÌNH HỌC VÀ SAU KHÓA HỌC       Trong quá trình học:       >> Học viên...
Lịch khai giảng các khóa học của MLab
Thông tin khai giảng cụ thể các khóa học như sau: STT Tên lớp Mã lớp Khai giảng Ngày học Giờ học Trạng...

Học MSP430 với Kit MSP430 LaunchPad - Bài 2: GPIO và Clock (Phần 1)

Bài 1 chúng ta  đã biết cách tạo một project trên CCS, rồi đã biết cách nạp chương trình vào chip MSP430G2553. Các bạn nên tìm hiểu thêm về phần mềm CCS như sử dụng chức năng Debuger để kiểm tra từng dòng lệnh mình viết, sử dụng Grace trong CCS để giúp cho việc khởi tạo, thiết lập các thông số hoạt động ban đầu của MCU nhanh hơn... 

Các bài học sau chúng ta vẫn tìm hiểu MSP430  trên kit Launchpad với chip MSP430G2553 vì vậy các bạn phải đảm bảo rằng đã có ít nhất 3 tài liệu gốc để tìm hiểu, đó là:

- -MSP430x2xx Family User's Guide (Rev. J)  (Tài liệu 1)

- -MSP430G2x53, MSP430G2x13 Mixed Signal Microcontroller (Rev. J  (Tai liệu 2)

- Ban vẽ nguyên lý của kit launchpad, download tại: http://www.ti.com/tool/msp-exp430g2

Việc khởi tạo các thông số ban đầu cho vi điều khiển là rất cần thiết. Nó giống như việc bạn sử dụng máy giặt quần áo, trước khi bắt đầu ta phải cài đặt các chế độ cho nó: giặt nhanh hay chậm, nhiều nước hay ít nước ?...Nếu bạn không cài đặt thì nó sẽ hoạt động theo các thông số mặc định và có thể sẽ không như ý muốn của bạn. Vi điều khiển cũng vậy, muốn hoạt động đúng theo ý muốn của mình thì trước hết ta cũng phải khởi tạo các thông số hoạt động cho nó như: Chọn tốc độ xử lý (Clock)cho CPU và các module ngoại vi , nếu sử dụng các chân I/O thì phải khởi tạo để chân nào là Input, chân nào là Ouput, tương tự nếu muốn dùng ADC, USART, SPI, I2C... ta cũng phải khởi tạo một các thông số ban đầu cho nó...

Ở bài số 2 này chúng ta sẽ tìm hiểu về cách khởi tạo các thông số cơ bản ban đầu cho MSP430 như GPIO, Clock. Cụ thể:

- Phần 1 chúng ta sẽ tìm hiểu về các cổng vào ra căn bản (GPIO) và cách khởi tạo

- Phần 2 chúng ta sẽ tìm hiểu về các module Clock trong MSP430 và cách khởi tạo

Để tìm hiểu kĩ về GPIO của MSP430 các bạn tìm đến chương 8 (Digital I/O)của tài liệu 1, còn chức năng cụ thể của từng chân I/O của MSP430G2553 thì các bạn phải xem tài liệu 2.

Trong bài này chúng ta chỉ sử dụng các chân  I/O của MSP430G2553 như các chân đọc dữ liệu và xuất dữ liệu bình thường, các chức năng khác chúng ta sẽ tìm hiểu sau.

Mình xin tóm tắt một số ý chính trong tài liệu như sau:

Các I/O của MSP430G2553 được chia thành 2 Port, P1 và P2, mỗi Port có 8 I/O từ Px1.0 - Px1.7.Để khởi tạo cho các chân I/O này ta cần phải biết một số thanh ghi sau:

- Thanh ghi Input - PxIN (P1IN dùng cho Port1, P2IN dùng cho Port2):

   Đây là thanh ghi chỉ đọc được dữ liệu (read only), thanh ghi này có 8 bit,từ Bit 0 đến Bit 7.

   Giá trị mỗi bit tương ứng với giá trị điện áp cấp tới chân I/O của Port.

   Bit = 0 ~ chân Input  ở mức thấp (khoảng 0Vdc), 

   Bit = 1 ~ chân input ở mức cao (khoảng 3.3VDC).

- Thanh ghi Output - PxOUT:

   Khi cấu hình các chân với chức năng I/O và không dùng điện trở kéo trong thì giá trị các bit của thanh ghi PxOUT thể hiện giá trị điện áp xuất ra ở chân I/O của Port tương ứng. 

   Bit = 0 ~ Điện áp ở chân ouput ở mức thấp

   Bit = 1 ~ Điện áp ở chân ouput ở mức cao

  Khi sử dụng điện trở kéo trong, các bit của PxOUT sẽ qui định điện trở đó sẽ được kéo xuống đất (0VDC) hay được kéo lên nguồn

    Bit = 0 ~ điện trở được kéo xuống 0VDC (pulled down)

    Bit = 1 ~ điện trở được kéo lên nguồn (pulled up)

 Khi nào thì dùng trở kéo bên trong? Người ta thường sử dụng điện trở kéo trong khi muốn sử dụng chân I/O làm chân input.  Nếu không có trở kéo thì tín hiệu đọc được ở chân Input lúc ở mức cao, lúc ở mức thấp >>  có thể đọc sai giá trị 

- Thanh ghi chỉ hướng - PxDIR

 Các bit của thanh ghi này qui ước chân nào là input, chân nào là chân output

 Bit = 0 ~ chân tương ứng của Port được chọn làm chân Input

 Bit = 1 ~ chân tương ứng của Port được chọn làm chân Ouput

- Thanh ghi cho phép sử dụng trở kéo trong - PxREN

 Các bit của thanh ghi này qui ước việc dùng hay không dùng điện trở kéo ở chân tương ứng 

 Bit = 0 ~ cho phép dùng

 Bit = 1 ~ không cho phép dùng

- Thanh ghi chọn chức năng cho các chân - PxSEL và PxSEL2

Tham khảo phần "PORT SCHEMATICS" trong tài liệu 2

Ở trạng thái mặc định PxSEL=0, PxSEL2=0  ~  các chân được chọn với chức năng I/O

Thực hành trên kit LaunchPad

Bài 1:  Viết chương trình nhấp nháy 2 led P1.0 và P1.6, ở một thời điểm chỉ có một led sáng. Ở trạng thái ban đầu Led P1.0 sáng, led P1.6 tắt.

 

Bài 2:Viết chương trình khi bấm nút bấm P1.3 thì 2 led P1.0 và P1.6 đổi trạng thái.Ở trạng thái ban đầu led P1.0 sáng, led P1.6 tắt

Các bạn thử tự làm bài tập sau để kiểm tra hàm chống rung phím có hiệu quả không nhé!

Bài tập tự làm: Bấm 6 lần phím P1.3 thì các led P1.0 và P1.6 mới đổi trạng thái

Sau bài học này chúng ta đã có thể cấu hình và điều khiển được các chân I/O với chức năng cơ bản rồi! 

Chúc các bạn thành công! Hẹn gặp lại các bạn trong các bài học tiếp theo.

http://smart-techvn.com/ (Phạm Tuấn Anh - MLab)

Trả lời bạn đọc

tuan | 7 đánh giá

05/25/2014

mọi người cho em hỏi cái đoạn mà |= với &= ~ hiểu như thế nào ạ, em mới tập làm quen với c nữa, k hiểu gì hết

Trả lời:

Đây là các phép toán thao tác bit trong C bạn Tuấn ạ!

Bạn có thể tham khảo trong sách lập trình C hoặc http://vi.wikipedia.org/wiki/Ph%C3%A9p_to%C3%A1n_thao_t%C3%A1c_bit
Mình sẽ giải thích rõ hơn giúp bạn:
1/a |= c;<=> a = a|c; 
Ví dụ trong bài trên:
P1OUT |= BIT0;  <=> P1OUT = P1OUT | BIT0 ;
 
P1OUT = XXXXXXXX (thanh ghi 8 bit x, x có thể là 0 hoặc 1)
| (Phép toán OR)
BIT0      = 00000001  (được định nghĩa trong thư viện msp430g2553.h)
----------------------------
                  XXXXXXX1  
==> Phép toán trên có tác dụng đặt bit 0 trong thanh ghi P1OUT lên 1 mà không ảnh hưởng đến cá bit khác, giá trị cá bit còn lại không thay đổi.
 
Bây giờ muốn đặt bit 0 và bit 5 của thanh ghi P1OUT lên 1 thì bạn sẽ làm sao?
==> P1OUT |= BIT0 + BIT5;  (BIT0+BIT5 = 00100001)
 
2/ a &= ~c <=> a= a & (~c)
Trong bài :
P1OUT &= ~BIT6; <=> P1OUT = P1OUT & (~BIT6);
 
P1OUT = XXXXXXXX 
& (Phép toán AND)
~BIT6   = 10111111
---------------------------
                 X0XXXXXX
==> Xóa bit 6 của thanh ghi P1OUT mà không ảnh hưởng đến các bit còn lại  
 
Hy vọng bạn sẽ hiểu những gì mình viết.
Chúc bạn học tốt!

 

 

 

Bài viết liên quan

Viết đánh giá

Họ và tên:


Đánh giá của bạn: Lưu ý: Không hỗ trợ HTML!

Bình chọn: Dở            Hay

Nhập mã bảo vệ: