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.
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.
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.
Đ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.
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.
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 đó:
- 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.
- Đặt IC MAX 232 trên bảng và rút ngắn chân 11 và 12. Echo ok.
- 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ó:
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.
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