Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 24 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
24
Dung lượng
1,69 MB
Nội dung
IV. RS232 Terminal RS232 Terminal là thuật ngữ dùng chỉ các phần mềm máy tính có khả năng nhận và phát dữ liệu ra cổng COM (như một thiết bị đầu cuối). Các RS232 Terminal rất hữa dụng để kiểm tra các chương trình truyền nhận dữ liệu qua cổng COM. Hệ điều hành Windows có sẵn một RS232 Terminal gọi là “Hyper Terminal”. Công cụ này khá tốt cho mục đích giao tiếp thông thường. Để sử dụng Hyper Terminal bạn hãy vào “All Programs/ Accessories/Communications/Hyper Terminal” hoặc đơn giản là vào Run và gõ lệnh “hypertrm”. Một hộp thoại có tên “Connection Description” xuất hiện, hãy điền một tên bất kỳ cho cuộc gọi và nhấn OK. Trong hộp thoại tiếp theo, Connect to, hãy chọn cổng COM mà bạn muốn giao tiếp, và nhấn OK. Cuối cùng là hộp thoại COM Properties cho phép bạn thiết lập các thông số giao tiếp như Baudrate, Parity bit, Stop bit như trong hình 11, chú ý hãy chọn Flow control là "none"…và nhấn OK. Hình 11. Thiết lập cuộc gọi. Giả sử bạn chạy chương trình ví dụ trong phần demo của stdio, bạn thu được giao diện HyperTerminal như trong hình 12. Hình 12. Giao diện Hyper Terminal. Trong bài học này, tôi giới thiệu một chương trình Terminal có tên Hercules của HW group (http://www.hw-group.com/products/hercules/index_en.html). Đây là một Terminal miễn phí rất tốt, dễ sử dụng và ổn định. Ngoài chức năng RS232 Terminal, Hercules còn được dùng cho các giao diện khác như TCP, UDP…Bạn chỉ cần download chương trình về và chạy file Hercules.exe. Bạn thu được giao diện Hercules như sau: Hình 13. Giao diện phần mềm Hercules. Hãy chọn tab Serial để giao tiếp với cổng COM, thiết lập các thông số như tên cổng, Baudrate, Data frame…rồi nhấn nút Open, bạn đã sẵn sàng để sử dụng Hercules. Giả sử bạn có 3 cổng COM ảo tên là COM2, COM3 nối với nhau. Hãy sử dụng ví dụ trong phần stdio, trong mạch điện mô phỏng Proteus của ví dụ hãy xóa thiết bị ảo Terminal. Hãy thêm vào một thiết bị tên là COMPIM bằng cách search với keyword là COMPIM (hoặc chạy file AVR_STD_Terminal.DSN trong thư mục AVR_STD của ví dụ trên). Kết nối như trong hình 14. Sau đó right click vào COMPIM để vào hộp thoại “Edit component”, đổi thông số Physical port thành CÒM, đổi Virtual Baud Rate thành 38400. Chạy lại mô phỏng bạn sẽ thấy kết quả hiển thị trên Hercules như trong hình 14. Type 1 phím bất kỳ để thấy mã ASCII. Đây là ví dụ cho phép bạn giao tiếp giữa chương trình AVR mô phỏng trong Proteus và ứng dụng chạy trên Windows thông qua các cổng COM ảo. Nó thực chất là một dạng giao tiếp máy tính bằng cổng COM, dành cho trường hợp bạn chưa có mạch AVR thật. Mấu chốt nằm ở thiết bị COMPIM trong Proteus. COMPIM thực chất là mô hình cổng COM tồn tại trên máy tính của bạn. Trong trường hợp này chúng ta dùng Eltima VSPE (hoặc VSPD) để tạo 2 cổng COM ảo trên máy tính là COM2 và COM3, chúng được đấu chéo với nhau. Chúng ta set COMPIM trong Proteus là COM2 trong khi cổng trên Hercules là COM3. Khi chạy mô phỏng, AVR sẽ gởi dữ liệu ra COMPIM (tức COM2), COM2 truyền đến COM3 và hiển thị trên Hercules. Chúng ta có thể tự viết các chương trình trên Windows để nhận và gởi giá trị qua COM thay cho Hercules. Trong phần tiếp theo tôi sẽ hướng dẫn bạn tạo chương trình như thế. Hình 14. Kết hợp mô phỏng và Hercules. V. Lập trình giao tiếp với cổng COM bằng Visual Basic và Visual C++ Các chương trình Terminal đề cập ở trên là một dạng ứng dụng giao tiếp giữa máy tính và vi điều khiển ở mức độ đơn giản. Trong nhiều trường hợp, yêu cầu giao tiếp đòi hỏi mức độ phức tạp cao hơn, ví dụ lưu trữ dữ liệu hay vẽ đồ thị biến thiên, thì người dùng cần phải tự viết các chương trình trên máy tính của riêng mình. Phần này tôi hướng dẫn bạn các viết chương trình trên máy tính để truyền và nhận dữ liệu từ cổng COM bằng 2 ngôn ngữ lập trình Visual Basic và Visual C++ (6.0) trên nền Windows. Chú ý, mục đích bài viết này là về AVR nên phần viết ứng dụng trên Windows tôi chỉ trình bày một cách đơn giản cốt cho bạn nắm được nguyên lý. Để phát triển các ứng dụng phức tạp hơn người đọc cần tự trang bị cho mình kiến thức về lập trình trên Windows. Trong tất cả các hướng dẫn bên dưới tôi giả sử là người đọc ít nhất biết được cách tạo Project trong Visual Basic hoặc/và Visual C++. 1. Viết chương trình giao tiếp cổng COM bằng Visual Basic 6.0 Kể từ các phiên bản Windows 2000 về sau, việc giao tiếp với các cổng máy tính truyền thống, như cổng LPT, trong Windows tương đối khó khăn. Tuy nhiên, với cổng COM thì có điều may mắn là Microsoft có cung cấp một công cụ (thật ra là một control – điều khiển) có tên gọi là “Microsoft Communication Control” hay viết tắt là MSComm. MSComm xuất hiện trong các phần mềm lập trình nổi tiếng của MS như Visual Basic hay Visual C++ dưới dạng một “điều khiển”. Vì là một “điều khiển” được thiết kế sẵn cho cổng COM nên MSComm chứa tất cả các công cụ cần thiết để giao tiếp với cổng này, công việc của người viết chương trình chỉ đơn giản là khai báo và sử dụng. Để minh họa cách sử dụng MSComm trong Visual Basic, hãy làm theo hướng dẫn bên dưới. Chạy Visual Basic 6, vào menu “File/New Project” và tạo một “Standard EXE”. Bạn sẽ thấy một Project có tên là “Project1” kèm một hộp thoại nền (form chính) có tên Form1 xuất hiện. Bạn có thể đặt tên bất kỳ cho Project và form chính. Hãy quan sát ví dụ trong hình 15. Từ thanh công cụ Toolbox hãy click vào control “textbox” và vẽ lên “form” chính 2 textbox tên là txtOuput và txtInput (xem hình 15) (đổi tên các textbox trong cửa sổ Properties nằm ở gốc thấp, bên phải). với txtOutput, hãy set thông số Multiple thành True và ScrollBars thành “3 – Both” Hình 15. Giao diện Visual Basic 6. Tiếp theo hãy đưa control MSComm vào form chính. Theo mặc định, control MSComm không có sẵn trong Toolbox của Visual Basic, chúng ta cần thêm vào Toolbox trước khi sử dụng. Để thêm MSComm vào Toolbox, chọn Menu “Project/Components” bạn sẽ thấy một hộp thoại tên Components xuất hiện như trong hình 16. Tìm và click chọn vào ô “Microsoft Comm Control 6.0” như trong hình và nhấn OK. Lúc này, quan trong Toolbox của VB bạn sẽ thấy icon của MSComm xuất hiện. Click vào icon này và vẽ 1 đối tượng MSComm lên form chính (xem lại hình 15). Giữ tên mặc định của đối tượng này là MSComm1. Hình 16. Thêm công cụ MSComm vào Project. Viết code: Mục đích của ví dụ này như sau: dữ liệu nhận về từ cổng COM sẽ hiển thị trên textbox txtOutput, và khi người dùng type 1 ký tự vào txtInput ký tự sẽ được truyền đi qua cổng COM. Trước hết, hãy doubleclick vào form chính, viết đoạn code sau vào sự kiện Form_Load(): Mục đích của đoạn code này là cài đặt các thông số cho MSComm1. - Thông số CommPort = 3 nghĩa là chúng ta muốn kết nối với cổng COM3. Thông số này do người dùng thay đổi tùy theo cổng COM chúng ta muốn giao tiếp. - Thông số Setting = “38400, N, 8,1” nghĩa là tốc độ Baud=38400, không sử dụng bit Parity, độ dài khung truyền bằng 8 và có 1 bit Stop. - RThreshold = 1 nghĩa là khi có 1 ký tự đến cổng COM, ngắt nhận dữ liệu sẽ xảy ra. - InputLen = 1 nghĩa là khi đọc dữ liệu từ bộ đệm nhận, chúng ta sẽ đọc lần lượt 1 ký tự (1 byte). - PortOpen = True tức cho phép “mở” cổng COM để sẵn sàng giao tiếp. Tiếp theo, doubleclick vào biểu tượng của MSComm1 trên form chính để [...]... xuất hiện trông txtOutput như trong hình 17 Click vào txtInput và type bất kỳ một phím nào đó để xem kết quả So sánh với mô phỏng trong hình 14 bạn thấy nét tương đồng Như thế bạn đã thành công khi tự viết cho mình 1 ứng dụng giap tiếp với cổng COM bằng Visual Basic 2 Viết chương trình giao tiếp cổng COM bằng Visual C++ 6.0 Phần này chúng ta sẽ thực hiện một ví dụ truyền nhận qua cổng COM tương tự như... có thể nhấn tổ hợp phím Ctrl+F5 để chạy chương trình Dùng mạch điện AVR_STD_Terminal.DSN và chạy mô phỏng như trong phần lập trình với VB Kết quả thu được sẽ như trong hình 24 Hình 24 Giao tiếp giữa AVR và Visual C++ Mời bạn tham khảo thêm phần mềm gCOM, một công cụ giao tiếp, lưu trữ dữ liệu và vẽ đồ thị cổng COM ... Project Theo mặc định Control này có tên IDC_MSCOMM1 Hình 18 Thêm Control MSComm vào Toolbox trong VC++ Hình 19 Giao diện chương trình trong Visual C++ Việc lập trình trong VC++ tương đối khó hơn VB (cho người mới tìm hiểu) Các thuộc tính của các Control như Edit box không được truy cập trực tiếp như Textbox trong VB Ví dụ để gán và hiển thị một chuỗi hay số lên Edit box chúng ta phải thực hiện gán và... tạo ở các bước trên) Hãy thêm các dòng sau vào sau dòng “// TODO: Add extra initialization here”: Năm dòng code trên tương ứng với 5 dòng trong phần Form_Load() khi viết Project bằng VB mà chúng ta đã khảo sát ở trên, vì thế tôi không cần giải thích thêm cho các dòng code này Tiếp theo chúng ta sẽ viết code cho sự kiện onComm (ngắt nhận) của control MSComm, trước khi viết code hãy nhấnCtrl+W để hiện... bằng dòng lệnh 9: m_txtOutput+=strInput Cuối cùng, để cho giá trị của biến m_txtOutput cập nhật lên Edit box chúng ta phải gọi hàm UpdateData với tham số FALSE như dòng 10: UpdateData(FALSE) (đây là cách làm việc của Visual C++) Các dòng code từ 12 đến 14 được dùng với mục đích đưa con trỏ về cuối dòng của Edi box sau khi kết thúc quá trình nhận dữ liệu Bạn có thể bỏ qua nếu thấy không cần thiết Viêc cuối... Edit box chúng ta cần gọi hàm UpdateData với tham số TRUE trước đó như trong dòng 10 Sau cùng, gọi phương phương thức SetOutput của đối tượng MSComm để gởi giá trị ra cổng COM: m_comm.SetOutput(COleVariant(tmpStr)) Để gởi một ký tự (hay chuỗi ký tự) ra cổng COM trước hết chúng ta cần “ép kiểu” ký tự đó về COleVariant vì như đã trình bày, MSComm chỉ làm việc với COleVaraint Đoạn COleVariant(tmpStr)... Finish để tạo Project (các bước khác để mặc định) Hình 17 Tạo Project MFC trong VC++6 Khi Project mới được tạo sẽ có 1 hộp thoại chính (Dialog) xuất hiện với 2 button “OK” và “Cancel” trên đó Dùng công cụ “Edit” để thêm vào 2 “Edit box” và sắp xếp lại giao diện như hình 19 Right click vào các Edit box và chọn Proterties từ các Popup_menu, lần lượt đổi ID của 2 Edit box thành IDC_OUTPUT và IDC_INPUT Cũng... lượng byte do RThreshold quy định) thì sự kiện onComm sẽ xảy ra (ngắt xảy ra), trong sự kiện này chúng ta sẽ viết code để nhận và xử lý dữ liệu Dòng 2 chúng ta khai báo 1 biến tạm thời tên là InputText với kiểu dữ liệu string Chú ý là sự kiện onComm có thể xảy ra do nhiều nguyên nhân, ở đây chúng ta chỉ quan tâm đến trường hợp dữ liệu truyền đến, dòng 3 là một dạng “lọc” sự kiện, chúng ta chỉ thực hiện... thêm sự kiện onComm vào Project Hình 22 Thêm sự kiện onComm để nhận dữ liệu từ cổng COM Viết đoạn code sa vào sự kiện onComm: Như đã trình bày ở trên, m_comm là biến đại diện cho MSComm việc thao tác với cổng COM bây giờ thực hiên thông qua biến m_comm Trong dòng 4 chúng ta khai báo 1 biến phụ strInput có kiểu CString dùng chứa giá trị nhận về sau này Cũng giống như trong VB, sự kiện onComm có thể... nhiều nguyên nhân, chúng ta chỉ quan tâm đến trường hợp có dữ liệu đến bộ đệm, dòng 5 cho phép ‘lọc” ra sự kiện cần thiết: if (m_comm.GetCommEvent()==2 ) Dòng 6 chúng ta khai báo 1 biến phụ tên in_dat với kiểu COleVariant COleVariant là lớp (class) của MFC, tên gọi của nó là sự kết hợp của C + OLE +VARIANT trong đó OLE là “Object Linking Embedded” là một kiểu đối tượng không có sẵn mà được “nhúng” vào, . COM2 và COM3 , chúng được đấu chéo với nhau. Chúng ta set COMPIM trong Proteus là COM2 trong khi cổng trên Hercules là COM3 . Khi chạy mô phỏng, AVR sẽ gởi dữ liệu ra COMPIM (tức COM2 ), COM2 truyền. sự kiện comEvReceive xảy ra (dữ liệu được nhận về): If Me.MSComm1.CommEvent = comEvReceive Then. Việc quan trọng duy nhất để đọc dữ liệu được gởi đến COM là đọc bộ đệm Input của MSComm như. 22. Thêm sự kiện onComm để nhận dữ liệu từ cổng COM. Viết đoạn code sa vào sự kiện onComm: Như đã trình bày ở trên, m_comm là biến đại diện cho MSComm việc thao tác với cổng COM bây giờ thực