Elektronik / Mikrodenetleyici Projeleri/

AVR’ye Merhaba

Sponsorlu Bağlantılar

Final sınavları başlayınca insana nereden geldiğini bilmediğim bir sıkıntı basıyor. Geçen senelerde bu sıkıntı anlarında sitemi düzenler ya da photoshop ile header tasarladım fakat bu dönem bir değişiklik yapıp, başka tür bir mikrodenetleyiciye giriş yapmak istedim.

8051 ile başlayan mikrodenetleyici maceram, PIC ile ilerlemiş fakat nedense hiç bir zaman Atmel’in ürettiği AVR’ye bulaşmamıştım. Hemen bu eksiğimi gidermek, en azından ben buna el attım demek için kolları sıvadım. Öncelikle PIC’ten AVR’ye geçiş yapacaklar için söylemem gereken birinci şey şu: AVR için gerekli derleyiciler bedava!

Evet yanlış duymadınız, PIC mikrodenetleyicilerde olduğu gibi yok deneme süresiymiş, yok başka bir şeymiş uğraşmıyorsunuz. Bu, eğer bir firma iseniz, çok büyük bir avantaj demek.

Ayrıca belirtmem gerekiyor, Atmega16’nın datasheet’i bugüne kadar gördüğüm en güzel, en açıklayıcı datasheetlerden biri. Utanmasa sizin yerinize kodunuzu yazacak.

“Vay bu çok güzelmiş” diyorsanız, sırayla yapmanız gerekenler ise şöyle:

– Öncelikle WinAVR‘yi bilgisayarımıza kuruyoruz.
– Daha sonra Eclipse sitesinden Eclipse IDE for C/C++ Developer pakedini indiriyoruz, hemen bir yere dosyaları çıkartıp çalıştırıyoruz.

– Daha sonra ise Eclipse’in Help sekmesinden Install New Software/Add kısmına basıp Location bölümüne “http://avr-eclipse.sourceforge.net/updatesite/” yazarak, eklentiyi yüklüyoruz ve hepsi bu.

Artık yeni proje oluşturup, AVR mikrodenetleyicinizi seçip kullanabilirsiniz. WinAVR’de ANSI C kullanıldığı için, daha önce PIC için hazırladığım donanım kütüphanelerimi çok az değiştirip kullanmak gerçekten çok rahat. Buradan hâlâ Pic Basic, CCS C kullananlara duyurulur.

Ben ilk örneğimi, Atmega16’nın ADC’lerinden bilgi okuyup, bunu LCD’de göstermek için uyguladım. Aşağıda uygulamaya ait resmi ve yazdığım basit kodları bulabilirsiniz. Üzerinde herhangi bir değişiklik yapıp kullanabilirsiniz.

Yalnız kodu iyi incelerseniz PIC’teki TRISx yerine DDRx’nin geldiğini, PORT’larn PIC’teki gibi RB0 gibi bit bit kontrol edilemediğini göreceksiniz. İlk AVR denemelerinizde buna dikkat edip, ‘maskeleme’ ne imiş öğrenmeniz gerekiyor. Gerisi yine size kalmış.

Sonuç olarak söylemem gerekirse; AVR ne denli güzelse, finaller de o denli sıkıcı.

Herkese çalışmalarında, bana da finallerde başarılar.

adc-okuma-ornegi

ADC Okuma Örneği:

/* **** www.FxDev.org ****
 * ADC'den Gerilim ve Sıcaklık Ölçen Program
 */

#include "avr/io.h"
#include "util/delay.h"
#include "lcd.h"

#define ADC_REF_AREF 0x00
#define ADC_REF_AVCC 0x40
#define ADC_REF_INT  0xC0

unsigned char ADC_REF_TYPE;

void adc_init(unsigned char ADC_REF)
{
	ADCSRA = 0x87;
	ADC_REF_TYPE = ADC_REF;
}

unsigned int read_adc(unsigned char adc_channel)
{
	ADMUX = ADC_REF_TYPE | adc_channel;
	ADCSRA |= 0x40;
	while (ADCSRA & 0x40);
	return ADC;
}

int main(void)
{
	unsigned int sicaklik,voltaj;
	PORTC=0x00;
	DDRC=0xFF;

	lcd_init();

	adc_init(ADC_REF_AVCC);

	lcd_yaz("FxDev.org Sunar!");
	lcd_gotoxy(2,1);
	lcd_yaz("AVR'ye Merhaba..");
	_delay_ms(1500);
	lcd_clear();

	lcd_gotoxy(1,1);
	veri_yolla('C');
	veri_yolla(0xDF);
	veri_yolla(':');
	lcd_gotoxy(2,1);
	lcd_yaz("V :");

	for(;;)
	{
		lcd_gotoxy(1,4);	// Okunan değer LCD'ye yazılıyor
		sicaklik=read_adc(0)*48; // Hesaplama yapılıyor
		_delay_us(50);
		veri_yolla(sicaklik/1000+48);
		veri_yolla((sicaklik%1000)/100+48);
		veri_yolla('.');
		veri_yolla((sicaklik%100)/10+48);
		veri_yolla(sicaklik%10+48);
		veri_yolla(0xDF);
		veri_yolla('C');
		lcd_gotoxy(2,4);
		voltaj=(int)(read_adc(1)/2.048);
		_delay_us(50);
		veri_yolla(voltaj/1000+48);
		veri_yolla((voltaj%1000)/100+48);
		veri_yolla('.');
		veri_yolla((voltaj%100)/10+48);
		veri_yolla(voltaj%10+48);
		veri_yolla('V');
	}
}
  • yiğit

    Çok iyi olmuş başladığın PIC’den sıkılmıştık artık, yanlız finallerle çakışmasın…

  • ömer

    Finallerinizde başarılar!.. AVR ile ilgili gelecek konularınızı bekliyoruz :)

  • Fatih İNANÇ

    Abi aynı hastalık sadece bende var zannediyordum.
    Sene içerisinde normal gidiyorum. Sınavlar başladı mı bir şeyler keşfedeceğim tutuyor.Değişik denemelere girişiyorum. Sınavları unutuveriyorum birden.

  • Kadir Can

    Uzun zamandır mikrodenetleyici programlamaya el atmayı düşünüyordum.Teşekkürler.

  • Ercan Erbaş

    Merhaba hocam devrenizi inceledim aynından bende yapmak istiyorum ödev olarak vermem gerekiyor acaba bascom.avr ile yazılmış program örneğini yazabilir misiniz? Çok ihtiyacım var yardım lütfen.

  • FxDev

    @Ercan: Maalesef dediğin mümkün değil.

  • fatih

    Arkadaşım çok sağolasın. Paylaştığın uygulamalar benim gibi yeni başlayanlar için çok iyi oluyor. Fakat WinAVR içinde hazır kütüphaneleri yok. Bu kütüphaneleri indirebileceğimiz bir yer varsa linki paylaşırsan çok sevinirim.

  • Samet Akçay

    Paylaşımlarınız çok güzel. Yanlız projedeki printf yerine kullanmış olduğunuz veriyolla fonksiyonunu da paylaşabilir misiniz? Şimdiden teşekkürler.

  • FxDev

    İlgili fonksiyon lcd.h dosyasına ait bir fonksiyon. Bu kütüphaneyi Pic Programlama kitabımda bulabilirsiniz. Ya da CCS C kütüphanesindeki driver klasöründe. Şu an ilgili LCD kütüphanesiyle çok oynama yaptığımdan, vereceğim LCD kütüphanesinin bu projede çalışmayacağını düşünüyorum.