Chương trình mô phỏng hệ thống mạch điện tử Proteus

Một phần của tài liệu LUẬN VĂN:KIỂM THỬ PHẦN MỀM NHÚNG docx (Trang 35 - 61)

5.2.1. Giới thiệu Proteus

Proteus là một bộ chương trình dùng để tạo và chạy các hệ thống mạch điện , các hệ

thống mạch có vi điều khiển và mô phỏng quá trình làm việc của hệ thống, giúp cho ta hình dung trực quan hơn vào thực tế của các linh kiện điện tử và sự hoạt động của các vi

điều khiển.

Phần mềm Proteus được viết bởi công ty Labcenter Electronics . Proteus đã được sử

dụng khá rộng rãi ở nhiều nơi. Proteus đã tự khẳng định thế mạnh của nó về mô phỏng các hệ thống mạch sát với thực tế, càng ngày nó càng được hoàn thiện và phát triển mạnh .Proteus cung cấp cho người sử dụng hầu như toàn bộ các linh kiện điện tửđể người dùng có thể tạo ra được các mạch nguyên lý và sau cùng là chạy thử và so sánh với kết quả

thực tế. Chính vì Proteus có thể tạo và chạy được các mạch đơn giản cũng như các mạch phức tạp nên có thể dùng nó trong giảng dạy, trong các phòng thí nhiệm điện tử cũng như

trong thực hành vi điều khiển …[3]

Vì vậy, ta có thể dùng Proteus để giả lập các hệ thống nhúng với các loại vi điều khiển khác nhau, các loại linh kiện khác nhau, qua đó ta dùng hệ thống giả lập này để

kiểm thử các chương trình mà ta muốn nhúng trên thiết bị thật.

Trong bài khóa luận này, tôi dùng Protues để mô phỏng một hệ thống mạch đơn giản sử dụng vi điều khiển họ 8051 như mạch đèn led.

Các ưu điểm của Proteus [3]

- Dễ dàng tạo ra một sơ đồ đơn giản từ các mạch điện đơn giản, đến các mạch có bộ

lập trình vi xử lý .

- Dễ dàng chỉnh sửa các đặc tính của linh kiện trên sơ đồ mạch: chỉnh sửa số bước của động cơ bước, chỉnh sửa nguồn nuôi cho mạch ,thay đổi tần số hoạt động cơ bản của vi xử lý…

- Công cụ hỗ trợ kiểm tra lỗi thiết kế trên sơ đồ mạch mô phỏng. Xem và lưu lại phần báo lỗi .

- Chạy mô phỏng và phân tích các tính chất của mạch điện cơ bản. Công cụ hỗ trợ

việc phân tích tần số, sóng, âm thanh .. không nhưng thế phần mềm còn có thêm các máy phân tích từ đơn giản như : đồng hồ đo Vôn, Ampe, đến các máy đo dao động ,máy tạo sóng dao động …

- Ngoài ra Proteus còn cung cấp cho người sử dụng các công cụ mạnh mà các phần mềm khác hầu như không có. Chẳng hạn thư viện LED với các loại màu sắc khác nhau kể cả led 7 đoạn. Nhưng phần hiển thị mạnh nhất mà Proteus cung cấp là màn hình LCD, nó có thể mô phỏng cho rất nhiều LCD từđơn giản đến phức tạp.

- Một cái ưu điểm nữa của Proteus là có thể mô phỏng công cụ phát và thu tín hiệu từ các mạch giao tiếp với máy tính qua công cụ RS232. Trong đó người sử dụng có thể điều khiển được quá trình truyền phát, tốc độ Baud … giúp cho người lập trình có thể mô phỏng các mặt truyền phát tín hiệu .

- Một điểm mạnh khác của Proteus là cung cấp cho người sử dụng công cụ biên dịch cho các họ vi xử lý như 8051, AVR, HC11 … Qua đó tạo ra các tập tin HEX dùng để nạp cho vi xử lý và tập tin DSI dùng để xem và chạy kiểm tra từng bước trong chương trình mô phỏng .

- Đối với các mạch vi xử lý Proteus không những cung cấp hình ảnh thực tế của các linh kiện xuất mà còn cung cấp cho người lập trình rất nhiều các cửa sổ thông báo các nội dung của bộ nhớ, con trỏ, thanh ghi, …

- Proteus có một thư viện khá lớn với hơn 6000 linh kiện các loại và càng ngày càng

được bổ sung. Ngoài ra còn có keypad (ma trận phím tạo đơn giản cho người thiết kế khi cần thao tác trên các ma trận phím ).

Khả năng ứng dụng của Proteus [3]

- Khả năng ứng dụng chính của Proteus là mô phỏng, phân tích các kết quả từ các mạch nguyên lý. Proteus giúp cho người sử dụng có thể thấy trước mạch thiết kế chạy

đúng hay sai trước khi thiết kế trên bản mạch.

- Các công cụ phục vụ cho việc phân tích mạch có độ chính xác khá cao nhưđo vôn hay ampe, máy đo dao động .

- Khả năng áp dụng chương trình Proteus vào trong giảng dạy là rất tốt cho các thầy cũng như cho sinh viên học tập kỹ thuật điện tử vì hầu như Proteus cung cấp gần như đầy đủ từ cơ bản đến phức tạp cho người học điện tử và vi điều khiển.

- Đối với các sinh viên thì Proteus nếu mà được sử dụng rộng dãi thì nó gần như là thầy dạy cho chính họở nhà. Nó giúp cho các sinh viên tự học, tự nhiên cứu và thiết kế

thử các phần đã học và chạy xem kết quả và rút ra các bài học tốt. Điều cơ bản nhất là tiết kiệm tiền cho sinh viên không có điều kiện mà lại ham học, ham nghiên cứu.

- Trong thực tế hiện nay hầu như phòng thí nhiệm điện tử nào xây dựng lên cũng phải tốn không ít ngân sách. Nếu Proteus được ứng dụng qua một máy tính các thầy giáo có thể cung cấp cho sinh viên hầu như toàn bộ các mạch điện đơn giản ,hơn nữa có thể tạo ra các KIT vi xử lý dùng phục vụ cho việc thực hành vi xử lý .Qua đó các thầy giáo có thể cung cấp cho các sinh viên các mạch điện tử phục vụ trong quá trình học tập từđó sinh viên có thể tự nguyên cứu các bài thực hành trước ở nhà trước khi thực hành thực tế trên mô hình thật sự và kết quả chắc chắn không nhỏ.

Nhược điểm của Proteus [3]

Phần mềm nào cũng có nhược điểm của nó do đó Proteus cũng không tránh khỏi các nhược điểm :

- Phần mềm do công ty của nước ngoài nên tính chất bản quyền khá cao, và hầu như ít được biết đến nên rất khó kiếm ngoài thực tế .

- Trong khi thiết kế có nhiều phần trong Proteus chạy không theo một quy tắc nào làm người sử dụng đôi lúc gặp khó khăn.

- Sử dụng khá phức tạp, nhất là đối với các mạch vi xử lý hay các mạch cần chỉnh sửa các tính chất các linh kiện (do quá nhiều tính chất phải điều chỉnh).

- Phần mềm do công ty nước ngoài viết nên không có nhiều tài liệu cung cấp hướng dẫn sử dụng .

- Hướng dẫn sử dụng trong Proteus hoàn toàn bằng tiếng anh nên đòi hỏi người sử

dụng cũng phải có một nền tảng tiếng anh cơ bản nếu muốn sử dụng nó một cách hiệu quả

(nhất là tiếng anh chuyên ngành vềđiện tử).

Sử dụng Proteus

Chương trình trong bộ Proteus được sử dụng để thiết kế mô phỏng các mạch điện là ISIS.

Phiên bản tôi sử dụng ở đây là Proteus 7.2 Professional. Sau khi cài đặt, ta khởi

động Proteus bằng cách chọnStart -> Program -> Proteus 7 Professional -> ISIS 7 Professional. Dưới đây là giao diện cơ bản của Proteus :

Hình 11. Giao diện cơ bản của chương trình Proteus

Ta chọn các linh kiện để thiết kế hệ thống mạch bằng cách : trên menu ta chọn

Library -> Pick Device/Symbol … hoặc bấm phím P, hoặc bấm vào biểu tượng Pick devices trên cửa sổ Devices, bảng linh kiện sẽ hiện ra, có rất nhiều các loại linh kiện và các loại vi điều khiển để cho ta chọn lựa cho thiết kế của mình.

Ta có thể tự thiết kế hệ thống mạch mô phỏng để dùng, hoặc cũng có thể sử dụng các hệ thống mô phỏng đã được thiết kế sẵn để chạy các chương trình của mình. Trong thư mục cài đặt của Proteus có thư mục Samples chứa một số các ví dụ các hệ thống đã

được thiết kế sẵn cho các loại vi điều khiển như 8051, ARM, PIC… Các hệ thống mạch

mạch bằng cách mở file .DSN bằng Proteus, hoặc cũng có thể chia sẻ file .DSN cho những người khác sử dụng lại mạch mô phỏng của mình.

Trong khóa luận này, tôi sử dụng lại thiết kế mạch của người khác để kiểm thử

chương trình của mình, đây là một thiết kế hệ thống đơn giản sử dụng vi điều khiển AT89C51, là vi điều khiển thuộc họ 8051 của hãng Atmel rất hay được sử dụng hiện nay, các chương trình viết cho vi điều khiển 8051 đều có thể chạy trên AT89C51.

5.2.2. Ví dụ về kiểm thử chương trình nhấp nháy Led trên Proteus

Ví dụ mà tôi trình bày ở đây là chương trình nhấp nháy 2 đèn led sử dụng vi điều khiển AT89C51 trên Proteus.

Tôi viết một chương trình example2 để điều khiển nhấp nháy 2 đèn Led. Chương trình này cũng tương tự như chương trình nhấp nháy Led nối với chân P1.1 trong ví dụ

example.c đã đề cập ở phần trước, chỉ khác là ở đây ta điều khiển 2 đèn Led nối với 2 chân P2.0 và P2.1. Mục đích của chương trình là làm nhấp nháy 2 Led liên tục, Led này bật thì Led kia tắt và ngược lại.

Mã C của chương trình nhấp nháy 2 Led được lưu trong file example2.c như sau:

#include <8051.h>

void delay() //hàm tạo trễ một khoảng thời gian { int i,j; for (i = 0;i<=100;i++) for (j = 0;j<=1000;j++); } void main( ) { while (1) { P2_0 = 0; P2_1 = 1; delay(); P2_0 = 1; P2_1 = 0;

delay(); }

}

Ta biên dịch chương trình thành file example2.hex

Ta sẽ kiểm thử sự thực thi của chương trình này trên Proteus

Trước hết ta cần có mạch mô phỏng hệ thống trên Proteus để có thể thực thi chương trình. Mạch mô phỏng tôi dùng ởđây được chia sẻ bởi một người có nick name là

kids196870, chia sẻtrên blog của anh ta tại http://my.opera.com , địa chỉ blog là

http://my.opera.com/kids196870 .

File thiết kế là DK_LED.DSN, ta chỉ việc click file này, nó sẽ tựđộng gọi Proteus

để mở file.

Dưới đây là sơđồ mạch mô phỏng cho chương trình nhấp nháy 2 đèn Led được thiết kế trên Proteus [2]:

Mạch này gồm có vi điều khiển AT89C51 kết nối với 2 đèn LED và một số linh kiện khác, ta chỉ cần quan tâm đến 2 đèn LED mà thôi. Đèn Led xanh nối với chân P2.0, còn đèn Led đỏ nối với chân P2.1.

Test Case:

- Mục đích: Kiểm tra sự nhấp nháy của 2 led xanh và đỏ.

- Kết quả mong đợi: 2 led nhấp nháy xen kẽ nhau, led xanh sang thì led đỏ tắt và ngược lại.

Tiến hành test:

Ta nạp file example2.hex đã được tạo cho vi điều khiển bằng cách bấm chuột vào vi

điều khiển, chuột phải và chọn Edit Properties, cửa sổEdit Component sẽ hiện ra, tạo mục Program File ta chọn đường dẫn đến file example2.hex.

Ta chạy chương trình mô phỏng bằng cách vào mục Debug chọn execute hoặc bấm F12 hoặc bấm vào biểu tượng thực thi ở góc trái phía dưới. Sau đó ta quan sát chương trình thực thi trên mạch mô phỏng.

Hình 13. Hai đèn Led nhấp nháy đồng thời

Kết quả thực tế ta thu được là 2 Led có nhấp nháy, nhưng lại bật và tắt cùng lúc, trái với mong muốn của ta, như vậy là chương trình có lỗi.

Lỗi xảy ra có thể do ta lập trình sai, hoặc do chương trình của ta không tương ứng với cách mắc các thiết bị. Và ởđây, khi xem lại ta sẽ thấy trên mạch mô phỏng, cách mắc 2 Led là ngược nhau, 2 chân P2.0 và P2.1 sẽ có vai trò ngược nhau ( P2.0 là cực âm còn P2.1 là cực dương). Led xanh nối với P2.0 sẽ sáng khi P2_0 = 0 còn Led đỏ nối với P2.1 sẽ sáng khi P2_1 = 1. Vì vậy, đoạn mã chương trình trên của ta sẽ làm cho 2 Led sáng và tắt đồng thời.

Do đó để 2 Led nhấp nháy xen kẽ nhau ta phải sửa lại hàm main như sau :

void main( ) { while (1) { P2_0 = 0; P2_1 = 0; delay(); P2_0 = 1; P2_1 = 1; delay(); } }

Sau đó ta biên dịch lại chương trình và chạy, quan sát lại kết quả thực thi chương trình:

Hình 14. 2 Led nhấp nháy xen kẽ nhau

- Kết quả thực tế: 2 led nhấp nháy xen kẽ nhau, led xanh sang thì led đỏ tắt và ngược lại.

Kết quả thực tế mà ta thu được lần này đã trùng với kết quả mong đợi, chương trình của ta đã thực thi đúng.

Như vậy, chương trình của ta ban đầu ta tưởng như nó sẽ chạy đúng như mong muốn, không cần phải kiểm tra vì mã nguồn rất đơn giản, sau khi chạy thử trên mạch mô phỏng ta mới phát hiện ra có lỗi và sửa lại.

5.2.3. Nhận xét

Việc mô phỏng hệ thống trên Proteus cho ta nhìn thấy sự thực thi chương trình của mình rất trực quan, tuy không thể giống 100% như chạy trên thiết bị thật nhưng cơ bản cũng cho ta thấy chương trình của mình sẽ chạy như thế nào. Qua đó ta có thể sớm phát hiện lỗi, tránh các rủi ro có thể khi chạy trên thiết bị thật.

Ngoài ra việc chạy mô phỏng còn giúp ta tiết kiệm thời gian, chương trình được thực thi ngay trên máy tính thay vì phải nạp lên thiết bị.

Chương 6. Kim th chương trình cho 8051 bng Unit Test, s dng công c Embedded Unit

Unit Test cũng rất hữu dụng đối với lập trình hệ thống nhúng, nó giúp người phát triển đảm bảo tính chính xác của từng đơn vị chương trình. Ở đây, tôi sử dụng một Unit Test Framework khá phổ biến dùng cho lập trình C nhúng là Embedded Unit ( Embunit).

6.1. Gii thiu Embedded Unit

Embedded Unit là một công cụ tự do mã nguồn mở, được chia sẻ tại địa chỉ

http://embunit.sourceforge.net/ , ta có thể vào trang này để tải miễn phí mã nguồn

Embedded Unit cũng như tài liệu hướng dẫn, ví dụ chương trình minh họa.

Embedded Unit là một Test Framework (bộ khung test) cho hệ thống nhúng với ngôn ngữ C, nó được thiết kế trên cơ sở của JUnit và CUnit theo hướng thích nghi với hệ

thống C nhúng. Một điều đặc biệt là Embedded Unit không yêu cầu thư viện C chuẩn [7]. Embedded Unit thường được sử dụng trên linux với trình biên dịch GCC và công cụ

GNU Make. Ở đây, tôi không sử dụng linux mà sử dụng Windows XP 32 bit, vì vậy tôi cài đặt GCC và GNU Make trên Windows và dùng nó để sử dụng Embedded Unit.

Tôi cài GCC và GNU Make bằng cách cài phần mềm Dev-C++, đây là một IDE cho lập trình C/C++ rất nổi tiếng trên Windows, nó có tích hợp bộ biên dịch GCC và cả công cụ GNU Make, vì thế ta chỉ cần cài Dev-C++ rồi đưa đường dẫn của thư mục bin (trong thư mục cài đặt Dev-C++) vào biến Path của Windows là có thể sử dụng được GCC và GNU Make. Ta có thể tải Dev-C++ miễn phí tại http://bloodshed-dev-c.en.softonic.com/

Ta sử dụng Embedded Unit bằng cách thiết kế các test case và biên dịch thành 1 file thực thi, chạy file thực thi đó để xem kết quả kiểm thử ngay trên máy tính của mình, vì thế nên ta không sử dụng trình biên dịch SDCC để chạy các phép kiểm thử.

Hình 15. cấu trúc của Embedded Unit

6.2. Ci tiến để s dng Embedded Unit cho lp trình C cho 8051

Ta lập trình C cho 8051, chương trình C của ta sẽ có các biến đặc biệt, đó là các thanh ghi, các bit đặc biệt, các chân của vi điều khiển, vì vậy khi ta viết chương trình kiểm thử có các biến này, nếu ta sử dụng GCC để chạy thì sẽ báo lỗi, không thực thi được do thư viện của GCC không có các biến đó (thiếu thư viện).

Tôi đã có một cải tiến đơn giản mà khá hiệu quả, giúp cho ta có thể chạy được các

Một phần của tài liệu LUẬN VĂN:KIỂM THỬ PHẦN MỀM NHÚNG docx (Trang 35 - 61)