Bir Arduino çok fazla komut çalıştırılarak yıpranıyor mu?


12

Aptalca bir soru ise affedersiniz, ama bir cevap bulamadım.

Ben bir süre Arduino (veya genellikle herhangi bir mikro denetleyici) kodu hafif ve çok fazla işlem yürütmek zorunda kalmaz mutlu olur olsun merak ediyorum. Çok fazla ifs, çok fazla döngü ve her türlü karmaşık hesaplamalar içeren bir kod, bir LED'i yanıp sönen bir koddan daha erken bir Arduino tüketir mi?


Bağlantılı sorulara da bakınız . . . .
James Waldby - jwpat7

Yanıtlar:


20

Hayır, kod MCU'yu "yıpratmaz". Genel olarak kabaca ne yaparsanız yapın aynı seviyede aktivite gerçekleştirilmektedir. delay()"Rölantide" iken bile çok iş yapar.

CPU'nun daha az çalışmasını sağlayan komutlar vardır - bir IDLE veya SLEEP moduna getirin - ancak bunlar MCU'daki "aşınmayı" azaltmak yerine güç tasarrufu yapmak için kullanılır.

Elbette sınırlı bir ömrü olan belirli şeyler vardır ve bunları yalnızca sınırlı bir süre kullanabilirsiniz - EEPROM'a yazmak ve Flash belleğe yazmak gibi şeyler - böylece bunları her zaman yapmak istemezsiniz. Bunun dışında, hayır, ne yaparsanız yapın MCU'yu yıpratmaz.


2
Ama tüm yarıiletkenler, değil mi? sıcak taşıyıcı enjeksiyonu ve yanlılık sıcaklığı kararsızlığı hatırladığım mekanizmalardır. Elbette uzun yıllar alacaktı.
MV.

5
@MV. Evet, ancak mikrodenetleyicide çalıştırdığınız şey onu gerçekten etkilemez. Ne yaparsanız yapın CPU'yu (kabaca) aynı seviyede çalıştırıyorsunuz. Hepsini (hemen hemen) her zaman kullanıyorsunuz.
Majenko

1
Kod, üretilen ısıyı dolaylı olarak etkilemez mi? Sıcak bileşenler daha hızlı yıpranabilir.
Mast

3
Sadece çok küçük bir miktar. 'Hiçbir şey' yapmasa bile çok çalışıyor ve işliyor.
Majenko

Cevabın için teşekkürler. Şimdi arkanıza yaslanıp istediğim kadar kod yazabilirim ve Arduino'mun ömrü hakkında endişelenmeyin! Ancak harici bileşenlerle sürekli etkileşim için de geçerli mi? Okuma sensörleri, SPI iletişimi vb.
ahmadx87

6

Değil. Peki, 20 yıl gibi çalıştırırsanız yavaşça yıpranabilir .... (diğer çoğu fiziksel ürün gibi)? En azından kod karmaşıklığına değil, aynı bellek bölümünde kaç yazma işlemine bağlı. Dahası, yıprandığında sadece tuğlalaşır ve LED'i yanıp sönmek gibi daha basit bir kod haline gelmez.

Bir Arduino'nun (Uno) üç bellek parçası vardır. SRAM, FLASH ve EEPROM. SRAM daha çok mantıksal bir transistör kapısı gibidir. Değişkenleri depolayarak yıpranmaz. FLASH ve EEPROM yüzen kapılardan oluşur. Yeni veri yazarken yavaşça aşınırlar. Ateml mikrodenetleyicisinin veri sayfasından şunları belirtir:

Flash bellek en az 10.000 yazma / silme döngüsüne dayanıklıdır. (Bölüm 8.2'den)

EEPROM, en az 100.000 yazma / silme döngüsüne dayanıklıdır. (Bölüm 8.4'ten)

Ancak, FLASH bellek kod yürütme için bir alandır. Arduino çalışırken yazma işlemi yapılmaz. FLASH belleği yalnızca yeni bir kod yüklediğinizde yazarsınız. Bu yüzden kodu en az 10.000 kez yüklediğinizde yıpranacaktır.

Gerçekten isterseniz, Arduino kapatıldığında değişken verileri tutmak amacıyla FLASH belleği kendi kendine yeniden programlamak için özel bir kod yapabilirsiniz. Bu tür bir program yazdığınızda, FLASH belleğin yazma dayanıklılığı fazla olmadığı için yavaş yıpranacaktır. Bu nedenle, Arduino kapalıyken bile verileri tutmak istiyorsanız, çok daha fazla yaşam beklentisine sahip EEPROM'u kullanmanız önerilecektir.

Özetle, kod yürütme ile değil FLASH veya EEPROM belleğini yeniden yazarak yıpranacaktır.


6

Bir hobici için:

Yazılımla ilgili hayat sınırlamasıyla ilgili tek sorun FLASH belleğine bir programın içinden olabildiğince hızlı yazmak olabilir. Ancak az sayıda program, pil değiştirme gibi olaylarda hayatta kalması gereken değişkenleri kullanır.

Hayatla ilgili sınırlayıcı donanımla ilgili tek sorun, düşük direnç yükleri (akkor ampuller), endüktif yükler (doğrudan mekanik röleleri sürüş gibi) ile çıkışları sadece iki olarak adlandırmaktır. Ancak soru sadece yazılımla ilgilidir.


5

... (veya genellikle başka bir mikro denetleyici) ...

Diğer cevaplar harika, ama küçük bir istisna var.

Ferroelektrik RAM (FRAM) , flaş ve EEPROM'un oynaklığını, SRAM'ın yazılabilirliğini ve DRAM yoğunluğunu birleştiren bir bellek biçimidir.

Ancak , FRAM üzerindeki okuma işlemleri FRAM'da depolanan veriler için yıkıcıdır ve yazma işlemleri FRAM yapısının kendisi için yıkıcıdır (ve veriler okunarak yok edildiğinden, her seferinde geri yazılmalıdır). Kodunuz FRAM'de bulunuyorsa, çalıştırılması zaman içinde MCU'yu aşınacaktır. Ancak FRAM'ın milyonlarca milyarda yazma dayanıklılığına sahip olduğu düşünüldüğünde, MCU'nun cihazın kullanım ömrü boyunca FRAM nedeniyle çalışmaz hale gelmesi pek olası değildir.

FRAM kullanan MCU'lara örnek olarak TI'nin MSP430FRxx hattı verilebilir .


1
Genelde FRAM varsa başka bellek yoktur. Flaş bile değil.
Majenko

3

Muhtemelen hayır ... Atmel çipi zamanla ısınabilir (bir gecikme bile bunu engellemez), ancak ısısını serbest bırakma olasılığı varsa, bir sorun görmüyorum. Ancak çoğunlukla sadece overclock gerçekten ciddi sorunlara neden olabilir veya Arduino'yu tamamen kapalı bir kutuda veya sıcak bir ortamda kullanmak olabilir.

Buna karşılık: birçok bilgisayar kapanmadan yıllarca çalışıyor, Atmel (çip) bu anlamda üretilen ısı tahliye edilebildiği sürece hiçbir fark yaratmıyor.

Atmels'de bir ısı sensörü hakkında daha fazla bilgiyi buradan edinebilirsiniz: Dahili Sıcaklık Sensörü


2
Arduino'nun gecikmeyi uygulama şekli, yeterli zamanın geçip geçmediğini sürekli kontrol etmektir. Yani bir programı çalıştırmak veya sahip olmak delayaynı miktarda işlem gücünü kullanır.
Gerben

Bu bölümü güncelleyeceğim (kaldıracağım) ... teşekkürler!
Michel Keijzers

Bir fark var - bugün çoğu bilgisayarda tonlarca güç tasarrufu özelliği var; birçok şey gerekmediğinde kapanır ve bu hemen hemen otomatik olarak gerçekleşir. Arduino'nun güç kullanımını azaltmanın yolları da var, ancak bunları açıkça kullanmanız gerekiyor. Çoğu zaman kapalı olan bir şeye ihtiyacınız varsa, learn.sparkfun.com/tutorials/reducing-arduino-power-consumption başlamak için harika bir yoldur. Özellikle, düşük güçlü uyku, güç tüketimini yaklaşık bin kat düşürür - aksine delay, CPU'yu döndürür. Bunun maliyeti elbette :)
Luaan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.