İçindekiler:
- Adım 1: LiPo Pil Kullanarak Besleme Voltajını Azaltma
- Adım 2: CPU Saatini Azaltın
- Adım 3: Yerleşik Güç LED'ini ve Güç Düzenleyicisini çıkarın
- Adım 4: USB D- Çekme Direncinin (152 olarak işaretlenmiştir) 5 Volttan (VCC) Çıkarılması ve USB V+'a Bağlanması
- Adım 5: Delay() Yerine Uyku Kullanın
- Adım 6: Sigortaları Değiştirin
- 7. Adım: Daha Fazla Bilgi
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
veya: 2 yıl boyunca 2032 madeni para hücreli bir Arduino çalıştırmak.
Digispark Arduino Board'unuzu kutudan çıktığı gibi Arduino programı ile kullanarak 5 voltta 20 mA çeker.
2000 mAh'lik 5 voltluk bir powerbank ile sadece 4 gün çalışacaktır.
Adım 1: LiPo Pil Kullanarak Besleme Voltajını Azaltma
Besleme olarak 3,7 voltluk bir LiPo pil kullanarak Digispark kartınız sadece 13 mA çeker.
2000 mAh pil ile 6 gün çalışacaktır.
Adım 2: CPU Saatini Azaltın
Programınızda USB bağlantısı, yoğun matematik veya hızlı yoklama kullanmıyorsanız saat hızını düşürün. Örneğin. ağır sorgulamalı kızılötesi alıcı kitaplığı IRMP, 8 MHz'de iyi çalışır.
1 MHz'de Digispark'ınız 6 mA çeker. 2000 mAh pil ile 14 gün çalışacaktır.
Adım 3: Yerleşik Güç LED'ini ve Güç Düzenleyicisini çıkarın
Güç LED'ini diyota bağlayan bakır teli bir bıçakla keserek veya 102 direncini sökerek/devre dışı bırakarak güç LED'ini devre dışı bırakın.
Artık bir LiPo pil kullandığınız için, yerleşik güç düzenleyici IC'yi de çıkarabilirsiniz. Önce dış pimleri bir havya ve pim yardımıyla kaldırın. Ardından büyük konektörü lehimleyin ve regülatörü çıkarın. Küçük regülatörler için çok fazla lehim kullanın ve 3 pimi birlikte ısıtın, ardından çıkarın.
1 MHz ve 3,8 voltta Digispark'ınız artık 4,3 mA çekiyor. 2000 mAh pil ile 19 gün çalışacaktır.
Adım 4: USB D- Çekme Direncinin (152 olarak işaretlenmiştir) 5 Volttan (VCC) Çıkarılması ve USB V+'a Bağlanması
Bu değişiklik, mikronükleus önyükleyicinin all1.x sürümleriyle uyumludur. Anakartınızda zaten yeni bir 2.x önyükleyiciniz varsa, adında "activePullup" olan 2.5 sürümlerinden birine yükseltmeniz gerekir. Bunu yapmanın en kolay yolu, yeni digispark board paketini kurmak ve bootloader'ı önerilen (!!!varsayılan veya agresif değil!!!) sürümle yakmaktır.
Direncin ATtiny'yi gösteren tarafındaki bakır kabloyu kırın. Bu, USB arabirimini devre dışı bırakır ve buna karşılık Digispark kartını USB üzerinden programlama olanağını devre dışı bırakır. Yeniden etkinleştirmek, ancak yine de güçten tasarruf etmek için, rezistörü (152 ile işaretli) doğrudan shottky diyotun dış tarafında kolayca bulunabilen USB V+'a bağlayın. Diyot ve doğru tarafları bir süreklilik test cihazı kullanılarak bulunabilir. Bu diyotun bir tarafı ATtiny (VCC) ve Digispark 5V'nin 8 numaralı pinine bağlanır. Diğer taraf USB V+'a bağlıdır. Artık USB çekme direnci yalnızca Digispark kartı USB'ye bağlıysa etkinleştirilir; programlama sırasında.
Son 2 adım da burada belgelenmiştir.
1 MHz ve 3,8 voltta Digispark'ınız artık 3 mA çekiyor. 2000 mAh pil ile 28 gün çalışacaktır.
Adım 5: Delay() Yerine Uyku Kullanın
Uzun gecikmeler yerine güç tasarrufu sağlayan CPU uykusunu kullanabilirsiniz. Uykular 15, 30, 60, 120, 250, 500 milisaniyelik ve 1, 2, 4, 8 saniyelik adımlarla 15 milisaniyeden 8 saniyeye kadar sürebilir.
Fabrika digispark sigorta ayarları ile uykudan başlama süresi 65 milisaniye olduğundan, sadece 80 ms'den büyük gecikmeler uyku ile değiştirilebilir.
Uyku sırasında Digispark'ınız 27 µA çeker. 200 mAh düğme hücre 2032 ile 10 ay boyunca uyur.
Doğru olması için, Digispark'ın en az 8 saniyede bir uyanması, en az 65 milisaniye çalışması ve yaklaşık 2 mA akım çekmesi gerekir. Bu, ortalama 42 µA ve 6 aylık bir akıma yol açar. Bu senaryoda, programınızın 10 milisaniye (her 8 saniyede bir) çalışması neredeyse hiç fark etmez.
Uyku kullanma kodu:
#include #include uçucu uint16_t sNumberOfSleeps = 0; extern uçucu işaretsiz uzun millis_timer_millis; geçersiz kurulum() { sleep_enable(); set_sleep_mode(SLEEP_MODE_PWR_DOWN); // en derin uyku modu … } void loop(){ … sleepWithWatchdog(WDTO_250MS, true); // 250 ms uyku … sleepWithWatchdog(WDTO_2S, true); // 2 sn için uyku … } /* * aWatchdogPrescaler 0 (15 ms) ila 3(120 ms), 4 (250 ms) ila 9 (8000 ms) olabilir */ uint16_t hesaplamaSleepMillis(uint8_t aWatchdogPrescaler) { uint16_t tResultMillis = 8000; for (uint8_t i = 0; 200 uA tasarruf ediyorum // wdt_enable() kullan, çünkü WDP3 bitinin WDTCR kaydının 5. bitinde olduğunu ele alır wdt_enable(aWatchdogPrescaler); WDTCR |= _BV(WDIE) | _BV(WDIF); // Watchdog kesmesi etkinleştirme + kesme bayrağını sıfırlama -> ISR(WDT_vect) sei()'ye ihtiyaç duyar; // Kesintileri etkinleştirme sleep_cpu(); // Watchdog kesmesi bizi uykudan uyandırır wdt_disable(); // Çünkü sonraki kesme başka türlü olur wdt_enable() WDE'yi ayarladığından / Watchdog Sistem Sıfırlama Etkinleştir ADCSRA |= ADEN; /* * Zamanlayıcı saati devre dışı bırakılabileceğinden, millis ayarı yalnızca BOŞLUK modunda uyumazsa (SM2…0 bitleri 000'dir) */ eğer (aAdjustMillis && (MCUCR & ((_BV(SM1) | _BV(SM0)))) != 0) { millis_timer_millis += hesaplamaSleepMillis(aWatchdogPrescaler); } } /* * Bu kesme, işlemciyi uyku modundan çıkarır */ ISR(WDT_vect) { sNumberOfSleeps++; }
Adım 6: Sigortaları Değiştirin
27 mA'nın 22 mA'sı BOD (BrownOutDetection/düşük voltaj algılama) tarafından çekilir. BOD, yalnızca bir ISP programcısı ile yapılabilen sigortaların yeniden programlanmasıyla devre dışı bırakılabilir. Bu betiği kullanarak akımı 5,5 µA'ya düşürebilir ve ayrıca uykudan başlama süresini 4 milisaniyeye düşürebilirsiniz.
Kalan 5,5 µA'nın 5'i aktif bekçi sayacı tarafından çekilir. Uyandırma için harici sıfırlamaları kullanabiliyorsanız, mevcut tüketim veri sayfasında belirtildiği gibi 0,3 µA'ya kadar düşebilir.
Bu değere ulaşamıyorsanız bunun nedeni VCC ile pullup arasındaki schottky diyotun ters akımının çok yüksek olması olabilir. 12 MOhm'lik bir direncin ayrıca 3,7 voltta 0,3 µA çektiğini unutmayın.
Bu, örn. verileri burada olduğu gibi 3 milisaniye boyunca her 8 saniyede bir işleyin.
7. Adım: Daha Fazla Bilgi
Bir Digispark panosunun güncel çizimi.
Bu talimatları kullanarak projelendirin.