Đánh giá chủ đề:
  • 70 Vote(s) - Trung bình 3.16
  • 1
  • 2
  • 3
  • 4
  • 5
LẬP TRÌNH ĐIỀU KHIỂN DAO ĐỘNG TRUY XUẤT IO
Bài viết: #1
Chương I. LẬP TRÌNH ĐIỀU KHIỂN DAO ĐỘNG TRUY XUẤT
IO


I. SƠ LƯỢC TÍNH NĂNG VÀ TỔ CHỨC BỘ NHỚ HỌ VI ĐIỀU KHIỂN MSP430

1. Sơ lược tính năng vi điều khiển họ MSP430

MSP430 là họ vi điều khiển cấu trúc RISC 16-bit được sản xuất bởi công ty Texas Instruments.

MSP là chữ viết tắt của “MIXED SIGNAL PROCESSORS”. Là dòng vi điều khiển siêu tiết kiệm năng lượng, sử dụng nguồn thấp, khoảng điện áp nguồn cấp từ 1.8V-3.6V.

MSP430 kết hợp các đặc tính của một CPU hiện đại và tích hợp sẵn các module ngoại vi. Đặc biệt Chíp MSP430 là giải pháp thích hợp cho những ứng dụng yêu cầu trộn tín hiệu.

MSP430 được sử dụng và biết đến đặc biệt trong những ứng dụng về thiết bị đo có sử dụng hoặc không sử dụng LCD với chế độ nguồn nuôi rất thấp. Với chế độ nguồn nuôi từ khoảng 1,8V đến 3,6V và 5 chế độ tiết kiệm nguồn. Với sự tiêu thụ dòng rất thấp trong chế độ tích cực thì dòng
tiêu thụ là 200μA, 1Mhz, 2.2V; với chế độ Standby thì dòng tiêu thụ là 0.7μA. Và chế
độ tắt chỉ duy trì bộ nhớ RAM thì dòng tiêu thụ rất nhỏ 0.1μA.

MSP430 có ưu thế về chế độ nguồn nuôi. Thời gian chuyển chế độ từ chế độ standby sang chế độ tích cực rất nhỏ (<6us). Và có tích hợp 96 kiểu hình cho hiển thị LCD, 16 bit thanh ghi, 16 bit RISC CPU. Có một đặc điểm của họ MSP430 là khi MCU không có tín hiệu dao động ngoại thì MSP sẽ tự động chuyển sang hoạt động ở chế độ dao động nội.

Một số tín năng thông dụng của họ Vi điều khiển MSP430:
− Điện áp nguồn thấp từ 1.8V đến 3.6V.
− Mức tiêu thụ năng lượng cực thấp:
• Chế độ hoạt động: 270 μA tại 1MHz, 2.2V.
• Chế độ chờ: 0.7 μA.
• Chế độ tắt (Duy trì RAM): 0.1 μA.
− 5 chế độ tiết kiệm năng lượng.
− Trở lại chế độ hoạt động từ chế độ chờ cực nhanh với thời gian ít hơn 1μs.
− Kiến trúc 16bit RISC CPU, thời gian chu kỳ lệnh 62.5ns.
− Cấu hình các module Clock cơ bản:
• Tần số nội lên tới 16 MHz với 4 hiệu chỉnh tần số ± 1%.
• Thạch anh 32 KHz.
• Bộ dao động nội tần số thấp sử dụng nguồn rất thấp.
• Nguồn xung nhịp bên ngoài.
− Timer A 16 Bit với 2 thanh ghi Capture/Compare
− Bộ so sánh A+ trên chip với chức năng so sánh tín hiệu tương tự hoặc Slope A/D (MSP430x20x1).
− Bộ dò sự yếu nguồn.
− Mô phỏng logic trên mạch với giao diện Spy-Wire-Bi.
− Bộ nhớ MSP430F2254 gồm: 256B + 16KB Flash Memory 256B RAM
2. Tổ chức bộ nhớ

Dung lượng bộ nhớ on – chip là 64Kx8 nhưng dung lượng tối đa là 1M vì vậy địa chỉ của bộ nhớ chương trình phải có độ rộng 20 – bit, các ô nhớ từ 10000h đến FFFFFh được kết nối thêm bên ngoài (mở rộng bộ nhớ).
Dung lượng nội 64K được bố trí như sau (Ví dụ dòng MSP430F2254):
00h đến 0Fh: Các thanh ghi SFR 8 bit.
010h đến 0FFh: Các thanh ghi ngoại vi 8 – bit.
0100h đến 01FFh: Các thanh ghi ngoại vi 16 – bit.
RAM: luôn bắt đầu tại địa chỉ 0200h và địa chỉ kết tùy vào dung lượng RAM của vi điều khiển cụ thể. Ví dụ MSP430F2254 RAM 512B nên địa chỉ kết thúc là 03FFh.
Boot memory:
0C00h – 0FFFh chứa chương trình bootloader, vùng nhớ này có dung lượng 1Kb.
Information memory: Cấu tạo bằng bộ nhớ Flash dung lượng 256B dùng để lưu trữ những thông tin quan trọng cần duy trì khi mất điện. Ví dụ số ID thiết bị, địa chỉ mạng, các biến cần giữ giá trị khi mất điện
Code memory: Chứa chương trình hoặc dữ liệu hằng số.
Interrupt and reset vectors: Dùng để quản lý các “exceptions” khi hoạt động bình thường của vi điều khiển bị ngắt quản hay reset thiết bị.
[Image: 2712201182346433.png] II. GIỚI THIỆU PHẦN
MỀM IAR


1. Tạo dự án mới
- Project -> Create New Project…

- Chọn Empty project -> Click OK.

- Chọn thư mục lưu trữ, đặt tên cho dự án.

- Chọn File -> New -> File và lưu trữ dưới dạng .c để lập trình.

- Click chuột phải vào tên dự án trên cửa sổ Workspace -> chọn Add -> Add Files… để thêm tập tin .c chứa chương trình nguồn vào dự án.

- Biên dịch chương trình: Project -> Compile (hay Project -> Rebuild All).

2. Chọn Vi điều khiển

Project -> Options.. Trong mục General Options, tab Target, mục Devices, chọn tên vi điều khiển đang sử dụng.

3. Mô phỏng dự án trên phần mềm

a. Bắt đầu mô phỏng: Project -> Download and Debug…
b. Xem thanh ghi: View -> Register.
c. Xem biến có trong chương trình: View -> Watch -> Watch 1.
d. Chạy chương trình từng bước 1: Debug -> Step Into (F11).
e. Chạy từng bước bỏ qua chương trình con: Debug -> Step Over (F10).
f. Thoát khỏi chương trình con không điều kiện: Debug -> Step Out (Shift + F11).
e. Chạy chương trình liên tục: Debug -> Go (F5).
g. Reset vi điều khiển:Debug -> Reset.
h. Dừng khi chức năng Go đang thực hiện: Debug -> Break.
l. Thoát khỏi Debug: Debug -> Stop Debugging.
k. Đặt điểm ngắt:kích đôi vào dòng lệnh cần đặt, kích đôi lần nữa để bỏ điểm ngắt.

Cấu hình để Debug với phần cứng: Project -> Options , ở mục Debugger trong cửa sổ Options,
tab Setup -> Driver -> FET Debugger.
Mục FET Debugger chọn tab Setup -> Connection -> TexasInstrument USB – IF để bebug với phần cứng LaunchPad. Các công cụ debug tương tự như với phần mềm.

III. BỘ GIAO ĐỘNG VÀ LẬP TRÌNH ĐIỀU KHIỂN

1. Sơ lược về bộ dao động của vi điều khiển MSP430

Sơ đồ khối:
[Image: 2712201182348955.png]

Bộ dao động của vi điều khiển MSP430 có khả năng tạo ra các nguồn xung đồng hồ như sau:

- LFXT1CLK: Bộ giao động tần số thấp / tần số cao, bộ giao động này có thể hoạt động với thanh anh đồng hồ hay một nguồn dao động 32,768Hz bên ngoài, hoặc với thạch anh hay nguồn dao động tần số cao từ bên ngoài từ 400KHz đến 16MHz.

- XT2CLK: Đây là bộ dao động tùy chọn, nó có thể hoạt động với thạch anh hay nguồn dao động ngoài với tần số từ 400 – 16MHz.

- DCOCLK: Bộ dao động điều khiển số on – chip.

- VLOCLK: Bộ dao động nội năng lượng thấp, tần số điển hình 12KHz. Từ 4 bộ dao động trên khối mạch tạo xung đồng hồ trên cấp 3 nguồn xung chính cho hệ thống hoạt động:

- ACLK – Auxiliary clock: có thể được chọn hoạt động với nguồn xung đồng hồ từ LFXT1CLK hay VLOCLK bằng phần mềm. Đầu ra có thể dùng phần mềm chia xuống 1,2, 4 hay 8 để cấp cho các ngoại vi.

- MCLK – Master clock: có thể được chọn hoạt động với LFXT1CLK, VLOCLK, XT2CLK (nếu có tích hợp) hay DCOCLK bằng phần mềm. Đầu ra MCLK có thể dùng phần mềm chia xuống 1,2, 4 hay 8 để cấp CPU và hệ thống.

- SMCLK – Sub-main clock: có thể được chọn hoạt động với LFXT1CLK, VLOCLK, XT2CLK (nếu có tích hợp) hay DCOCLK bằng phần mềm . Đầu ra MCLK có thể dùng phần mềm chia xuống 1, 2, 4 hay 8 để cấp ngoại vi.

2. Lập trình điều khiển

a. Cấu hình LFXT1CLK

- Chế độ tần số cao: hoạt động với thạch anh hay bộ dao động ngoài tần số cao. Cấu hình chế độ này như sau:
[Image: 2712201182350832.png]
Ở chế độ này chúng ta phải chọn khoảng tần số dao động dựa vào 2 bit LFXT1Sx BCSCTL3
[Image: 2712201182352807.png]
Hai bit này được định nghĩa trên IAR như sau:

#define LFXT1S0 (0x10) /* Mode 0 for LFXT1 (XTS = 0) */

#define LFXT1S1 (0x20) /* Mode 1 for LFXT1 (XTS = 0) */

#define LFXT1S_0 (0x00) /* Mode 0 for LFXT1 : Normal operation */

#define LFXT1S_1 (0x10) /* Mode 1 for LFXT1 : Reserved */

#define LFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */

#define LFXT1S_3 (0x30) /* Mode 3 for LFXT1 14igital input signal */

Các thanh ghi:
- Thanh ghi điều khiển 1
[Image: 2712201182354935.png]
Ví dụ 1: Lập trình cho LFXT1CLK hoạt động ở chế độ tần số cao, thạch anh sử dụng từ 3-16MHz, tụ cấu hình 1pf, ngỏ ra chia 2

BCSCTL1 |= XTS;

BCSCTL3 |= XCAP_0 + LFXT1S_2;

[Image: 2712201182356718.png]
Giản đồ tần số dao động của DCOCLK

Các giá trị cân chỉnh đã được định nghĩa sẵn trong IAR:

CALBC1_1MHZ, CALBC1_8MHZ,
CALBC1_12MHZ, CALBC1_16MHZ

CALDCO_1MHZ, CALDCO_8MHZ,
CALDCO_12MHZ, CALDCO_16MHZ

- Lệnh cấu hình:

Ví dụ thiết lập DCOCLK tạo tần số khoảng 1MHz:

BCSCTL1 = CALBC1_1MHZ;

DCOCTL = CALDCO_1MHZ;

c. Cấu hình ALCK, MCLK, SMCLK


- ACLK: Cấu hình tỉ lệ chia đầu ra dùng hai bit DIVAx trong thanh ghi BCSCTL1
[Image: 2712201182357656.png]
Các bit này được định nghĩa trong IAR như sau:

#define DIVA_0 (0x00) /* MCLK Divider 0: /1 */

#define DIVA_1 (0x10) /* MCLK Divider 1: /2 */

#define DIVA_2 (0x20) /* MCLK Divider 2: /4 */

#define DIVA_3 (0x30) /* MCLK Divider 3: /8 */

#define DIVA0 (0x10) /* MCLK Divider 0 */

#define DIVA1 (0x20) /* MCLK Divider 1 */

Ví dụ lập trình chia tần số ACLK xuống 4 lần:

BCSCTL1 |= DIVA_2;

- MCLK: Thực hiện các công việc sau

+ Chọn mạch dao động.
+ Chọn tỉ lệ chia.
+ Tắt mở CPU.
Chọn mạch dao động dùng hai bit SELMx của thanh ghi BCSCTL2

[Image: 271220118240995.png]
Hai bit này được định nghĩa trong IAR như sau:

#define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */

#define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */

#define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */

#define SELM_3 (0xC0) /* MCLK Source Select 3: LFXT1CLK */

#define SELM0 (0x40) /* MCLK Source Select 0 */

#define SELM1 (0x80) /* MCLK Source Select 1 */

Chọn tỉ lệ chia sử dụng hai bit hai bit DIVMx của thanh ghi BCSCTL2
[Image: 27122011824431.png]

Hai bit này được định nghĩa trong IAR như sau:

#define DIVM_0 (0x00) /* MCLK Divider 0: /1 */

#define DIVM_1 (0x10) /* MCLK Divider 1: /2 */

#define DIVM_2 (0x20) /* MCLK Divider 2: /4 */

#define DIVM_3 (0x30) /* MCLK Divider 3: /8 */

#define DIVM0 (0x10) /* MCLK Divider 0 */

#define DIVM1 (0x20) /* MCLK Divider 1 */

Tắt mở CPU dùng bit CPUOFF của thanh ghi trạng thái SR, CPUOFF = 0 mở CPU.

_BIS_SR(CPUOFF); //tắt CPU

- SMCLK: Thực hiện các công việc sau

+ Chọn bộ dao động.

[Image: 271220118245626.png]
Hai bit này được định nghĩa trong IAR như sau:


#define DIVS_0 (0x00) /* SMCLK Divider 0: /1 */

#define DIVS_1 (0x02) /* SMCLK Divider 1: /2 */

#define DIVS_2 (0x04) /* SMCLK Divider 2: /4 */

#define DIVS_3 (0x06) /* SMCLK Divider 3: /8 */

#define DIVS0 (0x02) /* SMCLK Divider 0 */

#define DIVS1 (0x04) /* SMCLK Divider 1 */

Tắt SMCLK: sử dụng bit SCG1 trong thanh ghi trạng thái, SCG1 = 1 tắt SMCLK

_BIS_SR(SCG1); //tắt SMCLK

_BIC_SR(SCG1); //mở SMCLK

3. Các bước lập trình bộ dao động cho vi điều khiển MSP430

- Bước 1: Xác định bộ dao động sẽ sử dụng: VLOCLK, LFXT1CLK hay DCOCLK

- Bước 2: Xác định các nguồn xung đồng hồ sẽ sử dụng – ACLK, MCLK, SMCLK, chọn bộ dao động.

- Bước 3: Chọn tỉ lệ chia cho từng nguồn xung đồng hồ.

Ví dụ cấu hình MCLK hoạt động với DCOCLK, tần số hoạt động 12MHz, chia
4. Mã lệnh như sau:

/*Chọn tần số cho DCOCLK*/

BCSCTL1 = CALBC1_12MHZ;

DCOCTL = CALDCO_12MHZ;

/*Chọn DCOCLK cho MCLK (Mặc định)*/

/*Ghi SELM_0 hoặc SELM_1 vào BCSCTL2*/

BCSCTL2 |= SELM_0;

/*Thiết lập tỉ lệ chia 4: Ghi DIVM_2 vào thanh ghi BCSCTL2*/

BCSCTL2 |= DIV_2;

IV. BỘ ĐỊNH THỜI A – NGẮT BỘ ĐỊNH THỜI A

1. Bộ định thời A, chế độ Continuous

Sơ đồ khối:
[Image: 271220118247937.png]
[Image: 271220118248891.png]
Chế độ này có thể dùng để tạo ngắt hệ thống (ví dụ: mỗi 1ms), cách thực hiện:

- Nạp giá trị cho thanh ghi chu kỳ TACCR0 = 1000.

- Khi chu kỳ đếm kết thúc, hay TAR đếm đến 1000, giá trị chu kỳ mới được cộng vào thanh ghi chu kỳ,
TACCR0 = TACCR0 + 1000.

b. Chọn xung đồng hồ cho bộ định thời A

Sử dụng hai bit TASELx của thanh ghi TACTL để chọn nguồn xung đồng hồ cho bộ định thời. Cụ thể như bảng sau:
[Image: 2712201182411696.png]
c. Cho phép ngắt và khai báo vector ngắt

Để cho phép ngắt: chúng ta cho bit CCIE của thanh ghi TACCTL0 lên 1.

Đoạn mã khởi động bộ định thời:

TACCR0 = 1000;

TACCTL0 = CCIE;

TACTL |= TASSEL_2 + MC_2; //Xung
CK: SMCLK, Mode: continuous

_BIS_SR(GIE); //Cho phép ngắt toàn cục

Khai báo vector ngắt và viết chương trình ngắt:

#pragma vector=TIMERA0_VECTOR

__interrupt void Timer_A (void)

{
tick++;
TACCR0 += 1000;
}

d. Lập trình bộ định thời

- Các thanh ghi bộ định thời A

Thanh ghi điều khiển
[Image: 2712201182415201.png]

[Image: 2712201182418465.png]

[Image: 2712201182421592.png]

[img]file:///C:/Users/VUONG/AppData/Local/Temp/msohtml1/01/clip_image002.jpg[/img]
- Các hằng số của Timer A trên IAR:

#define MC_0 (0*0x10u) /* Timer A mode control: 0 - Stop */

#define MC_1 (1*0x10u) /* Timer A mode control: 1 - Up to CCR0 */

#define MC_2 (2*0x10u) /* Timer A mode control: 2 - Continous up */

#define MC_3 (3*0x10u) /* Timer A mode control: 3 - Up/Down */

#define ID_0 (0*0x40u) /* Timer A input divider: 0 - /1 */

#define ID_1 (1*0x40u) /* Timer A input divider: 1 - /2 */

#define ID_2 (2*0x40u) /* Timer A input divider: 2 - /4 */

#define ID_3 (3*0x40u) /* Timer A input divider: 3 - /8 */

#define TASSEL_0 (0*0x100u) /* Timer A clock source select: 0 -TACLK */

#define TASSEL_1 (1*0x100u) /* Timer A clock source select: 1 - ACLK */

#define TASSEL_2 (2*0x100u) /* Timer A clock source select: 2 - SMCLK */

#define TASSEL_3 (3*0x100u) /* Timer A clock source select: 3 - INCLK */

#define TACLR (0x0004u) /* Timer A counter clear */

#define TAIE (0x0002u) /* Timer A counter interrupt enable */

#define TAIFG (0x0001u) /* Timer A counter interrupt flag */

#define CCIE (0x0010u) /* Capture/compare interrupt enable */

#define CCIFG (0x0001u) /* Capture/compare interrupt flag */

e. Chương trình delay

Prototype: void delay_ms(unsigned int ms)

Đối số vào: ms – số mili giây cần trể.

Mã lệnh:

void delay_ms(unsigned int ms)

{

unsigned int t;

t=tick+ms;

while(tick < t);

}


Điều kiện:
chương trình phải cấu hình ngắt CCIE mỗi 1ms

V. IO VÀ LẬP TRÌNH ĐIỀU KHIỂN


Mỗi IO của MSP430 được quản lý bởi các thanh ghi: PxIN, PxOUT, PxDIR, PxREN, PxDS, PxSEL.
- PxIN: thanh ghi ngỏ vào, chứa giá trị logic tại các chân tương ứng khi nó được
cấu hình là ngỏ vào.

Bit= 0: Chân tương ứng có logic 0.

Bit= 1: Chân tương ứng có logic 1.

- PxOUT: thanh ghi ngỏ ra, chứa giá trị logic ghi ra các chân tương ứng của port
khi nó được cấu hình là ngỏ ra, tắt điện trở kéo lên.

Bit= 0: Ngỏ ra tương ứng có logic 0.

Bit= 1: Ngỏ ra tương ứng có logic 1.

Nếu điện trở kéo lên được cho phép, bit tương ứng của PxOUT dùng để chọn kéo lên hay kéo xuống.

Bit = 0: Kéo xuống.

Bit= 1: Kéo lên.

- PxDIR: thanh ghi chọn hướng, mỗi bit của thanh ghi PxDIR cho phép chọn hướngcho từng

chân I/O riêng lẻ tương ứng. Không phụ thuộc chức năng được chọn cho I/O

Bit = 0: Ngỏ vào.

Bit = 1: Ngỏ ra.

- PxREN: Thanh ghi cho phép điện trở kéo lên/kéo xuống, việc chọn kéo lên hay xuống là do

thanh ghi PxOUT quyết định.

Bit= 0: Không cho phép.

Bit= 1: Cho phép.

- PxSEL và PxSEL2: Thanh ghi chọn chức năng
[Image: 2712201182425186.png]



Trả lời
Bài viết: #2
có ai có phần mềm lập trình cho MSP430 không nhỉ .share cho mình nữa mình đang cần
Thank you very much.
Trả lời
Bài viết: #3
Link download phần mềm đây bạn. IAR và cả CCS.
You are not allowed to view links. Register or Login to view.
Trả lời
Bài viết: #4
Chào anh Mod. anh cho em hỏi làm thế nào để xuất ra file Hex cho phần mềm CCS v5.1. em cũng có xem họ có chỉ dẫn cách xuất file Hex trong V4 và V3. nhưng V5 thì không còn giống như thế nữa. cám ơn anh trước nhé
Trả lời
Bài viết: #5
Chào bạn! Bạn tham khảo link này nhé! You are not allowed to view links. Register or Login to view.
Trả lời
Bài viết: #6
anh ơi sao nó ko có chương 2 vậy anh
thank anh vì bài viết có ích
Trả lời
Bài viết: #7
cho em xin chương 2 với @@
Trả lời


Đi tới chuyên mục:


Thành viên đang xem chủ đề: 1 Khách