USBasp ile ATtiny Programlama

USBasp ile ATtiny Programlama

USBasp ile ATtiny serisini değil, Atmel AVR ailesine mensup tüm 8-bit mikroişlemcileri doğrudan devre içi seri programlama (ICSP) protokolü üzerinden programlayabilen endüstri standardı bir donanımdır.

Gömülü sistemler ve mikrodenetleyici programlamada, kodların entegreye kararlı bir biçimde yüklenmesi donanım geliştirme sürecinin en temel aşamasıdır. ATtiny serisi (ATtiny85/45/25) mikrodenetleyicileri programlarken doğrudan USB arabirimi veya Arduino UNO kartlarını ISP (In-System Programmer) olarak kullanmak yaygın yöntemler olsa da, bu yöntemlerde yaşanan sürücü uyumsuzlukları veya kablolama hatalarında en profesyonel ve kararlı alternatif USBasp donanımsal programlayıcısıdır.

USBasp Nedir ve Donanım Yapısı?

USBasp, Thomas Fischl tarafından geliştirilen ve Atmel AVR mikrodenetleyicileri için tasarlanmış açık donanım/yazılım tabanlı bir devre içi seri programlayıcıdır (ISP). Donanım, temel olarak bir 8-bit ATmega8 (veya ATmega88) mikrodenetleyicisi ile USB haberleşmesi ve elektriksel koruma sağlayan birkaç pasif bileşenden oluşur. Özel bir donanımsal USB entegresi gerektirmeden, USB protokolünü tamamen yazılımsal olarak işlemci üzerinde koşturabilen esnek bir firmware sürücü mimarisiyle çalışır.

USBasp ISP Programlayıcı
Standart 10-Pin Çıkışlı USBasp Donanım Arayüzü

ISP (In-System Programming) Protokol Kuralları ve SCK Frekans Limiti

USBasp, hedef mikrodenetleyiciyi programlarken standart SPI (Serial Peripheral Interface) haberleşme hattını (MOSI, MISO, SCK) ve aktif-düşük (active-low) çalışan bir RESET kontrol hattını kullanır. Bu elektriksel veri iletim sürecinde uyulması gereken en katı kural, SPI saat sinyalinin (SCK) frekans sınırıdır.

Atmel AVR programlama standartlarına göre, ISP modunda programlama yapabilmek için USBasp’nin ürettiği SCK frekansı (f_{\text{SCK}}), hedef mikrodenetleyicinin o anki çalışma frekansının (f_{\text{target}}) 4’te 1’inden kesinlikle daha düşük olmalıdır:

    \[f_{\text{SCK}} < \frac{f_{\text{target}}}{4}\]

Fabrikadan yeni çıkmış standart bir ATtiny85 mikrodenetleyicisi, dahili 8\text{ MHz} RC osilatörün 8 olan CKDIV8 (dahili saat bölücü) sigortası aktif olarak gelir. Bu durum, çipin varsayılan olarak 1\text{ MHz} (f_{\text{target}} = 1\text{ MHz}) frekansta çalışmaya başladığı anlamına gelir. Formülü uygulayarak maksimum SCK sınırını bulalım:

    \[f_{\text{SCK}} < \frac{1\text{ MHz}}{4} = 250\text{ kHz}\]

Eğer USBasp programlayıcınızın varsayılan SCK hızı (genellikle 375\text{ kHz} veya 1.5\text{ MHz}) bu limitin üzerindeyse, ATtiny85 gelen verileri algılayamaz ve avrdude hata çıktısı olarak ünlü “avrdude: error: program enable: target doesn’t answer” uyarısını verir.

Çözüm (JP3 Jumper – Yavaş SCK): USBasp modülü üzerinde yer alan JP3 (Slow SCK) jumper’ı kapatıldığında (kısa devre yapıldığında), USBasp donanımı SPI SCK hızını \approx 8\text{ kHz} ila 20\text{ kHz} seviyelerine düşürür. Bu sayede 1\text{ MHz}‘de çalışan ham ATtiny85 mikrodenetleyicileri kararlı bir biçimde programlanabilir.

USBasp ile ATtiny Programlama: ATtiny Core ve Arduino IDE Kütüphane Entegrasyonu

USBasp ile program yazmak için en esnek ve güncel çekirdek olan Spence Konde’nin ATTinyCore kütüphanesini kullanacağız. Eğer kütüphane yüklü değilse, ATTinyCore resmi GitHub deposunu inceleyebilir ve aşağıdaki URL adresini `Dosya -> Tercihler -> Ek Kart Yöneticisi URL’leri` kısmına ekleyebilirsiniz:

http://drazzy.com/package_drazzy.com_index.json
Arduino IDE Tercihler URL Ekleme
Ek Kart Yöneticisi URL Adresinin Girilmesi

Ardından `Araçlar -> Kart -> Kart Yöneticisi` arayüzünden “ATTinyCore” araması yaparak kütüphanenin kurulumunu tamamlayın.

ATTinyCore Kart Seçimi
Kart Yöneticisinden ATTinyCore Seçim Adımı

Kart seçimi yapıldıktan sonra, entegre parametrelerini (Saat hızı, çip modeli) donanım tasarımınıza göre yapılandırın:

ATtiny85 Saat ve Model Ayarları
Saat Hızı ve LOP Seçenekleri

Kodları USBasp üzerinden yükleyebilmek için Araçlar -> Programlayıcı ayarının kesinlikle USBasp (ATTinyCore) olarak ayarlanması gerekmektedir. Kodları yüklemek için standart “Yükle” butonu yerine “Programlayıcı Kullanarak Yükle” (Ctrl+Shift+U) komutu çalıştırılmalıdır.

Programlayıcı Olarak USBasp Seçimi
Programlayıcı Ayarlarının Doğrulanması

USBasp Sürücülerinin İşletim Sistemi Bazlı Kurulumu

1. Windows İşletim Sistemi Altında Zadig Entegrasyonu

Windows işletim sistemlerinde, USBasp modülü takıldığında imzasız sürücü hatası veya eksik sürücü uyarısı alınabilir. Bu durumda en kararlı çözüm resmi Fischl USBasp sayfası sürücülerini kullanmak ya da evrensel sürücü yükleyici olan Zadig yazılımını çalıştırmaktır.

Zadig arayüzünden USBasp aygıtını seçip sürücüyü libusb-win32 (veya WinUSB) olarak değiştirdiğinizde, avrdude programlayıcıya doğrudan erişim sağlayacaktır.

Windows Aygıt Yöneticisi USBasp
Aygıt Yöneticisinde Sürücüsü Doğrulanmış USBasp Aygıtı

2. macOS İşletim Sistemi Altında Kullanım

macOS işletim sistemi, UNIX tabanlı yapısı sayesinde libusb uyumlu cihazları çekirdek (kernel) seviyesinde doğrudan tanır. Herhangi bir ek USBasp sürücüsü yüklenmesine gerek kalmaksızın, donanım USB portuna takıldığı anda çalışmaya hazır hale gelir. Sistem durumunu doğrulamak için sistem raporundan USB veri ağacını kontrol edebilirsiniz:

macOS Sistem Raporu USBasp
Sistem Bilgisinde Algılanan USBasp Aygıt Detayları

USBasp – ATtiny85 Donanımsal Bağlantı Şeması

USBasp programlayıcısının ISP konnektörü ile ATtiny85 entegresinin pinleri arasındaki eşleşme tablosu şu şekildedir:

USBasp ISP Pin AdıATtiny85 Pin NumarasıElektriksel Fonksiyonu
MOSIPin 5 (PB0)Master Out Slave In – Seri Veri Girişi
MISOPin 6 (PB1)Master In Slave Out – Seri Veri Çıkışı
SCKPin 7 (PB2)Serial Clock – Seri Haberleşme Saati
RESETPin 1 (PB5)Hardware Reset – Aktif Düşük Reset Hattı
VCCPin 8 (VCC)3.3\text{ V} veya 5\text{ V} Güç Beslemesi
GNDPin 4 (GND)Ortak Toprak Hattı

AVR Fuse Bytes (Sigorta Bitleri) Mimarisi

ATtiny85’i programlarken en kritik aşamalardan biri, çipin saat kaynağını ve elektriksel parametrelerini belirleyen Sigorta Bitlerinin (Fuse Bytes) doğru konfigüre edilmesidir. ATtiny85 üzerinde üç adet sigorta yazmacı bulunur: Low Fuse (LFUSE), High Fuse (HFUSE) ve Extended Fuse (EFUSE). Spence Konde çekirdeğinde “Burn Bootloader” komutu çalıştırıldığında bu yazmaçlar otomatik olarak güncellenir. En sık kullanılan LFUSE saat konfigürasyonları şunlardır:

  • 1\text{ MHz} Dahili RC Osilatör (Varsayılan): `LFUSE = 0x62` (Dahili saat bölücü aktif).
  • 8\text{ MHz} Dahili RC Osilatör: `LFUSE = 0xE2` (Dahili saat bölücü pasif, yüksek hızlı kararlı saat).
  • 16\text{ MHz} Dahili Yüksek Hızlı PLL: `LFUSE = 0xE1` (USB emülasyonları için saat kaynağı).

Eğer sigorta bitlerini yanlışlıkla “External Crystal (Harici Kristal)” olarak ayarlarsanız ve sisteme fiziksel bir kristal bağlamazsanız, ATtiny85 bir daha programlama komutlarına cevap vermeyecektir (brick durumu). Bu durumda çipi kurtarmak için harici bir kare dalga enjekte edilmeli veya bir HVSP (High-Voltage Parallel Programmer) donanımı kullanılmalıdır.

3D Yazıcı ile USBasp Koruyucu Kutu Üretimi

Açıkta duran programlayıcı kartları, çalışma tezgahındaki metal çapaklar veya kablo artıkları nedeniyle kolaylıkla kısa devre olarak bozulabilir. Bu riski ortadan kaldırmak için, 3D yazıcı yardımıyla USBasp donanımına tam oturan şık bir koruyucu plastik kutu basabilirsiniz.

Thingiverse üzerinde yer alan USBasp koruyucu kutu tasarımı stl belgesini indirerek yazıcınızda basabilirsiniz. Kutu, pin çıkışlarına erişimi engellemeden donanımı dış etkenlerden korur.

USBasp 3D Kutu Tasarımı STL
Slicing (Dilimleme) Yazılımında 3D Kutu Önizlemesi
3D Baskı Alınmış USBasp Kapağı
3D Yazıcıdan Çıkan PLA Malzemeli Alt Gövde
Tamamlanmış USBasp Kutusu
Montajı Tamamlanmış Güvenli USBasp Donanımı

Kronik USBasp Hataları ve Saha Çözümleri

  • “target doesn’t answer (1)”: JP3 yavaş saat (Slow SCK) jumper’ının takılı olduğunu doğrulayın. Ayrıca breadboard üzerindeki güç (VCC, GND) kablolarının gevşek olmadığından emin olun.
  • “cannot set sck period…”: Genellikle avrdude’un USBasp üzerindeki eski bir firmware sürümü nedeniyle verdiği zararsız bir uyarıdır, programlamayı engellemez. Donanım yazılımını güncellemek için JP2 jumper’ı kapatılarak başka bir programlayıcıyla en son firmware yüklenebilir.

USBasp, ATtiny projelerinizde bootloader yüklemek, sigorta bitlerini sıfırlamak ve doğrudan devre içi güvenli programlama gerçekleştirmek için gömülü yazılımcı alet çantasında bulunması gereken en önemli ve kararlı araçlardan biridir.

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.