fpganedir.com'da ara

fpganedir mail

ARM ADC UYGULAMASI

Bu örneğimizde ARM 7 mimarisine sahip LPC2134 mikrodenetleyici üzerinde ADC(analog dijital çevirici) uygulamasını gerçekleştireceğiz. Bu kapsamda Analog olarak gelen bir sinyalin değerini RS232 protokolüne çeviren bir yazılım oluşturacağız.

Örneğimize başlamadan önce  ARM mikrodenetleyicinde ADC uygulama araçlarına bir göz atalım.

Aşağıda verdiğimiz bilgilerin tamamı LPC2134 mikrodenetleyicinin user manual'inden alınmıştır.

Örneğimizde kullandığımız LPC2134 mikrodenetleyici, içerisinde iki adet 10 bitlik A/D dönüştürücü modül bulundurur. Bu modüller sayesinde AD pinlerine bağlanan analog bir sinyali 10 ile 3 birlik dijital değerlere çevirir.

A/D dönüştürücü modülleri diğer ADC'lerde olduğu gibi örnekleme saatine ihtiyaç duyarlar. Gerekli olan bu saat mikrodenetleyici içerisinde APB (ARM peripheral bus) saatten sağlanır. Microdenetleyicide bulunan dönüştürücülerin maksimum örnekleme hızı 4,5 Mhz'dir.

Her bir dönüştürücüde bir programlanabilir bölücü (CLKDIV) bulunur, Bu bölücü dönüştürücülerin doğru çalışabilmesi için gerekli olan 4.5 MHz(Max) saat frekansını oluşturmak için kullanılır. Tam doğru bir dönüşüm için 11 saat darbesi kullanılır. CLKDIV bölücü katsayısı aşağıdaki formüle göre hesaplanır. Bu formülde ADCLK, A/D modülü için gerekli saati gösterir.

CLKDIV = ( PCLK / ADCLK) - 1;

Mikrodenetleyicide ADC uygulamasında aşağıdaki pinler kullanılır.

ADC pinleri

ADC iki mod bulunur. Yazılım Kontrolü Dönüştürücü modda tek seferde yalnızca bir bacak kullanılırken, donanım tarama modunda ise birden fazla bacak kullanılabilir.

ADC uygulamasında kullanılan saklayıcılar aşağıdaki gibidir.

A/D Kontrol Saklayıcısı (ADCR)

Bu saklayıcı A/D kontrollerini içerir.

A/D Global Veri Saklayıcısı (ADGDR)

A/D global veri saklayıcısıdır. Bu saklayıcı AD dönüşümünün bittiğini gösteren DONE biti ile dönüşüm sonucunu içerir.

A/D Durum Saklayıcısı(ADSTAT)

A/D durum saklayıcısı bütün AD kanallarını aynı anda kontrol etme olanağı sağlar. Her bir AD kanalının saklayıcılarında (ADDRn) bulunan DONE ve OVERRUN bayraklarının aynısı ADSTAT saklayıcısında da bulunur. ADSTAT ayrıca kesme bayrağını da içerir.

A/D Kesme Etkinleştirme Saklayıcısı (ADINTEN)

Bir dönüşüm tamamlandığı zaman hangi A/D kanallarının kesme oluşturacağını belirtmek için kullanılır.

A/D Veri Saklayıcıları (ADDR0 to ADDR7)

AD kanallarının veri saklayıcılarıdırlar. Her bir saklayıcı kendi kanalındaki AD dönüşüm sonucunu içerir.

AD modülü mikrodenetleyici il çalıştırıldığında ve resetlediği zaman kapalı (güç tasarrufu için) durumdadır. Bu yüzden AD modülü kullanılacaksa ADCR saklayıcısındaki PDN biti 1 yapılmalıdır. Ardından PINSEL saklayıcısından sonra ADC modül pinlerini ayarlanmalıdır.  Daha sonra ADCR saklayıcındaki CLKDIV saat bölüm katsayısı değeri girilmelidir. Bu değer ADC modülleri için gerekli olan ve maksimum 4,5 Mhz olan örnekleme saatini oluşturacaktır. CLKDIV katsayısı aşağıdaki formülle hesaplanır.

CLKDIV=PCLK/ADCLK-1

Ardından ADCR saklayıcındaki CLKS alanı kullanılarak dönüşümdeki çözünürlük belirtilmelidir. Bu çözünürlük 10 bit ile 3 bit arasında olabilir.

ADC modülü yazlım kontrollü veya Donanım tarama modundan herhangi birini seçmemiz gerekir. Donanım tarama modu için BURST bitinin 1 , START bitinin 0 olması gerekir. Bu modda SEL alanında seçilen pinler donanımsal olarak teker teker taranır. Her kanal için çevrim tamamlandığında DONE biti 1 olur ve gelen veri o kanalla ilgili veri saklayıcına yazılır. Gelen verileri kesme oluşturarak okuyabiliriz. Aynı zamanda global veri saklayıcısından en son çevrilen sonucu ve CHN alanında bu sonucun hangi kanalara ait olduğunu öğrenilebilir.

Bir dönüşüm tamamlandıktan sonra dönüşüm sonucu okunmadan yeni çevrim biter ve yeni sonuç öncekinin üzerine yazılırsa OVERRUN biti 1 yapılır.

Yazılım kontrollü AD modunda  SEL ananı yardımıyla yalnızca 1 kanal seçilebilir. START alanına yazılan 0x01 değer ile döşüm başlatılır. Dönüşüm DONE bitinin test edilmesiyle yada kesme yardımıyla anlaşılır. Yazılım kontrollü modda dönüşümü donanım tetiklemeli olarak başlatılabilir. P0.16 ve P0.22 pinlerine uygulanan sinyallerdeki değişimler yada timer0 ile timer1 donanımlar vasıtasıyla dönüşüm başlayabilir. Bu ayarlar ADCR saklayıcısındaki START alanından yapılır.

Aşağıda örneğimizin C kodunu bulabilirsiniz.

#include <LPC213X.H>

int deger;

void init_serial (void)                        /*Seri arayüzü başlangıç durumuna getir */
{        
     PINSEL0 = 0x00050000;           /* RxD1 ve TxD1 etkinleştir*/
     U1LCR = 0x83;                            /* 8 bits, Parity yok, 1 Stop bit */
     U1DLL = 97;                                /* 9600 Baud Rate @ 15MHz Sistem saati */
     U1LCR = 0x03;                           /* DLAB = 0 */
}

int putchar (int ch)                           /* Seri porta bir karakter yazdır*/
{
    while (!(U1LSR & 0x20));
    return (U1THR = ch);
}

void ADC_kesme(void) __irq                    /* ADC kesme fonksiyonu*/
{
     deger = ((AD0DR >> 6) & 0x00FF);    /*Veri saklayıcındaki AD dönüşüm sonucunu al*/
     VICVectAddr=0;                                      /*Kesme Sonu*/
     putchar(deger);                                      /* Dönüşüm sonucunu seri porta yaz*/
}
int main()
{
    init_serial();
    VICVectCntl0 = 0x20 | 18;                                         /* ADC0 kesmesi için VIC 0 kullan*/
    VICVectAddr0= (unsigned long) ADC_kesme;    /* Kesme vectörüne ADC kesme fonksiyon adresini ata*/
    VICIntEnable = 1 << 18;                                           /*ADC0 aktif et*/
    AD0CR=0x00250401;                                              /* ADC ayarları:  8 bit AD00, 3 Mhz @15 Mhz, Burst Mode*/
    while(1);

}

 

Anasayfa | Fpga | VHDL | VHDL Sözlüğü | Embedded Sistem | Android | Sayısal Tasarım | Simulasyon | PCB | Örnekler | Forum | İletişim
Copyright © 2010-2013 FPGAnedir. All Rights Reserved.