PIC16F87X`te ADC Modülünün Kullanımı

Transkript

PIC16F87X`te ADC Modülünün Kullanımı
PIC16F87X’te ADC
MODÜLÜNÜN
KULLANIMI
Emre YAVUZ – Temmuz 2009
HUNROBOTX–MAKALELER
PIC16F87X’te ADC MODÜLÜ"Ü" KULLA"IMI
Bu makalemizde PIC16F87X serisi mikrodenetleyicilerde ADC modülünün temel
düzeyde kullanımını anlatacağım.
Mikrodenetleyicilerin sadece belli değerlerlerde çıkış verebildiğini, giriş olarak ise
belli bir değerin üzerini 1 altını ise 0 olarak yorumladığını biliyoruz ama bazı durumlarda
analog değerlere ihtiyaç duyarız, bu değere çıkış olarak ihtiyaç duyduğumuzda bunu PWM ile
hallederiz. Giriş olarak ihtiyaç duyduğumuzda ise ADC modülü olan mikrodenetlecilerin bu
özelliklerinden faydalanabiliriz. ADC kısaltması Analog-Digital Converter’dan gelir,
Türkçe’ye analog-dijital çevirici olarak tercüme edebiliriz.
PIC16F876’da 5 kanal PIC16F877’de 8 kanallı ADC modülü bulunmaktadır, bu
modüllerden 10 bitlik giriş alınabilir. Bu kanallar PIC16F876’da Porta’da PIC16F877’de ise
Porta’da ve Porte’de bulunur.
ADC modülünün işlemlerinde 4 önemli yazmaç vardır. Bunlar ADCON0, ADCON1,
ADRESH, ADRESL’dir. ADCON’lar A/D çevriminin kontrolünü yönetirler. ADRES’ler ise
sonuçların yazıldığı yazmaçlardır. Burada bir noktayı belirtmemiz yararlı olacaktır, ADCON0
ve ADRESH yazmaçları Bank0’da bulunurken, ADCON1 ve ADRESL yazmaçları Bank1’de
bulunur. Banklar doğru ayarlanmazsa program çalışmayacağı için programı yazarken buna
dikkat edilmesi gerekir.
---ADCO"0--ADCO"0,7:6 (ADCS1: ADCS0 (Bit özel isimleri))
Bu yazmaçın 7 ve 6. bitleri TAD değerini ayarlamaya yarar. TAD A/D çevrim
periyodudur. Bir çevrim için minimum 12TAD süresi gerekir. TAD süresi için dört seçenek
vardır.
00 = Fosc/2
01 = Fosc/8
10 = Fosc/32
11 = Frc (Dahili RC osilatöründen elde edilen zaman)
TAD süresi minimum 1.6 mikro saniye olmalıdır. Bunun için 1 Mhz’lik bir PIC’te
Tosc 2, 4 Mhz’likte 2 veya 8, 20 MHZ’likte ise hepsi seçilebilir.
ADCO"0,5:3 (CHS2:CHS0)
ADCON0’ın 5-3 arasındaki bitleri hangi kanalın devrede olacağını belirlemeye yarar.
Porte’deki kanallar sadece PIC16F877’de vardır.
000 = Kanal 0 (RA0)
001 = Kanal 1 (RA1)
010 = Kanal 2 (RA2)
011 = Kanal 3 (RA3)
100 = Kanal 4 (RA5)
101 = Kanal 5 (RE0)
110 = Kanal 6 (RE1)
111 = Kanal 7 (RE2)
HUNROBOTX–MAKALELER
ADCO"0,2 (GO/DONE)
ADCON0 yazmacının 2. biti durum bitidir. Bu bitin değerini 1 yaparsanız. Çevirme
işlemi başlar ve bu bit durum biti şeklini alır, hem işlemi başlatmaya hem de durumunu
öğrenmeye yarar, işlem devam ettiği sürece değeri 1 olarak kalır işlem bittiğinde 0 değerini
alır.
ADCO"0,1
Bu bit boş. 0 olarak değerlendirebilirsiniz
ADCO"0,0
Bu bit, A/D çevrimini açıp kapatmaya yarar. 1 ise işlem yapılabilir, 0 ise kapalı hale
geçer çevirme işlemi yapılamaz.
---ADCO"1--ADCO"1,7 (ADFM)
Bu bit 10 bitlik sonucun hangi şekilde yazılacağını ayarlamaya yarar. Bahsettiğimiz
üzere sonuç için iki adet yazmaç bulunur(ADRESH ve ADRESL).
Bu biti 0 olarak ayarlarsak sonucun büyük haneleri ADRESH’ta yer alır son iki hanesi
ADRESL’nin 7. ve 6. bitine yazılır.
1 olarak ayarlarsak sonucun en büyük iki hanesi ADRESH’ın 1. ve 0. bitine yazılır.
Diğer küçük haneleri ise ADRESL’ye yazılır.
ADCO"1,6:4
BU bitlerin bir etkisi yoktur. 0 olarak değerlendirebilirsiniz.
ADCO"1,3:0 (PCGF3:PCGF0)
Bu bitler hangi kanalları A/D çevrimi için açacağınızı ve referans voltajlarının ne
olacağını belirlemeye yarar. Seçeneklere aşağıdaki tablodan bakabilirsiniz.
HUNROBOTX–MAKALELER
A harfi Analog giriş anlamına gelir. PIC16F876 kullanıyorsanız. RE2, RE1 ve RE0’da
A harfi bulunan kanalları tercih edemezsiniz. Vref, referans voltajı anlamındadır, Vref adı
geçmeyen kanallarda referans voltajı Vdd ve Vss olur, sadece Vref+ olan kanallarda artı
değerini Vref sütununda belirtilen porttan, Vref+ ve Vref- beraber bulunuyorsa ikisini birden
harici olarak belirtilen portlardan vermeniz gerekiyor.
Bu referans voltajları A/D çevrimi için oldukça önemlidir Vref+ A/D çevrim
sonucunun alabileceği en yüksek değere karşılık gelir. Yani siz referans olarak Vdd’yi
seçmişseniz, 10 bitlik sonuç 1111111111 şeklindeyse bu sonucunuzun 5 volt olduğu anlamına
gelir, harici referans vermeyi seçtiniz ve Vref+ değeri olarak 3 volt verdiniz diyelim o zaman
bu en üst değer 3 volt’a tekabül eder. Diyelimki Vref- olarak da 1 volt verdiniz o zaman
analog çevrimin sonucu sıfır olduğunda bu 1 volta karşılık gelir.
Sonuçta bir A/D çevrimi için yapmanız gerekenleri şu şekilde sıralayabiliriz.
1.
2.
3.
4.
5.
Hangi kanalları A/D çevrimine açacağınızı ve çevrim sonucunu nasıl
yazdırmak istediğinizi göz önünde bulundurarak ADCON1 yazmacının
değerini ayarlayın.
Çevrimi açmak ve bu çevrimi hangi kanaldan(A/D çevrimini birkaç
kanaldan aynı anda yapamazsınız) yapacağınızı ve çevrim periyodunu
ayarlamak için ADCON0 yazmacına gerekli değerleri ayarlayın.
ADCON0’ın Go/Done bitini 1 yaparak çevirme işlemini başlatın.
Go/Done bitinin 0 değerini almasını bekleyin. Bu değerin 0 olması işlemin
bittiğinin, sonucunda ADRESH ve ADRESL’ye yazıldığını belirtir.
Sonuç yazılma ayarlarınızı göz önünde bulundurarak sonucu
değerlendirebilirsiniz.
Sonucu 10 bit üzerimden değerlendirmeniz gerekir. Elde edilen sonucun kaç volta
karşılık geldiğini şu şekilde formülize edebiliriz.
((ADRESH:ADRESL) x (Vref+ - Vref-) ) / 1023
Örnek olarak sonuç değerimiz 0110101010 olsun, referans olarakta Vdd ve Vss’yi
seçtiğimizi varsayarsak (426x(5-0)) / 1023 ‘den yaklaşık olarak 2.1 volt sonucunu elde ederiz.
Makalemizi bir örnekle bitirelim.
BAKSEL ADCO1
MOVLW
B'00000010'
MOVWF
ADCO1
; Bank 1’e geçiyoruz.
; ADFM 0
; Porta’daki tüm kanallar A/D’ye açık.
BAKSEL
MOVLW
MOVWF
; Referanslarımız Vdd ve Vss
; Bank 0’a geçiyoruz.
; Fosc/8
; Porta’daki tüm kanallar A/D’ye açık.
ADCO0
B'01000001'
ADCO0
BSF
ADCO0,2
; ADC’yi çalıştır
BTFSC
ADCO0,2
GOTO
$-1
; Đşlemin bitmesini bekle
;Đşlem bittikten sonra büyük kısmı ADRESH’ta olan sonucu istediğiniz gibi
kullanabilirsiniz.
HUNROBOTX–MAKALELER
Bir makalemizin daha sonunda geldik. Başka makalelerde görüşmek üzere. ☺
Bağlantılar
http://robot.ee.hacettepe.edu.tr/
Kaynaklar
PIC16F87X datasheet

Benzer belgeler

“PIC TABANLI RS485 ÖLÇME VE KONTROL SİSTEMİNİN

“PIC TABANLI RS485 ÖLÇME VE KONTROL SİSTEMİNİN 4. PIC TABANLI ÖLÇME VE KONTROL DEVRESİNİN TASARIMI Ölçme ve kontrol sisteminde, ölçme işlemi sensörler aracılığı ile gerçekleştirilir. Sensörler; sıcaklık, nem, basınç, ivme, hız, hareket, vs gib...

Detaylı