- AVR'deki Sigortalar Nelerdir - Ayrıntılı Bir Açıklama
- Arduino'daki Sigorta Uçları
- AVR'de Sigortaları Test Etmek İçin Gerekli Bileşenler
- AVR'de Sigorta Bitlerini Test Etme Şeması
- AVR'deki Sigortaların Test Edilmesi
Bu eğitimde sigortalar hakkında konuşacağız. Üniversitedeyken ve elektronikteki tüm harika şeyleri öğrenirken, AVR'de sigorta terimini ilk kez duymuştum, konu hakkındaki ilk düşüncem, oh! AVR'nin içinde yanlış bir şey yaparsam patlayacak bir şey var. O zamanlar internette kullanabileceğiniz çok fazla kaynak yoktu. Bu sigortaların AVR Mikrodenetleyicinin içindeki bazı özel bitlere atıfta bulunduğunu bulmak için biraz araştırdım. Bu bitler AVR'nin içindeki minik anahtarlar gibidir ve onları açıp kapatarak AVR'nin bazı özel özelliklerini açıp kapatabiliriz. Açmak ve kapatmak, ayarlama ve sıfırlama anlamına gelir.
Bu fırsatı, AVR'deki Fuse bitleriyle ilgili her şeyi tartışmak için kullanacağız. Basit olması için, popüler ATmega328P Mikrodenetleyiciyi barındıran bir Arduino kartı örneğini alacağız. Burada, gerçek hayattaki uygulamalarda gerçekten kullanışlı olan bu özelliklerden bazılarını açıp kapatmak için bu sigortaları nasıl ayarlayacağınızı öğreneceksiniz. Öyleyse, doğrudan konuya girelim.
Önceki yazılarımızda, GSM modülünü AVR mikrodenetleyicili Arabirim ve AVR mikro denetleyicili Arabirim HC-05 gibi birçok AVR mikro denetleyici projesi oluşturduk. Bu projeler hakkında daha fazla bilgi edinmek istiyorsanız onları kontrol edebilirsiniz.
AVR'deki Sigortalar Nelerdir - Ayrıntılı Bir Açıklama
Daha önce tartıştığımız gibi, mikro denetleyicideki sigortalar, AVR mikro denetleyicideki çeşitli özellikleri etkinleştirmek ve devre dışı bırakmak için açılıp kapatılabilen küçük anahtarlar gibidir. Bu, bir sonraki sorumuzun ortaya çıktığı kısım, peki bu sigortaları nasıl ayarlayacağız veya sıfırlayacağız? Bu sorunun cevabı basit: Bunu sigorta kayıtlarının yardımıyla yapıyoruz.
ATmega328P IC'de toplam 19 sigorta biti vardır ve bunlar üç sigorta baytına bölünmüştür. Bunlar "Genişletilmiş Sigorta Baytları", "Yüksek Sigorta Baytları" ve "Düşük Sigorta Baytları" olarak tanımlanır.
ATmega328 / P veri sayfası Rev: 7810D – AVR – 01/15 Tablo-27'ye bakarsanız, sigorta bitleriyle ilgili tüm küçük ayrıntıları öğrenebilirsiniz. Ancak aşağıdaki resim, veri sayfasının sigorta bitleri bölümü hakkında size daha iyi bir fikir verecektir.
Şimdi sigorta bitleri hakkında biraz bilgi edindikçe, veri sayfasını gözden geçirelim ve bu IC ile ilgili tüm gerekli ayrıntıları bulalım.
Genişletilmiş Sigorta Uçları:
Fuse Bits sekmesine tıkladığınızda ve biraz aşağı kaydırdığınızda, genellikle " EFUSE" olarak bilinen "Extended Fuse Byte" tablosunu gösteren Tablo 27-5'i bulacaksınız. Aşağıdaki resim tam olarak bunu göstermektedir.
Bu tabloda, yalnızca üç kullanılabilir bit vardır ve diğer üçü rezerve edilmiştir. Bu üç bit, Brownout Algılama seviyesiyle ilgilidir. Notta da görebileceğiniz gibi Tablo 28-5'e bakarsak, bununla ilgili daha fazla ayrıntı bulabiliriz.
Yukarıdaki tabloda görebileceğiniz gibi, Kesinti Algılama için tablomuz var. Kesinti algılama, besleme voltajı belirli bir voltaj seviyesinin altına düştüğünde mikro denetleyiciyi sıfırlayan bir özelliktir. ATmega328P IC'de, kesinti tespitini tamamen devre dışı bırakabiliriz veya yukarıdaki tabloda gösterilen seviyelere ayarlayabiliriz.
Yüksek Sigorta Baytları:
Aşağıdaki resimde görebileceğiniz gibi, veri sayfasındaki tablo 27-6: ATmega328P IC'nin Daha Yüksek Sigorta bitlerini göstermektedir.
Yüksek sigorta ATmega328 Mikrodenetleyici içindeki çeşitli görevlerle anlaşma. Bu bölümde, Yüksek sigorta bitleri ve işleyişleri hakkında konuşacağız. BOOTRST, BOOTSZ0 ve BOOTSZ1 bitleriyle başlayalım. Bu üç bit, önyükleme boyutunu ayarlamaktan sorumludur; önyükleme boyutu, önyükleyiciyi yüklemek için ayrılan bellek miktarını ifade eder .
Bir önyükleyici, mikro denetleyicinin üzerinde çalışan ve farklı görevleri yöneten özel bir yazılım parçasıdır. Ancak Arduino durumunda, önyükleyici, Arduino çizimini mikrodenetleyiciye yüklemek için kullanılır. Önceki yazılarımızdan birinde, Arduino Kullanarak ATmega328P'de Bootloader'ı Nasıl Yazacağınızı göstermiştik. Konuyla ilgileniyorsanız bunu kontrol edebilirsiniz. Konumuza geri dönersek, yüksek bayttaki diğer bitlerin amaçları makul ölçüde netleştirilmiştir, EESAVE biti bir çip silme döngüsü gerçekleştirilirken EEPROM belleğini korumaktır. WDTON biti, Watchdog Timer'ı etkinleştirmek veya devre dışı bırakmak içindir.
Watchdog zamanlayıcı, ATmega328P IC'de ayrı bir saati olan ve bağımsız olarak çalışan özel bir zamanlayıcıdır. Bekçi uygulaması zamanlayıcısı etkinse, belirli bir süre ile temizlemeniz gerekir, aksi takdirde bekçi uygulaması zamanlayıcısı mikro denetleyiciyi sıfırlar. Bu, işlemci takılırsa birçok mikro denetleyicide bulunan kullanışlı bir özelliktir; bekçi uygulaması, son uygulamanın hasar görmesini önlemek için onu sıfırlayacaktır.
DWEN biti, hata ayıklama kablosunu etkinleştirmek için oradadır; bu, işlemcileri programlamak ve hatalarını ayıklamak için kullanılan, donanımlarına dahili olarak yerleştirilmiş bir hazırlık protokolüdür. Bu özellik etkinleştirildiğinde, işlemciyi tek bir kablo takarak flaş edebilir ve hatalarını ayıklayabilirsiniz. Ancak onu kullanmak için Atmel'e hazırlık niteliğinde özel donanıma ihtiyacınız olacak.
Kalan iki bit, ne yaptığınızı tam olarak bilmediğiniz sürece kaçınmanız gereken bitlerdir. Bunlar RSTDISBL bit-7 ve SPIEN bit-5'tir. Adından da anlaşılacağı üzere RSTDISBL (Harici Sıfırlama Devre Dışı), harici donanım sıfırlama pinini devre dışı bırakır ve SPIEN biti, SPI programlama arayüzünü devre dışı bırakmak için kullanılır. Bu iki bitten herhangi birini devre dışı bırakmak AVR'nizi tamamen engelleyebilir; bu yüzden onları yalnız bırakmak iyi bir fikir.
Düşük Sigorta Baytları:
Aşağıdaki resimde görebileceğiniz gibi, veri sayfasındaki tablo 27-7: ATmega328P IC'nin Alt Sigorta bitlerini göstermektedir.
Bu sigorta baytı, saat kaynağını ve AVR içindeki saatin diğer bazı parametrelerini ayarlamaktan sorumludur. Bu bölümde tüm bunları öğreneceğiz.
7. bit veya CKDIV8 bayrağı, saat kaynağını 8'e bölecek şekilde ayarlanabilir, bu çok kullanışlıdır, AVR'yi kendiniz programlamayı denediyseniz bunu zaten biliyor olabilirsiniz. Bir sonraki bit CKOUT bitidir ve Low Fuse Byte'ın 6. bitidir. Programlama, dahili saat sinyalini mikro denetleyicinin PORTB0'ına verir.
Bit-5 ve bit-4 SUT1 ve SUT0, mikro denetleyicinin başlama süresini kontrol eder. Bu, besleme voltajı kabul edilebilir bir minimum eşik voltaj seviyesine ulaşmadan önce gerçekleşebilecek veya olmayabilecek her türlü başlatma eylemini önler. Ve son dört CKSEL0 - 4 biti, mikro denetleyicinin saat kaynağını seçmek için kullanılır. Aşağıda gösterilen tablo, saat kaynağının ayarlanmasından sorumlu olan bu dört biti daha iyi anlamanızı sağlar, bu tabloyu veri sayfasının Saat Kaynağı Bölümünde bulabilirsiniz.
Şimdi, daha ileri gitmeden önce, geçmem gereken bir şey daha var, osilatör başlatma gecikmesi tablosu. Başlangıç gecikmesi ile, alt sigorta baytının 4 ve 5 bitlerine atıfta bulunuyoruz. Devrenin çalışacağı koşula ve kullanmakta olduğunuz osilatör tipine bağlı olarak gecikmelerin ayarlanması gerekir. Varsayılan değerler, bir güç açma veya kapatma dizisi gerçekleştirildiğinde 6 saat döngüsüyle artan gücü yavaşlatacak şekilde ayarlanmıştır. Ardından, başlatmadan sonra 65 Ms'lik gecikmeyle 14 saat çevriminden oluşan başka bir gecikme vardır.
Vay be! Bu sindirilmesi gereken çok fazla bilgiydi. Ancak daha fazla ilerlemeden önce, bu bölümü hızlı bir notla bitirelim.
Not:
Veri sayfasına dikkatlice baktıysanız, bir sigorta bitini programlamak, onu düşük ayarlamak anlamına gelir, yani 0 (sıfır), ki bu genellikle bir bağlantı noktasını yüksek veya düşük yapmak için yaptığımızın tam tersidir. Sigortalarınızı yapılandırırken bunu aklınızda bulundurmalısınız.
Arduino'daki Sigorta Uçları
Yukarıdaki bölümde sigortalardan çok bahsettik, ancak bu bölümde bunların nasıl yapılandırılacağı ve bir mikrodenetleyicide nasıl yazılacağı hakkında konuşalım. Bunun için Avrdude adında bir araca ihtiyacımız olacak . AVR mikro denetleyicilerinde belleği okumak, yazmak ve değiştirmek için kullanılabilen bir araçtır. SPI ile çalışır ve farklı programcılar için uzun bir destek listesine sahiptir. aracı aşağıda verilen bağlantıdan indirebilirsiniz. Ayrıca favori mikrodenetleyicimiz Arduino'yu kullanacağız.
- Avrdude Sürüm 6.3'ü İndirin Windows-ming32
Şimdi, Avrdude'ye sahip olduğunuza göre, onu çıkarmanız ve bu klasörde bir komut penceresi açmanız gerekir. Ayrıca, daha sonra kullanmayı planlıyorsanız, klasör yolunu Windows ortam değişkeni bölümüne ekleyebilirsiniz. Ama onu masaüstüme koyacağım ve orada bir komut penceresi açacağım. Bunu yaptıktan sonra, USBasp programlayıcısını bilgisayarımıza bağlayacağız ve USBasp programlayıcımız için uygun sürücüye sahip olduğumuzdan emin olacağız. Bunu yaptığımızda, gitmekte fayda var ve önce varsayılan sigorta değerini okuyacağız. Bunu yapmak için aşağıdaki komutu çalıştırmanız gerekir.
avrdude.exe -c usbasp -p m328p -U lfuse: r: low_fuse_val.txt: h -U hfuse: r: high_fuse_val.txt: h -U efuse: r: ext_fuse_val.txt: h
Her şey doğruysa, bu komut sigorta baytlarını okuyacak ve bunları üç ayrı metin dosyasına koyacaktır. Aşağıdaki resim size süreç hakkında daha iyi bir fikir verecektir.
Gördüğünüz gibi, Avrdude, Arduino nano üzerindeki sigorta bitlerini okudu ve bunları üç ayrı metin dosyasına kaydetti. Şimdi onları açtık ve üç değer aldık; için 0xFD: eFuse için HFUSE: 0XDA, için LFUSE: 0xFF. Bu, bir Arduino nano için aldığımız varsayılan sigorta değeriydi. Şimdi bu bitleri ikiliye çevirelim ve veri sayfasındaki varsayılan değerleriyle karşılaştıralım. Aşağıdaki tablo tam olarak bunu göstermektedir.
Kolaylık sağlamak için, sigorta bitleri Onaltılık değerlerle yazılır, ancak bunları ikili değerlere dönüştürür ve veri sayfasıyla karşılaştırırsak, ne olduğunu bileceğiz. Lower Fuse Byte ile başlayalım. Yukarıdaki dizeden görebileceğiniz gibi, 0XFF olarak ayarlanmıştır ve ikili Değer 0B11111111 olacaktır .
Stok Alt Sigorta Baytlarının Arduino ile Karşılaştırılması:
Düşük Sigorta Baytı |
Bit No. |
AVR'de Varsayılan Değer |
Arduino'nun Varsayılan Değeri |
CKDIV8 |
7 |
0 (programlanmış) |
1 (programlanmamış) |
CKOUT |
6 |
1 (programlanmamış) |
1 (programlanmamış) |
SUT1 |
5 |
1 (programlanmamış) |
1 (programlanmamış) |
SUT0 |
4 |
0 (programlanmış) |
1 (programlanmamış) |
CKSEL3 |
3 |
0 (programlanmış) |
1 (programlanmamış) |
CKSEL2 |
2 |
0 (programlanmış) |
1 (programlanmamış) |
CKSEL1 |
1 |
1 (programlanmamış) |
1 (programlanmamış) |
CKSEL0 |
0 |
0 (programlanmış) |
1 (programlanmamış) |
Daha Yüksek Sigorta Baytı, 0B11011010 olan ikili olarak 0XDA olarak ayarlanır.
İkili Olarak Daha Yüksek Sigorta Baytı:
Yüksek Sigorta Baytı |
Bit No. |
AVR'de Varsayılan Değer |
Arduino'nun Varsayılan Değeri |
RSTDISBL |
7 |
1 (programlanmamış) |
1 (programlanmamış) |
DWEN |
6 |
1 (programlanmamış) |
1 (programlanmamış) |
SPIEN |
5 |
0 (programlanmış) |
0 (programlanmış) |
WDTON |
4 |
1 (programlanmamış) |
1 (programlanmamış) |
EESAVE |
3 |
1 (programlanmamış) |
1 (programlanmamış) |
BOOTSZ1 |
2 |
0 (programlanmış) |
0 (programlanmış) |
BOOTSZ0 |
1 |
0 (programlanmış) |
1 (programlanmamış) |
BOOTRST |
0 |
1 (programlanmamış) |
0 (programlanmış)) |
Genişletilmiş Sigorta Baytı Ayarı 0XFD'ye ayarlanmıştır, ikili olarak 0B11111101'dir.
İkili Olarak Genişletilmiş Sigorta Baytı:
Genişletilmiş Sigorta Baytı |
Bit No. |
AVR'de Varsayılan Değer |
Arduino'nun Varsayılan Değeri |
- |
7 |
1 |
1 |
- |
6 |
1 |
1 |
- |
5 |
1 |
1 |
- |
4 |
1 |
1 |
- |
3 |
1 |
1 |
BODLEVEL2 |
2 |
1 (programlanmamış) |
1 (programlanmamış) |
BODLEVEL1 |
1 |
1 (programlanmamış) |
0 (programlanmış) |
BODLEVEL0 |
0 |
1 (programlanmamış) |
1 (programlanmamış) |
Şimdi, bu, bu bölümün sonunu işaret ediyor. Şu an itibariyle, AVR mikro denetleyicisi ve sigorta bitleri hakkında çok şey öğrendik. Öyleyse, Arduino Nano'daki bazı sigorta bitlerini değiştirip deneyerek teorimizi test ederek bu makaleyi tamamlayalım.
AVR'de Sigortaları Test Etmek İçin Gerekli Bileşenler
Yukarıdaki bölümde sigortalar hakkında çok konuştuk. Ancak makalede daha fazla ilerlemek için bazı donanım bileşenlerine ve bazı yazılım araçlarına ihtiyacımız var. Bu bölümde bunlardan bahsedeceğiz. Resimlerle birlikte gerekli bileşenlerin bir listesi aşağıda gösterilmektedir.
- Breadboard - 1
- Arduino Nano - 1
- USBasp AVR Programcı - 1
- USB Kablosu - 1
- AVR 10-Pin'den 6-Pin'e Dönüştürücü - 1
- Avrdude (AVR Programlama için Yazılım aracı)
- LED - 1
- 330R Direnç - 1
- Jumper Kabloları
AVR'de Sigorta Bitlerini Test Etme Şeması
Donanım testi kurulumu bu kurulumda aşağıda gösterilmektedir. Arduino Nano yu bir USB kablosuyla bilgisayara bağladık ve ayrıca USBasp programlayıcısını da bilgisayara bağladık. Bu makalenin amacı AVR'deki sigorta bitlerini programlamaktır. Bu nedenle USBasp programlayıcısını Arduino ile bağladık. Aşağıdaki resim size kurulum hakkında daha iyi bir fikir verecektir.
AVR'deki Sigortaların Test Edilmesi
Test kurulumu aşağıda gösterilmiştir. Gördüğünüz gibi hem Arduino'yu hem de USBasp programlayıcısını dizüstü bilgisayarımın USB'sine bağladık.
Şimdi Arduino IDE'yi açalım ve basit bir göz kırpma taslağı yükleyelim. Temel göz kırpma taslağının içeriği açıklayıcıdır, bu yüzden onun hakkında herhangi bir ayrıntı vermedim.
Videoda 13 numaralı pin üzerindeki ledin olması gerektiği gibi yanıp söndüğünü göreceksiniz. Şimdi sigorta ayarlarını değiştirelim ve varsayılan değerlerine ayarlayalım. Ve daha önce veri sayfasında gördüğümüz gibi; eFuse 0XFF olduğu; HFUSE D9'dur; LFUSE: 62'dir. Şimdi Avrdude ile yapılandıralım, flash yapalım ve ne olacağını görelim. Kullanacağımız kod:
avrdude -c usbasp -p m328P -U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
Bunu yaptığımda, LED'in son derece yavaş yanıp söneceğini göreceksiniz çünkü 16Mhz'lik bir saatin değerini hesapladık ve programladık ve şimdi sigortaları yaktıktan sonra, sadece 1Mhz dahili RC osilatörü. LED'in bu kadar yavaş yanıp sönmesinin nedeni budur. Şimdi bir kez daha eskiz yüklemeyi deneyelim. Arduino'nun bir hata verdiğini ve kodun yüklenmediğini göreceğiz. Çünkü sigortaları değiştirerek, bootloader ayarlarını da bozduk. Bunu aşağıdaki resimde görebilirsiniz.
Bunu düzeltmek ve Arduino'yu eskisi gibi geri koymak için, sadece Arduino için bootloader'ı tekrar yakmamız gerekiyor. Bunu yapmak için, Araçlar -> Programcı - USBasp'a gidin ve bunu yaptıktan sonra tekrar araçlara gidebilir ve önyükleyici yazma seçeneğini tıklayabiliriz. Bu, Arduino'nuzdaki stok önyükleyiciyi tekrar yakacak ve her şey daha önce olduğu gibi geri dönecektir.
Önyükleyici Arduino'ya geri gönderildikten sonra, orijinal durumuna geri döndü ve son görüntü, önyükleyici yeniden yakıldıktan sonra size yanıp sönen bir LED gösterir.
Ve bu, bu makalenin sonunu işaret ediyor. Umarım makaleyi beğenmişsinizdir ve yeni bir şeyler öğrenmişsinizdir. Makaleyle ilgili herhangi bir sorunuz varsa, aşağıya yorum yapmaktan çekinmeyin.