gCOM - Phần mềm truyền - nhận dữ liệu với cổng COM

( 6 Votes )

 

GIỚI THIỆU gCOM

(Download Page)

gCOM - The graphic Interface for COM Port: là phần mềm đọc, hiển thị và lưu trữ dữ liệu từ cổng COM của máy tinh

Chức năng:

       - gCOM cho phép tùy ý cài đặt các thông số của cổng COM

       - gCOM có thể đọc và hiển thị dữ liệu đồng thời từ nhiều kênh

       - Dữ liệu nhận về sẽ được vẽ trên cửa sổ đồ họa. Mỗi kênh dữ liệu được vẽ với một màu riêng

       - Dữ liệu có thể quan sát và lưu lại thông qua chức năng Data Logger  

gCOM 

Hình 1. Giao diện gCOM. 

DataLogger: là một công cụ lưu trữ dữ liệu trong gCOM (xem hình 2). 

Datalogger 

Hình 2. DataLogger trong gCOM.

 

SỬ DỤNG CƠ BẢN gCOM

    - Giao diện gCOM bao gồm 2 phần chính là bảng điều khiển và cửa sổ đồ thị. Bảng điều khiển bao gồm 3 bảng nhỏ dùng điều khiển cổng COM, cửa sổ đồ thị và điều khiển dữ liệu lưu trữ. Bảng điều khiển cổng COM như trong hình 3.

PortSetting 

Hình 3. Cài đặt cổng COM. 

      - Trước khi kết nối với cổng COM, người dùng cần chọn tên cổng (ví dụ COM1, COM3...), tốc độ Baud và khung truyền. Trong hình 3, cổng COM3 được chọn, tốc độ baud 38400, khung truyền gồm 8 bits dữ liệu, không kiểm tra Parity và 1 bit Stop. Sau khi chọn cổng và khung truyền người dùng chỉ cần nhấn vào nú "Connect" để quan sát dữ liệu trên cửa sổ đồ thị. Nếu Connect thành công, "đèn trạng thái" sẽ chuyển sang màu xanh như trong hình 3.

      - Nếu độ lớn dữ liệu vượt quá giới hạn vùng đồ thị, người dùng có thể chọn tỉ lệ hiển hiển thị trong bảng "Graph Setting

DisplaySetting 

Hình 4. Chia lại tỉ lệ hiển thị đồ họa. 

      - Height: độ cao của toàn bộ vùng đồ thị (bao gồm cả phần âm và dương). Nếu dữ liệu hiển thị vượt quá vùng đồ thị hãy tăng giá trị Height, ngược lại hãy giảm Height.

      - x Scale: tỉ lệ theo phương ngang. Để nhìn rõ hơn dữ liệu hãy tăng x Scale.

      - Phải nhấn nút Update sau khi thay đổi 1 trong 2 giá trị trên để cập nhật vùng hiển thị.

      - Muốn xem dữ liệu, hãy nhấn vào nút "Show Data" ở gốc phải của gCOM.

      - Người dùng có thể trượt thanh "Scroll bar" ở phía dưới cửa sổ đồ thị để xem toàn bộ dữ liệu đã nhận về, tuy nhiên cần nhất nút "DisConnect" trước khi sử dụng Scroll bar. 

HẠN CHẾ CỦA PHIÊN BẢN DEMO

     Phiên bản  Demo cung cấp cho bạn một công cụ cần thiết để học cách giao tiếp với máy tính bằng cổng COM. Tuy nhiên, với phiên bản Demo mà tôi cung cấp miễn phí, một số chức năng được kể bên trên có thể không được tìm thấy. Dưới đây là một vài hạn chế của phiên bản Demo.

     - Không lưu được dữ liệu thành file

     - Không mở được file dữ liệu cũ

     - Chỉ cho phép đọc tối đa 10 kênh.

     - Phiên bản Demo chỉ được sử dụng cho mục đích học tập (Education), tác giả không chịu trách nhiệm nếu có bất kỳ trục trặc nào xảy ra cho phiên bản Demo.

     Nếu chấp nhận các hạn chế và quy định trên,  bạn có thể Download bản Demo của phần mềm ở đây

 

CHƯƠNG TRÌNH MẪU CHO AVR

      Dữ liệu mà gCOM có thể đọc được phải theo một định dạng (Format) được quy định trước. Người sử dụng bắt buộc phải đóng gói dữ liệu theo đúng định dạng này, nếu không quá trình tuyền nhận sẽ xảy ra lỗi. Định dạng dữ liệu cho gCOM được trình bày trong hình 5.

Format 

Hình 5. Định dạng dữ liệu cho gCOM. 

      Trong đó 'Ch' là mã Ascii của chỉ số kênh của dữ liệu. 'xx..xx' là giá trị của dữ liệu cần truyền sau khi đã chuyển sang dạng chuỗi (string). Và 'N' là dấu hiệu kết thúc một dữ liệu. Ở đây giá trị của N luôn luôn là 32 (mã Ascii của 1 khoảng trắng ' '). Hãy xét ví dụ chúng ta muốn truyền số x=3456 trên kênh 1 và y=5678 ra kênh 2 chúng ta cần truyền các chuỗi sau: "13456 " và "25678 " ra uart. Để đơn giản hóa quá trình truyền, tác giả khuyến khích người dùng nên tách gói dữ liệu thành 3 phần và truyền theo tuần tự sau:

        - Truyền mã ascii của 'Ch', ví dụ: uart_char_tx('1') để truyền kênh 1.
        - Truyền giá trị dữ liệu, ví dụ: fprintf(&uartstd, "%i", x) để truyền giá trị của x
        - Truyền mã ascii của khoảng trắng, ví dụ: uart_char_tx(' ')

      Trong phần tiếp theo chúng ta sẽ khảo sát 1 chương trình mẫu có thể dùng làm bộ khung khi muốn viết chương trình giao tiếp với gCOM. Đoạn chương trinh mẫu được trình bày trong list 0.

List 0. Chương trình mẫu cho AVR giao tiếp với gCOM
Sample_Code

     Đoạn chương trình mẫu gồm 3 chương trình con và 1 chương trình chính main. Trong đó chương trình con uart_init xác lập các thông số cổng và khung truyền, tham số cấp cho chương trình con này là tốc độ baud. Khung truyền được cố định 8 bits, không có Parity và 1 bit Stop. Đoạn chương trình con uart_char_tx phát 1 byte ra uart. Chúng ta cũng tạo 1 thiết bị ảo có tên uartstd ở dòng 27 để sử dụng cho hàm xuất nhập của thư viện stdio (xem bài Giao tiếp AVR và máy tính - phần thư viện stdio). Đoạn chương trình con uart_int_print từ dòng 29 đến 33 là phần quan trọng nhất trong chương trình mẫu này. Chương trình con này làm nhiệm vụ truyền 1 gói dữ liệu theo đúng định dạng của gCOM mà chúng ta đã thảo luận trên đây. Tham số kèm theo cho chương trình này bao gồm chỉ số kênh ch và giá trị cần truyền val. Trong dòng 30, uart_char_tx(ch+48), mã ascii của chỉ số kênh ch được truyền đi. Chúng ta đêu biết mã ascii của ký tự '0' là 48, '1' kà 49...vì thế ch+48 chính là mã ascii của chỉ số kênh ch. Tiếp theo giá trị của biến val được truyền đi bởi hàm fprintf, fprintf(&uartstd, "%i", val). Và kết thúc là truyền 1 khoảng trắng để báo kết thúc gói dữ liệu: uart_char_tx(' ').

     Phần chương trình chính do người dùng tự thêm vào tùy theo yêu cầu sử dụng. Tuy nhiên trong chương trình chính người dùng cần gọi chương trình con uart_init để khởi động uart (như trong dòng code 36)

Ví dụ sử dụng gCOM:

     Sử dụng đoạn chương trình mẫu trên chúng ta sẽ viết 1 ví dụ minh họa cách sử dụng gCOM. Ý tưởng như sau: chúng ta đọc giá trị điện áp từ kênh 0 của chuyển đổi ADC sau đó truyền giá trị này ra uart theo định dạng của gCOM. Một nguồn tạo điện áp analog dạng sine được dùng trên chân ADC0. Chúng ta dùng 2 cổng COM ảo để kết nối giữa Proteus và gCOM. Mạch điện mô phỏng như trong hình 6. Chú ý khi vẽ mạch điện: nguồn tạo tín hiệu sine được lấy ra từ nhóm công cụ "Generator mode"  như trong hình 6

Example_Circuit 

Hình 6. Mạch điện mô phỏng minh họa cách sử dụng gCOM. 

      Đoạn code cho ví dụ được viết dựa theo đoạn chương trình mẫu trong List0. Vì chúng ta có sử dụng ADC nên cần thêm hàm đọc giá trị điện áp ADC. Trong ví dụ này, điện áp tham chiếu nội 2.56V được chọn cho các kênh ADC. Giữ lại các phần phía trên chương trình chính, thêm đoạn code trong List 1 bên dưới vào thay cho chương trình chính main:

List 1. Chương trình minh họa cách sử dụng gCOM
list1

     Chương trình con read_adc được trích từ bài "AVR6-Chuyển đổi ADC" với 1 ít sửa đổi cho phần điện áp tham chiếu. Nội dung chương trình chính khá đơn giản, sau khi khởi động uart (uart_init) chúng ta khởi động ADC. Bên trong vòng lặp while chúng ta đọc giá trị kênh 0 của ADC (dòng code 14: ADC_val=read_adc(0) ) và truyền giá trị này ra uart theo đúng định dạng của gCOM bằng hàm uart_int_print trong dòng 15: uart_int_print(1, ADC_val).

      Để thực hiện mô phỏng trước hết người dùng cần tạo 2 cổng COM ảo có tên là COM2 và COM3 được đấu chéo nhau (dùng VSPE hoặc VSPD).  Đặt thông số "Physical Port" cho đối tượng COMPIM trong mạch điện mô phỏng là COM2, Virtual Baud rate là 38400. Chạy phần mềm gCOM, chọn thông số cổng là COM3 và baudrate là 38400, nhấn vào nút "Connect". Chạy mô phỏng Proteus. Nếu tất cả các bước đều thực hiện đúng, kết quả trong gCOM như ở hình 7. 

result 

Hình 7. Tín hiệu sine trong gCOM. 

Download phần mềm và ví dụ mẫu