Hoş Geldin, Mühendis!

Tüm mühendislerin ve mühendis adaylarının yer aldığı forum sayfamıza kayıt olmalısınız. Kayıt olduktan sonra tüm ders notlarına, teknik dokümanlara erişim sağlayabilecek, sorularınızı sorup cevaplar verebileceksiniz. Sitemiz tamamiyle ücretsiz olmakla birlikte Mühendis Puanı sistemi uygulamaktadır.

Bilgi paylaştıkça çoğalır.

Premium Abonelik 📢

Premium abonelik ile sitemizi reklamsız gezebilir, dosyaları sınırsızca indirebilirsiniz.

Daha Fazlası

[Muhendisiz.NET] Tekrar Sizlerleyiz! 🎭

Mühendisiz.NET sitesi forum ve blog sayfası olarak tekrar yayın hayatına başladı. 🤩 Sizlerde forum sayfamıza üye olabilir ve mühendis topluluğumuza katılabilirsiniz.

Daha Fazlası

Mühendis Puanı Sistemi🏆

Bilgi paylaştıkça çoğalır felsefesini benimsemiş olmamız nedeniyle Mühendis Puanı sistemini uygulamaya aldık. Dökümanları indirebilmek için bazı paylaşımlarda bulunmalısınız. 📨

Daha Fazlası
  • Dosya indirebilmek için 2 Mühendis Puanına ihtiyacınız var. Konuya yorum atarak 1 MP Not paylaşarak 6 MP kazanırsınız.
    Bilgi Paylaştıkça Çoğalır. (Mühendislik Puanı (MP) Nedir?)
  • Mühendis Puanı kazanmaya vakti olmayanlar için ücretli premium üyelik sistemi aktif edilmiştir.
    (Premium Üyelik SATIN AL)

Atmega328P ve MikroC: Kayıt Bilgileri (Kenarda Dursun)

CanEsm

Mühendis
Katılım
8 May 2021
Mesajlar
1
Mühendis Puanı
2
BÖLÜM
Enerji Sist. Müh
Uzun zamandır Atmel AVR mikrodenetleyicileriyle uğraşmak istiyordum. Ameliyattan sonraki rapor süremde fırsat buldum ve biraz inceleme yaptım. Bu bilgileri paylaşmak istiyorum; bilenler bilir ama başlangıç seviyesindeki arkadaşlara faydalı olabilir.

MikroC derleyici kullandım. Çünkü birçok mikrodenetleyici ailesini (PIC, AVR, ARM vb.) destekliyor ve ücretsiz sürümü ticari projelerde işimi gördü. MikroC'nin detaylarına girmeyeceğim; zaten kapsamlı kaynaklar mevcut.

Önemli bir nokta: AVR işlemcilerinde (örneğin ATmega328P), konfigürasyon ayarları (fuse ayarları) yazılımda kodlarla değil, XGECU TL866 ii plus gibi programlayıcılar aracılığıyla yapılır. Yazılımda tik kutuları ile ayarlanır; tikli ise 0, tiksiz ise 1 atanır. Dikkat edilmesi gerekiyor.

Fuse Low byte ve Fuse High byte alanları vardır. ckdiv8, sut1, sut0, cksel3...cksel0 gibi işaretli alanların anlamları datasheet'te bulunur. Örneğin, Fuse Low byte'taki "Divide clock by 8" saat frekansını 8'e böler. CKOUT(3) ise kare dalga çıkışını kontrol eder. SUT1 ve SUT0 başlangıç zamanını, CKSEL3-CKSEL0 ise saat kaynağını belirler.

Full Swing Crystal Oscillator kullanmak istedim. Datasheet'in 29. sayfasındaki tabloya göre, 10 MHz kristal osilatör ve 12-22 pF'lik iki kondansatör kullandım. Bu seçenek için CKSEL3=0, CKSEL2=1, CKSEL1=1 değerlerini atadım. Devre şeması da datasheet'te mevcut.

SUT0 ve SUT1 kayıtları için de datasheet'teki tabloyu kullandım. "Crystal Oscillator, slowly rising power" seçeneğini tercih ettim. Datasheet'i Türkçe'ye çevirdim.

Fuse High Byte (sayfa 288) için de; RSTDISBL reset pinini I/O olarak kullanma, DWEN hata ayıklama, SPIEN seri programlama, WDTON watchdog zamanlayıcısı, EESAVE EEPROM koruma, BOOTSZ1/BOOTSZ0 önyükleme boyutu ve BOOTRST vektör sıfırlama seçeneklerini inceleyebilirsiniz. Bu ayarlara kodlarla erişimim olmadı.

MikroC kod örneği: Pull-up dirençlerini devre dışı bıraktım, ADC'yi kapattım, analog karşılaştırıcıyı devre dışı bıraktım ve dijital girişleri devre dışı bıraktım. PortB ve PortD'yi çıkış, PortC'yi giriş olarak tanımladım. While döngüsü içinde istediğiniz kodu yazabilirsiniz.


Önemli bir nokta: Bir pinin çıkış olarak kullanımı için PortB.B0=1, PortB=1, PortB=0b00000001 veya PinB.B0=1 kullanılabilir. Ancak giriş olarak kullanılacaksa, özellikle if koşullarında, PinB.B0 kullanılması gerekiyor. Bunu çözmem iki gün sürdü.
 

Wslazzz

Mühendis
Katılım
16 May 2025
Mesajlar
2
Mühendis Puanı
0
BÖLÜM
Elektrik Müh
Uzun zamandır Atmel AVR mikrodenetleyicileriyle uğraşmak istiyordum. Ameliyattan sonraki rapor süremde fırsat buldum ve biraz inceleme yaptım. Bu bilgileri paylaşmak istiyorum; bilenler bilir ama başlangıç seviyesindeki arkadaşlara faydalı olabilir.

MikroC derleyici kullandım. Çünkü birçok mikrodenetleyici ailesini (PIC, AVR, ARM vb.) destekliyor ve ücretsiz sürümü ticari projelerde işimi gördü. MikroC'nin detaylarına girmeyeceğim; zaten kapsamlı kaynaklar mevcut.

Önemli bir nokta: AVR işlemcilerinde (örneğin ATmega328P), konfigürasyon ayarları (fuse ayarları) yazılımda kodlarla değil, XGECU TL866 ii plus gibi programlayıcılar aracılığıyla yapılır. Yazılımda tik kutuları ile ayarlanır; tikli ise 0, tiksiz ise 1 atanır. Dikkat edilmesi gerekiyor.

Fuse Low byte ve Fuse High byte alanları vardır. ckdiv8, sut1, sut0, cksel3...cksel0 gibi işaretli alanların anlamları datasheet'te bulunur. Örneğin, Fuse Low byte'taki "Divide clock by 8" saat frekansını 8'e böler. CKOUT(3) ise kare dalga çıkışını kontrol eder. SUT1 ve SUT0 başlangıç zamanını, CKSEL3-CKSEL0 ise saat kaynağını belirler.

Full Swing Crystal Oscillator kullanmak istedim. Datasheet'in 29. sayfasındaki tabloya göre, 10 MHz kristal osilatör ve 12-22 pF'lik iki kondansatör kullandım. Bu seçenek için CKSEL3=0, CKSEL2=1, CKSEL1=1 değerlerini atadım. Devre şeması da datasheet'te mevcut.

SUT0 ve SUT1 kayıtları için de datasheet'teki tabloyu kullandım. "Crystal Oscillator, slowly rising power" seçeneğini tercih ettim. Datasheet'i Türkçe'ye çevirdim.

Fuse High Byte (sayfa 288) için de; RSTDISBL reset pinini I/O olarak kullanma, DWEN hata ayıklama, SPIEN seri programlama, WDTON watchdog zamanlayıcısı, EESAVE EEPROM koruma, BOOTSZ1/BOOTSZ0 önyükleme boyutu ve BOOTRST vektör sıfırlama seçeneklerini inceleyebilirsiniz. Bu ayarlara kodlarla erişimim olmadı.

MikroC kod örneği: Pull-up dirençlerini devre dışı bıraktım, ADC'yi kapattım, analog karşılaştırıcıyı devre dışı bıraktım ve dijital girişleri devre dışı bıraktım. PortB ve PortD'yi çıkış, PortC'yi giriş olarak tanımladım. While döngüsü içinde istediğiniz kodu yazabilirsiniz.


Önemli bir nokta: Bir pinin çıkış olarak kullanımı için PortB.B0=1, PortB=1, PortB=0b00000001 veya PinB.B0=1 kullanılabilir. Ancak giriş olarak kullanılacaksa, özellikle if koşullarında, PinB.B0 kullanılması gerekiyor. Bunu çözmem iki gün sürdü.
Çok iyi
 

Son kaynaklar