Atmel ATmega programlama ATmega16 ATmega128

| Mayıs 30, 2023 Tarihinde güncellendi
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ı

atmega-16-pin

Ş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.

atmega128

Ş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

atmega16-ornek-program-devre


#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.

atmel-led-yak-led-sondur

Ö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.

kara-simsek-devresi-led-atmel-atmega

Ö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

atmel-atmega-grafik-lcd-glcd

Hazırlayan: Özen ÖZKAYA – Atmel serisi mikrodenetleyiciler ile ilgilenen yeni başlayan kişiler için çok faydalı olacak bir döküman temel bilgilerin yanı süre bir çok uygulama bulunuyor. Emeği geçen hazırlayan kişilere teşekkürler.

Yukarı da özetler verildi dökümanın tamamı:

atmel-atmega-programlama-atmega16-atmega128

Şifre-Pass: 320volt.com

Ayrıca Atmel Atmega8 Mikrodenetleyicisi ve Assembler yazısınıda incelemenizde fayda var

Yayım tarihi: 2010/02/18 Etiketler: , , , ,



6 Yorum “Atmel ATmega programlama ATmega16 ATmega128

  1. alperenalperen

    size canı gönülden teşekkür ler ederim ,siz bir dostsunuz ve öyle kalacaksınız

    CEVAPLA
  2. idrisidris

    Merhaba üstad, ben atmelin ATMEGA168 PA modelini kullanıyorum.Program yazdım ama işlemciye gömmek için derlemem gerekiyor, bir türlü beceremedim.Nasıl derlenir AVR Studio ilemi derlenir?Biraz aydınlatırsan sevinirim.

    CEVAPLA
  3. burakburak

    merhaba, ben de atmel mega 168 pa modelini, quadrotor umu kontrol etmek için kullanıyorum ama programı değiştirmek için bilgisayara bağlamam lazım ve nasıl bir ara kablo kullanacağım hakkında bir fikrim yok. Eğer biliyorsanız lütfen bana nerden bulabileceğimi söyler misiniz?

    CEVAPLA
  4. yunusyunus

    merhaba, ben atmega 328 i kullanarak digital yazıları ses ile söyletmek istiyorum olabilirmi

    CEVAPLA

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir