C ile AVR Programlama -57- Güç Tasarrufu Yazmaçları ve Kütüphanesi - Lojik Prob
AVR mikrodenetleyicileri sadece yazmaç denetimi ile uykuya sokamayız. Üreticiler uyku moduna geçmek için özel bir mikroişlemci komutu belirlemiştir. Bu mikroişlemci komutunu C dilinde kullanmak için avr/sleep.h başlık dosyasını kullanırız. Bütün bu ayar ve etkinleştirmeler sonunda SLEEP komutu ile mikrodenetleyici uykuya geçer. Dersin sonunda bundan bahsedeceğimiz için şimdi yazmaçları anlatarak konumuza devam edelim.
SMCR – Uyku Modu Denetim Yazmacı
Bit 3, 2, 1 – Uyku Modu Seçme Biti
Bu bitler aşağıdaki tabloya göre uyku modunu seçmemizi sağlar.
SM2, SM1, SM0 Uyku Modu
001 ADC Gürültü Önleme
111 Extended Standby
Bit 0 – SE : Uyku Etkin
Bu bit mikrodenetleyicinin uyku moduna girmesi için gerekli izni verir. Uyku moduna bu biti bir (1) yaparak girmeyiz. Uyku modu için özel mikroişlemci komutu vardır. Fakat bu komutun işletilmesi için bu bitin bir (1) olması lazımdır. SLEEP komutu işletilmeden hemen önce bu biti bir (1) yapmak daha iyi olacaktır.
MCUCR – Mikrodenetleyici Denetim Yazmacı
Bit 6 – BODS – BOD (Brown-out Detection) Uyku
Bu bit bir (1) yapıldığında kararma algılayıcısı uyku sırasında devre dışı bırakılır. BODSE biti ise bir etkinleştirme bitidir ve güvenlik amacıyla öncelikle iki bit aynı anda bir (1) yapılmalı ve dört saat çevrimi içerisinde BODSE biti sıfır (0) yapılmalıdır. BODS biti üç saat çevrimi boyunca etkin halde olur. Bu durumda ise uyku komutu işletilmelidir. BODS biti üç saat çevrimi sonunda otomatik olarak sıfırlanır.
Bit 5 – BODSE : BOD Uyku Etkin
Bu bitin görevini yukarıda açıkladık.
PRR – Güç Tasarrufu Yazmacı
Bit 7 – PRTWI0 : TWI Güç Tasarrufu
Bu biti bir (1) yaparsak TWI modülü çalışmayı durdurur. Giden saat sinyalini kesmekle bu gerçekleşir. Tekrar etkinleştirmek için modülü yeniden başlatmak gerekir.
Bit 6 – PRTIM2 : TC2 Güç Tasarrufu
Bu biti bir (1) yaparsak TC2 zamanlayıcısı senkron modda çalışmayı durdurur. Zamanlayıcı etkinleştirildiğinde tekrar çalışmaya devam eder.
Bit 5 – PRTIM0 : TC0 Güç Tasarrufu
Bu biti bir (1) yaparsak TC0 zamanlayıcısı senkron modda çalışmayı durdurur. Zamanlayıcı etkinleştirildiğinde tekrar çalışmaya devam eder.
Bit 3 – PRTIM1 : TC1 Güç Tasarrufu
Bu biti bir (1) yaparsak TC1 zamanlayıcısı senkron modda çalışmayı durdurur. Zamanlayıcı etkinleştirildiğinde tekrar çalışmaya devam eder.
Bit 2 – PRSPI0 : SPI Güç Tasarrufu
Bu biti bir (1) yaparsak SPI modülü çalışmayı durdurur. Tekrar etkinleştirmek için modülü yeniden başlatmak gereklidir.
Bit 1 – PRUSART0 : USART Güç Tasarrufu
Bu biti bir (1) yaparsak USART çalışmayı durdurur. Tekrar etkinleştirmek için modülü yeniden başlatmak gereklidir.
Bit 0 – PRADC : ADC Güç Tasarrufu
Bu biti bir (1) yaparsak ADC modülü kapatılır. Kapatılmadan önce ADC devre dışı bırakılmalıdır. (ADEN biti)
Yazmaçlar bitmiş oldu. Şimdi SLEEP komutunu nasıl işleteceğimiz hakkında kısa bir bilgi verelim.
Uyku işlemlerini yapmak istiyorsak öncelikle programımıza şu başlık dosyasını dahil etmemiz gereklidir. sleep.h başlık dosyası derleyicinin içinde gelmektedir.
Şimdi fonksiyonları kısaca açıklayalım.
Kararma algılayıcısını devre dışı bırakır. (Her aygıtta geçerli değildir.)
İşlemciyi uyku moduna sokar. Assembly dilindeki sleep komutu ile aynıdır. SE biti önceden bir yapılmalıdır. Uykunun ardından tekrar sıfır yapılması önerilir.
SE bitini sıfırlar. Böylelikle denetleyici bir daha uykuya bu bit bir (1) yapılana kadar girmez.
SE bitini bir (1) yapar.
SE bitini önceden bir (1) yapar ve ardından aygıtı uykuya sokar.
Yazmaçları öğrendiğimiz için sadece SLEEP mikroişlemci komutunu kullanmamız yeterlidir. Bunun için ise yazmaç ayarlarını yaptıktan sonra sleep_cpu() fonksiyonunu kullanacağız.
SLEEP komutu ise aşağıdaki bitlerden ibarettir. Bu bitler program hafızasına yazılır ve mikroişlemcinin anlayacağı makine dilindedir.
Güç tasarrufu ve uyku konusunu bitirmiş olduk. Şimdi sırada tek bir konumuz kaldı sayılır. Sistem denetimi ve yeniden başlatma konusunun ardından derslerimizi bitirmiş olacağız. Geriye kalan konuları ise derslerden bağımsız olarak daha sonra ele alacağız.
Next story C ile AVR Programlama -58- RESET (Yeniden Başlatma)
Previous story C ile AVR Programlama -56- Güç Tüketimini En Az Seviyeye İndirmek