ben avr ye merak sardım. cem hocama çok teşekkür ediyorum böyle harika ötesi bi siteyi bizlere hazırladığı için. biraz ccs c biliyorum picden. winavrdeki led yakma projesinde ;
Tabii ki PORTB=255; gibi bir ifade geçerli ancak bunun pek çok sakıncaları var. B portu üzerinde farklı pinlere bağlı olarak çalışan elemanlar olabilir. Örneğin, PB0 a bir buzzer ve PB7 ye de bir led bağlı, PORTB=255 gibi bir ifade PORTB nin tüm bitlerini 1 yapacağıdan buzzer da devreye girecek ve LED de yanacaktır. Osa biz buzzer a dokunmak istemiyorduk.
PORTB=1 gibi bir komutun anlamı şudur: PB0 1 olsun diğer tğm bacaklar 0. Bu genellikle istenen bir durum değildir, biz tüm portun değerini değil sadece belli bir bitin değerini değiştirmek isteriz.
PORTB&=~_BV(7); ifadesi karışık gibi gelebilir ama C diline hakim olan biri için karışık bir durum yok aslında. Buradaki tüm özellikleri inceleyelim:
1) C dilinde x+=1 ifadesi x in kendisine bir ekle demektir ve basic'deki x=x+1 ifadesi ile aynıdır. Benzer şekilde x*=2 ise basic'deki x=x*2 ifadesine denk gelir. Bizim ifademizdeki PORTB&=a; PORTB değişkeninin kendisini a değeri ile AND'le demektir. PORTB= PORTB & a; şeklinde de düşünülebilir.
2) _BV (bit value) bir makrodur ve _BV(3) ifadesi (1<<3) ifadesi ile aynıdır, 1 sayısını 3 kez sola kaydır (shift) demektir bunun da sonucu 0000 1000 dır. Bunu gözümüzde canlandırmak zor değil. _BV(0) ise (1<<0) ifadesine eşittir ve 1 sayısını 0 (sıfır) kez sola kadır demektir, yani 0000 0001 e eşittir. Sıfır kez sola kaydırmak, olduğu yerde bırakmaktır.
3) ~ değil ifadesi (bitwise not) önüne geldiği ifadenin tüm bitlerini ters çevirir. ~ 0000 0001 ifadesinin sonucu 1111 1110 dır.
Şimdi bu bilgiler ışığında PORTB &= ~_BV(0); ifadesini birlikte inceleyelim. _BV(0) ifadesinin binary 0000 0001 e eşit olduğunu biliyoruz, bunun terslenmiş halinin de 1111 1110 olduğunu öğrendik o halde ifademizi şu şekilde yazabiliriz:
PORTB&=0b11111110; (baştaki 0b binary sayıların önüne konur, aksi halde derleyici 11 (onbir) ve 0b11 (üç) sayılarını ayırt edemez) Bu noktadan sonrasını anlamak için ise lisede mantık kousunda öğretilenleri hatırlamak yeterli.
1 VE 1= 1 1 VE 0= 0 0 VE 1= 0 0 VE 0= 0
AND operatörüne tabi tutulan iki değerden biri 1 ise sonuç değişmiyor ama 0 ise diğer değer ne olursa olsun sonuç sıfır oluyor. Diyelimki PORTB bu işlemden önce 00110011 değerindeydi, PORTB&=0b11111110; işleminden sonra sadece sıfıncı bitte değişiklik olacak diğer bitler işlemden etkilenmeyecektir:
00110011 11111110 __________ VE 00110010
Görüldüğü gibi PB0 bire eşitken sıfır oldu diğer bit olduğu gibi kaldı. Eğer _BV makrosunu kullanmak istemiyorum derseniz aynı ifadeyi doğrudan yazabilirsiniz:
PORTb&=0b11111110;
Bu arada web siteme Atmega8 sigorta ayarlarını görsel olarak yapabileceğiniz bir excel dosyası koydum, download kısmında ulabilirsiniz.
cem hocam tekrar çok teşekkür ederim. ben c diline hakim değilim. o yüzden başlarda sorun yaşayacağım muhakkak. 255 atama şansımız yokmu derken tabiki eğer 4. biti 1 yapacaksam portb=255 diyemem. portb=%00010000 desem 4. biti 1 olmazmı? adaptasyon sorunu yaşıyorum anlayacağınız. yardımlarınız için teşekkür ederim
PORTB=0b00010000 ifadesi PORTB'nin dördüncü bitini 1 yapar doğru ama sorun şurada diğer tüm bitleri de sıfır yapar. Eğer sadece PORTB'nin 4. pinine bir LED bağladıysanız bu şekilde kullanabilirsiniz.
Ya da PORTB'in tüm pinleirne bir LED bağladıysanız:
PORTB=0b10101010; ifadesi LED leri birer atlayarak yakar.
Ama doğru kullanım bir önceki mailimde açıkladığım gibidir. Bir programlama dilini öğrenmek bol pratik ve sabır gerektirir.
merhabalar bende Avr kullanmaya yeni baslayanlardanim..Atmega88 ile step motoru kontrol edicem.ama bu konuda biraz sorun yasiyorum cünkü AVR ile ilgili ne yazikki yeterli kaynak yok..daha önce Pic lerlede ugrasmadim. yardimci olacak arkadaslara simdiden tesekkür ediyorum:)
avrfreak cem siten çalışmıyor.Abi tek türkçe kaynak oydu ne oldu sitene(www.berik.net) ??? Bi de arkadaşlar atmel avr ile ilgili türkçe kaynak var mı nette başka ????
Maalesef hosting hizmeti aldığım firma çok sorunlu, o yüzden sitem sıklıkla erişilemez hale geliyor. Sitenin çalışmadığının fark edilmesine çok şaşırdım ve sevindim
Bu arada sitemde Sıkça Sorulan Sorular ve Sizin Gönderdikleriniz adlı iki bölüm açmayı planlıyorum. Bu konuda katkılarınızı bekliyorum, eğer çalışan projelerinizi kodlarını ve resimlerini gönderirseniz yayınlamaktan mutluluk duyarım. Sıkça Sorulan Sorular kısmına da bana şimdiye kadar gelen maillerden bir şeyler derleyeceğim.