Trước hết , xin chia buồn cùng bác nào bị vấn đề này với ATmega8/ATtiny2313 vì hai con này có chân RESET có thể bị disable nên cách này không áp dụng được, tuy nhiên nếu may mắn con AVR của bạn vì lý do gì đó không bị disable RESET thì cách này vẫn dùng được .
+ Atmel nói rằng, fuse SPIEN không thể được đọc/ghi khi dùng mạch nạp ISP. do đó cứ an tâm , chip của bạn không bị "chết giấc" vì cái fuse này đâu.
+ AVR có thể chạy với một nguồn xung cấp từ ngoài với các thiết lập dùng nguồn xung ngoài ( mạch RC ngoài, thạch anh ngoài, clock ngoài...).
Đa số AVR bị set fuse nhầm thường rơi vào trạng thái không hoat động được nên không thể nạp bằng mode ISP được, do đó , nếu khôi phục cho chip chạy lại thì hoàn toàn có thể chỉnh sửa fuse và nạp lại chương trình. Ít người chú ý rằng, AVR không chạy là do không được cấp xung giữ nhịp.
Để tạo được nguồn xung giử nhịp, bạn có thể dùng một con AVR khác được lập trình để tạo xung xuất ra một chân nào đó, sau đó nối nó vào chân XTAL1:
Code C đơn giản như sau:
Các chân trên portB sẽ xuất là một xung vuông có thể dùng đưoc trong trường hợp này, ngoài ra cũng có thể dùng mạch dao động RC mà các bạn đã được học rất nhiều hoặc một mạch dùng 555 timer như sơ đồ trong file đính kèm ! (các thông số tạo xung 1MHz)
Một trường hợp khá không may mắn là fuse setting chip về trạng thái dùng thạch anh 32KHz, nếu vậy thì bạn phải hạ xung từ mạch dao động xuống 32 - 40KHz. Sau đó điều bắt buộc là mạch nạp phải hỗ trợ xung SCK nhỏ hơn 8KHz, mà thật sự thì ít có mạch nạp miễn phí nào hỗ trợ việc này !
Sau khi có nguồn xung rồi, mắc mạch tương tự như hình trong file đính kèm, ở đây lấy thí dụ là con mega8535.
Sau khi nhận ra chip rồi thì viêc đầu tiên là erease chip một phát nhá, rồi muốn làm gì thì làm !
Ít nhất 1 con Mega8 ( của mình) đã được cứu theo cách này, thật may mắn vì cái Fuse RSTDISL đã không bị set.
Còn nếu bạn có điều kiện trang bị mạch nạp STK500 hoặc AVRISP xịn thì mọi chiện dể dàng hơn, xài cái này mà anh nào còn làm chip bị giật cà tưng thì thật là hết chổ nói !.
Phòng hỏa hơn cứu hỏa ! Không set fuse sai thì làm gì cần set lại cơ chứ!
Chúc bạn thành công !
NVT2
+ Atmel nói rằng, fuse SPIEN không thể được đọc/ghi khi dùng mạch nạp ISP. do đó cứ an tâm , chip của bạn không bị "chết giấc" vì cái fuse này đâu.
+ AVR có thể chạy với một nguồn xung cấp từ ngoài với các thiết lập dùng nguồn xung ngoài ( mạch RC ngoài, thạch anh ngoài, clock ngoài...).
Đa số AVR bị set fuse nhầm thường rơi vào trạng thái không hoat động được nên không thể nạp bằng mode ISP được, do đó , nếu khôi phục cho chip chạy lại thì hoàn toàn có thể chỉnh sửa fuse và nạp lại chương trình. Ít người chú ý rằng, AVR không chạy là do không được cấp xung giữ nhịp.
Để tạo được nguồn xung giử nhịp, bạn có thể dùng một con AVR khác được lập trình để tạo xung xuất ra một chân nào đó, sau đó nối nó vào chân XTAL1:
Code C đơn giản như sau:
Code:
while(1) { PORTB=0xFF; PORTB=0x00; } //loop forever;
Một trường hợp khá không may mắn là fuse setting chip về trạng thái dùng thạch anh 32KHz, nếu vậy thì bạn phải hạ xung từ mạch dao động xuống 32 - 40KHz. Sau đó điều bắt buộc là mạch nạp phải hỗ trợ xung SCK nhỏ hơn 8KHz, mà thật sự thì ít có mạch nạp miễn phí nào hỗ trợ việc này !
Sau khi có nguồn xung rồi, mắc mạch tương tự như hình trong file đính kèm, ở đây lấy thí dụ là con mega8535.
Sau khi nhận ra chip rồi thì viêc đầu tiên là erease chip một phát nhá, rồi muốn làm gì thì làm !
Ít nhất 1 con Mega8 ( của mình) đã được cứu theo cách này, thật may mắn vì cái Fuse RSTDISL đã không bị set.
Còn nếu bạn có điều kiện trang bị mạch nạp STK500 hoặc AVRISP xịn thì mọi chiện dể dàng hơn, xài cái này mà anh nào còn làm chip bị giật cà tưng thì thật là hết chổ nói !.
Phòng hỏa hơn cứu hỏa ! Không set fuse sai thì làm gì cần set lại cơ chứ!
Chúc bạn thành công !
NVT2
Comment