Bảng Arduino tùy chỉnh phát ra tiếng bíp và xử lý đóng băng trong khi tôi đang tải lên bản phác thảo cho nó. Tại sao?


8

Điều kỳ lạ nhất đang xảy ra với một bo mạch Arduino độc lập do tôi thiết kế và chế tạo. Bảng (có sơ đồ bên dưới) có các tính năng sau:

  1. Nó có ATmega328P với bộ điều chỉnh điện áp 5V và mạch thông thường khi được thiết lập như một bộ điều khiển độc lập.
  2. Nó điều khiển bảng điểm với một số chữ số 7 màn hình được liên kết thông qua các đầu nối bên phải (JP1 đến JP12).
  3. Nó có các nút con trỏ được giải mã bằng thang điện áp thông qua ANALOG_0 (A0).
  4. Nó có Đồng hồ thời gian thực để giữ thời gian khi tắt.
  5. Nó có một mô-đun máy thu RF.
  6. Nó có một tiêu đề UART (JP17) để tôi có thể lập trình bảng bằng cổng nối tiếp.
  7. Nó có một loa được gắn vào pin kỹ thuật số 3 (D3).

Sơ đồ điều khiển

Tôi tải lên các bản phác thảo cho nó bằng cách sử dụng bộ chuyển đổi tín hiệu từ RS232 sang TTL mà tôi cũng đã xây dựng (sơ đồ bên dưới) và cáp Nối tiếp với USB. Khi lập trình nó, bảng hoạt động giống như một bảng Severino .

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

Điều kỳ lạ là, khi tôi tải lên một bản phác thảo, quá trình này bị tạm dừng ở giữa và sau đó người nói bắt đầu phát ra tiếng bíp liên tục. Nó tạm dừng với các thông báo avrdude sau:

avrdude: Phiên bản 5.11, được biên soạn vào ngày 2 tháng 9 năm 2011 lúc 19:38:36 Bản quyền (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Bản quyền (c) 2007-2009 Joerg Wunsch

     System wide configuration file is "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf"

     Using Port                    : \\.\COM1
     Using Programmer              : arduino
     Overriding Baud Rate          : 115200

Khi tôi nhấn thiết lập lại trên bảng, avrdude tiếp tục xuất các thông báo của nó (chẳng hạn như bên dưới), tiếng bíp dừng lại, quá trình tải lên tiếp tục và bản phác thảo được tải lên bảng thành công.

avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
avrdude: Send: 0 [30]   [20] 
... messages and upload continue and completes successfully.

Tôi không có phần còn lại của tin nhắn ở đây, nhưng tôi hy vọng bạn có ý tưởng.

Vì vậy, câu hỏi của tôi là:

  1. Điều gì làm cho quá trình tải lên tạm dừng?
  2. Tại sao tiếng chuông kêu bíp khi quá trình tạm dừng?

1
Trong tùy chọn của IDE, bật Verbose để tải lên. Nhật ký này sẽ cung cấp một số cái nhìn sâu sắc, hoặc nhiều manh mối.
mpflaga

1
Câu hỏi ngu ngốc: Bạn đã lập trình ATmega328p với bộ tải khởi động chưa?
Sói Connor

1
"Hoạt động hoàn hảo trong UNO" -Đó là thông tin hữu ích. Vì vậy, bảng của bạn phải có một ổ cắm. Nếu vậy - Bạn có thể xác định nguồn cụ thể hơn bằng một thử nghiệm nhanh. Đối với mỗi chân IO uốn cong chân ra, để không tiếp xúc. Nổi! Khi bạn cắm IC vào ổ cắm của bạn. Cuối cùng, với tất cả các chân nổi, mạch của bạn sẽ ra khỏi câu hỏi. Và vì một số điểm giữa độ trễ / tiếng bíp sẽ dừng lại. Và báo cáo lại.
mpflaga

1
@jfpoilpret nếu loa trong thực tế là một cái chuông (piezo), thì không có cảm ứng, do đó không cần diode. Hãy quên bình luận ban đầu của tôi.
jfpoilpret

1
Một người bạn của tôi, người đã làm rất nhiều thiết bị điện tử khi còn trẻ đã từng nói với tôi: "nếu nó không hoạt động như bạn mong đợi, hãy thêm một tụ điện tách rời". Nhiều lần, tôi đã làm theo lời khuyên này với thành công lớn! Trong sơ đồ của bạn, tuy nhiên, nó không rõ ràng với tôi, nơi bạn có thể thêm khả năng tách rời. Bạn đã thử trong // với buzzer chưa? Bạn cũng có thể thử 2 (một cho freqs thấp, một cho freqs cao): một cho điện phân ít nhất 1uF, một 100nF gốm. Tệ nhất, nó sẽ không có tác dụng gì :-)
jfpoilpret

Câu trả lời:


3

Điều gì làm cho quá trình tải lên tạm dừng?

Vâng, với tất cả các ý kiến ​​được thực hiện dưới câu hỏi của bạn, đây chắc chắn là một khó khăn. Bạn có thể muốn thử thêm một tụ điện tách rời theo đề xuất của @jfpoilpret, mặc dù sơ đồ của bạn trông ổn đối với tôi (có thể yêu cầu đánh giá về nó trên EE SE ).

Tôi cũng khuyên bạn nên sao chép avrdudelệnh từ đầu ra Arduino IDE (bạn sẽ tìm thấy nó ở trên cùng) và chạy nó trong vỏ lệnh với tốc độ bit thấp hơn:

avrdude -v -v -v -v -C "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf" -P COM1 -patmega328 -U… -B3 -b115200

-Bgiá trị càng cao thì tốc độ bit của bạn càng thấp. và -bvới tốc độ baudrate chính xác cho bộ tải khởi động của bạn (bạn có chắc đây là 115200 không? nó phổ biến hơn để xem 57600).

Bạn cũng đã đặt cầu chì chính xác? Bạn cũng có thể muốn kiểm tra các giá trị của cầu chì để xem đồng hồ có được thiết lập chính xác không:

avrdude -U lfuse:r:-:i -U hfuse:r:-:i -U efuse:r:-:i

Nó sẽ xuất ra các giá trị của cầu chì. Sau đó, để làm cho các giá trị có thể đọc được, hãy đặt các giá trị ở dưới cùng của biểu mẫu trên trang web máy tính cầu chì , sau khi chọn Atmega328PMCU từ danh sách thả xuống.

Kiểm tra kỹ rằng:

  • bạn có đủ kích thước cho bộ nạp khởi động (thường thì bạn càng cung cấp cho nó càng tốt);
  • bạn đã thiết lập chính xác cấu hình cristals cho thiết kế của mình (có thể không tương thích với cài đặt Uno mặc định như thiết lập bởi Arduino IDE), kiểm tra xem bạn có thiết lập chính xác tinh thể bên ngoài ở 16 MHz hay không

Tại sao tiếng chuông kêu bíp khi quá trình tạm dừng?

Đó là bởi vì khi bộ xử lý không có đầu ra được thiết lập, các giá trị trong các thanh ghi sẽ ở trạng thái không xác định và không thể đoán trước. Điều đó có nghĩa là thông thường nó giữ giá trị cuối cùng trước khi thiết lập lại hoặc thay đổi trạng thái vì một số sự kỳ lạ tĩnh điện, hoặc đưa ra một số đầu ra PWM kỳ lạ do ảnh hưởng của đồng hồ gần đó.

Về cơ bản, có điều gì đó sai xảy ra khi bạn tải lên mã của mình và điều sai đó có ảnh hưởng gián tiếp đến âm thanh. Tôi sẽ không lo lắng nhiều về những thứ đó, nhưng nhiều hơn về nguyên nhân của việc tạm dừng.

Đáng buồn thay, tôi không có câu trả lời trực tiếp cho bạn, nhưng tốt nhất là một vài con đường bạn nên điều tra thêm. HTH


+1 Cảm ơn những gợi ý! Rất hữu ích. Tôi sẽ thử tất cả và báo cáo lại sau vài ngày.
Ricardo

Chỉ muốn cho bạn biết rằng tôi đã khắc phục vấn đề. Xem câu trả lời của tôi cho câu hỏi này. Dù sao cũng cảm ơn bạn!
Ricardo

3

Cuối cùng tôi đã tìm thấy nguyên nhân gây ra sự cố: tín hiệu đặt lại từ chân 4 (DTR - Data Terminal Ready) trên đầu nối DB9-Female đã tăng lên 10V trước khi chuyển sang 0V và đang kích hoạt lập trình điện áp cao trên ATmega. Dưới đây là ảnh chụp phạm vi cho thấy tình huống:

Phạm vi bắn cho thấy điện áp tăng vọt đến 10V

Dấu vết màu vàng là DTRtín hiệu trong khi dấu vết màu xanh lá cây là RESETtín hiệu trên ATmega.

Theo lưu ý về ứng dụng Xem xét thiết kế phần cứng của Atmel AVR042: AVR , người ta nên thêm một diode ESD giữa ATmega RESETVccđể ngăn tín hiệu đặt lại kích hoạt chế độ lập trình điện áp cao, như vậy:

Kết nối pin RESET được đề xuất cho ATmegas

Sau khi thêm một diode tín hiệu nhỏ như vậy (1N4148) như ghi chú ứng dụng được đề xuất, tôi đã khắc phục được sự cố. Xem bên dưới phạm vi bắn được thực hiện sau khi diode được thêm vào.

Phạm vi bắn sau khi sửa bảng

Bây giờ đỉnh 10V không còn nữa.

Đó là một khó khăn !! Nhưng tôi không bao giờ có thể tìm thấy những gì sai nếu không có nghiên cứu và các công cụ phù hợp. Tiền trên một phạm vi là tiền chi tiêu tốt !!


1
Điều này xuất hiện bởi vì dòng thiết lập lại của bạn không có loại trình dịch mức được áp dụng cho dòng dữ liệu nối tiếp. Hầu hết sử dụng một ic dịch trình độ và chạy thiết lập lại thông qua một kênh của đó.
Chris Stratton

@Chris - Vâng, tôi nhớ bạn bảo tôi sử dụng trình chuyển đổi MAX 232 thứ 2 để khắc phục điều đó. Tôi sẽ xem xét lại và xem liệu tôi có thể sửa thiết kế đó không. Cảm ơn!!
Ricardo

1

Tôi không chắc nhưng vấn đề cũng có thể liên quan đến tính năng tự động đặt lại của bảng chuyển đổi.

Tôi đã sao chép thiết kế bảng chuyển đổi từ Arduino Severino và theo hướng dẫn của nó , giao tiếp nối tiếp phải được đặt thành 19.200 bps để tính năng tự động đặt lại hoạt động.

Đảm bảo rằng tốc độ Cổng COM của máy tính được đặt thành 19200bps nếu không tự động đặt lại sẽ không hoạt động đúng.

Chà, tôi đang sử dụng 115.200, nên đó là một vấn đề.

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.