Atmel ATmega Programlama ATmega16 ATmega128

'Elektronik Genel Bilgi' forumunda DeMSaL tarafından 30 Mart 2010 tarihinde açılan konu

  1. DeMSaL

    DeMSaL Özel Üye

    Sponsorlu Bağlantılar
    Atmel ATmega Programlama ATmega16 ATmega128 konusu
    Atmel ATmega Programlama ATmega16 ATmega128 - Atmel ATmega Programlama - ATmega16 ATmega128



    Atmel genel ismi ile anılan mikro denetleyici ailesinden ATmega 16 ile başlayan çalışmalar ATmega 128 ile sürdürülmüş; ATmega 16 ya parça parça yazılan programlar, ATmega 128 ile daha bütünlüklü olarak ele alınmıştır. Söz konusu belgede çalışma önce Atmel ailesine ait mikro denetleyici hakkında genel özelliklerin anlatımı ile başlamış, temel bilgiler verildikten sonra, ayrı ayrı belirtilen amaçlara uygun algoritmalar C dili ile yazılarak söz konusu denetleyiciye aktarılmış, ilgili devre şeması ve modelleme sonuçları her bölümün sonunda
    verilmiştir.

    ATmega ailesini C dili kullanarak programlamak için ‘AVRStudio4’ ile ‘WinAVR’ derleyicilerinden yararlanılmıştır. Yazılan programlar ise Proteus Isis 7.2 devre modelleme programı ile denenmiş, sonuçlar belgede gösterilmiştir.

    Mikro denetleyici Nedir ?
    Mikroişlemci ve mikro denetleyici kavramları: Mikroişlemci; kendisine gönderilen komutları işleyen çok küçük boyutlardaki bir sayısal devredir. Bu yapı bir bilgisayardaki MİB ( Merkezi İşlemci Birimi-CPU) olarak
    düşünülebilir. MİB tek başına bir bilgisayarı oluşturamaz ve üstelik tek başına kullanılamaz. MİB e benzeyen mikroişlemciler de onlar gibi tek başlarına kullanılamazlar. En azından bir bellek ve giriş/çıkış arabirimlerine ihtiyaç duyarlar. Bu ve bunun gibi bir çok arabirim bir araya getirilerek tek başlarına uygulamalarda kullanılabilen sayısal devrelere mikro denetleyici denir. Mikro denetleyiciler günümüzde kullanılan hemen hemen bütün elektronik cihazların içinde bulunmaktadır.

    Mikro denetleyiciler, mikroişlemcilerin yanı sıra RAM, ROM, EPROM, EEPROM, Flash Bellek gibi bellek yapıları, G/Ç ( Giriş/Çıkış ) arabirimleri, analog-sayısal çeviriciler, zamanlama ve sayma birimleri, PWM çıkış modülleri, seri haberleşme portları, barındırırlar. Bu birimlerin düzenli ve bir arada çalışmasını sağlamak amacıyla ise “kütük” (register) denilen özel hafıza bölgelerinden yararlanılır. Yine bu birimlerde kullanılan ve kütükler üzerinde yer alan, çeşitli işlemler için izinleri ayarlayan ya da işlemlerin hangi aşamada olduklarını gösterebilen, yerine göre
    yazılım ya da donanım tarafından değiştirilebilen “bayrak” (flag) yapıları mevcuttur.

    Bu belgede staj boyunca ATmega16 ile başlayan süreç anlatılacak, ATmega 16 ve ATmega128 mikro denetleyicileri ile ele alınan konular anlatıldıktan sonra konuya uygun kod yazılacak ve ardından Proteus Isis programının ekran çıktıları ile koşturulan programın sonuçları verilecektir.

    ATMEL ATMEGA16 Pin Diyagramları

    [​IMG]

    Şekil 1 ATmega16’nın üretici bilgi sayfasından (datasheet) alınan yukarıdaki şekild pin diyagramını görülebilir.

    ATmega16 Genel Özellikleri
    Aşağıda ATmega16’ya ait bir kısım özellikler görülmektedir.

    • Yüksek performanslı düşük güçlü AVR® 8-bit Mikro denetleyici

    • Gelişmiş RISC mimarisi
    – 32 x 8 Genel Amaçlı Çalışan Yazmaçlar (Kütükler-Registers)
    – Tamamıyla Statik (sabit) İşleyiş
    – 16 MHz de 16 MIPS’e Kadar Çıkabilme
    – Çip üzerinde 2 çevrimli çarpım

    • Yüksek Dayanıklı Geçici Olmayan (Non-volatile) Bellek Bölümleri
    – 16K Byte Flash Program Belleği
    – 512 Byte EEPROM
    – 1K Byte Dahili SRAM
    – Yaz/Sil Sayısı: 10,000 Flash/100,000 EEPROM
    – Veri (Data) Saklama: 20 yıl 85°C’de/100 yıl 25°C’ de(1)

    • JTAG (IEEE std. 1149.1 Compliant) Arayüzü
    – Programlanabilir Flash, EEPROM, Sigortalar ve JTAG arayüzünde Kilit Bitleri

    • Arayüz Özellikleri
    – 2 Adet 8-bit Zamanlayıcı/Sayıcı (Timer/Counters) ile Ayrık ‘Prescalers’ ve Karşılaştırma Modları
    – Bir adet 16-bit Zamanlayıcı/Sayıcı (Timer/Counter with Ayrık ‘Prescaler’ ve Karşılaştırma ve ‘Capture’ Modu
    – Ayrık osilatör ile gerçek zamanlı sayaç
    – 4 PWM Kanalı
    – 8 Kanallı, 10-bit ADC
    - 8 ‘Single-ended’ Kanal
    – Byte-yönelimli 2 kablolu seri arayüz
    – Programlanabilir Seri USART
    – Master/Slave SPI Seri Arayüz
    – Programlanabilir ‘Watchdog Timer’ ile Ayrık On-chip Osilatörü
    – On-chip Analog Karşılaştırıcı

    • Özel Mikro denetleyici Özellikleri
    – ‘Power-on Reset’ ve Programlanabilir ‘Brown-out Detection’
    – Dahili Ayarlı RC Osilatör
    – Harici ve Dahili Kesme Kaynakları
    – 6 Çeşit Uyku Modu : ‘Idle’, ‘ADC Gürültü Azaltma (Noise Reduction)’, ‘Powersave’, ‘Power-down’, ‘Standby’ ve ‘Extended Standby’

    • I/O ve Paketler(modüller)
    – 32 Programlanabilir Giriş/Çıkış (I/O) Dizisi
    – 40-pin PDIP, 44-lead TQFP, and 44-pad QFN/MLF

    • Çalışma Voltajı
    – 2.7 – 5.5V ATmega16L için
    – 4.5 – 5.5V ATmega16 için

    • Hız Seviyeleri
    – 0 – 8 MHz ATmega16L için
    – 0 – 16 MHz ATmega16 için

    • Güç Tüketimi @ 1 MHz, 3V, ve 25°C ATmega16L için
    – Aktif: 1.1 mA
    – Çalışmazken(Idle Mode): 0.35 mA
    – Kapatıldığında (Power-down Mode): < 1 μA

    Özelliklerden anlaşılacağı üzere mikro denetleyici oldukça fazla modül bulundurmaktadır. Bu modüller mikro denetleyicinin çok daha etkin bir biçimde kullanılabilmesinde son derece önemlidir. 20 iş günü süreli stajda bu modüllerden bir kısmı kullanılmıştır.

    Şekil 1’ de görülen pin diyagramında her bir bacağa ait çeşitli ifadeler yer almaktadır. Bu ifadeler aşağıda açıklanmıştır:

    VCC – Dijital sinyal beslemesi. Diğer bir deyişle mikro denetleyiciyi besleme kaynağı.

    GND – Toprak

    PORT A (PA0-…PA7) – A portları 8 bitliktir ve genel kullanımın yanı sıra ADC sinyallerinin de giriş çıkış arabirimidir. Her çıkış dahili olarak pull-up yapılmıştır. Yani bu pinleri giriş olarak ayarladığımızda ekstra bir pull up
    direnci bağlamamıza gerek yoktur.

    PORT B (PB0…PB7) – B Portları da 8 bitliktir. Kendiliğinden Pull-up’lı haldedir. B portları da birçok özel fonksiyona ev sahipliği yapar.(SPI, Analog karşılaştırı, Timer1, Timer0 ve USART)

    PORT C (PC0…PC7) – C portları da 8 bitliktir ve dahili olarak pull-up edilmiştir. C portları JTAG modülü bulundurmaktadır. JTAG aktive edilirse

    PC3, PC4 ve PC5 pinleri, reset durumu olsa dahi aktive edilmiş olunur. Ayrıca zamanlayıcı osilatör girişleri ve de seri iltişim pinlerinden bazıları da burada bulunmaktadır.

    PORT D (PD0…PD7) – D portları da 8 bitliktir ve dahili olarak pull-up edilmiştir. D portunda compare, capture ve bazı kesme modülleri de bulunmaktadır. Ayrıca USART giriş çıkış pinleri de buradadır.

    !RESET – Terslenmiş yeniden başlatma girişi. RESET yazısının üzerindeki çizgi bu pinin terslenmiş olduğunu gösterir. Yani yeniden başlatma işlemini gerçekleştirmek için bacağa 0 sinyali(GND) verilmelidir.

    XTAL1 – Osilatör girişi

    XTAL2 – Osilatör çıkışı

    AVCC – PORTA için veya A/D çevirici için besleme girişi. ADC kullanılmıyorsa Vcc’ye bağlanabilir.

    AREF – Bu pin de analog dijital çevirici için referans girişidir.

    ATMEGA128
    ATmega128, ATmega16 gibi Atmel ailesine mensup bir mikro denetleyicidir. 8 bitlik bir mikro denetleyici olan ATmega 128’e ait pin diyagramı aşağıdadır.

    [​IMG]

    Şekil 2’den anlaşılacağı üzere ATmega 128’de bazı modüllerden daha çok sayıda bulunmakta ve söz konusu stajda yazılacak olan algoritmalar için oldukça fazla imkan sunmaktadır.

    Mikro Denetleyicide C Dili Kullanımı Üzerine Hatırlatmalar C Dilinde Bazı Veri Çeşitleri

    Veri Çeşidi Açıklama

    bit Bir bitlik veri taşır. 0 ya da 1 olabilir
    char 8 bitlik veri taşır. -127 ve +127 arasında değerler alabilir
    unsigned char 8 bitlik veri taşır. 0 ve +255 arasında değerler alabilir
    int 16 bitlik veri taşır. -32767 ve +32767 arasında değerler alabilir
    unsigned int 16 bitlik veri taşır. 0 ve 65535 arasında değerler alabilir
    long 32 bitlik veri taşır. -2147483647 ve +2147483647 arasında değerler alabilir
    unsigned long 32 bitlik veri taşır. 0 ve +4294967295 arasında değerler alabilir.
    float 24 veya 32 bitlik veri taşır
    double 24 veya 32 bitlik veri taşır

    Değişkenler mikro denetleyicide RAM’de tutulur. Ancak buradaki kaynakları etkin kullanmak gerektiğinden eğer değişken program boyunca bir değer alıp program içerisinde değişmeyecekse tanımlamanın başına “const” ekleyerek bu değişkeni EEPROM ya da Flash bellekte tutmak yerinde olur.

    Fonksiyon her çağırıldığında değerinin değişmesini istenmeyen değişkenler için yine tanımın başına “static” eklenir. Eğer reset işlemi esnasında bir değişkenin değerinin değişmesi istenmiyor ise tanımın başına “persistent” yazılmalıdır. Bir değişken sadece belli bir kod tarafından değil de bir kesme alt programı ya
    da donanım tarafından değiştirilebiliyorsa değişkenin başına “volatile” anahtar kelimesini eklenir. Özellikle kütük adresleri tanımlanırken bu anahtar kelimenin kullanılması önemlidir.

    C’de değişkenleri 2’lik, 10’luk ve 16’lık sayı tabanlarında tanımlayabilirsiniz. Örnek vermek gerekirse bir x değişkeni için aşağıdaki örnekteki tüm eşitlemeler aynı değeri gösterecektir. Sayı tabanı kullanımı derleyici için hiçbir şey değiştirmeyecek ama kullanıcının sayıları rahat okuyup durumu anlayabilmesini kolaylaştıracaktır.

    ÖRNEK 1.0: İlk Program

    [​IMG]


    Kod:
    #include <avr/io.h>main()
    {DDRB = 0xFF; // B portlarının tamamını çıkış yapıldı
    PORTB = 0xFF; // B portlarının tüm çıkışlarından lojik 1 verildi}
    
    Örnek 1.1: LED Yakıp Söndürmek

    Aşağıda Şekil 11 ve Şekil 12 de görülen devre şemalarında toplam 8 tane LED’i 1 saniye aralıkla yakıp söndüren programın koşturulmaktadır. Buradaki 1 saniye aralığı ayarlayan asıl unsur bu mikro denetleyicide bulunan kristaldir. Örneğin , bu süre 4 Mhz de 1 saniye olurken 1 MHz de 4 saniye olacaktır.

    [​IMG]

    Örnek 1.2:Karaşimşek v1

    Bu uygulamada kara şimşek devresinden farklı olarak yanan değil yanmayan led kaymaktadır. Uygulamanın çıktısı Şekil 13’te görülmektedir.

    [​IMG]

    Örnek 3.0: Basitçe PWM Üretilmesi
    Örnek 2.0:INT1 ve INT0 KESMESİ V.1
    Örnek 2.1:INT1 ve INT0 KESMESİ V.2
    Örnek 3.0: Basitçe PWM Üretilmesi
    Örnek 3.2: Faz Doğrultmalı PWM
    Örnek 3.3:Fast PWM

    [​IMG]
     

Bu Sayfayı Paylaş