Bài sau đây được viết theo thể loại văn trào phúng với mục đích chủ yếu là xả stress bên cạnh các nội dung về mặt kiến thức xem-như-là-hàn-lâm. Đề nghị quý vị độc giả không-bình-luận-các-câu-bình-luận trong bài sau, bình luận trong bài này chỉ mang tính tham khảo, đọc qua cho biết, không cần biết chính xác tới đâu
1. Kiến thức liên quan:
Xem trước bài Cơ bản về RS-232 và sử dụng module USART trong PIC trên trang web của thầy Nguyễn Quang Nam.
Các bạn muốn tìm hiểu nhiều hơn về UART và RS-232 có thể tìm kiếm thông tin trên mạng, chủ đề này đã được viết rất nhiều kể cả bằng tiếng Việt hay tiếng Anh.
(Phần trên này là phần chính xác =]])
2. Tóm tắt:
UART viết tắt của Universal Asynchronous Receiver/Transmitter tức là Bộ truyền / nhận dữ liệu không đồng bộ.
USART: Universal Synchronous & Asynchronous Receiver/Transmitter - có thêm chế độ truyền nhận dữ liệu đồng bộ.
Khi nói đến UART hay USART ta hiểu là đang nói đến "hardware". Các bộ UART được tích hợp trong hầu như tất cả các chip vi điều khiển, và được coi như là 1 module ngoại vi - peripheral.
UART/USART thường kết hợp với các chuẩn giao tiếp (communication standards) như RS-232 để truyền nhận dữ liệu nối tiếp giữa chip vi điều khiển với 1 thiết bị khác, chẳng hạn như máy tính các nhân PC.
Trên máy tính, cổng dùng để giao tiếp RS-232 là cổng DB9 (male), hay còn được gọi là cổng COM.
Giao tiếp RS-232 có rất nhiều hạn chế: tính ổn định thấp, khoảng cách truyền ngắn, tốc độ không cao. Do đó, cùng với sự phát triển của máy vi tính, cổng COM dần dần ... tuyệt chủng.
Hiện nay trên các máy tính để bàn vẫn còn tồn tại cổng COM. Còn trên các laptop thì cổng COM đã hoàn toàn biến mất (Các Laptop nồi đồng cối đá ngày xưa thì vẫn có cổng COM).
Để truyền dữ liệu nối tiếp từ ngoại vi, cổng USB đã tỏ ra là 1 giải pháp hiệu quả (từ máy in, bàn phím, chuột, ... đến các Ổ đĩa di động mà dân gian thường gọi là cái cục USB). Cho nên các nhà sản xuất máy tính loại bỏ cổng COM ra khỏi các dòng máy mới một cách không-ngần-ngại, không-thương-tiếc, vì chả ảnh hưởng đến ai,
ngoại trừ dân kĩ thuật,
Mà chủ yếu là dân kĩ thuật điện tử - tự động.
Cái vấn đề nan giải của dân kĩ thuật, đó là, cần truyền dữ liệu từ các thiết bị ngoại vi kiểu như mạch vi điều khiển về máy tính.
Điều 1, hầu hết các loại vi điều khiển có hỗ trợ UART.
Điều 2, giao tiếp RS-232 cực kì đơn giản, cực kì dễ sử dụng.
Điều 3, khoảng cách truyền 1met – 1.5met trong hầu hết các ứng dụng là chấp nhận được.
Điều 4, các kiểu truyền dữ liệu nối tiếp khác, chẳng hạn như USB hay Ethernet lại đặt ra những vấn đề khó khăn khác cần giải quyết, trong khi chúng ta cần ngay lập tức một giải pháp nhanh – gọn – tiện lợi – dễ xài cho mục đích thu gom dữ liệu và điều khiển.
Có nghĩa là, đối với chúng ta, giao tiếp RS-232 hay cũng gọi là giao tiếp cổng COM là chưa được phép tuyệt chủng.
Vậy chúng ta phải giải quyết cái thể loại vấn đề này như thế nào?
3. Giải quyết vấn đề:
3.1 Giải pháp cho người có máy tính để bàn và muốn tiết kiệm một chút ít tiền bạc:
Thì ta sẽ sử dụng cái cổng COM thân yêu phía sau thùng máy. Nhưng mà rắc rối với cái cổng COM này, hay chuẩn RS-232, đó là mức logic của nó chẳng hề tương thích với chuẩn TTL thân thuộc mà ta dùng cho Vi điều khiển (một lý do nữa mà cổng COM trở nên chướng tai gai mắt và cần phải được loại bỏ )
Đại khái là, đối với chuẩn RS-232, mức “logic 1” là khoảng điện áp -3V đến -15V, còn mức “logic 0” là khoảng điện áp từ +3V đến +15V. Cụ thể thì có những thiết bị quy định hơi khác 1 chút, chẳng hạn (+3 đến +12V, …), nhưng tóm lại thì, nó hoàn toàn trật lất nếu so với chuẩn điện áp TTL!
Điều đó dẫn đến vấn đề là phải “đổi mức điện áp” từ chuẩn TTL (0-5V) sang chuẩn RS-232. Do đó, từ Vi điều khiển, ta sẽ phải dùng thêm 1 con IC voltage level shifter, chẳng hạn như con MAX232, nó chả làm được cái gì hết, ngoại trừ việc đổi mức điện áp giữa Vi điều khiển và cổng COM. Việc này cũng có thể thực hiện bằng transistor + vài con trở, bạn nào không thích dùng IC thì có thể tự làm mạch voltage level shifting (not recommend!)
Như vậy để giao tiếp với máy tính qua cổng COM ta cần:
+ Mua 1 con IC MAX232 với giá chưa tới 10k.
+ 4 cái tụ hoá 10uF (thường là có thêm 1 cái tụ 104)
+ Vài linh kiện linh tinh, 1 cái cổng COM cái (female) để hàn trên board, 1 cọng cáp cổng COM (1 đầu đực, 1 đầu cái) (thêm khoảng 20k)
+ Công ủi board, hàn mạch,…
Thật ra thì phương pháp này cũng rất dễ dàng sử dụng, ngoại trừ việc mỗi lần cần chạy thử là ta phải xoay mông cái thùng máy ra ngoài để cắm cáp.
Thuận lợi của giải pháp này là, con chip Max232 có vẻ rẻ tiền, và tồn tại dưới dạng DIP 16 chân, loại hàn xuyên lỗ vô cùng thân thiện.
Tuy nhiên, theo đà tiến hoá của nhân loại, cái cổng COM có vẻ có xu hướng là không tồn tại lâu dài, do đó con người ta mới sinh ra giải pháp thay thế: Giả lập cổng USB thành cổng COM ảo (Virtual COM port), dữ liệu vẫn được truyền nối tiếp theo đúng thể thức cùi lủi của UART, tuy nhiên lại đi qua đường USB (nó hoàn toàn không phải giao tiếp USB). Do đó ta có giải pháp 2:
3.2 Giải pháp người dùng Laptop không có lựa chọn nào rẻ tiền hơn hoặc người dùng máy tính để bàn nhưng muốn xài sang:
Nên nhớ rằng là cái mức điện áp của cổng USB là 0-5V, mình muốn chuyển dữ liệu từ thằng UART của Vi điều khiển tới cổng USB của máy tính, do đó ta chẳng cần mạch voltage level shifting làm gì. Thế là người ta sinh ra các con chip có nhiệm vụ đổi thẳng UART sang USB, gọi là chip USB2UART trong đó thông dụng là 3 con sau:
+ PL2303: hàng Đài Loan, giá… Trung Quốc, tầm 22k/1 con. Rẻ quá không dám bình luận gì hơn.
+ CP2101/CP2102: Hãng Silicon Labs. Khoảng 40k. Hầu như không phải gắn thêm gì trừ vài con tụ, thích thì thêm Led báo hiệu, có sẵn bộ Regulator 3.3V từ nguồn 5V của máy tính, nguồn 3.3V này có thể cấp cho Vi điều khiển. Kích thước siêu nhỏ.
+ FT232: Hãng FTDI. Đại khái giống CP2102, trừ việc giá nó lên tới 70-75k. Đảm bảo chất lượng.
Điều khó chịu với cả 3 con này là, chúng nó đều là chip dán, nên làm mạch nhiêu khê hơn, bạn nào khéo tay có thể ủi được, nếu không thì đi đặt mạch in quách cho nó an lành.
Riêng con CP2102 nhỏ quá và chân gầm nên rất khó hàn, kích thước nó nhỏ hơn mấy con kia nhiều nên khó xử lý nó hơn, có thể phải dùng đến máy khò thì mới ịn được con CP2102 lên cái board.
FT232 nên mua loại FT232RL có 2 hàng chân, đó là con dễ hàn nhất.
Đối với mấy loại này ta có thể nối thẳng 2 chân RX, TX từ Vi Điều Khiển tới chip USB2UART, từ chip USB2UART gắn thêm 1 cái cổng USB tới máy tính, thế là xong.
Tham khảo giá tại Thiên Minh:
http://www.tme.vn/Products.aspx?cateId=177
3.3 Giải pháp cho đại gia hoặc những người lười biếng, hoặc những người thích xài đồ cũ:
Tức là cách này tốn nhiều tiền nhất, dành cho những người không thích, hoặc không biết, hoặc ngại đụng đến linh kiện dán, hoặc trên board mạch cũ/thiết bị cũ đã có sẵn phần mạch chuyển đổi UART-RS232 (tức là có sẵn con MAX232) mà không cách nào gỡ bỏ được.
Tóm lại là ta cần đổi từ USB sang RS-232 (hay COM) [Lúc nãy là USB2UART, tới đây còn thắc mắc không?]
+ Cần 1 mạch voltage level shifting (MAX232) + 1 cổng COM cái hàn trên board (nếu có sẵn rồi thì thôi).
+ 1 cọng cáp chuyển đổi có tên là COM2USB hay RS232-to-USB, cáp này mua được ở Nhật Tảo và các cửa hàng bán linh kiện máy tính, ví dụ như Phong Vũ.
Cọng cáp ở Phong Vũ của hãng Zitek, đương nhiên là hàng Trung Quốc nhưng có tên tuổi đàng hoàng, giá chừng 200k (loanh quanh đâu đấy).
Cọng cáp ở Nhật Tảo giá khoảng 60k, cũng là hàng China nhưng chả biết nguồn gốc thế nào, nhiều người đã dùng thử và nhận xét rằng cọng cáp này “không thể tin được”!
Thiên Minh cũng bán cọng cáp thế này với giá 200k dùng chip FT232 (chắc là đáng tin hơn, nếu FT232 này là chip chính hãng chứ không phải hàng nhái )
http://www.tme.vn/Product.aspx?id=867&CateId=288
Tóm lại, giải pháp này vừa tốn tiền mua cọng cáp (khoảng 200k), vừa tốn công làm cái mạch MAX232 (khoảng 20k nữa). Tuy nhiên cọng cáp thì dễ mua và mạch Max232 cũng dễ làm
3.4 Giải pháp dành cho những người quá lười không còn chỗ nào để chê:
Chạy ra Thiên Minh mua cái board FT232 với giá 120k về xài! (Không còn gì để nói thêm).
Module này kết nối thẳng với MCU và cổng USB (kết nối với USB qua 1 sợi dây đổi jack USB mini và USB thường)
Là cái này (hình như gần hết hàng rồi)
http://www.tme.vn/Product.aspx?id=866&CateId=288
Còn tiếp: Sơ đồ nguyên lý + layout cho cái đống kể trên.
--> Xem tiếp bài #10, #11, ...
1. Kiến thức liên quan:
Xem trước bài Cơ bản về RS-232 và sử dụng module USART trong PIC trên trang web của thầy Nguyễn Quang Nam.
Các bạn muốn tìm hiểu nhiều hơn về UART và RS-232 có thể tìm kiếm thông tin trên mạng, chủ đề này đã được viết rất nhiều kể cả bằng tiếng Việt hay tiếng Anh.
(Phần trên này là phần chính xác =]])
2. Tóm tắt:
UART viết tắt của Universal Asynchronous Receiver/Transmitter tức là Bộ truyền / nhận dữ liệu không đồng bộ.
USART: Universal Synchronous & Asynchronous Receiver/Transmitter - có thêm chế độ truyền nhận dữ liệu đồng bộ.
Khi nói đến UART hay USART ta hiểu là đang nói đến "hardware". Các bộ UART được tích hợp trong hầu như tất cả các chip vi điều khiển, và được coi như là 1 module ngoại vi - peripheral.
UART/USART thường kết hợp với các chuẩn giao tiếp (communication standards) như RS-232 để truyền nhận dữ liệu nối tiếp giữa chip vi điều khiển với 1 thiết bị khác, chẳng hạn như máy tính các nhân PC.
Trên máy tính, cổng dùng để giao tiếp RS-232 là cổng DB9 (male), hay còn được gọi là cổng COM.
Giao tiếp RS-232 có rất nhiều hạn chế: tính ổn định thấp, khoảng cách truyền ngắn, tốc độ không cao. Do đó, cùng với sự phát triển của máy vi tính, cổng COM dần dần ... tuyệt chủng.
Hiện nay trên các máy tính để bàn vẫn còn tồn tại cổng COM. Còn trên các laptop thì cổng COM đã hoàn toàn biến mất (Các Laptop nồi đồng cối đá ngày xưa thì vẫn có cổng COM).
Để truyền dữ liệu nối tiếp từ ngoại vi, cổng USB đã tỏ ra là 1 giải pháp hiệu quả (từ máy in, bàn phím, chuột, ... đến các Ổ đĩa di động mà dân gian thường gọi là cái cục USB). Cho nên các nhà sản xuất máy tính loại bỏ cổng COM ra khỏi các dòng máy mới một cách không-ngần-ngại, không-thương-tiếc, vì chả ảnh hưởng đến ai,
ngoại trừ dân kĩ thuật,
Mà chủ yếu là dân kĩ thuật điện tử - tự động.
Cái vấn đề nan giải của dân kĩ thuật, đó là, cần truyền dữ liệu từ các thiết bị ngoại vi kiểu như mạch vi điều khiển về máy tính.
Điều 1, hầu hết các loại vi điều khiển có hỗ trợ UART.
Điều 2, giao tiếp RS-232 cực kì đơn giản, cực kì dễ sử dụng.
Điều 3, khoảng cách truyền 1met – 1.5met trong hầu hết các ứng dụng là chấp nhận được.
Điều 4, các kiểu truyền dữ liệu nối tiếp khác, chẳng hạn như USB hay Ethernet lại đặt ra những vấn đề khó khăn khác cần giải quyết, trong khi chúng ta cần ngay lập tức một giải pháp nhanh – gọn – tiện lợi – dễ xài cho mục đích thu gom dữ liệu và điều khiển.
Có nghĩa là, đối với chúng ta, giao tiếp RS-232 hay cũng gọi là giao tiếp cổng COM là chưa được phép tuyệt chủng.
Vậy chúng ta phải giải quyết cái thể loại vấn đề này như thế nào?
3. Giải quyết vấn đề:
3.1 Giải pháp cho người có máy tính để bàn và muốn tiết kiệm một chút ít tiền bạc:
Thì ta sẽ sử dụng cái cổng COM thân yêu phía sau thùng máy. Nhưng mà rắc rối với cái cổng COM này, hay chuẩn RS-232, đó là mức logic của nó chẳng hề tương thích với chuẩn TTL thân thuộc mà ta dùng cho Vi điều khiển (một lý do nữa mà cổng COM trở nên chướng tai gai mắt và cần phải được loại bỏ )
Đại khái là, đối với chuẩn RS-232, mức “logic 1” là khoảng điện áp -3V đến -15V, còn mức “logic 0” là khoảng điện áp từ +3V đến +15V. Cụ thể thì có những thiết bị quy định hơi khác 1 chút, chẳng hạn (+3 đến +12V, …), nhưng tóm lại thì, nó hoàn toàn trật lất nếu so với chuẩn điện áp TTL!
Điều đó dẫn đến vấn đề là phải “đổi mức điện áp” từ chuẩn TTL (0-5V) sang chuẩn RS-232. Do đó, từ Vi điều khiển, ta sẽ phải dùng thêm 1 con IC voltage level shifter, chẳng hạn như con MAX232, nó chả làm được cái gì hết, ngoại trừ việc đổi mức điện áp giữa Vi điều khiển và cổng COM. Việc này cũng có thể thực hiện bằng transistor + vài con trở, bạn nào không thích dùng IC thì có thể tự làm mạch voltage level shifting (not recommend!)
Như vậy để giao tiếp với máy tính qua cổng COM ta cần:
+ Mua 1 con IC MAX232 với giá chưa tới 10k.
+ 4 cái tụ hoá 10uF (thường là có thêm 1 cái tụ 104)
+ Vài linh kiện linh tinh, 1 cái cổng COM cái (female) để hàn trên board, 1 cọng cáp cổng COM (1 đầu đực, 1 đầu cái) (thêm khoảng 20k)
+ Công ủi board, hàn mạch,…
Thật ra thì phương pháp này cũng rất dễ dàng sử dụng, ngoại trừ việc mỗi lần cần chạy thử là ta phải xoay mông cái thùng máy ra ngoài để cắm cáp.
Thuận lợi của giải pháp này là, con chip Max232 có vẻ rẻ tiền, và tồn tại dưới dạng DIP 16 chân, loại hàn xuyên lỗ vô cùng thân thiện.
Tuy nhiên, theo đà tiến hoá của nhân loại, cái cổng COM có vẻ có xu hướng là không tồn tại lâu dài, do đó con người ta mới sinh ra giải pháp thay thế: Giả lập cổng USB thành cổng COM ảo (Virtual COM port), dữ liệu vẫn được truyền nối tiếp theo đúng thể thức cùi lủi của UART, tuy nhiên lại đi qua đường USB (nó hoàn toàn không phải giao tiếp USB). Do đó ta có giải pháp 2:
3.2 Giải pháp người dùng Laptop không có lựa chọn nào rẻ tiền hơn hoặc người dùng máy tính để bàn nhưng muốn xài sang:
Nên nhớ rằng là cái mức điện áp của cổng USB là 0-5V, mình muốn chuyển dữ liệu từ thằng UART của Vi điều khiển tới cổng USB của máy tính, do đó ta chẳng cần mạch voltage level shifting làm gì. Thế là người ta sinh ra các con chip có nhiệm vụ đổi thẳng UART sang USB, gọi là chip USB2UART trong đó thông dụng là 3 con sau:
+ PL2303: hàng Đài Loan, giá… Trung Quốc, tầm 22k/1 con. Rẻ quá không dám bình luận gì hơn.
+ CP2101/CP2102: Hãng Silicon Labs. Khoảng 40k. Hầu như không phải gắn thêm gì trừ vài con tụ, thích thì thêm Led báo hiệu, có sẵn bộ Regulator 3.3V từ nguồn 5V của máy tính, nguồn 3.3V này có thể cấp cho Vi điều khiển. Kích thước siêu nhỏ.
+ FT232: Hãng FTDI. Đại khái giống CP2102, trừ việc giá nó lên tới 70-75k. Đảm bảo chất lượng.
Điều khó chịu với cả 3 con này là, chúng nó đều là chip dán, nên làm mạch nhiêu khê hơn, bạn nào khéo tay có thể ủi được, nếu không thì đi đặt mạch in quách cho nó an lành.
Riêng con CP2102 nhỏ quá và chân gầm nên rất khó hàn, kích thước nó nhỏ hơn mấy con kia nhiều nên khó xử lý nó hơn, có thể phải dùng đến máy khò thì mới ịn được con CP2102 lên cái board.
FT232 nên mua loại FT232RL có 2 hàng chân, đó là con dễ hàn nhất.
Đối với mấy loại này ta có thể nối thẳng 2 chân RX, TX từ Vi Điều Khiển tới chip USB2UART, từ chip USB2UART gắn thêm 1 cái cổng USB tới máy tính, thế là xong.
Tham khảo giá tại Thiên Minh:
http://www.tme.vn/Products.aspx?cateId=177
3.3 Giải pháp cho đại gia hoặc những người lười biếng, hoặc những người thích xài đồ cũ:
Tức là cách này tốn nhiều tiền nhất, dành cho những người không thích, hoặc không biết, hoặc ngại đụng đến linh kiện dán, hoặc trên board mạch cũ/thiết bị cũ đã có sẵn phần mạch chuyển đổi UART-RS232 (tức là có sẵn con MAX232) mà không cách nào gỡ bỏ được.
Tóm lại là ta cần đổi từ USB sang RS-232 (hay COM) [Lúc nãy là USB2UART, tới đây còn thắc mắc không?]
+ Cần 1 mạch voltage level shifting (MAX232) + 1 cổng COM cái hàn trên board (nếu có sẵn rồi thì thôi).
+ 1 cọng cáp chuyển đổi có tên là COM2USB hay RS232-to-USB, cáp này mua được ở Nhật Tảo và các cửa hàng bán linh kiện máy tính, ví dụ như Phong Vũ.
Cọng cáp ở Phong Vũ của hãng Zitek, đương nhiên là hàng Trung Quốc nhưng có tên tuổi đàng hoàng, giá chừng 200k (loanh quanh đâu đấy).
Cọng cáp ở Nhật Tảo giá khoảng 60k, cũng là hàng China nhưng chả biết nguồn gốc thế nào, nhiều người đã dùng thử và nhận xét rằng cọng cáp này “không thể tin được”!
Thiên Minh cũng bán cọng cáp thế này với giá 200k dùng chip FT232 (chắc là đáng tin hơn, nếu FT232 này là chip chính hãng chứ không phải hàng nhái )
http://www.tme.vn/Product.aspx?id=867&CateId=288
Tóm lại, giải pháp này vừa tốn tiền mua cọng cáp (khoảng 200k), vừa tốn công làm cái mạch MAX232 (khoảng 20k nữa). Tuy nhiên cọng cáp thì dễ mua và mạch Max232 cũng dễ làm
3.4 Giải pháp dành cho những người quá lười không còn chỗ nào để chê:
Chạy ra Thiên Minh mua cái board FT232 với giá 120k về xài! (Không còn gì để nói thêm).
Module này kết nối thẳng với MCU và cổng USB (kết nối với USB qua 1 sợi dây đổi jack USB mini và USB thường)
Là cái này (hình như gần hết hàng rồi)
http://www.tme.vn/Product.aspx?id=866&CateId=288
Còn tiếp: Sơ đồ nguyên lý + layout cho cái đống kể trên.
--> Xem tiếp bài #10, #11, ...