Bir Arduino'yu programcı olarak kullanırken ATtiny85 üzerindeki saat hız sigortalarını nasıl ayarlarım?


17

ATtiny85'i bir Arduino ile programlayarak, bazı sesleri (piezo hoparlörden) çalmak için kullanarak bu öğreticiyi takip ediyorum . Tonları doğru sahada elde etmekle uğraşıyorum (ATtiny85'te tone () işlevi desteklenmediği için dalga formlarını elle oluşturuyorum).

Sorunun Arduino ve ATtiny'de farklı saat hızlarına düşebileceğine inanıyorum. Saat hızının ATtiny'de değiştirilebileceğini anlıyorum, arduino ortamını kullanarak bunu nasıl yapabilirim?


Bu arada bu gerçekten harika, paylaştığınız için teşekkürler!
vicatcu

Şapka çıkartın! Attiny85'i bu şekilde programlamayı hiç başaramadım. Arduino'yu bir otobüs korsanıyla değiştirmek yine de işe yarıyor ...
JonathanD

@Jon: "Programcı senkronize değil" nin arkasındaki temel nedenden emin değilim, ancak AVR Studio ile programlama frekansını ayarlayabilirsiniz. Avrdude'da benzer bir seçenek olabilir, tekrar tekrar koşuşturma yaparsanız bir göz atmaya değer olabilir
Nick T

Yanıtlar:


2

Arduino yazılımının (kütüphaneler ve hepsi) 16MHz'de çalıştığınızı varsaydığını düşünüyorum. Bu varsayımı gerçekte koştuğunuz saate uygularsanız ... işler yolunda gitmelidir. Tiny85'i dahili osilatörde çalıştırdığınızı varsayarsak, 1MHz'de çalıştığını düşünüyorum, bu yüzden tüm gecikme ifadelerinizi (ve diğer zaman kavramlarını) 16 ile çarpın.

Dahili osilatörün sağladığından daha iyi bir doğruluğa ihtiyacınız varsa, harici bir kristal veya rezonatör kullanmayı düşünmelisiniz, ancak bunun çalışması için AVR'nin sigorta ayarlarını değiştirmeniz gerekir ve bence AVRISP gibi bir programcıya ihtiyacınız olacak mkII bunu AVR Studio ile yapmak (benim tavsiyem).

ArduinoISP taslağı hakkında fazla bir şey bilmiyorum ama bana öyle geliyor ki, ISP protokolünü hedef çipe (yerleşik Mega328'e değil) bir program yüklemek için ISP protokolünü patlatıyor gibi görünüyor, sigortaları manipüle etmek için donanımlı olduğundan emin değilim. ArduinoISP burada belgelenmiştir http://arduino.cc/en/Tutorial/ArduinoISP , fwiw. ArduinoISP çizimini çalıştırmak için şu anda bir UNO kullanamayacağınızı unutmayın. Bana Arduino'yu AVR Studio GUI araçlarını kullanmak için uygun bir arayüz yapmak için çizimi kullanabileceğiniz gibi görünmüyor.

DÜZENLEME : Görünüşe göre işler yakalandı ve UNO ArduinoISP için artık geçerli - yorumlarınız için teşekkürler


UNO ile ilgili kafa kafaları için teşekkürler, aslında bir 328 için takas 168 çip ile bir Duemilanove kullanıyorum ve normal ATtiny eskizlerini ArduinoISP üzerinden düzgün bir şekilde yüklemek için alabilirim. 16 ipucunu deniyorum!
fearoffours

@fearoffours Deneyebileceğiniz başka bir şey, sigortaları belirli bir değere ayarlayan ArduinoISP tabanlı bir taslak yazmaktır. ArduinoISP Flash yazabiliyorsa, Sigortaları ayarlamak için AVR veri sayfalarında açıklanan ISP protokolünü bitirememenizin bir nedeni yoktur.
vicatcu

1
@fearoffours, ben de sadece 16'ya bölmek yerine 16 ile çarpmayı söyledim (ve güncellemeyi güncelledim) (daha yavaş bir saat çalıştırarak aynı süreyi elde etmek için daha fazla keneler alacaktır)
vicatcu

Bir yıldan uzun bir süre sonra biliyorum, ama UNO'yu AVR programcısı olarak başarıyla kullanıyorum. (Bununla birlikte, I ArduinoISP kroki değiştirebilir mi delay(20)Insted delay(40)kendi tanımı void heartbeat().)
JellicleCat

Daha sonra olduğunu biliyorum ama Uno'yu taslaktaki hiçbir şeyi değiştirmeden AVR programcısı olarak başarıyla kullandım.
ingh.am

4

Arduino UNO + ArduinoISP'yi başarıyla kullanıyorum.

Üç ATtiny sigortasından herhangi birini veya tümünü ayarlamak -Uiçin avrdudekomutunuza bayrak ekleyin .

avrdude -p attiny85 -P com8 -c stk500v1 -b 19200 -U lfuse:w:0x6f:m -U flash:w:main.hex

Saat seçimi üçüncü sigortadaki bitlerden [3: 0] yapılır ('Sigorta Düşük Bayt'). Harici bir kristal (8MHz veya daha hızlı) kullanmak için bunları aşağıdaki gibi ayarlayın:

-U lfuse:w:0x6f:m

Tanımı (I infer) şöyle olmalıdır: [Fuse Low Byte]: [write]: [hex değeri]: [manuel olarak ayarlanır]

Bu bayt dört yüksek bit için varsayılan değer olan 0110, bu nedenle ayrılmak 6içinde 0x6folduğu gibi ve sadece ikinci rakamı değiştirmek, f(varsayılan değerdir 2).

Not: İşlemleriniz beklediğinizden daha uzun veya daha kısa sürüyorsa, saat ön ölçekleyicinizi ve F _ CPU tanımınızı kontrol edin .


Yukarıdaki -U lfuse:w:0x6f:mavrdude seçeneğini kullanarak AtTiny85'imi hazırladığım konusunda uyarmak istedim. Yüksek voltajlı bir kurulum kullanarak sıfırlamam gerekecek. Bu yüzden sigortaları ne yaptıklarını bilmeden sıfırlamaya çalışan insanlara (benim gibi) dikkat edin.
MV

@MV Sigortayı sıfırlamaya çalışırken gerçekten tuğla yaptınız mı veya harici XO'yu kullanmadınız mı?
14'te 14:08

Kullanmak için harici bir saat vardı. Tuğlalama daha katı anlamda ne anlama geliyor?
14

@JellicleCat, Sigortayı harici bir XO kullanacak şekilde ayarlarsanız, sigortaları programlamak / ayarlamak / sıfırlamak için bundan sonra mcu'ya bağlı harici bir XO kullanmanız gerekir. Bunu yapmamanız size mcu'nun tuğla olduğu izlenimini verecektir (~ artık çalışmıyor), çünkü ext'e ihtiyacı var. XO, ISS üzerinden programlamak için bile çalışır.
14'te

Peki. Konuyu anlarsam, sigortaları bir XO bekleyecek şekilde ayarladım ve sonra çipi geri yüklemek için, bir XO'ya hizmet eden bir ayakta dalga sağlamak için bir Arduino kullandım.
14

3

Arduino 1.0 ile ATtiny Programlama başlıklı aynı grubun (MIT'in High-Low Tech) ilgili öğreticisini kullanmayı deneyin .

Kısa bir özet: Arduino IDE'deki Araçlar-> Pano menüsünden, ATtiny85'i ve çalıştırmak istediğiniz frekansı (1 veya 8 Mhz dahili saat veya 20Mhz harici kristal) seçin ve Araçlar -> Burn Bootloader'ı kullanın İstenen hız kartının seçilmesinin, saat hızıyla senkronize etmek için delay () ve diğer zamanla ilişkili Arduino fonksiyonlarının çalışma şeklini değiştirdiğine inanıyorum.

Bazı ATtiny84 yongaları kullanarak bu yaklaşımla başarılı oldum. Basit yanıp sönme programı sabittir ve delayMicroseconds () kullanılarak bir servoya gönderilen darbeleri manuel olarak kontrol etmek için daha hassas zamanlama gerekir.


1

ArduinoISP kullandığınız anlaşılıyor, AVR Studio'yu veya komut satırı seçeneklerini kullanmayı deneyin avrdude. ArduinoISP'nin nasıl yazıldığına bağlı olarak, tıpkı bir Atmel AVRISP mkII veya benzeri gibi çalışabilir.


Arduino'nun kendisinin bir ISS programcısı olduğunu düşünmüyordum - üzerinde ISS başlığı olduğunu düşündüm, böylece yeni bir bootloader'ı yeni bir ATMega328'e devrede
yakabilirsiniz

makaleyi daha yakından okumak, bunu yapmak için ArduinoISP taslağını kullanabileceğiniz gibi görünüyor - her gün yeni bir şey öğreniyorsunuz! :)
vicatcu

Windows kullanıyorsanız AVR studio sorun yaratmaz. Eclipse için bir AVR eklentisi olduğunu bilin (bu, Sloeber olarak bilinen Arduino eklentisinden farklıdır). Özellikler -> AVR altında kullanılabilir bir sigorta diyalogu vardır. Ama evet OP sadece "çekirdek" frekansları ve "Burn Bootloader" kullanmak istiyor.
mckenzm

1

ATtiny85 için varsayılan sigorta ayarları şunlardır: lfuse 0x62, hfuse 0xdf, efuse 0xff. Bu, "8'e böl" ile dahili RC (8 MHz) osilatörünü kullanır, böylece saat 1 MHz'dir.

Daha fazla sigorta ayarı için http://www.engbedded.com/fusecalc adresine bakın .

Programcı olarak bir ArduinoISP kullanırken bile ATtiny85'inizin sigorta ayarlarını değiştirmek için avrdude'u doğrudan kullanabilirsiniz.

Saati değiştirmek için sigortayı manuel olarak değiştirirseniz, attiny85.build.f_cpu[arduino_folder] \ hardware \ attiny45_85 \ boards.txt dosyanızın satırını düzenlediğinizden emin olun .


+1 bu gerçekten yararlı, esp saat hızı 1MHz, teşekkürler
fearoffours

0

ArduinoISP ile sigorta kurabileceğinizi düşünüyorum, ancak Arduino IDE ile değil, avrdude ile bu bağlantıyı kontrol edin . Hiç denemedim.

Eğitici açıkça Arduino UNO'yu kullanabileceğinizi söylüyor ve ben test ettim ve çalıştım, bu yüzden ArduinoISP sayfasının eski olduğunu ve UNO uyarısının göz ardı edilmesi gerektiğini doğrulayabilirim. UNO'nuz ilk partiden biriyse, muhtemelen hatalı bir bootloader'ınız vardır, bootloader'ı yeniden kırmanız gerekir. Daha fazla bilgi için bu sayfayı kontrol edin (seri numaralarını göz ardı edin, tüm UNO'larım bu seriden değildi ve sorunları vardı).

Eğiticiden indirdiğiniz taşınan çekirdek kütüphaneleri 1MHz dahili osilatörü (boards.txt dosyasından onaylandı) kullanmak için yazılmıştır, bu nedenle zamanlama sorunu taşınan çekirdek kitaplıklarında veya kodunuzda olabilir.

Saygılarımla


0
  1. ATTiny85'i içeren "pano yöneticisi" nden bir ATTiny kartı seçin. Bu "Araçlar" Menüsündedir. Sanırım bu şimdi "16MHz dahili PLL" yi içeriyor. (Birini http://drazzy.com/package_drazzy.com_index.json adresinden yükleyebilirsiniz )

  2. Gerekirse açıkça ATTiny85'i seçin.

  3. Bir saat seçin. Daha fazla bilgi edinene kadar, bir saat seçin .

  4. Menü Öğesi olarak "Bootloader'ı Yaz" ı tıklayın.

Dikkat, çok düşük değerler seçerseniz MCU'yu artık programlayamayabilirsiniz. Amacınız bu ise, sigortaları sıfırlamak için yedek parçalarınız veya bir Yüksek Gerilim Programlayıcı yoksa son işlemi yapın.

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.