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 Ö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'); } }
Yayım tarihi: 2010/05/28 Etiketler: adc okuma, atmel adc, atmel avr projeleri, avr adc
Çok iyi olmuş başladığın PIC’den sıkılmıştık artık, yanlız finallerle çakışmasın…
Finallerinizde başarılar!.. AVR ile ilgili gelecek konularınızı bekliyoruz 🙂
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.
Uzun zamandır mikrodenetleyici programlamaya el atmayı düşünüyordum.Teşekkürler.
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.
@Ercan: Maalesef dediğin mümkün değil.
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.
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.
İ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.