All for Joomla All for Webmasters
Yapabilecekleriniz hayal gücünüz kadar geniştir.
STM32
ARDUINO
ONUR KÖSE
Kişisel Blog

PIC ADC

Bu yazımda ADC nedir, nasıl ölçüm yapılır, ayarları nasıl yapılır bunlardan bahsedeceğim.

Dışarıdan gelen analog sinyallerin PIC’in anlayacağı biçime yani dijitale çevrilmesi işlemine ADC(Analog Digital Converter) denir. ADC modülü her PIC’de yoktur. Genellikle üst modellerde bulunmaktadır. Isı, nem, ışık, ses, direnç vs değerlerin işlenebilir veriye dönüşmesi için ADC işleminden geçmek zorundadırlar. Projemizi ADC modülü bulunan PIC16F877 entegresi üzerinden anlatacağım.

ADC’yi kurmak için bazı komutlar bulunmaktadır. Bunlar;

setup_adc(mod);

Bu fonksiyon A/D ölçüm frekansı belirlemektedir.

setup_adc(ADC_OFF); // ADC birimini kullanılmayacak

setup_adc(ADC_CLOCK_INTERNAL); // ADC çalışma frekansı fosilatör

setup_adc(ADC_CLOCK_DIV_2); // ADC çalışma frekansı fosilatör/2

setup_adc(ADC_CLOCK_DIV_8); // ADC çalışma frekansı fosilatör/8

setup_adc(ADC_CLOCK_DIC_32); // ADC çalışma frekansı fosilatör/32

PIC16F877 entegresinde 8 adet ADC pini bulunmaktadır. Bunlar ; RA0/AN0, RA1/AN01 RA2/AN2, RA3/AN3, RA5/AN4, RE0/AN5, RE1/AN6, RE2/AN7 dir.

Hangi pinin ADC olarak kullanılıp kullanılmayacağı setup_adc_ports() komutu ile belirtilir.

setup_adc_ports();

ALL_ANALOG = Tüm A/D pinler analog giriş için kullanılacak

NO_ANALOGS = Analog pinler A/D işlemi için kullanılmayacak

AN0_AN1_AN2_AN4_AN5_AN6_AN7 = RA0, RA1, RA2, RA5, RE0, RE1, RE2 girişleri A/D işlemi için kullanılacak

AN0_AN1_AN2_AN3_AN4 = RA0, RA1, RA2, RA3, RA4 girişleri A/D işlemi için kullanılacak

AN0_AN1_AN3 = RA0, RA1, RA3 girişleri A/D işlemi için kullanılacak

Bunlar gibi bir kaç tane daha port ayarlama modları bulunmaktadır. Bu komutları “C:\Program Files\PICC\Devices\16F877.h” dosyası içinde görebilirsiniz.

setup_adc_channel(kanal);

Hangi pinlerin A/D çevrimi için kullanılacağını ayarladıktan sonra hangi pinin okunacağını seçmek için kullanılan komuttur.

0 = RA0/AN0   1 = RA1/AN1   2 = RA2/AN2   3 = RA3/AN3   4 = RA5/AN4   5 = RE0/AN5   6 = RE1/AN6   7 = RE2/AN7

setup_adc_channel(0); // AN0 ucundaki analog girişi çevrim için haırlanır

setup_adc_channel(5); // AN5 ucundaki analog girişi çevrim için haırlanır

reac_adc();

Bu fonksiyon belirtilen kanaldan alınan sinyalin dijital karşılığını okur ve istenen değişkene atar.

AN1 kanalı A/D çevrim için hazırlanmıştır, read_adc() ile dijital değer okunup bilgi değişkenine atanmıştır.

#device ADC = x

ADC modülünün kaç bit olacağını ayarlamak için kullanılır.

Bit sayısı denetleyiciye göre değişmektedir.

#device ADC = 8

#device ADC = 10

#device ADC = 11

#device ADC = 16

PIC16F877 denetleyicisin de 8 ve 10 bit kullanılabilmektedir.

Bu öğrendiklerimiz sonucunda RA0/AN0 pinine bağlı potansiyometreyi okuyup dijital karşılığını LCD de gösteren küçük bir uygulama yapalım.

Bunun için aşağıdaki devreyi tasarlayınız;

Yazılım;

RA0/AN0 pini A/D çevirim için ayarlanmıştır. Pine sinyal girişi olacağı için set_tris_a(0x01) ile pin giriş konumuna alınmıştır. set_adc_channel(0) ile pin ölçülmüştür. Ölçme işlemi için minimum 20 usn beklenmek zorundadır, delay_us(20) ile 20 usn gecikme yapılmıştır. bilgi = read_adc() ile dijital değer okunup bilgi değişkenine atanmıştır ve değer ekrana yazılmıştır.

Dikkat edilmesi gereken ayrıntılar;

ADC işleminde pinlerin giriş veya çıkış olarak ayarlanabilmesi için #use fast_io(a) komutu kullanılmalıdır. Aksi takdirde okuma hatalı yapılır.

ADC 10 bit çevrim yapacağı için maximum voltaj(5V) dijital değeri karşılığı 2^10 = 1024 olacaktır. Bu değeri değişkene atarken değişken int olarak tanımlanmışsa LCD ekranda hatalı sonuçlar görülür. Bunun için en değişken int16(long) yada daha yüksek veri tipi olarak tanımlanmalıdır.

About the author

1 Response

Merhaba

Bloguma Hoşgeldiniz.

Kategoriler

Çevrimiçi Kişiler

2 Misafir
%d blogcu bunu beğendi: