ATMEL PROGRAMLAMA 26 - ADC


Atmega328p mikrodenetleyicisi 6 kanal (28  DIP ) veya 8 kanal (TQFP ve  VFQFN paketleri) 10 bitlik  Ardışık Yaklaşımlı ( successive approximation ) ADC birimine sahiptir. 

Ardışık Yaklaşımlı ADC'nin çevrim süresi kısa ve sabittir. Yüksek çözünürlükte ADC işlemleri yapılabilir.

10 bit olması analog gerilim değerinin 0-1023 arasında bir değere dönüştürüleceği anlamına gelir. Analog gerilim değerinin minimum değeri sayısal olarak 0(sıfır)'a denk gelirken, analog gerilimin maksimum dğeri de sayısal olarak 1023'e denk gelecektir.Elde edilen 10 bitlik sayısal bilgi ADC data register'ında ADCH ve ADCL olarak kaydedilir.   Ayrıca Analog gerilimin maksimum değeri AVref gerilim değerinden büyük olamaz. 

 Kullanacağımız Kaydediciler

1-  ADMUX  (ADC Multiplexer Selection Register) 



REFS[1:0]   :  ADC için voltage referansı seçer




ADLAR : ADC sonucunun ADC data register'a yazılma şeklini belirler.

                 1- Sonucu sola dayalı yazar

                    ADCL kaydedicisi 

                  ADCH kaydedicisi

                 0- Sonucu saga dayalı yazar

                 ADCL kaydedicisi 

                 ADCH kaydedicisi 



MUX[3:0] : Analog girişlerden hangisnin ADC işlemine tabi tutulacağını belirler.



2 - ADCSRA  (ADC Control and Status Register A)




    ADEN : ADC Enable Bit 
                 1- ADC aktif
                 0- ADC  kapalı

    ADSC : ADC Start Conversion  Bit
                 1-  ADC işlemi başlar
                 0- ADC işlemi bitince kendisi sıfır olur. 

    ADATE : ADC Auto Trigger Enable Bit
                   1- ADC Auto Trigger aktif

    ADIF :  ADC Interrupt Flag Bit
                ADC Kesmesi  kurulu ise ve ADC çevrimi sona  erdiğini belirtir. Donanım tarafından 0       
                yapılır 

    ADIE : ADC Interrupt Enable Bit
                1-  ADC Kesmesi aktif 

    
    ADPS[2:0] : ADC Prescaler Select Bits
                ADC saat sinyalinin ne kadar olacağını belirler.


3- ADCSRB  (ADC Control and Status Register B)


 ACME : Analog Comparator Mutiplexer Enable 
              1 ise   Analog karşılaştırıcı aktif olur.

ADTS[2:0] : ADC Auto Trigger Source Bits 
                     ADC'nin hangi kaynaktan tetikleneceğini belirler.




programımız

#include <avr/io.h>
#define F_CPU 8000000ul


uint16_t adc_okunan=0;

void Adc_ayar()
{
   
    ADMUX |= 0x40;             //ADC Voltage Reference Selection AVcc
                                              // AREF = AVcc

   

    ADCSRA |=0x07;          // ADC prescaler 128 , ADC  frekansı =62500Hz, 16usn   

    ADCSRA |= 0x80;          // ADEN=1, ADC aktif
 
}

uint16_t adc_oku(uint8_t kanal)
{
    kanal &=0x07;                             // kanal datasının ilk  üç biti kullanılacak
                                                          // 000~111 8 kanal

   
    ADMUX &= 0xF8;                     //ADMUX  ilk üç biti  0  yapılıyor.
    ADMUX |= kanal ;                     // kanal seçimi yapıldı
   
    ADCSRA |=0X40;                      // ADSC =1 yapıldı  ve  ADC Çevrimi  başladı,
   
    while (ADCSRA & 0x40 );       // ADSC 1 olduğu sürece çevrim devam eder
                                                        // çevrimin bittiğini ADSC=0 olduğunda anlarız. 

                                                        // ADSC 0 olana kadar bekliyoruz.

    return(ADC);                           // ADSC 0  olduktan sonra elde edilen değer otomatik olarak 

                                                      // ADC register'ına kaydedilir. 
  
}
int main(void)
{    


   Adc_ayar();
   
    for(;;)
    {

        ........................................
        .......................................

        adc_okunan=adc_oku(0);           // ADC0 - sıfırıncı ADC kanalı okunacak
        ..........................................       
        ........................................

    }


}





 

Yorumlar

  1. Mükemmel açıklayıcı bir anlatım, datasheet niteliğinde(en azından giriş seviye için).Teşekkürler

    YanıtlaSil
  2. Bu yorum yazar tarafından silindi.

    YanıtlaSil
    Yanıtlar
    1. Devamı için zaman arıyorum :) İnşallah gelir

      Sil

Yorum Gönder