Vài điểm về vi điều khiển 



Có thể nói, hiện nay vi điều khiển đã rất phổ biến ở Việt Nam, và được ứng dụng rất nhiều. Những sinh viên ngành Điện, Điện Tử, Cơ Điện Tử, Tin Học, Viễn Thông... hầu như ai cũng biết cách để làm việc với vi điều khiển. Tuy nhiên, để viết một bài viết tổng quát về vi điều khiển và việc lập trình cho vi điều khiển, quả thật là quá khó khăn đối với tôi. Do vậy, tôi đặt ngay vấn đề là bài viết này sẽ hướng vào những bạn sinh viên mới bắt đầu tiếp cận với vi điều khiển. Bài viết sẽ được chia thành 3 nội dung chính. Nội dung thứ nhất, tôi trình bày khái quát về vi điều khiển. Nội dung này được đề cập trong rất nhiều tài liệu, và dường như là vấn đề cơ bản, do vậy, tôi chỉ trình bày những ý kiến cá nhân của tôi sao cho thật phù hợp với các bạn sinh viên mới tiếp cận với vi điều khiển. Nội dung thứ hai, tôi trình bày về cách tiếp cận một họ vi điều khiển, hay cụ thể hơn là các bạn cần gì để bắt đầu học vi điều khiển. Nội dung cuối cùng, tôi sẽ liệt kê các bước học vi điều khiển một cách tương đối rõ ràng, mà cá nhân tôi cho rằng nó hữu ích cho các bạn. Bởi vì những bước này tôi cũng tham khảo ở một số tài liệu hướng dẫn, và khi học thì tôi cũng phải lần mò và đi theo con đường đó.
1) Vi điều khiển


Trong rất nhiều tài liệu cơ bản đều đề cập đến khái niệm vi điều khiển là gì. Do vậy, tôi lướt qua các khái niệm cơ bản này. Tôi chỉ đề cập đến các khái niệm, mà các bạn cần quan tâm khi bắt đầu học, hoặc lựa chọn một vi điều khiển cho một ứng dụng nào đó của các bạn. Từ những khái niệm tôi đề cập, các bạn có thể tham khảo từ các tài liệu chi tiết hơn, và rồi các bạn sẽ nắm được toàn bộ những vấn đề cơ bản của một họ vi điều khiển nào đó.
a) Kiến trúc vi điều khiển

Thực ra vi điều khiển cũng là một cấu trúc siêu nhỏ, gồm các linh kiện điển tử ở kích thước micro hoặc nano, các linh kiện này được kết hợp với nhau và được nối với các thiết bị bên ngoài qua các chân vi điều khiển.Chính vì vậy, hiểu rõ được kiến trúc vi điều khiển, các bạn sẽ hiểu rõ được mình đang làm việc với cái gì, và cái đó làm việc như thế nào.

Kiến trúc máy tính hay kiến trúc vi điều khiển cũng tương tự nhau. Do đó, các bạn có thể tìm hiểu về kiến trúc máy tính, để hiểu rõ về kiến trúc vi điều khiển. Hai kiến trúc vi điều khiển phổ biến hiện nay, là kiến trúc Von Neumann và kiến trúc Harvard. Sự khác biệt chủ yếu giữa hai kiến trúc này, chính là việc tổ chức bộ nhớ dữ liệu và bộ nhớ chương trình. Kiến trúc Von Neumann tổ chức bộ nhớ dữ liệu và bộ nhớ chương trình chung với nhau, chính vì vậy, đường truyền (bus) của kiến trúc Von Neumann là đường truyền chung. Trong khi đó, kiến trúc Harvard tách rời bộ nhớ dữ liệu và bộ nhớ chương trình.

Mỗi kiến trúc này có một lợi điểm riêng rẽ khác nhau. Kiến trúc Von Neumann tận dụng được tài nguyên bộ nhớ, trong khi đó kiến trúc Harvard sẽ đạt tốc độ xử lý cao hơn, mặt khác đường truyền dữ liệu và đường truyền lệnh điều khiển (chương trình) có thể có dung lượng khác nhau.

b) Tập lệnh

Tập lệnh ở đây được coi là tập mã lệnh nhị phân, và chúng ta chưa nên vội đề cập đến ngôn ngữ lập trình. Bản chất của tập lệnh là một tập hợp các mã nhị phân, mà từ đó các đơn vị xử lý trung tâm (CPU) nhận biết và thực hiện. Dữ liệu được CPU xử lý là các số nhị phân. Chính vì vậy, tập lệnh dù thế nào đi nữa cũng sẽ thực hiện mấy việc chính sau đây:

- tính toán các con số nhị phân.
- các lệnh để chuyển các giá trị ra thành tín hiệu điện tử ở chân linh kiện
- các lệnh di chuyển các giá trị giữa các thanh ghi
- các lệnh điều khiển con trỏ chương trình

Những điều này tưởng chừng đơn giản, nhưng thiết nghĩ nó sẽ giúp ích cho các bạn khi học và hiểu một tập lệnh, các bạn có thể phân loại chúng đúng cách.

Tập lệnh hiện nay được phân làm hai loại, tập lệnh RISC và tập lệnh CISC. Các bạn có thể tìm hiểu sâu hơn qua các bài viết trên các diễn đàn điện tử, tin học, hoặc những tài liệu tin học khác.

Như vậy, từ kiến thức này, những khó khăn mà rất nhiều người gặp phải khi thực hiện lệnh tác động lên những thanh ghi lệnh (vì nó cũng chỉ là dãy số nhị phân) sẽ được giảm bớt đi khá nhiều.

c) Chức năng

Câu hỏi lớn nhất đặt ra khi cầm một con vi điều khiển trên tay, chính là chúng ta sẽ làm gì với nó? Hiện nay rất nhiều loại vi điều khiển ra đời, và rất nhiều tính năng được tích hợp vào trong vi điều khiển dưới dạng phần cứng. Tuy nhiên, tựu chung lại thì mọi việc cũng đều nằm ở việc điều khiển động cơ và đọc cảm biến. Một cánh cửa tự động là một cái cảm biến hồng ngoại và một cái động cơ. Đại đa số những gì tự động đều có dính đến động cơ trong đó, vì nếu không có động cơ thì làm sao nó biến đổi điện năng thành cơ năng được? Mà cái gì có đi thì cũng có lại, đã có động cơ làm việc, thì phải có cảm biến để quan sát.

Cái lý luận này sâu cũng không sâu, mà nông cũng không nông, nhưng nó lại là cơ sở để những nhà sản xuất tung ra các sản phẩm vi điều khiển của mình. Và cũng từ đó, các bạn cũng dễ phân loại để lựa chọn vi điều khiển cho mình dùng. Ngoại trừ hai loại này, thì những loại khác chúng ta cứ xem là loại thứ ba.

Chúng ta cần nhóm loại để làm gì? Bởi vì tính năng của vi điều khiển, có liên quan trực tiếp đến số chân của vi điều khiển. Cho nên việc phân loại và hình dung ra một bản đồ đầy đủ các loại, các chức năng của vi điều khiển, sẽ giúp các bạn lựa chọn vi điều khiển tốt hơn. Một người mới học, để có một tầm nhìn rộng về vi điều khiển mà lựa chọn cũng thật là khó, nhưng nếu tìm tòi, hiểu và phân loại được một số loại vi điều khiển, tự nhiên sẽ hiểu rõ được cái bản đồ tương đối phức tạp này.

Làm thế nào để biết? Đơn giản thôi, trong tất cả các datasheet được cung cấp cho từng loại vi điều khiển, đều có mô tả rõ tính năng của từng loại. Các bạn tự mình tìm hiểu và phân loại một số vi điều khiển thông dụng (mà các bạn có thể mua) rồi tự đánh giá chúng về mặt tính năng qua các datasheet.Và để đọc hiểu được các tính năng này, thì các bạn phải có một kiến thức nền, vd như timer là gì? pwm là gì? capture là gì? i2c là gì? usart là gì? giao tiếp CAN là gì?... Những cái đó, bạn không cần học từ nhiều con vi điều khiển, vì những tính năng đó hoàn toàn giống nhau, chỉ có cách để làm cho nó hoạt động là khác nhau thôi. Vậy nên, các bạn cứ lấy một datasheet của một con vi điều khiển bất kỳ nào đó, đọc và cố gắng hiểu mục đích của các tính năng đó, và chúng ta có thể dùng kiến thức này cho bất kỳ con vi điều khiển nào khác.