Các sự cố với bảng chuyển đổi RS232-to-TTL tự chế dựa trên MAX 232 của TI


7

Tôi đã thiết kế một bảng chuyển đổi từ RS232 sang TTL dựa trên IC MAX 232 của TI mà tôi dự định sử dụng để lập trình một vài bảng Arduino tùy chỉnh mà tôi có. Tuy nhiên, tôi gặp rắc rối với hội đồng quản trị và tôi hy vọng rằng ai đó có thể giúp tôi gỡ lỗi.

Đầu tiên, hãy để tôi chỉ cho bạn thiết lập của tôi, bên dưới.

Thiết lập của tôi

Dưới đây là một mô tả ngắn gọn về những gì trong hình:

  • Bảng mục tiêu (A) : đó là bảng ATmega328P độc lập tùy chỉnh (đồng hồ) mà tôi dự định lập trình bằng lập trình nối tiếp và Arduino IDE. Nó được kết nối với Bảng B thông qua cáp giống FTD thông qua Đầu nối (H) .

  • Bảng chuyển đổi RS232-to-TTL (B) : đó là bảng chuyển đổi RS232-to-TTL dựa trên MAX 232 do tôi thiết kế và đang cố gắng gỡ lỗi. Đây là chủ đề chính của câu hỏi này. Nó được kết nối với Bảng mục tiêu (A) bằng cáp giống FTDI thông qua Đầu nối (G) và với Cáp USB-to-RS232 (C) thông qua Đầu nối DB9 nữ (F) .

  • Cáp USB-to-RS232 (C) : Tôi không có cổng COM thích hợp trên PC của mình, vì vậy đó là những gì tôi sử dụng để có Cổng nối tiếp thay thế. Nó được kết nối với PC thông qua đầu nối USB (D) và với Bảng B thông qua Đầu nối DB9 Nam (E) .

Các sơ đồ của Ban B dưới đây.

Bảng chuyển đổi RS232-to-TTL (B)

Các sơ đồ tiêu đề lập trình trên Bảng mục tiêu (A) được hiển thị bên dưới.

Tiêu đề lập trình nối tiếp ATmega328P trên Bảng mục tiêu (A)

Điều đầu tiên tôi nhận ra là Cáp USB-to-RS232 (C) thuộc loại rẻ tiền . Thay vì cung cấp các mức tín hiệu tiêu chuẩn RS232 trong phạm vi -12V / + 12V, thay vào đó, nó cung cấp 0V / 5V. Tôi đã tìm ra rằng bằng cách sử dụng thử nghiệm sau: Tôi đã kết nối Cáp USB-to-RS232 (C) với PC và Đầu nối Nam DB9 (E) bị ngắt kết nối từ Bảng chuyển đổi (B) và đầu dò 3 từ Đầu nối DB9 Nam (E) trong khi tôi đang gửi một loạt char ASCII 'A'thông qua màn hình nối tiếp. Dưới đây là phạm vi bắn kết quả của thử nghiệm này.

Đặc tính của tín hiệu cáp USB đến RS232

Ngẫu nhiên, tôi đã nhận thấy rằng các MAX MAX khác nhau được tạo bởi các nhà cung cấp khác nhau được thiết kế để đối phó với sự vi phạm mức tín hiệu RS232 này và cũng chấp nhận tín hiệu 0V / 5V. Dưới đây là hai bức ảnh phạm vi mà tôi sử dụng để chứng minh điều đó. Trong lần chụp đầu tiên, tôi đã áp dụng sóng vuông 0V / 5V vào pin MAX 232 13 (trong khi được lắp và cung cấp bởi bảng chuyển đổi của tôi) với bộ tạo chức năng tự chế của tôi (tiếng ồn, vâng) - đó là dấu vết màu vàng - và kiểm tra đầu ra của chân 12 ( Cấp độ RX - dấu vết màu xanh lá cây). Thật ngạc nhiên, MAX 232 của TI phản hồi với các tín hiệu TTL chính xác. Ảnh thứ hai là tín hiệu đúng chuẩn RS232 -6V / + 6V được mô phỏng bởi một sóng vuông tôi chèn vào cùng một pin. Cả hai đều mang lại kết quả như nhau.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

Tôi đã thực hiện một số phép đo khác trên Bảng chuyển đổi (B) đến mức tôi hài lòng với nó. Ví dụ: chân 2 trên MAX 232 hiển thị + 9,5V trong khi chân 6 hiển thị -9,5V. Phạm vi cho thấy bộ nhân đôi điện áp và biến tần cũng hoạt động tốt, với sóng vuông 40kHz đẹp và ổn định trong mỗi trường hợp. Tôi cũng đã áp dụng sóng vuông 0 / 5V khoảng 68kHz cho chân 10 của MAX 232 và chân có phạm vi 7 của MAX 232. Tôi nhận được tín hiệu RS232 -6V / + 6V đảo ngược đẹp và sạch (hình ảnh không được hiển thị ở đây).

Sau đó, tôi đã kiểm tra tiếng vang màn hình nối tiếp rút ngắn các chân TX / RX tại các điểm khác nhau. Kết quả trong đó:

  1. Không có IC MAX 232 trong ổ cắm của nó, tôi rút ngắn chân 2 và 3 trên DB9. Tiếng vọng ok.
  2. Đặt IC MAX 232 trên bảng và rút ngắn chân 11 và 12. Echo ok.
  3. Khi ATmega328P tắt ổ cắm, tôi rút ngắn chân 2 và 3. Echo ok.

Sau đó, tôi đã kết nối thiết lập để lập trình Bảng mục tiêu ATmega328P (A) của mình . Đầu ra avr-dude được hiển thị ở cuối bài này. Dưới đây là một bản tóm tắt chỉ với thông báo lỗi:

...
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x90
...
avrdude: stk500_cmd(): protocol error

Trong nỗ lực lập trình này, tôi đã đo các tín hiệu bên dưới. Dấu vết màu vàng là dữ liệu được gửi đến MCU trong khi dấu vết màu xanh là dữ liệu được nhận bởi nó:

nhập mô tả hình ảnh ở đây

Khi tôi gặp lỗi, có sự gián đoạn đột ngột trong giao tiếp. Từ một nỗ lực tiếp theo, vấn đề xảy ra ở các điểm khác nhau trong quá trình giao tiếp.

Cuối cùng, tôi đã thay thế bảng MAX 232 của mình bằng một bảng cũ hơn mà tôi có, sử dụng thủ thuật bóng bán dẫn thay vì IC MAX 232 và tất cả bắt đầu hoạt động bình thường. Với bảng cũ tôi có thể lập bảng mục tiêu được lập trình. Dưới đây là ảnh chụp phạm vi cho thấy giao tiếp thành công trong quá trình lập trình bảng mục tiêu trong trường hợp này.

nhập mô tả hình ảnh ở đây

Tôi chắc chắn đang nhìn một cái gì đó, nhưng tôi không thể nói nó là gì. Vì vậy, câu hỏi của tôi là: những gì sai với thiết lập của tôi? Những gì khác tôi có thể kiểm tra hoặc đo lường để tìm ra vấn đề?

Đây là Arduino IDE và đầu ra avr-dude:

Binary sketch size: 9.946 bytes (of a 32.256 byte maximum)
C:\Users\Ricardo\Documents\arduino-1.0.5\hardware/tools/avr/bin/avrdude -CC:\Users\Ricardo\Documents\arduino-1.0.5\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -carduino -P\\.\COM5 -b115200 -D -Uflash:w:C:\Users\Ricardo\AppData\Local\Temp\build2465731745810216807.tmp\DefusableClock_v2.cpp.hex:i 

avrdude: Version 5.11, compiled on Sep  2 2011 at 19:38:36
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch

         System wide configuration file is "C:\Users\Ricardo\Documents\arduino-1.0.5\hardware/tools/avr/etc/avrdude.conf"

         Using Port                    : \\.\COM5
         Using Programmer              : arduino
         Overriding Baud Rate          : 115200
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
         AVR Part                      : ATMEGA328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :

                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65    20     4    0 no       1024    4      0  3600  3600 0xff 0xff
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

         Programmer Type : Arduino
         Description     : Arduino
avrdude: Send: A [41] . [80]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [83] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [81]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [84] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [82]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [04] 
avrdude: Recv: . [90] 

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x90
avrdude: Send: A [41] . [98]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
         Hardware Version: 131
         Firmware Version: 132.1077487570
avrdude: Send: A [41] . [84]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [85]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [86]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [90] 

avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x90
avrdude: Send: A [41] . [87]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [03] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [89]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [83] 
avrdude: Recv: . [10] 
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 921.600 kHz
         SCK period      : 142.2 us

avrdude: Send: A [41] . [81]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [04] 
avrdude: Recv: . [10] 
avrdude: Send: A [41] . [82]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [04] 
avrdude: Recv: . [10] 
avrdude: Send: B [42] . [86] . [00] . [00] . [01] . [01] . [01] . [01] . [03] . [ff] . [ff] . [ff] . [ff] . [00] . [80] . [04] . [00] . [00] . [00] . [80] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude: Send: E [45] . [05] . [04] . [d7] . [c2] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude: Send: P [50]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [10] 
avrdude: AVR device initialized and ready to accept instructions

Reading | avrdude: Send: u [75]   [20] 
avrdude: Recv: . [14] . [1e] . [95] . [0f] . [10] 
################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f
avrdude: Send: V [56] . [a0] . [03] . [fc] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
avrdude: Send: V [56] . [a0] . [03] . [fd] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
avrdude: Send: V [56] . [a0] . [03] . [fe] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [10] 
avrdude: Send: V [56] . [a0] . [03] . [ff] . [00]   [20] 
avrdude: Recv: . [14] 
avrdude: Recv: . [00] 
avrdude: Recv: . [90] 
avrdude: stk500_cmd(): protocol error

6
Tài liệu độc đáo.
tcrosley

@tcrosley Cảm ơn! Tôi đã cố gắng hết sức, nhưng vẫn còn một số điểm tối nghĩa mà tôi đã cố gắng làm rõ với lần chỉnh sửa cuối cùng của mình.
Ricardo

2
Có một lý do nào đó dòng "thiết lập lại" ở điện áp RS232 và không chạy qua bộ chuyển đổi? Arduino có cần điện áp cao hơn để lập trình hay gì không?
đánh dấu

1
Mặc dù mạch thiết lập lại mà bạn có thể có thể hấp thụ điện áp của trình điều khiển RS232 mà không bị hư hại, một vấn đề có lẽ bị bỏ qua là trình điều khiển và máy thu tín hiệu truyền thống đảo ngược . Vì vậy, logic của dòng thiết lập lại có thể ngược với những gì phần mềm mong đợi. Bạn có một kênh người nhận không sử dụng, có lẽ bạn nên sử dụng nó. Ngoài ra, hãy đảm bảo phần mềm đang điều khiển một trong các khả năng RTS hoặc DTR mà bạn có dây. Nếu bạn có thể lập trình trước một bản phác thảo sẽ tương tác trên sê-ri, bạn có thể thực hiện một số xác nhận bổ sung.
Chris Stratton

1
Xem ví dụ ftdichip.com/Support/Document/DataSheets/Cables/DS_UC232R.pdf nơi dữ liệu và dòng trạng thái đi qua các kênh giống nhau của trình chuyển đổi cấp. Tôi tin rằng khi mọi người sử dụng chip nối tiếp USB đó với Arduino và không thay đổi cấp độ, họ sẽ không đảo ngược thiết lập lại, vì vậy khi nó đi qua một biến tần trong bộ chuyển đổi mức của cáp, nó sẽ cần phải đi qua một mạch khác trong mạch của bạn nếu không nó sẽ kết thúc ngược lại với ý nghĩa thông thường của nó.
Chris Stratton

Câu trả lời:


2

Câu hỏi của bạn rất dài để đọc, nhưng có vẻ như bạn đang gặp một số vấn đề với mạch chuyển đổi loại MAX 232. Tôi đã tạo ra một thứ dường như là một mạch rất giống nhau bằng cách sử dụng một trong các biến thể TI của chip, và thậm chí bán nó như một sản phẩm. Tới www.embedinc.com/products/rslink2 và bạn có thể xem tất cả các tài liệu, từ một bức tranh để bố trí hội đồng quản trị để các sơ đồ. Có lẽ bạn có thể thấy những gì bạn đang làm khác nhau.

Một điều tôi nhận thấy trong khi lướt qua câu hỏi của bạn là bạn đang sử dụng mũ điện phân. Kiểm tra lại xem cực tính của từng cái có đúng không. Một vấn đề khác là một số cổng COM, đặc biệt là bộ chuyển đổi USB sang RS-232, sẽ không hoạt động nếu không có RTS / CTS, cho dù điều này có được bật trong phần mềm hay không. Lưu ý cách tôi có các chân 7 và 8 được kết nối với nhau trên đầu nối DB9-F.


1
Tôi không biết làm thế nào để rút ngắn câu hỏi vì tôi không biết vấn đề ở đâu. Vì vậy, tôi quyết định hiển thị tất cả những gì tôi có một cách chi tiết.
Ricardo

Ngoài ra, trong khi nghiên cứu chủ đề, tôi đã xem qua trang sản phẩm của bạn và sơ đồ được liên kết từ đó. Thực sự tốt đẹp! Nhưng tôi đã không nghiên cứu chi tiết hơn vì IC bạn sử dụng dường như không tương thích với pin của tôi. Nhưng tôi sẽ xem xét kỹ hơn. Cảm ơn bạn đã giúp đỡ! +1
Ricardo

Đây là câu trả lời gần nhất mà tôi nhận được về điều này, vì vậy tôi chấp nhận nó. Cảm ơn!! Tôi đã thu hẹp vấn đề: nó liên quan đến sự gia tăng lỗi (do tiếng ồn hoặc đồng bộ hóa tinh thể) ở mức 115200 bps, điều đó không xảy ra ở 57600 bps. Xem câu hỏi khác của tôi để biết chi tiết .
Ricardo

2

Bạn nói rằng bạn đã cắm vào chân 3 của DB9 và thấy 0-5V. Chân 3 nhận dữ liệu từ thế giới bên ngoài và được điều khiển bởi cáp nối tiếp USB-to-TTL của bạn.

MAX 232 nhận các mức RS-232 trên các chân 8 và 13, chuyển đổi chúng thành các mức TTL trên các chân 9 và 12, tương ứng. MAX 232 nhận các mức TTL trên các chân 10 và 11, điều khiển các mức RS-232 trên các chân 7 và 14, tương ứng.

Để diễn giải Tiến sĩ Indiana Jones, giáo sư khảo cổ học nổi tiếng, bạn đang nhìn vào những chiếc ghim sai.

Chạy một bộ tạo mạch xung đơn giản 555 +5, áp dụng nó cho chân 10 của MAX 232 (không được kết nối trên sơ đồ của bạn), phạm vi chân 7 của MAX 232 và xem những gì bạn nhận được.


Xin lỗi, tôi có thể không đủ rõ ràng. Tôi không có cáp nối tiếp USB-to_TTL. Tôi đang cố gắng mô phỏng một cái bằng cách sử dụng cáp USB-to-RS232 được kết nối với bộ chuyển đổi từ RS232 sang TTL này mà tôi đã tạo.
Ricardo

Trong phần kiểm tra mà bạn đã đề cập trong đoạn đầu tiên của mình, tôi đã kết nối cáp USB-to-RS232 với máy tính của tôi và khiến cho DB2 không được kết nối. Sau đó, tôi đã thăm dò pin 3 trong khi gửi dữ liệu qua thiết bị đầu cuối. Sau đó, tôi nhận được tín hiệu 0V / 5V và kết luận rằng cáp không tuân theo các tiêu chuẩn RS232. Theo hình ảnh này , chân 3 là TXD trên đầu nối DB9 nam. Hay tôi chỉ bối rối?
Ricardo

Vì vậy, chân 3 trên DB9 nam là truyền dữ liệu từ máy tính và truyền dữ liệu vào bộ chuyển đổi từ RS232 sang TTL, phải không? Nó trái ngược với những gì bạn nói trong đoạn đầu tiên của bạn.
Ricardo

Ngoài ra, tôi đã thực hiện những gì bạn đề xuất ở đoạn cuối câu trả lời của bạn. Tôi đã áp dụng sóng vuông 0 / 5V khoảng 68kHz cho chân 10 của MAX 232 và chân có phạm vi 7 của MAX 232. Tôi nhận được tín hiệu RS232 -6V / + 6V đảo ngược đẹp và sạch.
Ricardo

1
@ JohnR.Strohm Tuy nhiên, OP cho biết anh ta có thể rút ngắn chân 11 và 12 trên MAX 232 và kết nối MAX 232 với cáp đến từ PC bằng DB9. Điều đó có nghĩa DB9 được dây một cách chính xác, hoặc truyền / nhận trong MAX232 sẽ không được kết nối với các chân TX / RX trên DB9 đúng cách.
tcrosley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.