[C14] Review buổi training về Timer ngày 27/03

NghiaJenius

Ban Chủ Nhiệm
Chào các bạn, trong buổi học ngày 27/03, các bạn đã được giới thiệu về bộ timer của MSP430G2553, cách đọc Datasheet và User Guide, và cách cấu hình timer trên CCS. Mình sẽ tóm tắt một số chỗ các bạn cần đọc thêm nếu hôm đó không đi học được:

1/ Đọc datasheet: trang 6,7,8,10,11, phần Port Pin Functions và Port Schematic từ trang 42.
Rút ra các nội dung sau:
- Pin nào thì có chức năng timer, capture input, tạo PWM, nhận xung clock từ bên ngoài.
- Đọc thêm phần Low Power Mode (trang 10) để biết về LPM, clock nào sẽ hoạt động, phần nào sẽ tắt khi vô LPM, khi nào thì thoát LPM.

2/ Đọc User Guide MSP430x2xx: từ trang 363 đến 403 (phần timer A và B) để nắm được:
- Khác nhau giữa Timer A và B.
- Một bộ timer có các chức năng gì (timer, capture, compare, xuất PWM), mỗi chức năng dùng để làm gì, ứng dụng khi nào.
- Cách cấu hình cho bộ timer: có bao nhiêu source clock có thể chọn, chọn qua bit nào, thanh ghi nào, cách chia clock ra sao, có bao nhiêu cách đếm timer ( up, down, continuous...), dùng interrupt timer như thế nào.
- Cách sử dụng các thanh ghi CCR (Capture Compare Register), tại sao cho tới 3 thanh ghi, dùng phối hợp với timer như thế nào. Cách dùng Interrupt và kiểm tra nội dung thanh ghi TAIV trong ngắt.
- Cách xuất PWM: có phải port nào cũng có sẵn chức năng đó không, dùng như thế nào, nếu không có thì làm sao để xuất xung PWM.
- Các bạn xem kĩ các phần: Timer Block Diagram, Các Mode và vị trí cờ ngắt được bật lúc đếm trong từng trường hợp, Output Example để biết cách sử dụng cờ ngắt và các thanh ghi CCR để xuất PWM.

3/ Bài tập về nhà:
Tương tự hôm trước, chúng ta có bài tập về nhà, sử dụng 8 LED và 2 nút nhấn.
=))
Khác với hôm trước, sẽ có 2 LED sáng cùng 1 lúc, với độ sáng từng LED thay đổi được bằng 2 nút nhấn. Mỗi LED sẽ có 32 mức sáng từ 0% đến 100%.

- Không nhấn nút: 2 LED cạnh nhau sẽ sáng cùng 1 lúc, chạy qua chạy lại với chu kì 0.2s.
Ví dụ: LED 1&2 sáng, đến 2&3,..., đến 7&8, quay lại 6&7,...
- Nhấn nút 1: thay đổi độ sáng LED thứ 1, 1 lần nhấn tăng 1 mức sáng (có 32 mức sáng tương ứng từ 0% đến 100%), đến 100% rồi thì nhấn tiếp tục sẽ trở về 0% (mức thấp nhất) rồi tiếp tục.
- Nhấn nút 2: thay đổi độ sáng LED thứ 2, tương tự như trên.

*Gợi ý:
- Do không phải pin nào của cũng có hỗ trợ xuất PWM, nên các bạn phải kết hợp giữa bộ đếm Timer, Capture và bật tắt GPIO để tạo xung PWM.
- Nếu chu kỳ ngắt timer quá nhanh, chúng ta cả thể sử dụng kết hợp biến đếm để tạo clock với tần số mong muốn.
- Cấu hình và sử dụng thanh ghi CCR1 và CCR0 (up mode), thay đổi giá trị CCR1 để thay đổi độ rộng xung PWM mong muốn.
- Tần số chớp tắt của LED phải đủ nhanh để tạo hiện tượng lưu ảnh cho mắt, khi đó ta sẽ thấy LED sáng mờ thay vì thấy nó chớp tắt liên tục.

Mọi thắc mắc các bạn có thể post trên forum hoặc hỏi các Advisor để được giúp đỡ nhé.
:)
4/ Code tham khảo: cách cấu hình timer, kết hợp Timer Interrupt và Low Power Mode.
Các bạn chú ý hàn thêm con thạch anh đi kèm với kit nếu muốn dùng code demo bên dưới (chân ngắn, hàn cẩn thận), hoặc chuyển clock source khác và chỉnh lại tần số nhé.

Code:
#include <msp430g2553.h>
 
void main (void){
    WDTCTL = WDTPW + WDTHOLD;
 
    //initPort
    P1DIR |= BIT0;
    P1OUT |= BIT0;
 
    //initTimerA0
    TA0CTL = TASSEL_1 + MC_1 + ID_0+ TAIE ;    //ACLK(crystal 32768 Hz), Divided by 1,Up Mode, Enable Interrupt
    TA0CCR0 = 32767;
    //TA0CCR1 = 62500;
    //TA0CCTL0=CCIE;                            // Capture Interupt
    //TA0CCTL1 = CCIE;
 
    _BIS_SR(LPM0_bits + GIE);                //Enable LPM0 and Global Interrupt
}
 
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TAIV_Interrupt (void) {
    switch(TA0IV)
    {
    //case 0x02:
    //{
    //    P1OUT ^= BIT0;
    //    TA0CCR1+=500;
    //    break;
    //}
    case 0x0A:    // Search User Guide: TAIV Register
    {
        P1OUT ^= BIT0;
        break;
    }
    }
}
 

black_knight

Trứng gà
Đề nghị post luôn cả bài học cho ngày tiếp theo để cho các bạn chuẩn bị, xem trước.
 

Siêu Nhân Gao

Trứng gà
Đề nghị post luôn cả bài học cho ngày tiếp theo để cho các bạn chuẩn bị, xem trước.
Đã xem rồi, nhưng quên mất :gach
Chào bạn,
MÌnh không biết là bạn bao nhiêu tuổi rồi nhưng cách trao đổi của bạn khiến cho người đọc cảm thấy gai mắt, khó chịu, không biết người bị hướng đến trong bài viết của bạn họ sẽ còn cảm thấy thiếu tôn trọng đến thế nào nữa. Câu cú của bạn không đủ chủ ngữ, vị ngữ, lủng củng, ăn nói trống không và mang tính sai khiến, áp đặt.

Mình thấy, đây là một diễn đàn học thuật, trao đổi kiến thức, kinh nghiệm, các thành viên trên diễn đàn là người lớn tuổi chắc chắn cũng không ít. Khoảng cách về thế hệ có thể làm các đàn anh không hiểu được cách-mà-bạn-dùng-ngôn-từ. Tốt nhất thì khi vào một diễn đàn học thuật, có nhiều đàn anh, nhiều thầy cô, bạn nên nói năng lịch sự hơn, kính trọng người lớn hơn.

Nếu bạn còn trẻ thì nên tập thói quen đối nhân xử thế, trau dồi văn hóa giao tiếp. Nếu bạn đã lớn thì hãy tự hỏi xem mình đã có nhận thức về ngôn từ mình sử dụng hay chưa, nếu chưa hãy tập cách trau dồi văn hóa giao tiếp, nếu có nhận thức, hãy sửa đổi để hoàn thiện mình.

Nếu hiểu 1 chút về tinh thần PIF thì mình nghĩ họ không cần chúng ta biết ơn về bất kỳ chuyện gì, nhưng ít nhất, bạn hãy lịch sự. :)
 
Top