Chúng tôi đã sử dụng vi điều khiển ATmega48 / 88/168/328 thành công trong nhiều năm qua trong nhiều sản phẩm của chúng tôi. Hiện tại chúng tôi đã cân nhắc chuyển từ biến thể A và PA sang biến thể PB mới (vì chúng tôi sẽ cần thêm chân, bộ hẹn giờ và UART trong các sản phẩm mới, vì nó trở nên rẻ hơn và vì dường như các biến thể cũ sẽ bị ngừng sản xuất), vì vậy chúng tôi đã chuyển ra một ATmega328A với ATmega328PB. Nó dường như đi haywire rất thường xuyên sau khi gián đoạn điện . Những vấn đề như vậy không bao giờ xảy ra với các biến thể cũ.
Việc gián đoạn điện thường xuyên là bình thường đối với các sản phẩm của chúng tôi. Chúng tôi sử dụng nguồn cung cấp năng lượng chuyển đổi (như cái này ) được đặt thành 5V và có các tụ điện trong phạm vi 220 DENF trên VCC của ATmega, để giữ cho SRAM tồn tại khi bị gián đoạn điện trong vài phút, để lưu trữ các trạng thái bên trong không phải là nhiệm vụ quan trọng nhưng tăng đáng kể trải nghiệm người dùng bằng cách có sẵn ngay lập tức khi khởi động lại (những trạng thái này thay đổi thường xuyên đủ để làm cho EEPROM không phù hợp). Điều này đã luôn luôn làm việc.
Tuy nhiên, với ATmega328PB mới, sau khi bị gián đoạn nguồn, chip đặt lại mà không có điều kiện đặt lại được tìm thấy trong MCUSR, và đồng hồ dường như bị vướng.
- bộ dò màu nâu được đặt trên mỗi cầu chì. Chúng tôi đã thử mọi bodlevel có sẵn, lỗi xảy ra trên tất cả chúng.
- chúng tôi sử dụng 20 MHz bên ngoài, cũng được đặt chính xác cho mỗi cầu chì.
- chúng tôi đã thử 3 loại chip khác nhau, do đó không phải là lỗi hàn hay lỗi phần cứng khác.
Sau khi xảy ra lỗi, đồng hồ thường đặt tốc độ chậm hơn 2,5 lần, cho biết mcu đang được tạo bởi bộ dao động bên trong 8 MHz. Tuy nhiên, đôi khi sự chậm lại là khoảng 6 lần. Điều này có nghĩa là nó không thể là lỗi phần mềm thay đổi bộ chia đồng hồ, vì tôi không thể đặt cầu chì từ phần mềm và bộ chia đồng hồ không thể chia đồng hồ cho 2,5 hoặc 6.
Vì vậy, nghi ngờ đầu tiên của tôi là cầu chì Phát hiện lỗi đồng hồ mới. Tuy nhiên, bất kể nó được bật hay tắt, hành vi vẫn như cũ.
Để loại trừ tính đặc thù của phần mềm, tôi đã viết một chương trình thử nghiệm đơn giản từ đầu, không có gì khác ngoài việc bật một đầu ra với 100 Hz từ ngắt hẹn giờ và cho biết với đèn LED sau mỗi lần khởi động lại điều kiện thiết lập lại được kích hoạt (như đọc từ MCUSR). Phần còn lại của phần cứng cũng bị loại bỏ, chỉ có mcu và bộ điều chỉnh ở đó (và đèn chỉ báo có điện trở nối tiếp).
Kết quả
Khoảng 2/3 thời gian, không có gì thú vị xảy ra. Sau khi gián đoạn nguồn, mcu tiếp tục công việc của mình, cả hai chỉ báo thiết lập lại màu nâu và bật lại bật sáng.
(trên hình ảnh, màu đỏ là pin được bật và màu xanh là VCC. Trên hình ảnh này, có thể nhìn thấy rõ bronwn-out 2.7 V. Tôi đã thực hiện các thử nghiệm tương tự với các cài đặt màu nâu khác, kết quả hoàn toàn giống nhau, vì vậy tôi sẽ bỏ qua những hình ảnh đó)
Khoảng 1/3 thời gian, lỗi đã nói ở trên xảy ra và khi nguồn điện trở lại, không có đèn báo khởi động lại và bật nguồn nào bị bật sáng! Đầu ra là khác nhau, như thể mcu đang tích tắc với một chiếc đồng hồ lạ. Nó không hỗn loạn, tuy nhiên, nó tiếp tục đánh dấu với cùng tần số.
Thật thú vị, trong tình huống này, bộ phát hiện màu nâu dường như hoàn toàn không hoạt động, bởi vì sau lần gián đoạn nguồn tiếp theo (đôi khi đồng hồ đúng được khôi phục, đôi khi không), có thể thấy rõ rằng đầu ra tiếp tục chuyển đổi tốt sau màu nâu cấp độ đã được thông qua. Trong những tình huống như vậy, đồng hồ đôi khi nhanh hơn, lần khác lại chậm hơn:
Trong các thử nghiệm này, tôi đã sử dụng 16K CK / 14CK + 4,1 ms cho độ trễ khởi động (nhưng độ trễ 65 ms không tránh được các vấn đề).
Dưới đây là hình ảnh được phóng to, trong đó bạn có thể thấy rõ rằng VCC đạt trạng thái ổn định ở mức 5 V trong dưới 2 ms:
Trong hình trên, mcu bắt đầu chính xác.
Thật thú vị, khi không có, điện áp cung cấp sẽ tăng lên mức 5 V ổn định thậm chí sớm hơn (có vẻ như nhiều phần của mcu không bật nguồn, vì vậy nó sẽ tiêu thụ ít dòng điện hơn trong quá trình khởi động)
Dưới đây là hình ảnh từ một khởi đầu không thành công:
Xin lưu ý rằng phần mềm bắt đầu chạy sau hơn 85 ms sau khi điện áp cung cấp đã ổn định, thay vì 10,5 ms yêu cầu khác. Các cầu chì cho độ trễ khởi động vẫn như nhau, 16K CK / 14CK + 4,1 ms.
Điều thú vị cần lưu ý là sau khi nguồn cung cấp bị tắt, VCC ổn định ở khoảng 1,1 đến 1,2 Volt (biến thể ATmega328A cũ đã giảm xuống khoảng 0,6 - 0,7 V). Nó giữ điều đó trong vài phút. Nếu tôi đợi đủ lâu (theo thứ tự từ nửa giờ trở lên), mcu luôn bắt đầu chính xác! Vì vậy, có vẻ như vấn đề là có 1.1 Volt xung quanh, mà theo bảng dữ liệu, không được đảm bảo là đủ để thiết lập lại bật nguồn. Nhưng nó là đủ cho một thiết lập lại màu nâu!
Ngoại trừ những tình huống này, máy dò màu nâu hoạt động tốt. Nó hiển thị trên hình ảnh đầu tiên (tín hiệu đầu ra dừng lại khi đã đạt đến mức cơ thể và sự sụt giảm điện áp chậm lại, vì các bộ phận của mcu bị tắt). Tôi đã thực hiện các thử nghiệm khi tôi giảm VCC xuống một chút bên dưới bodlevel và để nó trèo trở lại, mcu luôn khởi động lại chính xác trong các điều kiện như vậy, chỉ có đèn báo khởi động lại màu nâu sáng lên.
Tôi đã bỏ lỡ một cái gì đó rõ ràng, hoặc ATmega328PB có một lỗi nghiêm trọng trong máy dò màu nâu của nó?
BIÊN TẬP:
Thật thú vị, các vấn đề trên chỉ phát sinh khi tôi làm gián đoạn nguồn cung trước cơ quan quản lý. Nếu tôi ngắt nó sau bộ điều chỉnh (hoặc sử dụng nguồn điện trong phòng thí nghiệm), các vấn đề không bao giờ xảy ra. Như thể hình dạng của điện áp tăng gây ra vấn đề. Tuy nhiên, như bạn có thể thấy từ hình ảnh cuối cùng, điện áp tăng khá đẹp và ổn định nhanh chóng.
CHỈNH SỬA 2
Tôi đã thử với 16 MHz thay vì 20 MHz, nhưng các vấn đề tương tự chính xác xảy ra.