Các dòng vi điều khiển msp430 này do hãng TI ( Texas Instruments) sản xuất, ngoài ra thì TI còn sản xuất và cung cấp nhiều linh kiện điện tử và các module khác , để tìm hiểu thì các bạn có thể tham khảo ở địa chỉ : www.ti.com để biết rõ hơn .
Vi điều khiển( Micro controller unit – MCU ) là đơn vị xử lý nhỏ, nó được tích hợp toàn bộ các bộ nhớ như ROM , RAM , các port truy xuất , giao tiếp ngoại vi trực tiếp trên 1 con chip hết sức nhỏ gọn. Được thiết kế dựa trên cấu trúc VON-NEUMAN , đặc điểm của cấu trúc này là chỉ có duy nhất 1 bus giữa CPU và bộ nhớ (data và chương trình) , do đó mà chúng phải có độ rộng bit tương tự nhau.
MSP430 có một số phiênbản như: MSP430x1xx, MSP430x2xx, MSP430x3xx,
MSP430x4xx, MSP430x5xx. Dưới đây là những đặc điểm tổng quát của họ vi điều khiển MSP430:
+ Cấu trúc sử dụng nguồn thấp giúp kéo dài tuổi thọ của Pin
-Duy trì 0.1µA dòng nuôi RAM.
-Chỉ 0.8µA real-time clock.
-250 µA/ MIPS.
+ Bộ tương tự hiệu suất cao cho các phép đo chính xác
-12 bit hoặc 10 bit ADC-200 kskp, cảm biến nhiệt độ, Vref ,
-12 bit DAC.
-Bộ giám sát điện áp nguồn.
+ 16 bit RISC CPU cho phép được nhiều ứng dụng, thể hiện một phần ở kích thước Code lập trình.
-Thanh ghi lớn nên loại trừ được trường hợp tắt nghẽn tập tin khi đang làm việc.
-Thiết kế nhỏ gọn làm giảm lượng tiêu thụ điện và giảm giá thành.
-Tối ưu hóa cho những chương trình ngôn ngữ bậc cao như C, C++
-Có 7 chế độ định địa chỉ.
-Khả năng ngắt theo véc tơ lớn.
+ Trong lập trình cho bộ nhớ Flash cho phép thay đổi Code một cách linh hoạt, phạm vi rộng, bộ nhớ Flash còn có thể lưu lại như nhật ký của dữ liệu.
1.Sơ đồ chân : Chip MSP430 có kích thước nhỏ gọn , chỉ với 20 chân đối với kiểu chân DIP.
Bao gồm 2 port I/O (hay GPIO general purprose input/ output : cổng nhập xuất chung).
Ta thấy rằng mỗi port đều có 8 chân.
Port 1 : có 8 chân từ P1.0 đến P1.7 tương ứng với các chân từ 2-7 và 14 , 15.
Port 2 : cũng gồm có 8 chân P2.0 – P2.7 ứng với các chân 8 – 13 , 18,19.
Ngoài chức năng I/O thì trên mỗi pin của các port đều là những chân đa chức năng, ta thể thấy rõ trong bảng sau :
Trên bảng là chức năng của từng chân , ngoài ra đối với các MCU có kiểu chân SMD loại 28 chân thì nó có thêm port 3 nữa,nhưng ở đây chỉ xét đối với kiểu DIP 20 chân và kiểu TSSOP 20 chân , kiểu còn lại các bạn có thể tìm hiểu trên trang chủ của nhà sản xuất .
2.Giải thích sơ lược các chân :
- Chân số 1 là chân cấp nguồn Vcc( ký hiệu trên chip là DVcc ) , ở đây nguồn cho chip chỉ được cấp ở mức 3,3V , nếu cấp nguốn cao quá mức này thì chip có thể hoạt động sai hay cháy chip .
Để có được mức nguồn này thì ta phải dùng 1 IC ổn áp riêng có ký hiệu LM1117 hay AD1117 , IC này có kiểu chân SMD nhỏ gọn , cách mắc chip này thì cũng giống như với những IC nguồn như LM78xx , tuy nhiên lưu ý ở đây là thứ tự chân ở đây có hơi khác 1 chút.Các bạn có thể xem datasheet của IC mà mắc cho phù hợp.
-Chân 20 là chân nối cực âm (0V) , chân này thì không có gì đặc biệt.
Các bạn có thể tham khảo mạch nguồn ở đây để phục vụ cho việc thiết kế mạch học tập :
Trên mạch các bạn có thể thấy là có thêm IC 7805 cấp 5V , với mục đích để sử dụng cho các ngoại vi khác cho ứng dụng của các bạn , mạch trên chỉ giúp các bạn tham khảo, nhưng các bạn yên tâm là mạch này không hề sai , các bạn có thể lấy đúng giá trị như mạch trên .
-Chân reset : Chính là chân số 16 RST , nếu các bạn đã từng học về PIC thì sẽ thấy chân reset có ký hiệu là MCLR , các bạn để ý thấy dấu gạch ngang trên có nghĩa là chân này tích cực ở mức thấp . Mục đích của việc reset là nhằm cho chương trình chạy lại từ đầu .
Mạch reset cho chip :
Các bạn chú ý tụ ở đây là tụ pi và chính xác là tụ 102 nha, nếu thay đổi thì khi kết nỗi Jtag để nạp code cho chip sẽ không được.
-Mạch dao động : Cũng giống như những dòng vi điều khiển khác thì Msp430 cũng hỗ trợ người dùng thạch anh ngoài ( external crystal ), nhưng thạch anh ngoại vi cho phép chỉ có thể lên tới 32,768 kHz mà thôi, và tín hiệu này được mắc trên 2 chân 18 và 19. Nhưng msp430 lại hỗ trợ thạch anh nội có thể lên đến 16Mhz, tùy vào cách khai báo trong lập trình. Và mặc định của chip là thạch anh nội. Như vậy thì chúng ta không cần thiết phải sử dụng mạch dao động ngoại cho chip giống như những dòng khác.
- Port I/O :
Port 1 : có 8 chân từ P1.0 đến P1.7 tương ứng với các chân từ 2-7 và 14 , 15.
Port 2 : cũng gồm có 8 chân P2.0 – P2.7 ứng với các chân 8 – 13 , 18,19.
Trong chế độ nhập (input) thì cả 2 port đều có 1 mạch điều khiển điện trở kéo dương – gọi là PULL UP nhưng giá trị của điện trở này rất lớn khoảng 47K nên gọi là WEAK PULL UP RESISTAN. Việc điều khiển PULL UP sẽ được tiến hành thông qua lập trình tác động lên thanh ghi PxREN sẽ được đề cập ở chương sau .
Điều này cũng giống như việc thiết lập input ở port B của vi điều khiển PIC, ở port B cũng có điện trở kéo lên , và người lập trình phải thao tác qua thanh ghi OPTION_REG.
- ðTóm tắt :
- Qua chương này chúng ta phải nắm được các chân cơ bản trước của chip .
- ðMạch reset và mạch dao động OSC của chip .
- ðCác chân I/O của 2 port và PULL UP .
Với bất kỳ 1 con MCU nào thì việc phải thiết kế 1 mạch nạp cho chip là điều không thể bỏ qua ! Và với Msp430 cũng không là ngoại lệ .
PIC hay 8051 thì có nhiều mạch nạp để nạp code cho chip , từ đơn giản đến phức tạp , nói chung cực kì đa dạng.Và nói chung thì các mạch nạp cũng đều khá đắt , thấp cũng phải mất 200k hay hơn.
Như đã nói thì Msp430 là dòng value line , power low, và low – cost . Chính vì vậy mà TI đã cung cấp cho người dùng 1 mạch nạp code + debug chỉ trên 1 mạch nhỏ gọn. Trong kit còn có hỗ trợ :
-1 mạch nạp code có cả debug
-1 dây cáp USB tốt để kết nối kit với máy tính.
-1 chip thạch anh 32,768kHz
-1 chip Msp430G2553
-1 chip Msp430G2453
-1 header female.
Tất cả chỉ có 9,8 USD – rất rẻ để học!
Đây chính là hình ảnh của Kit lanchpad :
Các bạn có thể mua tại địa chỉ sau : HShopVN
Kit kết nối với máy tính thông qua cổng USB .
Bây giờ chúng ta sẽ tiến hành cài đặt chương trình để có thể tiến hành viết code , biên dịch và nạp code cho chip .
Không giống như chương trình của các dòng vi điều khiển khác , TI đã cung cấp cho người dùng những IDE đã được tích hợp trong 1 gói phần mềm. Các bạn chỉ cần cài đặt 1 chương trình là đã có thể vừa viết code , debug, và nạp code cho chip.
Chắc nhiều bạn sẽ thắc mắc cụm từ debug có nghĩa là gì?
Debug chỉ là việc cho chương trình chạy từng dòng lệnh để kiểm tra lỗi của chương trình cũng như kiểm tra được cả thanh ghi của chip khi nó thực hiện lệnh .
Có nhiều IDE được TI cung cấp cho người sử dụng , nhưng trong đó có 2 chương trình mạnh và được nhiều người ưa thích đó là CCS và IAR . Các bạn đừng có nhầm lẫn giữa CCS C cho PIC với CCS cho Msp430 nhé! Hai chương trình này là hoàn toàn khác nhau .
Sau đây , xin được giới thiệu cụ thể 2 chương trình trên :
1 . IAR (IAR Embedded Workbench ) :
Đây là chương trình biên dịch được cung cấp bởi IAR SYSTEMS. Có 3 phiên bản: Kickstart Version – Free , Baseline Version ~ $795 và Full Version ~ $2695.
Để tải chương trình , chúng ta có thể vào trang chủ : www.iar.com hoặc từ địa chỉ của TI : www.ti.com , sau đó gõ từ IAR trên mục tìm kiếm ,để download được thì các bạn phải tạo 1 tài khoản và đăng nhập để tải về , các bạn chỉ có thể tải được bản trial mà thôi .
2 . CCS (Code composer studio ) :
Đây là chương trình do TI cung cấp , có nhiều server đã được cung cấp .
Phiên bản mới nhất hiện nay là CCS 5.3 .
Các bạn có thể tải tại : www.ti.com
Đăng nhập vào (sau khi đã đăng ký tài khoản ) , CCS có hỗ trợ cho người dùng bản dùng thử nhưng bị giới hạn code (limited code ) , chúng ta chỉ được sử dụng 4kB bộ nhớ , nhưng với sinh viên chúng ta thì với 4 kB cũng đã đủ làm những dự án nhỏ .
Chính vì vậy mà tôi khuyên bạn nên tải bản CCS về , và trong tài liệu này cũng sử dụng CCS để viết code . CCS có rất nhiều tính năng hay mà sau này chúng ta sẽ cùng nhau nghiên cứu sau .Việc sử dụng phiên bản nào là tùy thuộc vào các bạn , các version cũng đều giống nhau , nếu CCS 5.3 thì yêu cầu máy của bạn phải có cấu hình đủ mạnh để dùng.
3 . Cài đặt và sử dụng CCS :
Sau khi tải CCS về , các bạn tiến hành cài đặt , cách cài đặt cũng rất đơn giản. Các bạn chỉ cần chạy file setup.exe .
Đối với phiên bản CCS 4.3 hay 4.2 thì các bạn cài đặt xong là có thể sử dụng được nhưng với CCS 5.3 thì các bạn còn phải làm 1 việc nữa đó là chọn : limit free code , thì mới viết code được . Cách làm như sau :
Sau khi cài đặt xong, các bạn khởi động chương trình :
Start -> all program -> Texas Instruments -> Chọn code ….
Hoặc chạy chương trình bằng cách click vào biểu tượng CCS trên desktop .
Sau đó , click chọn Help -> Code Composer code linsce -> upgrade -> active việc cài đặt và sử dụng cũng như tạo mới 1 project các bạn xem tại mục MSP430 này, đã có gần như đầy đủ các video minh họa việc học lập trình với msp430.
Phần này , sẽ giới thiệu cho các bạn cách lập trình trên MCU Msp430G2553 .
Ngôn ngữ lập trình ở đây chính là C (Language programing C).Đây là chủ đề chính của tài liệu .
Đây sẽ là chương trình đầu tiên của các bạn , cũng tương tự như khi các bạn mới học C thì đầu tiên chúng ta phải học cách viết chương trình hiển thị dòng chữ “hello word” in ra màn hình .
Ở đây chúng ta sẽ tìm hiểu cách viết 1 chương trình đơn giản , để biết cách bật tắt 1 led trên chân P1.0 . Tại sao lại là trên chân P1.0 ? đơn giản là vì trên kit lanchpad đã có sẵn 2 chú led được hàn trên 2 chân là P1.0 và P1.6 .
Cũng giống như chức năng I/O của Pic thì chức năng GPIO cũng chỉ làm 1 việc đơn giản đó là việc xuất ra tín hiệu hay đọc vào tín hiệu . Tín hiệu ở đây hiểu đơn giản là những tín hiệu điện - tín hiệu số .
Tín hiệu số (Binary ) tín hiệu này chỉ có 2 trạng thái đó là 1 và 0 .
1 : Có điện , mức điện áp này bằng với điện áp nguốn cấp cho MCU .
00: không có điện .
1.Các thanh ghi cần thiết lập :
Msp430 có 2 port nhập xuất đó là :
Port1 : Từ chân P1.0 đến P1.7
Port2: 8 chân P2.0 đến P2.7
Để biết rõ các chân này trên MCU thì các bạn chịu khó đọc lại chương 1 trong phần 1 .
a. Thanh ghi PxSEL(x:1 , 2) và PxSEL2(x:1 , 2) :
Thanh ghi này qui định chế độ làm việc cho các chân bao gồm
PxSEL và PxSEL2 .
View attachment 5570
VD: Ta muốn port 1 là GPIO thì ta thực hiện lệnh như sau:
P1SEL = 0;
P1SEL2 = 0 ;
Nếu như muốn chân P1.2 làm chức năng I/O thì khai báo như sau :
P1SEL & = ~0x01 ; // sử dụng lệnh đảo bit , set về mức 0 .
P1SEL2 &= ~0x01;
Lưu ý: Interrupts P1 và P2 sẽ bị vô hiệu hóa khi PxSEL= 1 .
b. Thanh ghi PxDIR(x:1 , 2)
Thanh ghi này qui định loại ngõ vào ra cho các chân (I/O pins)
Mặc định các chân này là input, nên ta chỉ cần set output cho các chân này
VD: P1DIR = 0x01 // chân P1.0 là output.
Mức 1 : ouput ( xuất tín hiệu ) .
Mức 0 : input (đọc tín hiệu về) .
c. Thanh ghi PxREN(x:1 , 2)
Thanh ghi này cho phép tắt hoặc mở chế độ pullup/pulldown resistor cho các pins .
Bit = 0 : Tắt chức năng pull up /down (disable).
Bit= 1 : enable pull up/down.
d. Thanh ghi PxOUT(x: 1 , 2)
_Khi ta muốn xuất giá trị cho các chân I/O, ta sẽ đặt giá trị vào các thanh ghi PxOUT .
Bit = 1 : output mức cao.
Bit = 0 : output mức thấp.
_Khi ta config thanh ghi PxREN sang chế độ pullup/pulldown resistor thì
Bit = 1 : Pull up .
Bit = 0 : Pull down .
Lưu ý là ta phải chỉnh P1DIR trước khi xuất giá trị ra ngoài.
Tóm tắt:
Để thực hiện xuất / nhập trên 1 chân (Pin):
- Cài đặt đúng giá trị cho thanh ghi PxDIR
- Đặt kiểu tín hiệu của pin là GPIO hay các chức năng
khác qua thanh ghi PxSEL
- Xuất tín hiệu bằng cách ghi giá trị “0” hoặc “1” vào
port tương ứng (port P1OUT)
- Đọc giá trị của chân bằng cách đọc mức logic trên port tương ứng.
Code mẫu :
#include <msp430g2231.h > void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer P1DIR |= 0x01; // Set P1.0 to output direction P1SEL = 0; // Set P1 GPIO function P1SEL2 = 0; while(1) { P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR _delay_cycles(100); // Đối với CCS } }
Bài 1 : GPIO tiếp theo .
Bây giờ chúng ta sẽ viết về phần đọc tín hiệu cho msp430 , config chức năng input .
Các bạn lưu ý là trên kit lanchpad của chúng ta đã có sẵn 1 button được mắc vào chân P1.3 , vì vậy chúng ta sẽ tận dụng điều này để viết code , không cần phải lắp mạch để test .
Như đã nói ở phần đầu thì việc thiết lập chế độ input , có tích hợp sẵn 1 mạch điều khiển điện trở kéo dương - pull up , điện trờ tầm 47K , để bật được chức năng này , ta sẽ tác động đến thanh ghi PxREN
Code :
// BAI 2 : doc button // #include "msp430.h" int main (void){ WDTCTL = WDTHOLD + WDTPW ; P1SEL &= ~(BIT0 + BIT3); P1SEL2 &= ~(BIT0 + BIT3) ; P1DIR |= BIT0 ; // P1.0 : OUT // BIT 3 : INPUT P1DIR &= ~BIT3 ; // LENH XOA BIT 3 P1OUT |= BIT3 ; //BIT3 = 1 P1REN = BIT3 ; //PULL UP BIT3 while(1) { if ((P1IN & BIT3)==0) { // se tat khi p1.3 khong co bam nut. P1OUT |= BIT0 ; } else P1OUT &= ~ BIT0 ; // se sang } }
mẫu code:
Code:#includemain(void) {WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timerP1DIR |= 0XFF; // set all the ports as output portsint x = 0X01;long i=0;int j=1;int k=0;int l=0; for(;;) {
for(k=1;k<=5;k++){x=0×01; for(j=1;j<=8;j++){ P1OUT = x;x*=2; for(i=0;i<=10000;i++) { } } } for(k=1;k<=5;k++){x=0×80; for(j=1;j<=8;j++){ P1OUT = x;x/=2; for(i=0;i<=10000;i++) { } } } for(k=1;k<=5;k++){ P1OUT=0xAA; for(l=0;l<=1;l++){ for(i=0;i<=64000;i++) {}}P1OUT=0×55; for(l=0;l<=1;l++){ for(i=0;i<=64000;i++) {}} } for(k=1;k<=5;k++){ P1OUT=0×18; for(i=0;i<=20000;i++) {}P1OUT=0×24; for(i=0;i<=20000;i++) {}P1OUT=0×42; for(i=0;i<=20000;i++) {}P1OUT=0×81; for(i=0;i<=20000;i++) {} } for(k=1;k<=5;k++){ P1OUT=0×81; for(i=0;i<=20000;i++) {}P1OUT=0×42; for(i=0;i<=20000;i++) {}P1OUT=0×24; for(i=0;i<=20000;i++) {}P1OUT=0×18; for(i=0;i<=20000;i++) {} } } }
Chương 2 : Basic Clocks Phần này có thể hơi khó hiểu, nhưng các bạn cứ đọc kỹ trước, rồi sau này sẽ hiểu dần dần sau . Chế độ clock được cung cấp trong tất cả các dòng MCUs Msp430 của TI .Trong chương này sẽ giúp các bạn hiểu rõ về hoạt động các xung clocks cơ bản của msp430. 1. Giới thiệu về clock : Việc config xung clocks là vô cùng cần thiết đối với bất kỳ 1 con MCUs nào, có xung clock thì con mcu của chúng ta mới có thể hoạt động đúng được . Chúng ta có thể hiểu xung clocks chính là trái tim của 1 hệ thống xử lý số, và tốc độ xử lý lệnh phụ thuộc hoàn toàn vào nguồn xung . Vấn đề là làm sao chúng ta có thể thiết lập xung clocks này hoạt động .Chúng ta có thể có nhiều cách làm việc đó . Với dòng msp430 này thì nó 3 loại xung cơ bản như sau : - Internal Oscillators - External Crystals - External Oscillators 2. Internal/External Oscillators : a. Internal : Đây là nguồn dao động có sẵn bên trong chip , thông thường sử dụng các mạch RC được tích hợp sẵn với các hệ mạch . - Lợi ích của nguồn này đó là việc chúng ta có thể dễ dàng thay đổi được tần số hoạt động mà không cần phải sử dụng các linh kiện ngoại – làm chiếm diện tích board . - Trên chip Msp430 đã có sẵn nguồn xung DCO (Digitally Controller Oscillator) hỗ trợ tốc độ cao . b. External : Khác với những dòng vi điều khiển khác thì dòng Msp430 chỉ có thể hỗ trợ thạch anh có tần số lên đến 32.768khz ,việc sử dụng thạch anh ngoại nhằm đáp ứng nhu cầu về ứng dụng cần chạy thời gian thực và cần sự chính xác cao . Chính vì vậy mà chúng ta nên hạn chế sử dụng nếu có thể được , 1 mặt giảm việc thi công mạch in . Hình ảnh chỉ mang tính minh họa . Trong chương này , chúng ta sẽ nghiên cứu chi tiết việc thiết lập nguồn xung nội ,như vậy sẽ đơn giản cho việc thiết kế phần cứng .Và nguồn xung nội hỗ trờ dải tần làm việc tử 400-kHz to 16-MHz . 3. Mode trong xung nội : Trong nguồn xung nội thì chúng ta có tối đa là 4 mode chế độ hoạt động , các mode này lần lượt là : LFXT1CLK : Low-frequency/high-frequency oscillator Module dao động hỗ trợ tần số thấp / cao , có thể được dung cho ứng dụng với bộ theo dõi tần số thấp thạch anh 32.768khz , hoặc từ các nguồn xung khác có tần số từ 400khz đến 16Mhz . XT2CLK: Optional high-frequency oscillator . Module lựa chọn làm việc ở tần số cao . DCOCLK: Internal digitally controlled oscillator (DCO). Bộ dao động số được tích hợp sẵn trong chip, khi làm việc nếu không có thiết lập gì về nguồn xung thì msp430 sẽ hoạt động dưa trên bộ DCO này . VLOCLK: Internal very low power, low frequency oscillator with 12-kHz typical frequency Module tích hợp , đây là mode hoạt động siêu tiết kiệm năng lượng . Sơ đồ khối clocks :