Arduino İle ATtiny Programlama -1

İhsan Kehribar’ın  tasarlamış olduğu Little Wire‘da da  kullanılan  ATtiny85,  Atmel’in üretmiş olduğu 8-bit işlemcidir. 8K program aralığı, 6 I/O hattı (Input/Output) ve 4 kanal 10 bit ADC.  Harici 20MHz kristal ile çalışmaktadır ve devre üzerinde programlama özelliğine sahiptir.

ATtiny85’i ;  Atmega 18 ve  Atmega16’yı programladığımız  çeşitli paralel programlayıcılar ile programlayabileceğimiz  gibi Arduino ile de  programlayabiliriz.  Bu yazıda ATtiny85, ATtiny45’i Arduino ile programlamak için neler yapmamız gerekir bunlara bakacağız.   Bu bağlantıdaki videoyu izleyerek neler yapabileceğimizi daha kolay anlayabiliriz. Görüdüğümüz gibi basit programları çalıştırmak için uygun mikrodenetleyicilerdir.
ATtiny’ler ucuz olup; ebay’dan yaklaşık 2-3 $, Türkiye’den ise yaklaşık 7-8 Tl’ye edinebilirsiniz.  ATtiny45 ve ATtiny85’in sekiz adet bacağı vardır. Ayrıca çok benzerdirler. ATtiny85’in belleği ATtiny45’in iki katıdır.  Bu da ATtiny85 ile  daha karmaşık programları saklayabileceğimiz anlamına gelir.   ATtiny’i programlamak için Arduino çekirdek kütüphaneleri kullanılır.

Gerekli olan malzemeler:
Arduino Uno/Duemilanove
-ATtiny45 veya ATtiny85
-10 uF kapasite
-Breadboard ve jumper kablolara ihtiyacamızı var.

Ayrıca software olarak Arduino Version 1.0.1 veya 0022 kullanılabilir. Arasındaki farka değineceğiz.Şimdi Arduino’muz ile ATtiny’i programlamaya başlayabiliriz. İlk önce Arduino’muzu ?in-system programmer? (ISP)’ye dönüştürmemiz gerekiyor. Bunun için şu basamakları izleyelim:

Arduino programını  çalıştıralım.
– Example menüsünden ArduinoISP sketch’i açalım.
-Şimdi burada versiyon olarak 1.0.1 kullanıyorsak  upload etmeden önce ArduinoISP ‘de küçük bir değişiklik yapmalıyız; heartbeat() fonksiyonunun içerisindeki delay(40);’ı bulalım ve bunu  delay(20);  ile değiştirelim.
– Arduino’yu bağladığımız Serialport’u seçelim.
-ArduinoISP  sketch’i upload edelim.

 

Arduino ile ATtiny bağlantılarını Fritzing ile çizelim. Bundan önce ATtiny ‘e göz atalım.

ATtiny85 – Arduino Bağlantıları

 

 

Bağlantılarımızı çizdiğimiz gibi yapalım. Burada bağlantıları gerçekleştirirken  kapasitenin şerit kısmının eksi olduğunu unutmayalım bunu Ground’a bağladık.  Kapasite Arduino’nun resetlermesini önler (bootloader’ı başlatan).  Bu da Arduino IDE‘si ile  ArduinoISP (bootloder değil)’nin sketch’i upload ederken haberleşmesini sağlar.

Arduino ve ATtiny için kullandığımız bağlantılar:

-ATtiny Pin 2 – Arduino Pin 13 (diğer programlayıcılarda  SCK)

– ATtiny Pin 1 – Arduino Pin 12 ( diğer programlayıcılardaMISO)

-ATtiny Pin 0 – Arduino Pin 11 (diğer programlayıcılarda MOSI )

-ATtiny Reset Pin –  Arduino Pin 10 (diğer programlayıcılarda RESET )

Aşağıdaki Arduino tarafından desteklenen komutları ve bağlantılarını bulabilirsiniz.

 

İleri ki yazılarda bu yöntemi kullanarak bir kaç çalışma yapacağız. Örneğin bir ATtiny’nin bir pwm pin’ine led bağlayarak bir Blink yapabilirsiniz. Bu bağlantıdaki videoyu izleyerek neler yapabileceğimizi daha kolay anlayabiliriz.  Bir kere upload ettikten sonra ATtiny kendi başına, Arduino bağlantısı olmadan bu işlemleri gerçekleştirebilir hale gelebilir. İyi çalışmalar.

 

 

Yücel Çetin

İstanbul Üniversitesi Elektrik-Elektronik Mühendisliği'nde öğrenci, Arduino sevdalısı, python meraklısı bir canlı...

16 comments

  1. Arif dedi ki:

    bu yöntemle attıny15l programlayabilirmiyiz ?

  2. ÖZAY YILMAZ dedi ki:

    güzel açıklayıcı bir örnek olmuş ama attiny85 piyasada bulamıyorum biyerden sipariş verdim oda ellerinde kalmamış onun yerine attiny45in mikro modeli herhalde küçücük bir şey geldi nerden satınalabilirim acaba yada atmega8 atmega328 bu şekilde programlıycam bir örnek gösterebilirmisiniz

  3. Hakan dedi ki:

    Bu programlamada, Atiny45 kütüphanesi ihtiyaç yok mu? örnek 1 atiny programı yükleseydik!!

    • Ömer Koman dedi ki:

      merhaba bootloaderi yukledikten sonra şu sayfada http://www.hobbytronics.co.uk/arduino-attiny attiny desteği için gerekli attiny45_85.zip doayası var , linkteki yazıda belirtildiği gibi kurarsanız standart arduino içinden programlayabilirsinz. led blink 🙂 örneğininde sadece pin numarasını 13 yerine”0″ kullanmanız yeterli. komut seti yücelin yazsındakilerle sınırlıdır.

  4. Gökhan İnce dedi ki:

    Acaba Arduino ile kullanılan kütüphaneleride kullanabilir miyiz?

    • Ömer Koman dedi ki:

      her pin uymaz kutuphaneleri iyi seçmen lazım.

      • Gökhan İnce dedi ki:

        Aklımda okulda ki projectör cihazını açacak 9 volt pil büyüklüğünde kumanda yapıp hocamıza takdim etme fikri var. Onun için sordum. IRremote kütüphanesini kullanacağım. Burda seçim için nelere dikkat etmeliyim?

        • Ömer Koman dedi ki:

          ir remote kutuphanesi ve kodlar sığarsa yapabilirisin. genelde arduino modulleri ve kitleri düşük akım ve pil tasarrufunu dikkaete almazlar daha kucuk işlemci veya modul kullanmak daha az akım tuketir pille çalışır anlamına gelmiyor sadece daha az bacaklı bir urun seçmiş oluyorsun. pil enerji sorun olmayacaksa ir ledleri tiny e bağlayacaksın kod yollayacaktır veya hehangi bir kumandayı verici olarak kullanıp alıcı tarafında tiny e ir alıcıyı bağlayıp bir çıkışıda roleye bağlayacaksın. forumdan devam edersin kodları yazarken deneyenler olabılır destek gelir…

          • Gökhan İnce dedi ki:

            Teşekkür ederim Ömer hocam. Dediklerinizi dikkate alıcam. Sürekli açık durmasın diye Pilden hemen sonra attiny ile arasına switch koymayı düşünüyordum. Ama bahsettiğiniz her kütüphanenin az enerji tüketmemesi diğer projelerinde yardımcı olacak. 😊

  5. Ali dedi ki:

    Hocam millis ile ledi 2 saniye yakip 1 saniye sonmesini nasil yapabiliriz

  6. Ömer Koman dedi ki:

    sorunuzu ilgisiz konu başlıkların altına yazmayın bu sizin konulara dikkatsiz olduğunuzu ve prorgram yazma konusunda çok zorlanacağınız gösterir.

    // led pinlerin ayarlarını setup kısmına yazmanız lazım
    // ledi açma kapama satırlarında ilgili pinleri de kodun içinde yazın
    // led blink örneğine bakın orjinal kodlardaki

    int zaman;
    int leddurum;

    setup() {
    zaman=millis();
    leddurum=0;
    }

    loop {
    if (millis()-zaman>=1000 && leddurum==0) {
    // led açık komutuu buraya yaz

    zaman=millis();
    leddurum=1;
    }
    if (millis()-zaman>=2000 && leddurum==1) {
    // led kapalı komutunu buraya yaz

    zaman=millis();
    leddurum=0;
    }
    }

    • Ali dedi ki:

      Çok teşekkürler konu başlığı bulamadığım ve foruma ulaşamadığım için buraya yazdım kusura bakmayın

  7. Ali dedi ki:

    Dediğiniz gibi yaptim ama 5 kere tekrar ediyor bir yerde yanlıslık var hocam

    int zaman;
    int leddurum;

    void setup() {
    zaman=millis();
    leddurum=0;

    }

    void loop() {
    pinMode(13, OUTPUT);
    if((millis()-zaman)>=1000&&leddurum==0)
    {
    digitalWrite(13, LOW);
    zaman=millis();
    leddurum=1;
    }
    if((millis()-zaman)>=5000&&leddurum==1)
    {
    digitalWrite(13, HIGH);
    zaman=millis();
    leddurum=0;
    }
    }

  8. Ömer Koman dedi ki:

    şu şekilde denermisin zaman ı unsigned long tipte tutun

    unsigned long zaman;
    int leddurum;

    void setup() {
    zaman=millis();
    leddurum=0;
    pinMode(13, OUTPUT);
    digitalWrite(13, LOW);
    }

    void loop() {
    if((millis()-zaman)>=1000&&leddurum==0)
    {
    digitalWrite(13, LOW);
    zaman=millis();
    leddurum=1;
    }
    if((millis()-zaman)>=5000&&leddurum==1)
    {
    digitalWrite(13, HIGH);
    zaman=millis();
    leddurum=0;
    }
    }

  9. zeynep dedi ki:

    Attiny13a yı devre kartına lehimleyip nasıl programlarız ardunio uno ile birlikte

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal Ağlar