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
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...