AVR tự lập trình


8

Có ai khác đã có những trường hợp mà một AVR chỉ ngừng hoạt động một cách bí ẩn sau vài tháng, nhưng việc lập trình lại nó sẽ mang nó trở lại?

Tôi đang chạy một loạt các atmega328 trong mạng cảm biến không dây. Bây giờ tôi đã có 3 lần (trong khoảng một năm) khi một trong số họ vừa ngừng hoạt động. Tôi sẽ ghi lại chương trình cho nó và nó sẽ bắt đầu hoạt động trở lại. Nó không phải luôn luôn là cùng một đơn vị, vì vậy có vẻ như đó không phải là một con chip bị lỗi.

Điều đó có vẻ như là một điều khá tai hại sẽ khiến mọi người không sử dụng AVR, vì vậy rõ ràng đó là điều gì đó về hoàn cảnh cụ thể của tôi. Tôi chỉ tự hỏi nếu có ai khác đã chạy vào nó và có thể có một số gợi ý.

Tôi đang hết pin 3,3V, vì vậy điện áp sẽ xuống quá thấp để hoạt động một vài tháng một lần và tôi phải thay thế các lần sạc lại. Các mô-đun sử dụng chế độ ngủ và bộ đếm thời gian theo dõi để ngủ trong 60 giây, đọc, radio trở lại trạm gốc và sau đó ngủ lại. Các mô-đun tương thích với arduino, vì vậy tôi đã không lật bit "đừng để tôi ghi lại bit này".


Nơi bạn có thể xác định vấn đề? Chúng tôi đang gặp vấn đề tương tự với một thiết lập tương tự. Bạn đã bao giờ đọc bộ nhớ flash "hỏng" và so sánh nó với nội dung HEX ban đầu chưa?
Rev1.0

Câu trả lời:


6

Bạn đang sử dụng HĐQT? Những điều khó chịu đôi khi có thể xảy ra nếu một con chip màu nâu.


3
Để làm rõ, edebill nên được sử dụng BOD.
Kevin Vermeer

Không sử dụng BoD. Tôi sẽ phải xem về việc thêm nó. Vì vậy, kịch bản ở đây sẽ là con chip chỉ bắt đầu bay xung quanh khi điện áp quá thấp và vô tình làm hỏng đèn flash của chính nó?
edebill

@edebill - Trên PIC, tôi đã thấy điều đó xảy ra rất nhiều trong sản xuất khi ngưỡng BORV không được đặt.
J. Polfer

HĐQT là gì? Phát hiện ra màu nâu?
Peter Mortensen

2
Vâng, đó là Phát hiện Brown-Out.
Leon Heller

6

Có lẽ Phát hiện ra Brown là cách làm đúng, nhưng ...

Tôi đã có một vấn đề chỉ phần mềm gây ra các triệu chứng rất giống nhau, mặc dù nhanh hơn nhiều. Tôi tin rằng một số C ++ (biên dịch?) Xấu dẫn đến tham nhũng ngăn xếp và hàm được trả về bên ngoài chương trình thực, thực hiện các hướng dẫn ngẫu nhiên. Tôi không chắc chính xác điều gì đã xảy ra tiếp theo, nhưng cách duy nhất để khắc phục nó là đảo ngược chương trình (rõ ràng một số hướng dẫn ngẫu nhiên đó bao gồm ghi vào bộ nhớ chương trình).

Lỗi chỉ là một kẻ hủy diệt được gọi không đúng lúc. Làm cho biến toàn cục (vì vậy nó không bao giờ bị phá hủy) đã khắc phục vấn đề. Vấn đề rất dễ tái tạo (mất khoảng một phút để kích hoạt) và với sức mạnh rất ổn định. Thiết lập cụ thể là Arduino + WaveShield sử dụng thư viện WaveHC, nhưng tôi nghĩ điều này có thể xảy ra với bất kỳ ai sử dụng C ++.

Nếu bạn thích ngôn ngữ cấp thấp, tôi đã vô tình làm điều tương tự trong quá trình lắp ráp, nhưng thật kỳ diệu, điều này không bao giờ gây ra vấn đề gì ngoài thời gian lẻ tẻ: hầu hết các hướng dẫn đều dài 2 byte, nhưng một số thì dài hơn và tôi đã dại dột tự tính toán khoảng cách nhảy và nhảy vào giữa một lệnh 4 byte. Nó đã được tổ chức lại khá nhanh chóng, nhưng không khó để tưởng tượng một cái gì đó như thế này trên một con đường mã hiếm khi được sử dụng gây ra sự điên rồ.


Điều này cũng có thể xảy ra với các bộ xử lý ánh xạ một số bộ nhớ flash vào không gian bộ nhớ chính. Tôi biết ít nhất là của DSPIC và PIC24 làm điều này. Nếu bạn có một con trỏ bị hỏng và hoàn cảnh phù hợp, bạn có thể ghi đè lên flash.
Thomas O

3

Tôi cũng đã thấy các tụ tách rời Vcc không đủ / đặt kém / thiếu gây ra các hiệu ứng tương tự. Bạn có tách rời cục bộ càng gần IC càng tốt không? (Loại gốm 100nF - 1uF được ưu tiên)


2

Một yếu tố khác có thể khiến các thiết bị bị mất bộ nhớ là phóng điện tĩnh (ESD).

Đặt một vài varistors trên tất cả các đầu nối bên ngoài có thể tiếp xúc có thể làm giảm bớt vấn đề này. Tôi đã thấy nó trước đây trong một số sản phẩm thương mại dựa trên bộ vi điều khiển PIC Microchip, vì vậy nó không phải là chưa từng nghe thấy.

Có một số bộ biến đổi tiện dụng tăng gấp đôi làm tụ lọc (theo thứ tự 10-150 pF). Hãy xem những điều này http://www.tdk.co.jp/tefe02/e9c11_avr.pdf

Chúng nhỏ, rẻ và sẽ bảo vệ thiết bị của bạn. Đặt chúng càng gần càng tốt với các đầu nối mang tín hiệu bên ngoài lên bảng và định tuyến tất cả các dấu vết ngay lập tức ra khỏi các chân kết nối.


Các bộ biến đổi không phải để bảo vệ ESD (chúng là để bảo vệ các đợt tăng kéo dài từ 10 đến 100 mili giây); Các điốt bên trong của thiết bị thường là đủ, nhưng khi không, việc thêm một số điốt phân cực ngược vào đường ray (Vdd và GND) thường hoạt động, hãy cẩn thận vì điều này có thêm điện dung cho IO và có thể ảnh hưởng đến công cụ tốc độ cao .
Thomas O

1
Thomas có một cái nhìn về cơ sở dữ liệu TDK, các thiết bị này được thiết kế đặc biệt cho các biện pháp truy cập ESD và chúng được chứng minh là hoạt động trong sản xuất cho các thiết bị liên lạc điện tử. Chúng tôi kiểm tra các thiết bị của mình trong nhà với tối đa 8 kV ESD và các thiết bị này bảo vệ các thành phần khác.
smashtastic

Bạn đúng về điện dung bổ sung, và điều đó cần phải được xem xét.
smashtastic
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.