AVR Fuse Bit Onarım Devresi

Başlatan istinaf duvarı, 07 Eylül 2024, 10:16:01

istinaf duvarı

Merhaba.

Atmel işlemcilerde FUSE ve kilit bitleri PIC'lerden farklı olarak programa gömülü değildir. Programlama yaparken elle girilmesi gerekmektedir. Bu nedenle bazen bilerek ya da bilmeyerek hatalı değerler girilebilmektedir. Hatalı fuse değeri girdiğimizde işlemciye erişemeyebiliriz. Atmel işlemcilerle uğraşıyorsanız bu devreden elinizin altında bir tane bulundurmanızı öneririm.

Atmel işlemcileri programlarken kullandığımız ISP yöntemi esasında ikincil bir programlama yöntemidir.İşlemci hafızasına düşük seviyeli (low level) erişim imkanı sağlamaz. Bu nedenle işlemci hafızasına doğrudan erişmek gereken bazı durumlarda bunu ISP üzerinden yapamayız. ISP esasında SPI tabanlı bir teknolojidir ve işlemci içerisindeki SPI modülüne bağımlıdır. Hatalı fuse biti nedeniyle SPI modülü çalışmaz hale gelirse ISP de çalışmayacaktır. Bunun sebepleri SPI modülünü kapatmak olabilir veya hatalı clock ayarı nedeniyle saat sinyali alamayan SPI modülü çalışmayabilir.  Hatalı fuse bitlerini düzeltirken işlemci hafızasına düşük seviyeli erişim sağlamak zorundayız.

Bunu da ATMEL işlemcilerin asıl programlama arayüzü olan paralel programlama (HVPP) veya Attiny gibi bacak sayısı az olan işlemciler için yüksek voltajlı seri programlama (HVSP) ile yapabiliriz. Esasında bir paralel programlayıcı ile fuse bitlerini elle yazdırarak sorunu çözebiliriz. Ancak paralel programlayıcıları temin etmek zordur ve aynı zamanda pahalıdırlar da.

Bu sorunu çözmek için fuse bit onarım devresi geliştirilmiştir. Devre oldukça basit ve düşük maliyetlidir. Yapmanız gereken şey işlemciyi devreye bağlamak ve devreyi çalıştırmak. (Cihazı HVSP moduna geçirmek için XT1 ve /OE pinlerini fotoğraftaki gibi jumper takarak birleştirin. Cihaz HVSP moduna geçecektir.)

AVR Fuse Bit Onarım Devresi için bir PCB yaptım. PCB 49,5x33,5mm boyutlarında. Yaklaşık olarak bir kredi kartının yarısı kadar.

Bu eki görüntüleyemezsiniz.Bu eki görüntüleyemezsiniz.Bu eki görüntüleyemezsiniz.


PNP transistör olarak, BC557,BC857, MMBT3906, 2N3906 gibi genel maksatlı düşük güç PNP transistörleri kullanılabilir. NPN transistör olarak, BC547, BC847, MMBT3904, 2N3904 gibi genel maksatlı düşük güç transistörleri kullanılabilir. Orjinal şemada BC547 ve BC557 kullanılmıştır. Kendi yaptığım devrede MMBT3906 ve MMBT3904 kullandım.

Kullanılan SMD dirençler ve LED'ler 805 kılıftır. Atmega işlemcinin iki yanındaki dekuplaj kondansatörleri 603 kılıftır. LM1117'nin yanındaki 100nf dekuplaj kondansatörü 805 kılıftır. (805 kılıfın yerine 603 kılıf monte edilebilir. İsterseniz 100nf'lerin üçünü de 603 kılıf kullanabilirsiniz.)

Kullanılan buton 3x6mm tact buton dur.

20 pin soketin dibindeki 10nf kondansatör 1206 kılıf kullanabilirsiniz. 805 kılıf da kullanılabilir.

10uf kondansatörler A kasa tantal kondansatör olarak seçildi. İnce uzun yapıları nedeniyle güven vermediği için elektrolitik kondansatör tercih etmedim. İsteyen oraya elektrolitik kondansatör de uydurabilir.  Veya 1206, 1210 kılıf SMD kondansatörler de kullanılabilir. Devre bu kondansatörler olmadan da çalışıyor, bir sorun çıkmadı.

R7-R23 470R ile 1k arasında seçilebilir. Hasta işlemcinin pinlerini low'a çekmesi durumunda aşırı akım çekilmesini önlemek için koyulmuştur. R5 direncini istediğiniz LED parlaklığına göre 470R ile 1.5k arasında istediğiniz değerde kullanabilirsiniz. Arka yüzdeki R25 orjinal devrede 100R olarak tercih edilmiştir. Ancak 805 kılıf 100R direnç gücü yetersiz geldiği için ısınmakta. Özellikle manuel modda kullanırken ısınma ciddi boyutlara ulaşıyor. Bu nedenle devrede küçük bir revize yaparak 1206 uyumlu yedek pad koydum. Bu sayede istenirse 1206 kılıf direnç kullanılabilir.
Ekleme: Direnci 200R ile değiştirip devreyi test ettim. Isınma ortadan kalktı. Herhangi bir sorunla karşılaşmadım.

Ana işlemci olarak Atmega8, Atmega88, Atmega168, Atmega328 kullanılabilir. Atmega8 ve Atmega88 için olan firmware'de 8KB alana sığdırmak için işlemci ismi görüntüleme gibi bazı ekstralar eklenmemiştir.  Temel düzeyde islevsellik sağlar. Tam işlevsellik için Atmega168 veya Atmega328 kullanmanızı öneririm.

20 pin soketin yanındaki pin isimleri pinlerle hizalı değildir. İsimleri sığdırmak için biraz sıkışık olarak yazılmıştır. Kabloları bağlarken dikkat edin. Kart üzerindeki köşeli olan pin 1'dir. Onun heman yanındaki 2'dir.
21
43
65
...
dizilim bu şekilde.
Pin isimleri:
Pin  HVPP   HVSP
1    PAG    SCI_Tiny15                  //Attiny15 için SCI çıkışı*
2    XA1    SDI
3    XA0    SII
4    BS1    SDO
5    /WR    EN(2)                       //Attiny24/44/84 için 
                                        //program enable çıkışı.  
                                        //PA2'ye bağlanacak.*
6    /OE    XT1 ile birleştirilecek. 
7    RDY    SCI
8    XT1    /OE ile birleştirilecek.    //Clock sinyali çıkışı. HVPP 
                                        //programlamada işlemcinin
                                        //clock girişine (XTAL1) 
                                        //bağlanacak. 
9    GND    GND
10   +5V    +5V
11   +12V  +12V
12   D7      -
13   D6      -
14   D5      -
15   D4      -
16   D3      -
17   D2      -
18   D1      -
19   D0      -
20   BS2    -

*Zorunlu değil. HVSP için SCI, SII, SDI, SDO, 12V, 5V, GND pinlerini bağlamak yeterlidir. Attiny15 için, SCI pini (7) çalışmazsa alternatif olarak bunu deneyebilirsiniz. Attiny24 serisinde PA2 pinini GND'ye bağladığınızda işlemci algılanmıyorsa EN(2) çıkışını
kullanmayı deneyebilirsiniz. 

Bağlantıları işlemcinin datasheetindeki, memory programming bölümündeki bağlantı şemasına göre yapacaksınız.
Örnek:Atmega8/88/168/328:



Desteklenen İşlemciler:

145 işlemci desteklenmektedir, ancak hepsi test edilmemiştir. Test edilmemiş olanlar italik olarak yazılmıştır.

1kB
AT90s1200, ATtiny11, ATtiny12, ATtiny13/A, ATtiny15

2kB
ATtiny2313/A, ATtiny24/A, ATtiny26, ATtiny261/A, ATtiny28, AT90s2333, ATtiny22, ATtiny25, AT90s2313, AT90s2323, AT90s2343

4kB
ATmega48/A, ATmega48P/PA, ATtiny461/A, ATtiny43U, ATtiny4313, ATtiny44/A, ATtiny48, AT90s4433, AT90s4414, AT90s4434, ATtiny45

8kB
ATmega8515, ATmega8535, ATmega8/A, ATmega88/A, ATmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, ATtiny84, ATtiny85, ATtiny861/A, ATtiny87, ATtiny88, AT90s8515, AT90s8535

16kB
ATmega16/A, ATmega16U2, ATmega16U4, ATmega16M1, ATmega161, ATmega162, ATmega163, ATmega164A, ATmega164P/PA, ATmega165A/P/PA, ATmega168/A, ATmega168P/PA, ATmega169A/PA, ATtiny167, AT90pwm216, AT90pwm316, AT90usb162

32kB
ATmega32/A, ATmega32C1, ATmega323/A, ATmega32U2, ATmega32U4, ATmega32U6, ATmega32M1, ATmega324A, ATmega324P, ATmega324PA, ATmega325, ATmega3250, ATmega325A/PA, ATmega3250A/PA, ATmega328, ATmega328P, ATmega329, ATmega3290, ATmega329A/PA, ATmega3290A/PA, AT90can32

64kB
ATmega64/A, ATmega64C1, ATmega64M1, ATmega649, ATmega6490, ATmega649A/P, ATmega6490A/P, ATmega640, ATmega644/A, ATmega644P/PA, ATmega645, ATmega645A/P, ATmega6450, ATmega6450A/P, AT90usb646, AT90usb647, AT90can64

128kB
ATmega103, ATmega128/A, ATmega1280, ATmega1281, ATmega1284, ATmega1284P, AT90usb1286, AT90usb1287, AT90can128

256kB
ATmega2560, ATmega2561


Kendi yaptırdığım devrede referans numaraları yerine eleman adlarını yazmıştım. Tekrar düzenleme yaparak eleman adlarını kaldırıp referans numaralarını koydum. Eleman adlarının yerine referans numaraları olması daha ciddi bir hava katar diye düşündüm.

Devreyi UART arayüzünden (USB-TTL yada RS232-TTL dönüştürücü gerektirir.) PC'ye bağladığınızda manuel mod devreye girer. UART için gerekli ayarlar şu şekildedir:
Baud:4800
Parity:None
Data Bits:8
Stop Bits:1
Handshake:None
Hadware Flow Control:None



İlk açılışta işlemcinin imza değerini ve işlemcinin adını ekrana yazdıracaktır. (İşlemci isminin gösterilmesi için ana işlemci en az Atmega168 olmalıdır.) İşlemci tanınmazsa işlemci imzasını girmeniz istenecektir. Son iki baytı(hex olarak) girip enter'a basın.

Sonraki aşamada 5 seçenek görüntülenecektir.
1- Write Fuse Bits: Takılı işlemcinin varsayılan fuse değerlerini işlemci içerisine yazar.(Varsayılan operasyon)
2- Modify Fuse Bits: Fuse değerlerini elle girmek içindir. Seçeneği seçtikten sonra fuse değerlerini sıraya girmeniz istenecek. Her defasında fuse değerini iki karakter şeklinde (hex formatında) girip enter'a basın.
3- Set Lock Bits: Kilit bitlerini ayarlamak içindir. Kilit bitlerini 2 karakter olarak(hex) girip entera basın. Kullanılmayan bitler 1, kullanılan (aktif) bitler 0'dır.
4- Chip Erase: Çipi komple silmek içindir. Bu işlemin gerçekleşebilmesi için erase jumper'ı takılı olmalıdır.
5- End: Tedaviyi sonlandırmak için. Çipi çıkarmadan önce mutlaka sonlandırma işlemi yapılmalıdır.

Manuel modda işlemi bitirdikten sonra 5'le işlemi sonlandırmazsanız (devre çıkış gücünü kesmediğinden) 100R direnç ve 1117 regülatör ısınmaya başlıyor.

Çıkış yaptıktan sonra tekrar programa giriş yapmak için doktor üzerindeki düğmeye basmanız yeterlidir.

Devreyi PC'ye bağlamazsanız otomatik modda çalışır. Bu modda önce 1 nolu alt program yürütülür. Bu işlem başarılı olmazsa 4 numaralı alt program (chip erase) denenir. Bu esnada jumper takılı değilse yeşil LED (Good) yanıp sönerek uyarı verir.

LED açıklaması:

Sabit Yeşil: Onarım başarılı. İşlemciyi artık kullanabilirsiniz.
Sabit Kırmızı: Bilinmeyen işlemci(imzası veri tabanında yok)¹, veya işlemci yok veya arızalı.
Yanıp Sönen Yeşil:İşlemci tanındı ama kilit bitleri aktif olduğundan fuse bitleri sıfırlanamıyor. Devam etmek istiyorsanız erase jumper'ını takın ve butona basarak onarımı tekrar başlatın².
Yanıp Sönen Kırmızı: İşlemci tanındı, kilit bitleri pasif. Bilinmeyen bir sebepten dolayı fuse bitleri sıfırlanamıyor.

¹Bu durumdaki işlemcileri manuel modda doğru fuse değerlerini elle girerek düzeltebilirsiniz.
²İşlemcinin komple silinmesini gerektirir. Dikkatli olun!!!


Manuel modda LED'ler rastgele yanıp sönerler, itibar etmeyin.


Firmware ve şemalar zip dosyası içindedir.
Fuse bits:
    AtMega8            L:0xE1 H:0xD1
    AtMega88,AtMega168 L:0x62 H:0xD7 E:0xF9
    AtMega328          L:0x62 H:0xD1 E:0xFF
Hatalı girmeyin sakın.  ;D

Kart üzerinde ayrı bir ISP bağlantı soketi yoktur.
Ana işlemciye firmware yüklemek için:
VDD: LM1117'nin çıkışına geçici bağlantı yapın.
GND: 20 pin soketteki GND pinini kullanın.
Reset: Alt yüzdeki /RST noktasına geçici bağlantı yapın.
MOSI: 20 pin soketteki D3 pinini kullanın.
MISO: 20 pin soketteki D4 pinini kullanın.
SCK : 20 pin soketteki D5 pinini kullanın.

Malzeme Listesi:
Atmega8/88/168/328 MCU, TQFP32 x1
Lm1117 5V LDO Regülatör, SOT-223-4 x1
10nf, 0805 veya 1206 kapasitör x1
100nf, 0805 kapasitör x1
100nf, 0603 kapasitör x2
10uf, A kasa tantal kapasitör x2
200R, 0805 direnç x1 (100R direnç çok ısındığı 200R ile değiştirdim.)
470R, 0805 direnç x1
1k, 0805 direnç x19
4k7, 0805 direnç x2
10k, 0805 direnç x3
LED Kırmızı, 0805 x1 (Bad LED'i)
LED Yeşil, 0805 x1 (Good LED'i)
1x3 2.54mm Erkek Header, 180c x1
1x2 2.54mm Erkek Header, 180c x1
2x10 2.54mm Erkek Header veya IDC Soket x1
Düşük Güç NPN transistör SOT-23 (BC547, BC847, MMBT3904, 2N3904 vb.) x1
Düşük Güç PNP transistör SOT-23 (BC557, BC857, MMBT3906, 2N3906 vb.) x2
5.5x2.1 veya 5.5x2.5 DC Soket x1
Tact Buton, 6x3mm SMD x1




Detaylı bilgi için GitHub sayfası:
https://github.com/SukkoPera/avr-fusebit-doctor

şifre/pass:etepic.com

fatih88

bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

istinaf duvarı


Powered by EzPortal