Test truyền nhận dữ liệu qua RS232 dùng Chip Psoc

Test truyền nhận dữ liệu qua RS232 dùng Chip Psoc


Vấn đề truyền dữ liệu giữa thiết bị và máy tính (PC) hay từ PC xuống thiết bị là một khâu khá quan trọng trong khi thiết kế hệ thống. Đa phần các thiết bị được thiết kế ra đều phải được giao tiếp với máy tính thông thường được giao tiếp qua cổng RS232 hay gọi là Com. Nhiều thiết bị quy định chuẩn tốc độ truyền 19200kps và đi theo phần mền giao diện trên máy tính chuyên dùng cho thiết bị đó. Mục đích giao tiếp trên máy tính là giúp chúng ta kiểm soát được thông số hoạt động của thiết bị trên máy tính và điều khiển được thiết bị thông qua máy tính.
Trong bài viết này tôi muốn hướng dẫn mọi người về cách thức truyền dữ liệu lên PC và truyền ngược lại. Đây là một bài test khá đơn giản trên Psoc giúp các bạn hình dung được quá trình truyền nhận dữ liệu như thế nào?

Đây là một bài test khá là đơn giản truyền nhiệt độ môi trường lên máy tính và truyền kí tự bàn phím từ máy tính xuống LCD. Thông qua phần mềm giao diện có sẵn Terminal V1.9. Đây là phần mền test RS232 khá thông dụng và tiện lợi

1) Điều kiện cần biết để làm được bài test
+ Các bạn cần phải biết về chuẩn giao tiếp RS232 nó như thế nào? Các thức truyền nhận dữ liệu ra sao? Những thông số quan trọng của chuẩn RS232? Mạch giao tiếp giữa chuẩn RS232 và Vi xử lý. Các bạn có thể đọc qua bài viết này :Chuẩn RS232
+ Cách tính tốc độ truyền giữa PC và vi xử lý? Tốc độ truyền giữa vi xử lý và PC phải là đồng bộ với nhau? Xem trên máy tính của bạn thì cổng RS232 hỗ trợ những tốc độ truyền nào rồi sau đó tính cho vi xử lý
+ Phần mền giao diện trên máy tính? Tức là phần mền để quan sát thông số của thiết bị khi kết nối với RS232. Phần mền này có sẵn hoặc lập trình được cũng rất đơn giản
Các bạn khi làm bài test này cần phải nắm vững và có những vấn đề trên thì sẽ rất đơn giản khi làm bài test này. Như vậy các bài truyền thông qua RS232 cũng sẽ rất đơn giản.

2) Sơ đồ mạch truyền thông qua RS232
Bài để tôi test là bài truyền nhiệt độ môi trường lên máy tính và truyền kí tự bàn phím từ máy xuống vi xử lý hiện thị lên LCD. Nên sơ đồ mạch biendt vẽ sẽ ứng dụng luôn cho bài này.

Đây là sơ đồ ghép nối giữa PSoc và máy tính thông qua truyền thông nối tiếp RS232.
+ PSoc CY8C29466 là vi xử lý hay bộ xử lý trung tâm dùng để xử lý tín hiệu và truyền lên máy tình và nhận dữ liệu từ máy tính.
+ LCD 16*2 dùng để hiện thị kí tự bàn phím từ máy tính xuống vi xử lý
+ Lm35 cảm biến đo nhiệt độ
+ Max232 là IC giao tiếp giữa vi xử lý và máy tính. Thông qua cổng DB9 của máy tính tức là cổng nối tiếp. Hầu hết giao tiếp với máy tính và MCU đều thông qua con IC này bởi vì :đây là IC chạy ổn định và được sử dụng phổ biến. Nó không đắt, mà còn cung cấp được 2 kênh truyền cho RS232. Dòng truyền tín hiệu được thiết kế cho chuẩn  RS232 và chuẩn giao tiếp  V.28. Mỗi đầu truyền ra và cổng nhận tín hiệu đều được bảo vệ chống lại sự phóng tĩnh điện 15kV. Nó còn được thiết kế với nguồn +5V (phù hợp với nguồn cung cấp MCU). Ở đây Max232 tạo tín hiệu đồng bộ giữa máy tính và MCU
Đầu ra và đầu vào của Max232 được nối tương ứng với đầu ra và đầu vào của MCU như trên hình vẽ!
3) Cách truyền nhận và thông số thông qua chuẩn RS232
Như chúng ta đã biết chuẩn RS232 chỉ kết nối tối đa 2 thiết bị tức là chỉ có MCU và PC thôi không như các bus truyền khác mà một Master có thể kết nối với nhiều slave như I2C, Profilbus... Khoảng cách truyền khá là khiêm tốn max là 25m (theo như tôi biết) nếu mà đường truyền tốt thì nó lên tới 32m. Trong công nghiệp người ta không dùng chuẩn truyền thông này mà người ta dùng chuẩn RS485 hay các bus truyền khác phổ biến là Profilebus
a) Các thông số quan trọng trong chuẩn RS232
Trong chuẩn truyền thông nào cũng vậy nó cũng có tham số đặc trưng cho quá trình truyền nhận dữ liệu. Các tham số này ảnh hưởng tới quá trình truyền dữ liệu, tốc độ truyền, lỗi đường truyền ...
* Tốc độ Baud
ây là một tham số đặc trưng của RS232. Tham số này chính là đặc trưng cho quá trình truyền dữ liệu qua cổng nối tiếp RS232 là tốc độ truyền nhận dữ liệu hay còn gọi là tốc độ bit. Tốc độ bit được định nghĩa là số bit truyền được trong thời gian 1 giây hay số bit truyền được trong thời gian 1 giây. Tốc độ bit này phải được thiết lập ở bên phát và bên nhận đều phải có tốc độ như nhau ( Tốc độ giữa vi điều khiển và máy tính phải chung nhau 1 tốc độ truyền bit)
Ngoài tốc độ bit còn một tham số để mô tả tốc độ truyền là tốc độ Baud. Tốc độ Baud liên quan đến tốc độ mà phần tử mã hóa dữ liệu được sử dụng để diễn tả bit được truyền còn tôc độ bit thì phản ánh tốc độ thực tế mà các bit được truyền.Vì một phần tử báo hiệu sự mã hóa một bit nên khi đó hai tốc độ bit và tốc độ baud là phải đồng nhất
Một số tốc độ Baud thường dùng: 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 28800, 38400, 56000, 115200 … Trong thiết bị họ thường dùng tốc độ là 19200
* Bit chẵn lẻ  hay Parity bit
Đây là bit kiểm tra lỗi trên đường truyền. Thực chất của quá trình kiểm tra lỗi khi truyền dữ liệu là bổ xung thêm dữ liệu được truyền để tìm ra hoặc sửa một số lỗi trong quá trình truyền . Do đó trong chuẩn RS232 sử dụng một kỹ thuật kiểm tra chẵn lẻ.
Một bit chẵn lẻ được bổ sung vào dữ liệu được truyền để ch thấy số lượng các bit "1" được gửi trong một khung truyền là chẵn hay lẻ.
* Bắt tay (Hand-shaking):
   Việc truyền dữ liệu có thể tiến hành theo 3 cách: không có bắt tay, bắt tay bằng phần cứng và bắt tay bằng phần mềm.
b) Quá trình truyền dữ liệu
Truyền dữ liệu qua cổng nối tiếp RS232 được thực hiện không đồng bộ. Do vậy nên tại một thời điểm chỉ có một bit được truyền (1 kí tự).
Bộ truyền gửi một bit bắt đầu (bit start) để thông báo cho bộ nhận biết một kí tự sẽ được gửi đến trong lần truyền bit tiếp theo . Bit này luôn bắt đầu bằng mức 0..
Tiếp theo đó là các bit dữ liệu (bits data) được gửi dưới dạng mã ASCII( có thể là 5,6,7 hay 8 bit dữ liệu) Sau đó là một Parity bit ( Kiểm tra bit chẵn, lẻ hay không) và cuối cùng là bit dừng - bit stop có thể là 1, 1,5 hay 2 bit dừng.
Ví dụ như thế này : Muốn truyền kí tự là số 1 lên máy tính và máy tính hiểu được đó là số 1 mà bạn truyền lên thì bạn phải chuyển số 1 này thành mã ACSII sau đó mới truyền lên máy tính thông qua RS232. Ngược lại cũng như vậy nếu muốn truyền kí tự 1 từ máy tính xuống MCU thì kí tự này cũng phải được mã hóa thành mã ACSII và MCU nhận được kí tự này ở dạng mã ACSII
4) Truyền nhận dữ liệu trong PSoc qua chuẩn RS232
Psoc cũng như các dòng vi xử lý khác cũng có module UART trong  nên do đó ta có thể sử dụng luôn module này. Còn việc truyền nhận thế này phải tuân theo chuẩn RS232. Các bước để truyền nhận được dữ liệu trong Psoc thông qua RS232 phải qua các bước cơ bản sau :
a) Tính các tham số cho chuẩn RS232 trong PSoc
+ Tính tốc độ truyền dữ liệu (Baud rate). Trong PSoc cần tính tốc độ truyền của module Uatral sao cho đồng bộ với tốc độ truyền của cổng Com trên máy tính. Cái này các bạn xem cổng Com của các bạn hỗ trợ những tốc độ truyền nào. Thông thường là các tốc độ truyền chuẩn 50, 75, 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200, 28800, 38400, 56000, 115200
Nếu mà tốc độ truyền 2 bên mà không đồng bộ với nhau đồng nghĩa dữ liệu không truyền qua nhau được. Trong Psoc muốn tính được tốc độ Baud rate chính xác người ta phải dùng thêm một bộ chia tần số đầu vào (Module counter) cho Uart.

Nếu dùng thêm bộ counter thì công thức tính tốc độ chuẩn như sau :

Baud rate = clock vào counter / ( giá tri thanh ghi counter+1)*8


Đối với dòng vi xử lý khác như Pic chả hạn thì cũng tương tự như các tính trên
+ Thiết lập các thông số như Data bit , Parity bit, Hand-shaking. Cái này được thiết lập trên phần mền giao diện. Thông thường thiết lập như sau : Databits =8, Parity bit =none, Stop-bit =1, Hand-shaking =none
b) Cách truyền nhận dữ liệu trong Psoc thông qua chuẩn RS232
Cũng như các dòng vi xử lý nào cũng vậy cũng cung cấp cho chúng ta 4 thanh ghi cơ bản để truyền nhận dữ liệu thông qua chuẩn RS232. Nhưng do trong Psoc đã tối ưu thành hàm nên ta sử dụng các hàm luôn.
+ Hàm truyền dữ liệu : có dạng UART_1_PutChar (kí tự truyền); Hàm này dùng để truyền 1 kí tự lên máy tính và kí tự truyền phải ở dạng ACSii.
          ví dụ : UART_1_PutChar(1+'0'); // truyền kí tự 1 lên máy tính
+ Hàm báo hiệu đã truyền xong: UART_1_bReadTxStatus() Khi đã truyền xong kí tự thì có một cờ báo hiệu đã truyền xong. Hàm này dùng để chờ cho đến khi nào kí tự truyền xong mới phát kí tự tiếp theo.
         ví dụ : while(!(UART_1_bReadTxStatus()&0x10)); // cho cho đến khi kí tự truyền xong
+ Hàm nhận kí tự : UART_1_bReadRxData() . Đây là hàm nhận kí tự truyền xuống từ máy tính. Hàm này cũng mang 1 kí tự truyền từ máy tính truyền xuống.
         ví dụ : y=UART_1_bReadRxData();  // gán kí tự truyền xuống vào biến y
+ Hàm chờ kí tự truyền xuống : UART_1_bReadRxStatus(). Đây là cờ báo hiệu khi có kí tự truyền xuống từ PC.
        ví dụ : if ((UART_1_bReadRxStatus()& UART_1_RX_REG_FULL)!=0) // kiểm tra xem có kí tự truyền xuống không
Ngoài ra trong psoc còn rất nhiều hàm ngắn gọn và sử dụng rất đơn giản mọi người có thể tham khảo trong thư viện của nó.
Kí tự truyền được hiện thị lên LCD tương ứng với kí tự bàn phím máy tính :

5) Phần mền giao tiếp trên máy tính
Muốn nhận biết được kí tự truyền lên và truyền kí tự truyền xuống thì cần phải phần mền giao diện giữa máy tính và RS232. Hiện này có rất nhiều các làm việc này là dùng cái có sẵn và tự lập trình
+ Dùng cái có sẵn : Hiện tại trên Windows cũng hỗ trợ công cụ truyền nhận dữ liệu thông qua RS232 đó là Hyper Terminal. Các bạn vào Start/All Program/Accessories/communations/Hyper Terminal/ để lấy nó ra. Hay dùng phần mền được lập trình sẵn dùng cho các bài toàn kiểm tra truyền nhận dữ liệu thông qua RS232 đó là phần mền Terminal có trên hoiquandientu.com.
+ Tự lập trình : Nếu mà tự lập trình thì phần mền giao diện sẽ theo cách xử lý của bạn. Cái này được lập trình trên hai công cụ thường dùng là Visual Basic hay Delphi. Hai công cụ này giúp ta lập trình được giao diện qua cổng Com.
6) Code chương trình tham khảo
+ Môi trường lập trình : Psoc Designer
+ Viết cho vi xử lý : Psoc Cy8C29466

Bình Luận
Cùng danh mục: Vi điều khiển - Lập trình

Cơ sở công suất và năng lượng tiêu thụ trên MCU

29/07/2023 21:21:12 / Lượt xem: 417 / Người đăng: biendt

Công suất và năng lượng tiêu thụ của MCU ảnh hưởng đến các quyết định thiết kế về nguồn, thời gian sử dụng pin, và kể cả nhiệt độ hoạt động trong các ứng dụng nhúng. Nhất là khi đối mặt với các ứng dụng được cung cấp năng lượng từ nguồn pin,

Giải thích cơ chế các lệnh SET BIT, CLEAR BIT và TOGGLE trong lập trình vi điều khiển

15/09/2022 08:10:32 / Lượt xem: 996 / Người đăng: biendt

Giải thích các lệnh SET BIT, CLEAR BIT và TOGGLE thường được dùng trong lập trình vi điều khiển. Lệnh SET BIT là lệnh cài đặt 1 bit mong muốn trong thanh ghi cho nó có giá trị logic 1 và không làm thay đổi giá trị các bit còn lại của thanh ghi đó. Lệnh CLEAR BIT là lệnh cài đặt 1 bit mong muốn trong thanh ghi cho nó giá trị logic 0 và không làm thay đổi giá trị các bit còn lại của thanh ghi đó. Lệnh TOGGLE BIT là lệnh cài đặt 1 bit mong muốn trong thanh ghi cho nó giá trị logic 0 nếu trước đó nó có giá trị logic 1 và ngược lại, đồng thời không làm thay đổi giá trị các bit còn lại của thanh ghi đó.

Chia sẻ chương trình đọc ghi thẻ SD bằng MSP430 G2553 phục vụ lưu trữ

17/08/2022 06:20:30 / Lượt xem: 738 / Người đăng: biendt

Chương trình sử dụng vi điều khiển chính là MSP430G2553 (có thể sử dụng vi điều khiển khác cùng họ MSP430) kết nối với module đọc/ghi thẻ nhớ SD card là MODULE MICRO SD CARD để lưu trữ dữ liệu, đọc dữ liệu…Chuẩn bị : 1 KIT MSP430G2553, 1 Module SD Card, 1 Thẻ nhớ SD card : Micro SD <= 2GB hoặc Micro SDHC <= 32GB

Hướng dẫn thiết kế mạch vi điều khiển đơn giản

07/06/2022 06:18:47 / Lượt xem: 817 / Người đăng: biendt

Thiết kế mạch cho vi điều khiển là một việc làm không hề đơn giản đối với những người mới bắt đầu. Có thể bạn phải đọc hàng trăm trang datasheet và tài liệu thiết kế tham khảo, các sơ đồ mạch thiết kế mẫu, các chỉ dẫn layout để có thể hoàn thiện được thiết kế của mình một cách tốt nhất. Hướng dẫn này sẽ chỉ ra những điểm chung mà các bạn cần lưu ý khi thiết kế mạch vi điều khiển

Thiết kế mạch chống nhiễu cho Vi điều khiển (Chíp lập trình hoặc IC)

05/05/2022 06:05:35 / Lượt xem: 2060 / Người đăng: biendt

Có mấy phương pháp cho mạch chống nhiễu vi điều khiển : .Sử dụng cách ly quang: để cách ly giữa tín hiệu điều khiển từ VĐK xuất ra và mạch công suất 220v.Sử dụng mạch snubber khi điều khiển tải bằng relay.Sử dụng linh kiện điện tử chính hãng...Sử dụng mạch lọc nguồn AC 220v trước khi cấp cho bộ nguồn 5V nuôi VĐK...Chống nhiễu khi viết code