7 Temmuz 2014 Pazartesi

ARM ile ADC uygulaması

Tabi ki adım adım gitmek en doğru olanı , biz de giriş çıkışları kullanmayı görebilmek için led yakma uygulaması yaptık ve farklı şekillerde algoritmalarla , for döngüleri , if else yapılarıyla farklı led uygulamaları yapmak da size kalıyor .
Şimdi sıra ADC uygulamasında ! Önce ADC nedir ? ne değildir ? buna bakalım ;
ADC(analog to digital converter) , yani analog bir değeri dijital karşılığına çevirip program için mantıklı bir giriş sağlamamızı sağlar.

Girişe verdiğimiz gerilim değerini hexadecimal 'e çevirip bunun üzerinden işlem yapabiliriz . Şimdi 1.5 V ve altı gerilimler için yeşil led , 1.5 V - 3 V arası gerilimler için kırmızı led yakan bir program yazalım . Bu sırada da açıklama satırlarıyla programımızı anlaşılır hale getirmeye çalışacağım .

#include <stm32f4xx.h>
#include <stdio.h>

int main(void)
{
int i,index;
RCC->APB2ENR=0x00000100;  // ADC1 clock enable
RCC->AHB1ENR=0x00000041; // GPIOA ve GPIOG clock enable 

GPIOA->MODER=0x00000003;   // pin A0 analog giris olarak seçildi, analog giris (11)yani 3 ile sağlandi.
GPIOG->MODER=0x14000000;  // led çikis ayarlari

ADC1->CR2|=0x00000003;   //önce ADON ve continuous'u 1 yaptik.
ADC1->CR2|=0x40000000;  // sonra  SW yi 1 yaptik.
while(1)
{
index++;
if(index>10000)   // delay kullanmak yerine bunu yaptik.
{
 // DMA yapsaydik buna gerek kalmazdi, islemciyi rahatlatalim diye döngü koyduk ve belli araliklarla okuyoruz. index 0 , 10000 olana kadar girmiyo . sonra giriyo içerde tekrar 0 oluyo , gecikme saglamis olduk.

i=ADC1->DR; // data register degeri i ye atandi.
index=0;
}

if(i<2000)         // volt 1.5 volttan küçükse 
GPIOG->ODR=0x00004000;   // 14. bit , kirmizi led
else
GPIOG->ODR=0x00002000; // 13. bit , yesil led
}
}

Program yazarken data sheet 'ten faydalandık , hatırlatmakta fayda var , data sheet elimizin altında her daim bulunmalı .
Programla ilgili soru ve görüşlerinizi bekliyorum . Herkese iyi çalışmalar .

Hiç yorum yok :

Yorum Gönder