78
Tài liuhướng dn thí nghim MSPEXP430FG4618 1| Page Bmôn KThut ĐinT, khoa Đin‐ĐinT, trường ĐHBK‐ĐHQG TP.HCM Son: Hoàng Trang, Bùi QucBo. Đối tượng dùng tài liu này: - Sinh viên mun tìm hiu vMCU MSP430 ca hãng TI. - Sinh viên khoa Đin-Đin Thc môn thí nghim Vi XLý ti Bmôn Đin T. Mc tiêu: Sau khi sinh viên đọc xong tài liu này, sinh viên có th: - Biết được các đặc tính cơ bn ca kit thí nghim MSP-EXP430FG4618 - Đặc tính và cách cài đặt bDebug MSP-FET430UIF. - Cách sdng IAR. - Thc hin các bài liên quan đến xut/nhp, ngt, timer Vi mc tiêu đó, tài liu này được trình bày theo các phn sau đây: I. Kit MSP-EXP430FG4618 1. Gii thiu chung: Kit thí nghim MSP-EXP430FG4618 ca hãng TI vi skết hp 2 chip MSP430FG4618 và MSP430F2013 nên cung cp hu hết các ngoi vi trong hMSP430. Ngoài ra, các header cho các module thnghim TI wireless và RAM dung lượng ln trên kit này đã giúp kit MSP- EXP430FG4618 khá phù hp như là 1 nn tng cho các ng dng vwireless. Hai chip 4618 và 2013 có thgiao tiếp vi nhau (xem hình 2) hoc giao tiếp vi các thiết bbên ngoài. Để lp trình và debug, chúng ta có 2 môi trường riêng bit được htr: IAR Embeeded Workbench và TI Code Composer Essential (CCE). Thiết bđể lp trình và debug cho chip TI là TI USB Flash Emulation Tool (FET), trong tài liu này là MSP-FET430UIF, sđược trình bày trong phn III. Hình 1 trình bày hình nh thc ca kit MSP-EXP430FG4618 ti bmôn Đin T

Thi Nghiem Msp430

Embed Size (px)

Citation preview

Page 1: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

1 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Đối tượng dùng tài liệu này:

- Sinh viên muốn tìm hiểu về MCU MSP430 của hãng TI. - Sinh viên khoa Điện-Điện Tử học môn thí nghiệm Vi Xử Lý tại Bộ môn Điện Tử.

Mục tiêu:

Sau khi sinh viên đọc xong tài liệu này, sinh viên có thể:

- Biết được các đặc tính cơ bản của kit thí nghiệm MSP-EXP430FG4618 - Đặc tính và cách cài đặt bộ Debug MSP-FET430UIF. - Cách sử dụng IAR. - Thực hiện các bài liên quan đến xuất/nhập, ngắt, timer

Với mục tiêu đó, tài liệu này được trình bày theo các phần sau đây:

I. Kit MSP-EXP430FG4618

1. Giới thiệu chung:

Kit thí nghiệm MSP-EXP430FG4618 của hãng TI với sự kết hợp 2 chip MSP430FG4618 và MSP430F2013 nên cung cấp hầu hết các ngoại vi trong họ MSP430. Ngoài ra, các header cho các module thử nghiệm TI wireless và RAM dung lượng lớn trên kit này đã giúp kit MSP-EXP430FG4618 khá phù hợp như là 1 nền tảng cho các ứng dụng về wireless. Hai chip 4618 và 2013 có thể giao tiếp với nhau (xem hình 2) hoặc giao tiếp với các thiết bị bên ngoài.

Để lập trình và debug, chúng ta có 2 môi trường riêng biệt được hỗ trợ: IAR Embeeded Workbench và TI Code Composer Essential (CCE). Thiết bị để lập trình và debug cho chip TI là TI USB Flash Emulation Tool (FET), trong tài liệu này là MSP-FET430UIF, sẽ được trình bày trong phần III.

Hình 1 trình bày hình ảnh thực của kit MSP-EXP430FG4618 tại bộ môn Điện Tử

Page 2: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

2 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Hình 1. Hình ảnh thực của kit MSP-EXP430FG4618

2. Các đặc tính của kit MSP-EXP430FG4618

Để thuận tiện theo dõi, sơ đồ khối của kit MSP-EXP430FG4618 được trình bày trong hình 2.

Page 3: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

3 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Hình 2. Sơ đồ khối của kit MSP-EXP430FG4618

2.1. JTAG

Hai header JTAG1 và JTAG2 để lập trình và debug mỗi MSP430 riêng biệt: JTAG1 cho MSP430FG4618 và JTAG2 cho MSP430F2013. JTAG1 cho MSP430FG4618 dùng kiểu kết nối JTAG chuẩn 4 dây, còn JTAG cho MSP430F2013 dùng kiểu giao tiếp JTAG Spy-Bi-Wire (2 dây). Điều này cho phép các chân ở các port được sử dụng trong quá trình debug. 2.2. Microphone: Microphone (MIC) được kết nối với MSP430FG4618 qua các chân trong hình 3. Microphone được kích hoạt hay không qua chân của MSP430FG4618. Câu hỏi dành cho sinh viên: giải thích cơ chế điều khiển, thu nhận tín hiệu MIC của MSP430FG4618 qua các chân như hình 3?

Không gian số 4 này 

chừa sẵn để sử dụng sau 

Không gian 

này: chỉ có 

header, 

chừa sẵn để 

sử dụng sau 

Page 4: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

4 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Hình 3: Kết nối microphone

2.3. Buzzer Buzzer được kết nối với port I/O P3.5 của MSP430FG4618. Buzzer có thể hoàn toàn bị cách ly với jumper JP1. Lưu ý: trong quá trình thí nghiệm, sau khi thử nghiệm thành công, sinh viên nên tháo JP1 này để tránh làm ảnh hưởng người xung quanh. 2.4. LCD LCD trong kit này là loại SoftBaugh SBLCDA4, nó có 4 chế độ khác nhau: tĩnh, 2-mux, 3-mux và 4-mux. LCD này được hỗ trợ khi giao tiếp với MSP430FG4618 qua LCD driver đã có sẵn. Thông tin thêm về LCD này, sinh viên có thể google hoặc download từ trang web của bộ môn Điện Tử. 2.5. Nút nhấn S1 và S2: Hai nút nhấn S1 và S2 được nối với onnected to the interrupt capable MSP430FG4618 digital I/O port, P1.

Hình 4: kết nối switch

2.6. LED Kit thí nghiệm có tổng cộng 4 LED, 3 LED (LED1, LED2, và LED4) được kết nối với chip MSP430FG4618, và 1 LED còn lại (LED3) được kết nối với chip MSP430F2013. Các LED này được sử dụng chủ yếu với mục đích hiển thị. 2 LED LED3 và LED4 có thể được ngắt khỏi kết

Page 5: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

5 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

nối bằng Jumper để tiết kiệm năng lượng cho kit. (LED3 dùng jumper JP2, LED4 dùng JP3). Xem tóm tắt trong bảng 1 và hình 5 Bảng 1 trình bày về kết nối các LED

Bảng 1: Kết nối LED LED Kết nối với chip Port Ghi chú Jumper LED1 MSP430FG4618 P2.2 LED2 MSP430FG4618 P2.1 LED3 MSP430F2013 P1.0 JP2 LED4 MSP430FG4618 P5.1 JP3

Hình 5: Các kết nối LED.

2.7. Giao tiếp RS232 For a serial interface to a PC, Chip MSP430FG4618 hỗ trợ chuẩn giao tiếp RS-232 9 chân thông qua ngoại vi USC của chip (được cấu hình trong chế độ UART).

Hình 6: Giao tiếp RS232

Chân 74, P2.5/UCA0RXD

Chân 75, P2.4/UCA0TXD

 

 

 

Page 6: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

6 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

2.8. Jack headphone 3.5mm: Ngõ ra headphone được kết nối với Op-Amp OA2 đã được tích hợp sẵn trong chip MSP430FG4618 (qua chân P6.5 Ạ/OA2O). Ngõ vào cho bộ Op-Amp này có thể được kết nối bên trong đến chân ngõ ra DAC12 của chip MSP430FG4618. Lưu ý: có vài lựa chọn suy hao được cung cấp nội bộ bên trong chip hoặc qua hardware bằng cách sử dụng Jumper JP4.

Hình 7: Headphone jack 3.5mm

2.9. Các jumper

Để thuận tiện khi thao tác thí nghiệm, hình sau đây trình bày vị trí các jumper

Page 7: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

7 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Hình 8: Vị trí các Jumper trên kit MSP430FG4618

Bảng 2 tóm tắt các chức năng của các jumper

Bảng 2. Chức năng các jumper

Header Chức năng khi dung Jumper kết nối Khi không dùng jumper kết nối

Yêu cầu

JTAG1 Bộ FET để lập trình-debug FG4618 FG4618 không được mô phỏng

X

JTAG2 Bộ FET để lập trình-debug F2013 F2013 không được mô phỏng

X

PWR1 Cung cấp nguồn cho FG4618. Ngoài ra, dùng để đo dòng

FG4618 không được cung cấp nguồn

Yêu cầu cần gắn jumper này để sử dụng FG4618

PWR2 Cung cấp nguồn cho F2013. Ngoài ra, dùng để đo dòng

F2013 không được cung cấp nguồn

Yêu cầu cần gắn jumper này để sử dụng F2013

Page 8: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

8 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

BATT Cung cấp nguồn cho kit bằng 2 pin AAA. Ngoài ra, dung để đo dòng tổng cộng của kit

Pin không cung cấp nguồn cho cả 2 chip MSP430

Yêu cầu khi cần dùng pin

JP1 Để sử dụng buzzer (nối với chân FG4618-P3.5)

Không dùng buzzer Tùy chọn

JP2 Cho phép LED3 hoạt động (LED3 nối với chân F2013-P1.0)

Không dùng LED3 Tùy chọn/ yêu cầu khi dùng LED3

JP3 Cho phép LED4 hoạt động (LED4 nối với chân FG4618-P5.1)

Không dùng LED4 Tùy chọn/ yêu cầu khi dùng LED4

JP4 Suy hao mức điện áp ra của audio (69%)

98% suy hao của ngõ ra audio DAC12

Tùy chọn

H1 (1-2, 3-4)

Cấu hình cho I2C 1-2: SDA-UCBOSDA 3-4: SCL-UCBOSCL

Không giao tiếp qua I2C Yêu cầu cho giao tiếp bên trong processor

H1 (1-2, 3-4, 5-6, 7-8)

Cấu hình cho SPI 1-2: SDI – UCB0SIMO 3-4: SDO – UCB0SOMI 5-6: P1.4 – P3.0 (CS) 7-8: SCLK – UCB0CLK

Không giao tiếp qua SPI Yêu cầu cho giao tiếp bên trong processor

Vcc VCC_1: 3 chân phía dưới. Dùng cho FG4618/JTAG1. VCC_2: 3 chân phía trên. Dùng cho F2013/JTAG2. LCL: cung cấp Vcc đến FET. FET: nguồn từ FET (jumper BATT không được thiết lập)

Nguồn từ JTAG Yêu cầu khi sử dụng không cần pin

Page 9: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

9 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

3. Sơ đồ mạch của kit MSP-EXP430FG4618

Page 10: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

10 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

II. Đặc tính và cách cài đặt bộ Debug MSP-FET430UIF

1. Giới thiệu công cụ FET

FET (Flash Emulation Tool) cho phép lập trình-debug họ MSP430 qua JTAG chuẩn (4 dây) và JTAG tiết kiệm chân (2 dây, Spy Bi-Wire). Do đó, FET được dùng để phát triển các ứng dụng trên họ MCU này. Có 2 cơ chế giao tiếp của FET là qua USB cổng song song, tương ứng với các loại MSP-FET430UIF (xem hình bên dưới) và MSP-FET430PIF. Các tính năng của 2 loại FET này được trình bày trong bảng dưới đây.

FET430UIF

Chức năng giữa 2 loại FET: FET430UIF và FET430PIF

Đặc tính MSP-FET430UIF MSP-FET430PIF Hỗ trợ tất cả họ MSP430 dựa trên Flash (F1xx, F2xx, F4xx, F5xx)

x x

Cho phép cấu hình bảo mật JTAG để bảo vệ code

x KHÔNG

Cho phép tạo ra nguồn cấp chỉnh được 1.8V-3.6V ở 100mA

x KHÔNG

Cố định tạo ra nguồn cấp 2.8V

KHÔNG X

Debug dùng JTAG chuẩn 4 dây

x X

Debug dùng JTAG chuẩn 2 dây (Spy-Bi-Wire)

x KHÔNG

Hỗ trợ bởi CCE x X Hỗ trợ bởi IAR x x Với các so sánh trên, FET430UIF có tính năng tốt hơn, và do đó chúng ta sẽ sử dụng công cụ này. Và phần tiếp theo trình bày cách cài đặt FET430UIF.

Page 11: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

11 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

2. Cài đặt FET430UIF

Trong phần này, chúng tôi trình bày cách cài đặt FET430UIF trên Windows 7. Các hệ điều hành khác cũng thực hiện tương tự. Bước 1: Download driver cho FET430UIF và lưu trong máy của bạn. Đối với Windows 7-64 bit: processors.wiki.ti.com/images/d/dc/TUSBWINVCP_Win7-64.zip Đối với Windows 7-32 bit: processors.wiki.ti.com/images/6/6a/TUSBWINVCP_Win7-32.zip Đối với WindowsXP-32 bit: processors.wiki.ti.com/images/7/73/TUSBWINVCP_XP32.zip Đối với WindowsXP-64 bit: processors.wiki.ti.com/images/3/3b/TUSBWINVCP_XP64.zip Cho các hệ điều hành khác, vui long vào website sau: http://processors.wiki.ti.com/index.php/MSP430_JTAG_Interface_USB_Driver Hoặc các driver trên, các bạn có thể vào website của bộ môn Điện Tử để download/ hoặc liên hệ người soạn tài liệu này/ hoặc liên hệ giáo viên hướng dẫn. Bước 2: Gắn FET430UIF vào máy vi tính qua cổng USB Bước 3: Click phải chuột vào Computer/ chọn Properties sẽ cho cửa sổ sau. Tiếp theo click vào Device Manager như hình sau:

Page 12: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

12 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Bước 4: Click phải trên phần thiết bị mà chưa được cài đặt, rồi chọn Properties. Tiếp đến chọn tab Driver / Update Driver… và chọn đường dẫn đến file driver mà bạn đã download ở bước 1.

Page 13: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

13 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

III. Thiết lập cơ bản cho thí nghiệm

Hai phần trên đã trình bày về kit MSP-EXP430FG4618 và FET430UIF. Phần này sẽ trình

bày về các bước thiết lập cơ bản phục vụ cho thí nghiệm Vi Xử Lý tại bộ môn Kỹ Thuật Điện Tử, khoa Điện-Điện Tử, trường Đại Học Bách Khoa-Đại Học Quốc Gia TP.Hồ Chí Minh. Các bước này là cơ bản nhất để bắt đầu thực hiện thí nghiệm, còn các tùy chọn khác, vui lòng xem lại mục I. Trong từng bài thí nghiệm, sẽ trình bày các bước thiết lập thêm tùy thuộc từng bài. Bước 1: thiết lập MSP-EXP430FG4618

- Kiểm tra/sử dụng jumper PWR1 để cung cấp nguồn cho FG4618. (jumper PWR1 nằm khoảng giữa kit, phía bên phải chip M430G4618, nếu đặt kit như vị trí hình 1)

- Kiểm tra/ không sử dụng jumper BATT (jumper BATT ở phía dưới, bên phải kit). Khi thí nghiệm, thiết lập như vậy để không sử dụng pin cung cấp nguồn cho 2 chip với mục đích tiết kiệm pin.

- Kiểm tra/ sử dụng jumper Vcc (jumper Vcc ở phía dưới, bên phải kit). Để thiết lập sử dụng nguồn từ FET (khi không dùng pin), thiết lập jumper ở vị trí FET cho cả 2 hàng 1 và 2 (nghĩa là 2 jumper kết nối, mỗi jumper kết nối 2 header tận cùng bên phải: 2 header phía dưới: dùng cho FG4618/JTAG1, 2 chân phía trên: dùng cho F2013/JTAG2).

Bước 2: Kết nối FET430UIF

- Kết nối dây USB giữa máy tính và FET. - Kết nối dây 14 pin JTAG giữa FET và kit MSP-EXP430FG4618.

Bước 3: sử dụng IAR để lập trình-debug (xem mục IV) Bước 4: tiến hành thí nghiệm. Chúc may mắn.

IV. Sử dụng IAR Embeeded Workbench (http://www.iar.com/)

Để lập trình và debug cho MSP430, chúng ta có 2 môi trường riêng biệt được hỗ trợ: IAR

Embeeded Workbench và TI Code Composer Essential (CCE). IAR được chọn trình bày trong phần này vì tính đơn giản, gọn nhẹ của nó.

Các thông tin chi tiết liên quan về IAR, vui lòng xem tại website http://www.iar.com/ Phần này trình bày cơ bản về sử dụng IAR để tạo 1 project và lập trình trên MSP430.

Bước 1: chạy chương trình IAR Embeeded Workbench IDE

Page 14: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

14 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

(lưu ý: bước này trình bày theo bản cài đặt trên Windows 7, trên các hệ điều hành khác, chi tiết trong bước 1 có thể khác) Start/All Programs/IAR Systems/ IAR Embeeded Workbench Kickstart for MSP430 4.21/ IAR Embeeded Workbench.

Sau đó, giao diện hiện như sau:

Bước 2: Từ cửa sổ giao diện chính, chọn Project/ Create New Project …

Sau đó, giao diện sau sẽ hiện ra và ta qua bước 3 Bước 3: chọn ngôn ngữ sử dụng. Trong thí nghiệm này, chúng ta chọn Empty project hoặc C/main và click OK. Ở đây, trình bày lựa chọn Empty project

Page 15: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

15 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Cửa sổ Save As như sau hiện ra để lưu tên project, đường dẫn project và ta qua bước 4. Bước 4: Chọn đường dẫn muốn lưu project và tên Project. Trong ví dụ này, tên project là lab1 và được lưu trong thư mục “my lab”.

Nếu ở bước 3 chọn Empty project thì có giao diện sau:

Page 16: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

16 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Bước 5: thiết lập các tùy chọn: vi điều khiển, debug, file nạp,…. Chọn Project/Option… (hoặc Alt+F7)

+ Trong mục General Options -> chọn tab Target -> chọn MSP430FG4618 (các bước như trong hình sau)

Page 17: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

17 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Tiếp tục, chọn các tab khác để thiết lập như sau (các lựa chọn còn lại, vui lòng xem help hoặc hỏi người soạn tài liệu này để rõ hơn) Trong tab Output: chọn Output file: Executable Trong tab Library Configuration: chọn Library: CLIB + Trong mục C/C++ Compiler:

Page 18: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

18 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Trong tab Optimizations: chọn level: None (để hỗ trợ tối đa quá trình debug) Trong tab List: chọn Output list file: Assembler mnemonics + Trong mục Debugger: Trong tab Setup: chọn Driver: FET Debugger

Page 19: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

19 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Tiếp đến, trong FET Debugger: Trong tab Setup: chọn Connection: Texas Instrument USB-IF. Xong các chọn lựa ở trên trong bước 5, click OK để lưu lại tùy chọn. Chúng ta qua bước 6. Bước 6: tạo file lập trình File/ New/File, sẽ có giao diện sau:

Page 20: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

20 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Kế tiếp, chúng ta cần viết chương trình trong cửa sổ soạn thảo bên phải. Trong hướng dẫn này, ví dụ nhập code như sau:

/************************************************/ /* Huong dan IAR */ /* Bo mon Dien Tu-khoa D-DT-truong DH Bach Khoa */ /***********************************************/ #include <msp430xG46x.h> void main (void){ volatile unsigned int i; WDTCTL = WDTPW | WDTHOLD; // Dung Watchdog Timer P2DIR |= 0x04; // P2.2: Output while(1){ // lap vo tan i=30000; // Delay do (i--); while (i !=0); P2OUT ^= 0x04; // Dao pin P2.2 bang cach dung exclusive-OR }

} Và chúng ta có kết quả như sau:

Page 21: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

21 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Sau đó, chúng ta lưu file bằng: File/Save. Cửa sổ sau sẽ hiện ra để nhập tên và định dạng file. Chúng ta lưu file: “lab1.c”.

Page 22: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

22 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

File “lab1.c” này nằm trong thư mục mylab, mà chưa được đưa vào project lab1. Để đưa file “lab1.c” vào project để dùng, ta cần: Project/Add file…, một cửa sổ hiện ra và chọn “lab1.c” như giao diện sau:

Lúc này, trong cửa sổ làm việc project sẽ như sau:

Page 23: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

23 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Bước 7: biên dịch file lập trình Thực hiện: Project/Compile (hoặc Ctrl + F7), lúc này IAR sẽ yêu cầu lưu lại Workspace làm việc với giao diện sau. Nhập tên Workspace, trong hướng dẫn này, là lab.eww

Sauk hi lưu Workspace, quá trình biên dịch sẽ được thực hiện. Nếu không có lỗi thì sẽ hiện ra thông báo như sau (còn trong trường hợp lỗi, vì không thể trình bày hết mọi thứ, vui lòng tự sửa lỗi, hay hỏi người hướng dẫn. Chúc may mắn!)

Page 24: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

24 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Bước 8: lập trình-debug cho chip Thực hiện Project/Download and Debug (hoặc Ctrl+D). Để thấy kết quả thực hiện trên kit: Debug/Go (hoặc F5) Trên đây là các bước cơ bản, chắc hẳn chúng ta khi thực hiện sẽ gặp 1 số lỗi nào đó. Vì khuôn khổ giới hạn và người soạn cũng không có tham vọng trình bày hết mọi thứ trong hướng dẫn này, do đó, nếu có lỗi, vui lòng tự tìm hiểu hoặc hỏi người hướng dẫn. Chúc may mắn! Kế tiếp, chúc các bạn vui vẻ khi thực hiện các bài lab sau.

Page 25: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

25 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

V. Các bài thí nghiệm:

Chúng ta sẽ đi qua 3 bài thí nghiệm được thực hiện trong 3 buổi thí nghiệm như sau

Bài 1: GPIO

Lý thuyết

1) Các thanh ghi liên quan đến GPIO: 1.1 Direction Register PxDIR (P1DIR, P2DIR):

Đây là các thanh ghi 8 bit điều khiển chiều của 8 chân port. P1DIR điều khiển PORT1, P2DIR điều khiển PORT2.

Bit = 1: Chân PORT tương ứng được cấu hình thành output Bit = 0: Chân PORT tương ứng được cấu hình thành input

1.2 Input Register (PxIN): Đây là các thanh ghi 8 bit chứa giá trị đọc được từ các chân PORT.

Bit = 1: Chân PORT tương ứng ở mức cao Bit = 0: Chân PORT tương ứng ở mức thấp.

1.3 Output Register (PxOUT): Đây là thanh ghi điều khiển ngõ ra của các PORT.

Bit = 1: Xuất mức cao ra chân PORT tương ứng. Bit = 0: Xuất mức thấp ra chân PORT tương ứng.

1.4 Function Select Register: Đây là thanh ghi chọn chức năng cho chân PORT. Mỗi chân PORT có thể cấu hình chọn chức năng Input/Output hay là chức năng đặc biệt khác.

Bit = 1: Chọn chức năng đặc biệt. Bit = 0: Chọn chức năng GPIO.

1.5 Các thanh ghi cấu hình ngắt cho các chân PORT: Mỗi chân PORT của MSP430 đều có thể dùng để tạo ngắt. Các ngắt này được cấu hình thông qua các thanh ghi PxIFG, PxIE, PxIES.

1.5.1 Interrupt enable Register (PxIE) : Mỗi bit trong thanh ghi này dùng để cho phép/không cho phép ngắt trên chân PORT tương ứng.

Bit = 1: Cho phép ngắt. Bit = 0: Cấm ngắt.

1.5.2 Interrupt Edge Select Registers (PxIES): Dùng để chọn cạnh của tín hiệu ngắt

Page 26: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

26 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Bit = 1: Ngắt tại cạnh xuống của tín hiệu. Bit = 0: Ngắt tại cạnh lên của tín hiệu.

1.5.3 Interrupt Flag Registers (PxIFG): Thanh ghi này chứa các cờ ngắt. Các cờ này được tự đọng bật bởi phần cứng, phải được xóa bằng phần mềm. Các cờ này có thể được bật bằng phần mềm để cho phép ngắt.

Bit = 1: Một ngắt đang chờ xử lý. Bit = 0: Không có ngắt nào đang chờ.

2) Các lưu ý khi viết chương trình cho lab này: a) Watchdog Timer

Trong lab này, chúng ta không cần sử dụng Watchdog timer.

Để tắt Watchdog timer, ghi giá trị 5A vào 8 bit cao của thanh ghi WDTCTL và set thứ 7 của thanh ghi WDTCTL.

WDTCTL = 0x5A00 | 0x0080

Hoặc:

(WDTCTL = WDTPW | WDTHOLD )

b) Delay: Bởi vì trong chương trình chưa định nghĩa clock nên CPU sẽ sử dụng thạch anh 32.768 kHz. Để có thời gian delay khoảng 1s, vòng delay sẽ đếm xuống từ 30.000

SV có thể dùng câu lệnh dưới đây để tạo delay:

for(int i=30000;i>0;i++);

Page 27: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

27 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

3. Thực hành

Lab1A: Cho 2 LED 1 và LED2 sáng tắt luân phiên.

Yêu cầu: Sinh viên viết chương trình cho 2 LED sáng tắt luân phiên. Thời gian giữa 2 lần sáng tắt là khoảng 1s.

Project file:

File mẫu: Lab1_LED1_2_Blinky_Student\ LAB1_LED1_2_Blinky_Student.c

File bài giải: Lab1_LED1_2_Blinky_Solution\ LAB1_LED1_2_Blinky_Solution.c

Hình 1: Kết nối LED với MSP430 CPU

a) Đọc hiểu sơ đồ và điền vào chỗ trống:

Các LED được kết nối với CPU như trên hình 1.

LED1 nối vào chân Port gì của CPU?

LED1 nối vào chân Port gì của CPU?

Để điều khiển LED, các chân port phải là input hay output?

Để LED sáng, phải xuất giá trị gì ra chân port?

b) Hoàn chỉnh chương trình bằng cách điền vào các chỗ trống:

#include <msp430xG46x.h>

void main (void){

volatile unsigned int i;

Page 28: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

28 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

WDTCTL = ……… | ………; //Stop Watchdog Timer

P2DIR |= …………………….; //Configure P2.1 and P2.2 as Output

P2OUT &= ………………….; // Turn off LED1, LED2

P2OUT |= ……………………; // Turn on LED 1, turn off LED 2

while(1){ //Infinite loop

i= …………………………..; //Delay

do (i--);

while (i !=0);

//Toggle Port P2.1 and P2.2 using an exclusive-OR

P2OUT ^= ………………………; }

}

Page 29: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

29 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Lab1B: Đảo LED khi nhấn SW1

Yêu cầu: Sinh viên viết chương trình để đảo trạng thái LED1 mỗi khi SW1 được nhấn.

File mẫu: Lab1_SW_Toggle_LED_Student\ Lab1_SW_Toggle_LED_Student.c

File bài giải: Lab1_SW_Toggle_LED_Solution\ Lab1_SW_Toggle_LED_Solution.c

a) Đọc hiểu sơ đồ và điền vào chỗ trống:

Các SW được kết nối với CPU như trên hình 1.

SW1 nối vào chân Port gì của CPU?

SW2 nối vào chân Port gì của CPU?

Để đọc trạng thái switch, các chân port phải là input hay output?

b) Hoàn chỉnh chương trình bằng cách điền vào các chỗ trống:

#include <msp430xG46x.h>

void main (void){

volatile unsigned int i;

WDTCTL = ??; //Stop Watchdog Timer

P2DIR |= ??; //Configure P2.2 as Output (LED1)

P1DIR &= ??; //Configure P1.0 as Input (S1)

Page 30: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

30 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

while (1)

{

while ((P1IN & 0x01)); //Wait for the press of the button

P2OUT ^= ??; //Toggle Port P2.2

for(??); //Delay, button debounce

while (??); //Wait for the release of the button

for(??); //Delay, button debounce

}

}

Page 31: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

31 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Lab1C: Đảo LED khi nhấn Switch, sử dụng ngắt

Yêu cầu: Sinh viên viết chương trình đảo trạng thái LED1 khi Switch 1 được nhấn. Trong chương trình sử dụng ngắt trên chân port giao tiếp Switch.

File mẫu:

Lab1_SW_Toggle_LED_Interrupt_Student\Lab1_SW_Toggle_LED_ Interrupt_Student.c

File bài giải:

Lab1_SW_Toggle_LED_Interrupt_Solution\Lab1_SW_Toggle_LED_Interrupt_Solution.c

a) Lý thuyết: MSP430 được thiết kế để làm việc với các ứng dụng công suất thấp. Vì vậy CPU thường ở trạng thái “off” trong phần lớn thời gian. Để đưa CPU vào trạng thái “off”, các bit SCG1, SCG0 và CPUOFF trong thanh ghi SR được set.

Một ngắt xảy ra sẽ đánh thức CPU. Khi đó thanh ghi SR được lưu vào stack và CPU thực thi ISR. Khi thoát khỏi ISR, thanh ghi SR được lấy ra từ stack và làm cho CPU tắt trở lại.

Đưa CPU vào trạng thái công suất thấp và cho phép ngắt: Bit GIE trong thanh ghi SR khi được set sẽ cho phép ngắt.

Ta đưa CPU vào trạng thái công suất thấp, cho phép ngắt bằng lệnh:

_BIS_SR (LPM3_bits + GIE);

Trong đó:

LPM3_bits = (SCG1+SCG0+CPUOFF)

Định nghĩa chương trình phục vụ ngắt (ISR):

Ta định nghĩa 1 ISR tại vector ngắt ISR_VECTOR bằng cấu trúc sau:

#pragma vector=ISR_VECTOR __interrupt void myISR (void)

{

………………………

}

b) Thực hành:

1. Đọc hiểu sơ đồ và điền vào chỗ trống:

Page 32: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

32 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Các SW được kết nối với CPU như trên hình 1.

SW1 nối vào chân Port gì của CPU? Khi Switch được nhấn, sẽ có chuyển trạng thái như thế nào trên chân PORT?

Để cho phép ngắt trên chân P1.0, ta phải ghi ……….. vào bit…….của thanh ghi …………….?

Để chọn cạnh xuống cho ngắt trên chân P1.0, ta phải ghi ……….. vào bit…….của thanh ghi …………….?

2. Hoàn chỉnh chương trình bằng cách điền vào các chỗ trống: #include <msp430xG46x.h>

#pragma vector=??

__interrupt void Port_1 (void) { //define an interrupt service routine at 0xFFE8

volatile unsigned int i;

P2OUT ^= …………………………………….; //Toggle Port P2.2

for(……………………………………...); //Delay, button debounce

while (………………………………….); //Wait for the release of the button

for(…………………………..); //Delay, button debounce

P1IFG &= ~0x01; //Clean P1.0 Interrupt Flag (bit 0 of P1IFG register)

}

void main (void){

WDTCTL = ……………………………………….; //Stop Watchdog Timer

P2DIR |= ……………………….; //Configure P2.2 as Output (LED1)

P1DIR &= ……………………..; //Configure P1.0 as Input (S1)

P1IE |= ………………………; //Interrupt Enable in P1.0

P1IES |= …………………; //P1.0 Interrupt flag high-to-low transition

_BIS_SR (……………………); //Low Power Mode with interrupts enabled

}

High to Low  Low to High 

Page 33: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

33 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Bài 2: TIMER

Mục tiêu:

Sau lab này, sinh viên sẽ nắm kiến thức cơ bản về các nguồn xung nhịp của MSP430 và Basic Timer 1 module.

1. Lý thuyết Để câú hình cho timer, đầu tiên bộ FLL+ tạo xung nhịp phải được cấu hình trước để chọn xung nhịp đưa vào timer. Sau đó các giá trị thích hợp sẽ được đưa vào các thanh ghi cấu hình cho timer để làm timer hoạt động theo chế độ mong muốn.

Timer của MSP430x4xxx:

MSP430x4xx có 3 timer. Các timer này là:

Page 34: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

34 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Basic Timer 1 Timer_A Timer_B

1.1 Basic Timer 1 Module:

Hình 2.1: Sơ đồ khối của Basic Timer 1

1.1.1 Basic Timer1 Counter 1 (BTCNT1): Dùng để taọ tần số frame (frame frequency) cho bộ điều khiển LCD (LCD Controller)

Là thanh ghi 8 bit, có thể ghi/đọc

Nguồn clock: ACLK

Hệ số chia cho clock ngõ ra (fLCD) được chọn bởi các bit BTFRFQx trong thanh ghi BTCTL.

FLCD = ACLK / x

1.1.2 Basic Timer1 Counter 2 (BTCNT2):

Page 35: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

35 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Là bộ chia tần số có khả năng tạo ngắt, dùng để taọ những ngắt theo chu kỳ cho CPU hoặc tạo thành hệ thống đồng hồ thời gian thực.

Là thanh ghi 8 bit, có thể ghi/đọc

Nguồn clock: ACLK, SMCLK, hoặc SMCLK/256 khi mắc nối tiếp với BTCNT1

Hệ số chia cho clock ngõ ra (fLCD) được chọn bởi các bit BTFRFQx trong thanh ghi BTCTL.

Dùng để tạo ngắt Basic Timer 1 Interrupt BTIFG, thời gian ngắt được chọn bởi các bit BTIPx trong thanh ghi BTCTL.

1.1.3 Các thanh ghi cho Basic Timer 1 Module:

1.1.3.1 BTCTL, Basic Timer 1 Control Register:

Page 36: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

36 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

1.1.3.2 IE2, Interrupt Enable Register 2:

1.1.3.3 IFG2, Interrupt Flag Register 2:

1.2 Các nguồn xung nhịp: Xung nhịp hệ thống của MSP430x4xx được định nghĩa bởi bộ khóa tần số FLL+ (Frequency Locked Loop). FLL+ có thể làm việc với thạch anh gắn ngoài hay bộ dao động nội.

FLL+ gồm có 3 nguồn :

LFXT1CLK: Bộ dao động có khả năng tạo xung nhịp tốc độ thấp với thạch anh đồng hồ 32.768 Hz, hoặc xung nhịp tốc độ cao với thạch anh, resonance hay nguồn xung nhịp ngoài với tần số từ 450Khz-8Mhz.

XT2CLK: Bộ dao động có khả năng tạo xung nhịp tốc độ cao với thạch anh, resonance hay nguồn xung nhịp ngoài với tần số từ 450Khz-8Mhz.

DCOCLK: Bộ dao động R-C nội, được ổn định tần số bởi FLL.

Có 4 tín hiệu xung nhịp được tạo ra:

Master Clock (MCLK): Được chọn bởi phần mềm từ các nguồn LFXT1CLK, XT2CLK hoặc DCO. MCLK có thể được chia bởi các hệ số 1, 2, 4, 8 trước khi sử dụng. MCLK được sử dụng bởi CPU và hệ thống.

Sub-System Main Clock (SMCLK): Được chọn bởi phần mềm giữa XT2CLK và DCOCLK. SMCLK có thể được chọn bằng phần mềm cho các ngoại vi.

Auxiliary Clock (ACLK): ACLK được taọ ra từ LFXT1CLK, có thể được chọn bằng phần mềm cho ngoại vi.

Buffered Auxiliary Clock (ACLK/n): Là ngõ ra được đệm của ACLK. ACLK/n chính là ACLK chia cho hệ số chia 1, 2, 4, 8 và được sử dụng cho các ngoại vi bên ngoài.

Page 37: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

37 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Sau khi reset, MCLK và SMCLK được lấy từ DCOCLK ở tần số gấp 32 lần ACLK. Nếu bộ dao động LFXT1CLK sử dụng thạch anh 32.768 Hz, tần số của MCLK và SMCLK sẽ là 1.048576 Mhz..

Hình 2.2: Sơ đồ khối bộ tạo xung nhịp

1.2.1 Các bộ tạo dao động: 1.2.1.1 Low/High Frequency Oscillator (LFXT1):

Page 38: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

38 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Bộ dao động này có thể được dùng để tạo xung nhịp tốc độ thấp (low speed) từ thạch anh đồng hồ (tần số 32.768 Mhz) hoặc xung nhịp tốc độ cao (high speed) từ thạch anh ngoài hoặc bộ dao động ngoài với tầm từ 450 Khz đến 8 Mhz.

Bit XTS_FLL trong thanh ghi FLL_CTL0 dùng để chọn lựa chế độ hoạt động của LFXT1.

XTS_FLL = 0 : Low speed XTS_FLL = 1: High Speed

Giá trị tụ điện bên trong của bộ dao động (1, 6, 8, 10pF) được chọn bởi các bit XCAPxPF.

Bộ dao động LFXT1 có thể được tắt bằng cách set bit OSCOFF lên 1 nếu LFXT1 không được chọn để tạo nguồn cho MCLK (SELM # 3 hoặc CPUOFF = 1).

1.2.1.2 High Frequency Oscillator (XT2): Bộ dao động XT2 dùng thạch anh ngoài để tạo dao động tần số cao XT2CLK. Bộ dao động XT2 không có tụ bên trong, vì vậy tụ ngoài sẽ cần được sử dụng khi giao tiếp thạch anh.

Bộ dao động XT2 có thể được tắt bằng cách set bit XT2OFF lên 1 nếu XT2CLK không được chọn để tạo nguồn cho MCLK (SELM # 2 hoặc CPUOFF = 1) và SMCLK (SELS = 0 hoặc SMCLKOFF = 1).

1.2.1.3 Bộ dao động nội DCO: Bộ dao động DCO dùng FLL để nhân tín hiệu ACLK lên (N+1) lần, với N là 7 bit thấp của thanh ghi SCFQCTL.

Bit DCOPLUS chọn tần số fDCOCLK bằng fDCO hoặc fDCO/D. Số chia D bằng 1, 2, 4, 8 và được chọn bởi các bit FLLDx. Sau khi reset, DCOPLUS bằng 0 và D bằng 2.

DCOPLUS = 0: fDCOCLK = (N+1) x fACLK. DCOPLUS = 1: fDCOCLK = D x (N+1) x fACLK.

Giới hạn tần số của DCO

Giới hạn tần số dao động của DCO được chọn bởi các bit FNx. Người lập trình phải đảm bảo tần số của MCLK không vượt quá tần số hoạt động cao nhất của DCO.

Page 39: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

39 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

1.2.2 Các thanh ghi điều khiển clock: 1.2.2.1 SCFQCTL, System Clock Control Register :

Page 40: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

40 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

1.2.2.2 SCFI0, System Clock Frequency Integrator Register 0 :

1.2.2.3 SCFI1, System Clock Frequency Integrator Register 1:

Page 41: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

41 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

1.2.2.4 FLL_CTL0, FLL+ Control Register 0:

Page 42: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

42 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

1.2.2.5 FLL_CTL1, FLL+ Control Register 1:

Page 43: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

43 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

1.3 Các chế độ hoạt động: MSP430 được thiết kế để hoạt động ở chế độ công suất thấp. Các chế độ hoạt động được cấu hình bởi các bit CPUOFF, OSCOFF, SCG0, và SCG1 trong thanh ghi trạng thái SR.

Page 44: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

44 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

2. Thực hành:

2.1 Lab 2A: Đảo LED sử dụng Basic Timer 1 File mẫu:

Lab2_Timer_Toggle_LED\ Lab2_Timer_Toggle_LED_Solution.c

Lab2_Timer_Toggle_LED\ Lab2_Timer_Toggle_LED_Solution.c

Yêu cầu:

Sinh viên viết chương trình đảo trạng thái LED1 và LED2 sau thời gian 1s, sử dụng ngắt Basic Timer 1 Interrupt.

2.1.1 Trả lời các câu hỏi: Vô hiệu hóa Watchdog Timer

Để vô hiệu hóa Watchdog Timer, ta phải ghi vào thanh ghi WDTCTL giá trị gì?

WDTCTL = ……………………………………………..;

Câú hình FLL+:

Một thạch anh tần số 32768 Hz đuợc nối vào bộ dao động LFXT1. Ta phải ghi vào thanh ghi FLL_CTL0 giá trị gì để chọn tụ bên trong có giá trị 8PF?

FLL_CTL0 |= …………………………………………...;

Với các thanh ghi khác ở giá trị mặc định, tần số của các tín hiệu xung nhịp sẽ bang bao nhiêu?

ACLK = ………………………;

MCLK = ………………………;

SMCLK = ……………………..;

Cấu hình GPIO

LED1 và LED2 được nối vào chân P2.2 và P2.1. Ta phải ghi vào thanh ghi nào với giá trị gì để cấu hình cho 2 chân PORT này thành output, còn lại là input?

…………………. = ……………………………….;

Ta phải ghi vào thanh ghi nào với giá trị gì để làm cho LED1 sáng, LED2 tắt?

…………………. = ……………………………….;

Page 45: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

45 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Cấu hình cho Basic Timer 1:

Ta dùng Basic Timer 1 để tạo ngắt. Basic timer gồm 2 bộ đếm mắc nối tiếp, trong đó ngõ vào của BTCNT2 là ngõ ra của BTCNT1 chia cho 256. (Tham khảo hình 2.1). Ngõ vào của BTCNT1 là tín hiệu ACLK có tần số 32768 Hz. Ngõ ra của BTCNT2 phải được chia cho bao nhiêu để có ngắt Basic Timer 1 có chu kỳ là 1s? ……………..

Giá trị phải ghi vào các thanh ghi sau là bao nhiêu để có số chia cho BTCNT2 như trên và cho phép ngắt?

BTCTL = ………………………………;

IE2 = …………………………………...;

Chế độ công suất thấp:

Chương trình đơn giản đảo trạng thái LED1 và LED2 trong ngắt. Chế độ công suất thấp nào nên được sử dụng? ……………………….

(Tham khảo phần 1.4: Các chế độ hoạt động)

Khi đó, nguồn xung nhịp nào sẽ được tích cực trong suốt quá trình hoạt động?.............................................

2.1.2 Hoàn tất chương trình: #include <msp430xG46x.h>

//*****************************************************************

// Basic Timer interrupt service routine: refresh LCD with 0.5 sec

//*****************************************************************

#pragma vector=BASICTIMER_VECTOR

__interrupt void basic_timer_ISR(void)

{

P2OUT ^=0x06; // LED2 toogle

}

//*****************************************************************

// Main routine

//*****************************************************************

Page 46: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

46 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

void main(void)

{

WDTCTL = ....................; // Stop WDT

FLL_CTL0 |= .................; // Set load cap for 32k xtal

// Basic Timer 1 Configuration

BTCTL = ....................; // (ACLK/256)/64

IE2 |= .......................; // Enable BT interrupt with 0.5 period

// LED1 & LED2 configuration

P2DIR = ......................; // P2.2 and P2.1 as digital output

P2OUT = ......................; // LED1 on and LED2 off

__bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupt

}

Page 47: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

47 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

2.2 Lab 2B: Hiển thị số đếm lên LCD: Yêu cầu: Sinh viên viết chương trình hiển thị giá trị lần lượt từ 0 -> 9 lên led 7 đoạn P7 của LCD. Giá trị hiển thị tăng lên 1 sau 1 s. Nếu ấn SW2, chương trình ngừng đếm (giá trị ngừng tăng lên). Nếu ấn SW1, chương trình hoạt động bình thường.

Chương trình sử dụng ngắt timer để hiển thị LCD, ngắt ngoài trên chân P2.1 và P2.2 để cho phép chương trình dừng đếm hay tiếp tục hoạt động.

2.2.1 Hướng dẫn:

LCD sử dụng trên board có các phần tử hiển thị như sau:

Các segment 7 đoạn được đánh số từ P1 -> P8. Ta sẽ hiển thị các thông số giờ - phút – giây lên các segment 7 đoạn từ P7 -> P2.

LCD được điều khiển bởi LCD Controller bên trong MSP430. Để cho đơn giản, sinh viên được cho sẵn các hàm khởi tạo LCD và các macro để hiển thị số lên LCD.

Các macro điều khiển LCD được cho trong file LCD_defs.h. Trong đó:

P1_NULL nghĩa là LED 7 đoạn P1 tắt.

P1_A0 nghĩa là LED 7 đoạn P1 hiển thị số 0.

Các macro khác hoàn toàn tương tự.

P1 P7 

Page 48: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

48 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Hình 2.3: Sơ đồ kết nối SW1 và SW2

2.2.2 Trả lời các câu hỏi:

SW1 nối vào chân Port gì của CPU? SW2 nối vào chân Port gì của CPU? Khi Switch được nhấn, sẽ có chuyển trạng thái như thế nào trên chân PORT?

Để cho phép ngắt trên chân P1.0 và P1.1, ta phải ghi ……….. vào bit…….của thanh ghi …………….?

Để chọn cạnh xuống cho ngắt trên chân P1.0, ta phải ghi ……….. vào bit…….của thanh ghi …………….?

Trong chương trình phục vụ ngắt, dựa vào cờ ……………….. trong thanh ghi ……………………………. để phân biệt ngắt cho SW1 hay SW2?

Để xóa các cờ ngắt ngoài, ta phải ghi giá trị …………..vào các thanh ghi ………………?

Dừng đếm hoặc cho phép đếm được thực hiện bằng cách cho phép / cấm ngắt basic timer. Ta cho phép/cấm ngắt basic timer bằng cách ghi ……………/………….. vào thanh ghi gì?

2.2.3 Hoàn chỉnh chương trình bằng cách điền vào chỗ trống:

High to Low  Low to High 

Page 49: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

49 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

#include <msp430xG46x.h>

#include "LCD_defs.h"

//******************************************************************

// Global data

//******************************************************************

unsigned char number;

void LCD_write_number(char num)

{

switch (num)

{

case 1: P7_A1;

break;

case 2: ...................................;

break;

case 3: ...................................;

break;

case 4: ...................................;

break;

case 5: ...................................;

break;

case 6: ...................................;

break;

case 7: ...................................;

break;

case 8: ...................................;

Page 50: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

50 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

break;

case 9: ...................................;

break;

case 0: ...................................;

break;

}

}

//******************************************************************

//LCD clean. All segments are turnned off

//******************************************************************

void LCD_all_off(void)

{

LCDM2 = 0x00;

LCDM3 = 0x00;

LCDM4 = 0x00;

LCDM5 = 0x00;

LCDM6 = 0x00;

LCDM7 = 0x00;

LCDM8 = 0x00;

LCDM9 = 0x00;

LCDM10 = 0x00;

LCDM11 = 0x00;

LCDM12 = 0x00;

LCDM13 = 0x00;

}

//******************************************************************

Page 51: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

51 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

// Port1 interrupt service routine: toogle LCD page

//******************************************************************

#pragma vector=PORT1_VECTOR

__interrupt void PORT1_ISR (void)

{

int i;

if (P1IFG & ......................) //check if P1IFG.0 = 1

{

IE2 = ...............................; // disable basic timer 1 interrupt

}

if (P1IFG & ......................) //check if P1IFG.1 = 1

{

IE2 = ..........................; // enable basic timer 1 interrupt

}

i=1500; //Delay, button debounce

do (i--);

while (i !=0);

while (! (P1IN & 0x03)); //Wait for the release of the button

i=1500; //Delay, button debounce

do (i--);

while (i !=0);

P1IFG &= ......................;// clean Interrupt flag

}

//*****************************************************************

// Basic Timer interrupt service routine: increase the number from 0->9

//*****************************************************************

Page 52: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

52 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

#pragma vector=BASICTIMER_VECTOR

__interrupt void basic_timer_ISR(void)

{

LCD_write_number(number);

if (number == 9) number = ..................;

else number = ..............................;

}

//*****************************************************************

// Main routine

//*****************************************************************

void main(void)

{

WDTCTL = WDTPW | WDTHOLD; // Stop WDT

FLL_CTL0 |= XCAP18PF; // Set load cap for 32k xtal

// LCD COM0-COM1-COM2-COM3 configuration

P5DIR |= 0x1E; // Ports P5.2, P5.3 and P5.4 as outputs

P5SEL |= 0x1E; // Ports P5.2, P5.3 and P5.4 as special function (COM1, COM2 and COM3)

// LCD_A S0-S21 configuration

LCDAPCTL0 = LCDS24 | LCDS20 | LCDS16 | LCDS12 | LCDS8 | LCDS4;

// LCD_A configuration

LCDACTL = LCDFREQ_192 | LCD4MUX | LCDSON | LCDON; // (ACLK = 32768)/192, 4-mux LCD, LCD_A on, Segments on

Page 53: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

53 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

LCDAVCTL0 = LCDCPEN; // Charge pump enable

LCDAVCTL1 = VLCD_3_44; // VLCD = 3,44 V

// clean LCD

LCD_all_off();

// Basic Timer 1 Configuration

BTCTL = .................................; // (ACLK/256)/128

IE2 |= ..................................; // Enable BT interrupt

// LED1 e LED2 configuration

P2DIR = .................................; // P2.2 and P2.1 as digital output

P2OUT = ..................................; // LED1 on and LED2 off

// SW1 and SW2 configuration

P1SEL &= ................................; // P1.0 and P1.1 I/O ports

P1DIR &= ..............................; // P1.0 and P1.1 digital inputs

P1IFG = ...............................; // Clear P1 flags

P1IES &= ...............................; // high-to-low transition interrupts for P1.0 & P1.1

P1IE |= ................................; // enable port interrupts for P1.0 & P1.1

number = 0;

__bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupt

}

Page 54: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

54 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Lab3: Sử dụng RealTime Clock

Mục tiêu:

Sau lab này, sinh viên sẽ nắm kiến thức cơ bản về đồng hồ thời gian thực

1. Lý thuyết:

Trong Lab 2 ta đã nói về Basic Timer module và FLL+. Trong Lab 3, sinh viên sẽ làm việc với khối đồng hồ thời gian thực.

1.1. Realtime Clock module: Đồng hồ thời gian thực là 1 khối đếm thời gian giây, phút, giờ, ngày, tháng và năm. Ngoài ra, nó còn có thể được sử dụng như là 1 bộ đếm. Chế độ hoạt động của RTC được cấu hình bởi các bit RTCMODEx trong thanh ghi RTCCTL.

Xung nhịp cho RTC có tần số 1Hz được lấy từ basic timer 1 module. Basic timer 1 vẫn có thể được cấu hình để tạo ngắt basic timer 1 như ở lab2.

Ta thường cấu hình cho RTC hoạt động với kiểu BCD hơn là hexadecimal. Khi muốn thiết lập giá trị ban đầu cho RTC, ta dừng hoạt động của RTC bằng cách set bit RTCHOLD trong thanh ghi RTCCTL lên 1, sau đó ghi giá trị ban đầu vào các thanh ghi ngày, tháng, năm, giờ, phút, giây. Xóa bit RTCHOLD sẽ cho phép RTC hoạt động trở lại.

1.2 Các thanh ghi cho RTC: 1.2.1 RealTime Clock Control Register (RTCCTL):

Page 55: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

55 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

1.2.2 RTCDAY, RTC Day-of-Month Register, Calendar Mode with Hexadecimal Format:

1.2.3 RTCDAY, RTC Day-of-Month Register, Calendar Mode with BCD Format:

1.2.4 RTCDOW, RTC Day-of-Week Register, Calendar Mode:

Page 56: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

56 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

1.2.5 RTCHOUR, RTC Hours Register, Calendar Mode with Hexadecimal Format:

1.2.6 RTCHOUR, RTC Hours Register, Calendar Mode with BCD Format:

1.2.7 RTCMIN, RTC Minutes Register, Calendar Mode with Hexadecimal Format:

1.2.8 RTCMIN, RTC Minutes Register, Calendar Mode with BCD Format:

1.2.9 RTCMON, RTC Month Register, Calendar Mode with Hexadecimal Format:

1.2.10 RTCMON, RTC Month Register, Calendar Mode with BCD Format:

Page 57: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

57 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

1.2.11 RTCSEC, RTC Seconds Register, Calendar Mode with Hexadecimal Format:

1.2.12 RTCSEC, RTC Seconds Register, Calendar Mode with BCD Format:

1.2.13 RTCYEARH, RTC Year High-Byte Register, Calendar Mode with Hexadecimal Format:

1.2.14 RTCYEARH, RTC Year High-Byte Register, Calendar Mode with BCD Format:

1.2.15 RTCYEARL, RTC Year Low-Byte Register, Calendar Mode with Hexadecimal Format:

2. Thực hành:

2.1 Lab 3A: Thiết kế đồng hồ giờ-phút-giây. Yêu cầu:

Page 58: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

58 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

SV viết chương trình hiển thị các giá trị giờ-phút-giây. Giá trị giờ hiển thị lên led P7-P6, phút hiển thị lên LED P5-P4 và giây hiển thị lên LED P3-P2. Nếu số giây là chẵn, hiển thị hai dấu 2 chấm tại led P3 và P5 (dùng 2 macro P3_DOT_ON và P5_DOT_ON). Nếu số giây là lẻ, tắt hai dấu 2 chấm tại led P3 và P5 (dùng 2 macro P3_DOT_OFF và P5_DOT_OFF).

Chương trình cập nhật LCD sau mỗi 0.5 s sử dụng ngắt basic timer module.

Khi bắt đầu, chương trình đặt giá trị ban đầu cho RTC là: 8h 30 p 0s ngày 28 tháng 10 năm 2011.

File mẫu:

Lab3_realtime_Clock\Lab3_realtime_Clock_Solution.c

Lab3_Realtime_Clock_Student\Lab3_Realtime_Clock_Student.c

2.1.1 Trả lời câu hỏi bằng cách điền vào chỗ trống. Ghi giá trị ………………….vào thanh ghi………………….. để đưa RTC vào trạng thái ngừng (hold), cấm ngắt và dữ liệu ở dạng BCD?

Hoàn tất những câu lệnh dưới đây để đặt giá trị ban đầu cho RTC là: 8h 30 p 0s ngày 28 tháng 10 năm 2011.

……………………… = ……………………………;

……………………… = ……………………………;

……………………… = ……………………………;

……………………… = ……………………………;

……………………… = ……………………………;

……………………… = ……………………………;

Hoàn thành câu lệnh dưới đây để đưa RTC vào chế độ hoạt động

RTCCTL &= …………………………………;

Page 59: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

59 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

Để tạo ngắt basic timer 1 sau mỗi 0.5 s, ta phải ghi giá trị ……………….. vào thanh ghi BTCTL?

Chương trình có thể sử dụng chế độ tiết kiệm năng lượng nào?..............................

2.1.2 Hoàn thành chương trình:

#include <msp430xG46x.h>

#include <LCD_defs.h>

//******************************************************************

// Write Hour in LCD

//******************************************************************

void LCD_hour()

{

switch (RTCHOUR & 0xF0) // switch to write hour first digit

{

case 0x10: P7_A1;

break;

case 0x20: P7_A2;

break;

case 0x00: P7_A0;

break;

}

switch (.............. & 0x0F) // switch to write hour second digit

{

case ..........: ............;

break;

case ..........: ............;

Page 60: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

60 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

}

}

//******************************************************************

// Write minutes in LCD

//******************************************************************

void LCD_min()

{

switch (...................... & 0xF0) // switch to write minutes first digit

Page 61: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

61 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

{

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

}

switch (..................... & 0x0F) // switch to write minutes second digit

{

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

Page 62: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

62 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

}

}

//******************************************************************

// Write seconds in LCD

//******************************************************************

void LCD_sec()

{

switch (.................... & 0xF0) // switch to write seconds first digit

{

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

Page 63: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

63 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

}

switch (............................. & 0x0F) // switch to write seconds second digit

{

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

case ..........: ............;

break;

Page 64: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

64 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

case ..........: ............;

break;

case ..........: ............;

}

}

//******************************************************************

//LCD clean. All segments are turnned off

//******************************************************************

void LCD_all_off(void)

{

LCDM2 = 0x00;

LCDM3 = 0x00;

LCDM4 = 0x00;

LCDM5 = 0x00;

LCDM6 = 0x00;

LCDM7 = 0x00;

LCDM8 = 0x00;

LCDM9 = 0x00;

LCDM10 = 0x00;

LCDM11 = 0x00;

LCDM12 = 0x00;

LCDM13 = 0x00;

}

//*****************************************************************

// Basic Timer interrupt service routine: refresh LCD with 0.5 sec

//*****************************************************************

Page 65: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

65 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

#pragma vector=BASICTIMER_VECTOR

__interrupt void basic_timer_ISR(void)

{

P2OUT |=.......................; // LED1 turn on

P2OUT ^=.......................; // LED2 toogle

LCD_sec();

LCD_min();

LCD_hour();

if (RTCSEC & 0x01) // display the dot of P3 and P5

{

........................;

........................;

}

else

{

........................;

........................;

}

P2OUT &=...................; // LED1 turn off

}

//*****************************************************************

// Main routine

//*****************************************************************

void main(void)

{

Page 66: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

66 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

WDTCTL = WDTPW | WDTHOLD; // Stop WDT

FLL_CTL0 |= XCAP18PF; // Set load cap for 32k xtal

// LCD COM0-COM1-COM2-COM3 configuration

P5DIR |= 0x1E; // Ports P5.2, P5.3 and P5.4 as outputs

P5SEL |= 0x1E;

// LCD_A S0-S21 configuration

LCDAPCTL0 = LCDS24 | LCDS20 | LCDS16 | LCDS12 | LCDS8 | LCDS4;

// LCD_A configuration

LCDACTL = LCDFREQ_192 | LCD4MUX | LCDSON | LCDON;

LCDAVCTL0 = LCDCPEN; // Charge pump enable

LCDAVCTL1 = VLCD_3_44; // VLCD = 3,44 V

// clean LCD

LCD_all_off();

// RTC configuration

RTCCTL = .............................;

// BCD mode, RTC e BT disable

// Interrupt disable,

// Init Clock

RTCSEC = ...............; // Set Seconds in BCD format

RTCMIN = ...............; // Set Minutes in BCD format

RTCHOUR = ...............; // Set Hours in BCD format

// Init Calendar

RTCDOW = ...............; // Set Day-of-Week in BCD format

Page 67: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

67 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

RTCDAY = ...............; // Set Day in BCD format

RTCMON = ...............; // Set Month in BCD format

RTCYEAR = ...............; // Set Year in BCD format

RTCCTL &= ...............; // Enable RTC

// Basic Timer 1 Configuration

BTCTL = ...............; // (ACLK/256)/64

IE2 |= ...............; // Enable BT interrupt with 0.5 periode

// LED1 e LED2 configuration

P2DIR = ...............; // P2.2 and P2.1 as digital output

P2OUT = ...............; // LED1 on and LED2 off

// LCD init

LCD_sec();

LCD_min();

LCD_hour();

// SW1 and SW2 configuration

P1SEL &= ...............; // P1.0 and P1.1 I/O ports

P1DIR &= ...............; // P1.0 and P1.1 digital inputs

__bis_SR_register(..........................); // Enter LPM3 w/ interrupt

}

Page 68: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

68 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

2.2 Lab 3B: Thiết kế đồng hồ hiển thị giờ-phút-giây và ngày tháng năm. Yêu cầu:

SV viết chương trình hiển thị các giá trị giờ-phút-giây hoặc ngày-tháng-năm.

Giá trị giờ hiển thị lên led P7-P6, phút hiển thị lên LED P5-P4 và giây hiển thị lên LED P3-P2. Nếu số giây là chẵn, hiển thị hai dấu 2 chấm tại led P3 và P5 (dùng 2 macro P3_DOT_ON và P5_DOT_ON). Nếu số giây là lẻ, tắt hai dấu 2 chấm tại led P3 và P5 (dùng 2 macro P3_DOT_OFF và P5_DOT_OFF).

Giá trị ngày hiển thị lên led P7-P6, phút hiển thị lên LED P5-P4 và giây hiển thị lên LED P3-P2. Nếu số giây là chẵn, hiển thị hai dấu 2 chấm tại led P3 và P5 (dùng 2 macro P3_DOT_ON và P5_DOT_ON). Nếu số giây là lẻ, tắt hai dấu 2 chấm tại led P3 và P5 (dùng 2 macro P3_DOT_OFF và P5_DOT_OFF).

Chương trình cập nhật LCD sau mỗi 0.5 s sử dụng ngắt basic timer module.

Khi reset, chương trình mặc định ở chế độ hiển thị giờ-phút-giây. Khi SW1 được nhấn, chương trình sẽ hoán đổi giữa chế độ hiển thị giờ-phút-giây và ngày-tháng-năm.

Trong chương trình sử dụng biến toàn cục mode để lưu chế độ hiện hành. Khi SW1 được nhấn sẽ tạo một ngắt làm thay đổi giá trị của mode.

Khi bắt đầu, chương trình đặt giá trị ban đầu cho RTC là: 8h 30 p 0s ngày 28 tháng 10 năm 2011.

File mẫu:

Calenda_Solution\Calenda_Solution.c

Calenda_Student\Calenda_Student.c

Hoàn tất chương trình:

#include <msp430xG46x.h>

#include <LCD_defs.h>

//******************************************************************

// Global data

//******************************************************************

unsigned char mode;

//******************************************************************

// Write year decade

Page 69: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

69 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

//******************************************************************

void LCD_year()

{

}

//******************************************************************

// Write month in LCD

//******************************************************************

void LCD_month()

{

}

//******************************************************************

// Write day in LCD

//******************************************************************

void LCD_day()

{

}

//******************************************************************

// Write Hour in LCD

//******************************************************************

void LCD_hour()

{

switch (RTCHOUR & 0xF0) // switch to write hour first digit

{

case 0x10: P7_A1;

break;

case 0x20: P7_A2;

Page 70: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

70 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

break;

case 0x00: P7_A0;

break;

}

switch (RTCHOUR & 0x0F) // switch to write hour second digit

{

case 0x01: P6_A1;

break;

case 0x02: P6_A2;

break;

case 0x03: P6_A3;

break;

case 0x04: P6_A4;

break;

case 0x05: P6_A5;

break;

case 0x06: P6_A6;

break;

case 0x07: P6_A7;

break;

case 0x08: P6_A8;

break;

case 0x09: P6_A9;

break;

case 0x00: P6_A0;

break;

Page 71: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

71 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

}

}

//******************************************************************

// Write minutes in LCD

//******************************************************************

void LCD_min()

{

switch (RTCMIN & 0xF0) // switch to write minutes first digit

{

case 0x10: P5_A1;

break;

case 0x20: P5_A2;

break;

case 0x30: P5_A3;

break;

case 0x40: P5_A4;

break;

case 0x50: P5_A5;

break;

case 0x00: P5_A0;

break;

}

switch (RTCMIN & 0x0F) // switch to write minutes second digit

{

case 0x01: P4_A1;

Page 72: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

72 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

break;

case 0x02: P4_A2;

break;

case 0x03: P4_A3;

break;

case 0x04: P4_A4;

break;

case 0x05: P4_A5;

break;

case 0x06: P4_A6;

break;

case 0x07: P4_A7;

break;

case 0x08: P4_A8;

break;

case 0x09: P4_A9;

break;

case 0x00: P4_A0;

break;

}

}

//******************************************************************

// Write seconds in LCD

//******************************************************************

void LCD_sec()

{

Page 73: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

73 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

switch (RTCSEC & 0xF0) // switch to write seconds first digit

{

case 0x10: P3_A1;

break;

case 0x20: P3_A2;

break;

case 0x30: P3_A3;

break;

case 0x40: P3_A4;

break;

case 0x50: P3_A5;

break;

case 0x00: P3_A0;

break;

}

switch (RTCSEC & 0x0F) // switch to write seconds second digit

{

case 0x01: P2_A1;

break;

case 0x02: P2_A2;

break;

case 0x03: P2_A3;

break;

case 0x04: P2_A4;

break;

Page 74: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

74 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

case 0x05: P2_A5;

break;

case 0x06: P2_A6;

break;

case 0x07: P2_A7;

break;

case 0x08: P2_A8;

break;

case 0x09: P2_A9;

break;

case 0x00: P2_A0;

}

}

//******************************************************************

//LCD clean. All segments are turnned off

//******************************************************************

void LCD_all_off(void)

{

LCDM2 = 0x00;

LCDM3 = 0x00;

LCDM4 = 0x00;

LCDM5 = 0x00;

LCDM6 = 0x00;

LCDM7 = 0x00;

LCDM8 = 0x00;

LCDM9 = 0x00;

Page 75: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

75 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

LCDM10 = 0x00;

LCDM11 = 0x00;

LCDM12 = 0x00;

LCDM13 = 0x00;

}

//******************************************************************

// Port1 interrupt service routine: toogle LCD mode

//******************************************************************

#pragma vector=PORT1_VECTOR

__interrupt void PORT1_ISR (void)

{

if (mode == 0) mode = 1; // toggle LCD mode

else mode = 0;

P1IFG &= ...................; // clean Interrupt flag

}

//*****************************************************************

// Basic Timer interrupt service routine: refresh LCD with 0.5 sec

//*****************************************************************

#pragma vector=BASICTIMER_VECTOR

__interrupt void basic_timer_ISR(void)

{

P2OUT |=....................; // LED1 turn on

P2OUT ^=....................; // LED2 toogle

if (mode == 0) // Display hour-minute-second

{

Page 76: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

76 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

...........................;

...........................;

...........................;

}

else // Display year-month-day

{

LCD_year();

LCD_month();

LCD_day();

}

if (RTCSEC & 0x01) // toogle clock dots

{

P3_DOT_ON;

P5_DOT_ON;

}

else

{

P3_DOT_OFF;

P5_DOT_OFF;

}

P2OUT &=~0x02; // LED1 turn off

}

//*****************************************************************

// Main routine

//*****************************************************************

void main(void)

Page 77: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

77 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

{

WDTCTL = WDTPW | WDTHOLD; // Stop WDT

FLL_CTL0 |= XCAP18PF; // Set load cap for 32k xtal

// LCD COM0-COM1-COM2-COM3 configuration

P5DIR |= 0x1E; // Ports P5.2, P5.3 and P5.4 as outputs

P5SEL |= 0x1E; // Ports P5.2, P5.3 and P5.4 as special function (COM1, COM2 and COM3)

// LCD_A S0-S21 configuration

LCDAPCTL0 = LCDS24 | LCDS20 | LCDS16 | LCDS12 | LCDS8 | LCDS4;

// LCD_A configuration

LCDACTL = LCDFREQ_192 | LCD4MUX | LCDSON | LCDON; LCDAVCTL0 = LCDCPEN; // Charge pump enable

LCDAVCTL1 = VLCD_3_44; // VLCD = 3,44 V

// clean LCD

LCD_all_off();

// RTC configuration

RTCCTL = .............................. ; // BCD mode, RTC e BT disable, Interrupt disable,

//

// Init Clock

RTCSEC = ..............................; // Set Seconds in BCD format

RTCMIN = ..............................; // Set Minutes in BCD format

RTCHOUR = ..............................; // Set Hours in BCD format

// Init Calendar

RTCDOW = ..............................; // Set Day-of-Week in BCD format

RTCDAY = ..............................; // Set Day in BCD format

Page 78: Thi Nghiem Msp430

    Tài liệu hướng dẫn thí nghiệm MSP‐EXP430FG4618 

78 | P a g e                           Bộ môn Kỹ Thuật Điện Tử, khoa Điện‐Điện Tử, trường ĐHBK‐ĐHQG TP.HCM 

                                                  Soạn: Hoàng Trang, Bùi Quốc Bảo.  

RTCMON = ..............................; // Set Month in BCD format

RTCYEAR = ..............................; // Set Year in BCD format

RTCCTL &= ..............................; // Enable RTC

// Basic Timer 1 Configuration

BTCTL = ..............................; // (ACLK/256)/64

IE2 |= ..............................; // Enable BT interrupt with 0.5 periode

// LED1 e LED2 configuration

P2DIR = 0x06; // P2.2 and P2.1 as digital output

P2OUT = 0x04; // LED1 on and LED2 off

// LCD init

LCD_sec();

LCD_min();

LCD_hour();

mode = 0;

// SW1 and SW2 configuration

P1SEL &= ..............................; // P1.0 and P1.1 I/O ports

P1DIR &= ..............................; // P1.0 and P1.1 digital inputs

P1IFG = ..............................; // Clear P1 flags

P1IES &= ..............................; // high-to-low transition interrupts

P1IE |= ..............................; // enable port interrupts

__bis_SR_register(..............................); // Enter LPM3 w/ interrupt

}