30.07.2013 Views

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

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

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

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

PIC16F87X’te <strong>ADC</strong><br />

MODÜLÜNÜN<br />

KULLANIMI<br />

Emre YAVUZ – Temmuz 2009


PIC16F87X’te <strong>ADC</strong> MODÜLÜÜ KULLAIMI<br />

H H U U N N N R R O O O B B B O O O T T T X X – M A K A L E L E R<br />

Bu makalemizde PIC16F87X serisi mikrodenetleyicilerde <strong>ADC</strong> modülünün temel<br />

düzeyde kullanımını anlatacağım.<br />

Mikrodenetleyicilerin sadece belli değerlerlerde çıkış verebildiğini, giriş olarak ise<br />

belli bir değerin üzerini 1 altını ise 0 olarak yorumladığını biliyoruz ama bazı durumlarda<br />

analog değerlere ihtiyaç duyarız, bu değere çıkış olarak ihtiyaç duyduğumuzda bunu PWM ile<br />

hallederiz. Giriş olarak ihtiyaç duyduğumuzda ise <strong>ADC</strong> modülü olan mikrodenetlecilerin bu<br />

özelliklerinden faydalanabiliriz. <strong>ADC</strong> kısaltması Analog-Digital Converter’dan gelir,<br />

Türkçe’ye analog-dijital çevirici olarak tercüme edebiliriz.<br />

PIC16F876’da 5 kanal PIC16F877’de 8 kanallı <strong>ADC</strong> modülü bulunmaktadır, bu<br />

modüllerden 10 bitlik giriş alınabilir. Bu kanallar PIC16F876’da Porta’da PIC16F877’de ise<br />

Porta’da ve Porte’de bulunur.<br />

<strong>ADC</strong> modülünün işlemlerinde 4 önemli yazmaç vardır. Bunlar <strong>ADC</strong>ON0, <strong>ADC</strong>ON1,<br />

ADRESH, ADRESL’dir. <strong>ADC</strong>ON’lar A/D çevriminin kontrolünü yönetirler. ADRES’ler ise<br />

sonuçların yazıldığı yazmaçlardır. Burada bir noktayı belirtmemiz yararlı olacaktır, <strong>ADC</strong>ON0<br />

ve ADRESH yazmaçları Bank0’da bulunurken, <strong>ADC</strong>ON1 ve ADRESL yazmaçları Bank1’de<br />

bulunur. Banklar doğru ayarlanmazsa program çalışmayacağı için programı yazarken buna<br />

dikkat edilmesi gerekir.<br />

---<strong>ADC</strong>O0---<br />

<strong>ADC</strong>O0,7:6 (<strong>ADC</strong>S1: <strong>ADC</strong>S0 (Bit özel isimleri))<br />

Bu yazmaçın 7 ve 6. bitleri TAD değerini ayarlamaya yarar. TAD A/D çevrim<br />

periyodudur. Bir çevrim için minimum 12TAD süresi gerekir. TAD süresi için dört seçenek<br />

vardır.<br />

00 = Fosc/2<br />

01 = Fosc/8<br />

10 = Fosc/32<br />

11 = Frc (Dahili RC osilatöründen elde edilen zaman)<br />

TAD süresi minimum 1.6 mikro saniye olmalıdır. Bunun için 1 Mhz’lik bir PIC’te<br />

Tosc 2, 4 Mhz’likte 2 veya 8, 20 MHZ’likte ise hepsi seçilebilir.<br />

<strong>ADC</strong>O0,5:3 (CHS2:CHS0)<br />

<strong>ADC</strong>ON0’ın 5-3 arasındaki bitleri hangi kanalın devrede olacağını belirlemeye yarar.<br />

Porte’deki kanallar sadece PIC16F877’de vardır.<br />

000 = Kanal 0 (RA0)<br />

001 = Kanal 1 (RA1)<br />

010 = Kanal 2 (RA2)<br />

011 = Kanal 3 (RA3)<br />

100 = Kanal 4 (RA5)<br />

101 = Kanal 5 (RE0)<br />

110 = Kanal 6 (RE1)<br />

111 = Kanal 7 (RE2)


<strong>ADC</strong>O0,2 (GO/DONE)<br />

H H U U N N N R R O O O B B B O O O T T T X X – M A K A L E L E R<br />

<strong>ADC</strong>ON0 yazmacının 2. biti durum bitidir. Bu bitin değerini 1 yaparsanız. Çevirme<br />

işlemi başlar ve bu bit durum biti şeklini alır, hem işlemi başlatmaya hem de durumunu<br />

öğrenmeye yarar, işlem devam ettiği sürece değeri 1 olarak kalır işlem bittiğinde 0 değerini<br />

alır.<br />

<strong>ADC</strong>O0,1<br />

Bu bit boş. 0 olarak değerlendirebilirsiniz<br />

<strong>ADC</strong>O0,0<br />

Bu bit, A/D çevrimini açıp kapatmaya yarar. 1 ise işlem yapılabilir, 0 ise kapalı hale<br />

geçer çevirme işlemi yapılamaz.<br />

---<strong>ADC</strong>O1---<br />

<strong>ADC</strong>O1,7 (ADFM)<br />

Bu bit 10 bitlik sonucun hangi şekilde yazılacağını ayarlamaya yarar. Bahsettiğimiz<br />

üzere sonuç için iki adet yazmaç bulunur(ADRESH ve ADRESL).<br />

Bu biti 0 olarak ayarlarsak sonucun büyük haneleri ADRESH’ta yer alır son iki hanesi<br />

ADRESL’nin 7. ve 6. bitine yazılır.<br />

1 olarak ayarlarsak sonucun en büyük iki hanesi ADRESH’ın 1. ve 0. bitine yazılır.<br />

Diğer küçük haneleri ise ADRESL’ye yazılır.<br />

<strong>ADC</strong>O1,6:4<br />

BU bitlerin bir etkisi yoktur. 0 olarak değerlendirebilirsiniz.<br />

<strong>ADC</strong>O1,3:0 (PCGF3:PCGF0)<br />

Bu bitler hangi kanalları A/D çevrimi için açacağınızı ve referans voltajlarının ne<br />

olacağını belirlemeye yarar. Seçeneklere aşağıdaki tablodan bakabilirsiniz.


H H U U N N N R R O O O B B B O O O T T T X X – M A K A L E L E R<br />

A harfi Analog giriş anlamına gelir. PIC16F876 kullanıyorsanız. RE2, RE1 ve RE0’da<br />

A harfi bulunan kanalları tercih edemezsiniz. Vref, referans voltajı anlamındadır, Vref adı<br />

geçmeyen kanallarda referans voltajı Vdd ve Vss olur, sadece Vref+ olan kanallarda artı<br />

değerini Vref sütununda belirtilen porttan, Vref+ ve Vref- beraber bulunuyorsa ikisini birden<br />

harici olarak belirtilen portlardan vermeniz gerekiyor.<br />

Bu referans voltajları A/D çevrimi için oldukça önemlidir Vref+ A/D çevrim<br />

sonucunun alabileceği en yüksek değere karşılık gelir. Yani siz referans olarak Vdd’yi<br />

seçmişseniz, 10 bitlik sonuç 1111111111 şeklindeyse bu sonucunuzun 5 volt olduğu anlamına<br />

gelir, harici referans vermeyi seçtiniz ve Vref+ değeri olarak 3 volt verdiniz diyelim o zaman<br />

bu en üst değer 3 volt’a tekabül eder. Diyelimki Vref- olarak da 1 volt verdiniz o zaman<br />

analog çevrimin sonucu sıfır olduğunda bu 1 volta karşılık gelir.<br />

Sonuçta bir A/D çevrimi için yapmanız gerekenleri şu şekilde sıralayabiliriz.<br />

1. Hangi kanalları A/D çevrimine açacağınızı ve çevrim sonucunu nasıl<br />

yazdırmak istediğinizi göz önünde bulundurarak <strong>ADC</strong>ON1 yazmacının<br />

değerini ayarlayın.<br />

2. Çevrimi açmak ve bu çevrimi hangi kanaldan(A/D çevrimini birkaç<br />

kanaldan aynı anda yapamazsınız) yapacağınızı ve çevrim periyodunu<br />

ayarlamak için <strong>ADC</strong>ON0 yazmacına gerekli değerleri ayarlayın.<br />

3. <strong>ADC</strong>ON0’ın Go/Done bitini 1 yaparak çevirme işlemini başlatın.<br />

4. Go/Done bitinin 0 değerini almasını bekleyin. Bu değerin 0 olması işlemin<br />

bittiğinin, sonucunda ADRESH ve ADRESL’ye yazıldığını belirtir.<br />

5. Sonuç yazılma ayarlarınızı göz önünde bulundurarak sonucu<br />

değerlendirebilirsiniz.<br />

Sonucu 10 bit üzerimden değerlendirmeniz gerekir. Elde edilen sonucun kaç volta<br />

karşılık geldiğini şu şekilde formülize edebiliriz.<br />

((ADRESH:ADRESL) x (Vref+ - Vref-) ) / 1023<br />

Örnek olarak sonuç değerimiz 0110101010 olsun, referans olarakta Vdd ve Vss’yi<br />

seçtiğimizi varsayarsak (426x(5-0)) / 1023 ‘den yaklaşık olarak 2.1 volt sonucunu elde ederiz.<br />

Makalemizi bir örnekle bitirelim.<br />

BAKSEL <strong>ADC</strong>O1 ; Bank 1’e geçiyoruz.<br />

MOVLW B'00000010' ; ADFM 0<br />

MOVWF <strong>ADC</strong>O1 ; Porta’daki tüm kanallar A/D’ye açık.<br />

; Referanslarımız Vdd ve Vss<br />

BAKSEL <strong>ADC</strong>O0 ; Bank 0’a geçiyoruz.<br />

MOVLW B'01000001' ; Fosc/8<br />

MOVWF <strong>ADC</strong>O0 ; Porta’daki tüm kanallar A/D’ye açık.<br />

BSF <strong>ADC</strong>O0,2 ; <strong>ADC</strong>’yi çalıştır<br />

BTFSC <strong>ADC</strong>O0,2<br />

GOTO $-1 ; Đşlemin bitmesini bekle<br />

;Đşlem bittikten sonra büyük kısmı ADRESH’ta olan sonucu istediğiniz gibi<br />

kullanabilirsiniz.


H H U U N N N R R O O O B B B O O O T T T X X – M A K A L E L E R<br />

Bir makalemizin daha sonunda geldik. Başka makalelerde görüşmek üzere. ☺<br />

Bağlantılar<br />

http://robot.ee.hacettepe.edu.tr/<br />

Kaynaklar<br />

PIC16F87X datasheet

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!