CCS C İLE PIC PROGRAMLAMA DERS-3-
CCP MODÜLÜ VE PWM İŞLEMLERİ
CCP BİRİMİNE GENEL BAKIŞ CCP birimi, 3 değişik modül içeren bir birimdir. Bu modüller Capture(yakalama), Compare(karşılaştırma) ve PWM(pals genişlik modülasyonu)dir.
PWM MODU CCP biriminin PWM modu, istenen CCPx ucundan istenen görev çevrimine (duty cycle –doluluk oranı) sahip PWM sinyali elde etmek için kullanılır. PWM birimi Timer2 zamanlayıcısını kullanır. PWM olarak kullanılacak pinler çıkış olarak yönlendirilmelidir. PWM sinyali; denetleyici osilatör frekansı, Timer2 zamanlayıcı/sayıcı biriminin PR2(Periyot) değeri ve bölme oranı değeri ile belirlenir. TPWM=Tkomut x (PR2+1) x (TMR2 bölme oranı)
PWM dalga şeklinde görüldüğü gibi PWM sinyalin bir görev çevrimi –doluluk oranı- (duty cycle) bölümü vardır. Bu bölüm PWM sinyalinde lojik-1(high) olan süredir. Bu görev çevrimi PWM periyodundan uzun olamaz. PWM en fazla 10 bitlik bir değer alabilir.
Örnek: #use delay (clock=4000000) setup_timer_2(T2_DIV_BY_4,120,1); fkomut=4Mhz/4=1Mhz TPWM=Tkomut x (PR2+1) x (TMR2 bölme oranı) =1/1000000hz x (120+1) x 4 = 0.000484 sn
SET_PWMX_DUTY() FONKSİYONU PWM modunda oluşturulan PWM sinyalinin görev çevrimi süresini (duty cycle) belirlemeye yarayan fonksiyondur. Fonksiyonda «değer» kısmına 8 veya 10 bitlik sabit veya değişken yazılabilir. «değer» 8 bitlik kullanılırsa 4 ile çarpılır. Örnek: setup_timer_2(T2_DIV_BY_4,120,1); // Timer2 ayarları yapılıyor. Yukarıdaki örnekde PR2 değeri yani periyot değeri 120 olarak belirlenmiştir. Bu nedenle PWM sinyalinin görev çevrimi (duty cycle) süresi belirlenirken kullanılan fonksiyona 120’den fazla değer girilmemelidir. Yukarıda verilen örnekteki PR2=120 değerine göre aşağıdaki durumları verebiliriz. set_pwm1_duty(30); // %25 görev çevrimi set_pwm1_duty(60); // %50 görev çevrimi set_pwm1_duty(90); // %75 görev çevrimi set_pwm1_duty(120); // % 100 görev çevrimi
SETUP_CCPX() FONKSİYONU Bu fonksiyon ile PIC donanımı içinde bulunan(her modelde yoktur) CCP modülü ile ilgili ayarlamaları yapar. setup_ccp1(mod); , setup_ccp2(mod); … CCP modülü ister Capture, ister Compare, isterse PWM modunda çalıştırılır. Fonksiyondaki «mod» kısmına sabit tanımlamalar yazılır. Fonksiyondaki x kısmına kullanılan CCP modülü birimi numarası yazılır. CCP birimini devre dışı bırakmak için; CCP_OFF = CCP birimi devre dışı Capture Mode; Compare Mode; PWM Mode; CCP_PWM = PWM modunu aç.
PWM SİNYALİNİN OSİLOSKOP İLE GÖZLENMESİ
15 DAKİKA ARA ZAMANI …
ANALOG/DİJİTAL ÇEVİRİCİ MODÜLÜ İŞLEMLERİ
A/D MODÜLÜ Doğada doğal olarak bulunan tüm sistemler analog düzendedir. Kullandığımız mikrodenetleyiciler ise dijital sistemlerdir. Bu nedenle dış dünya ile iletişim kurmak ve dış dünyadan veri almak için bu iki sistemin bir şekilde birbirini anlaması gereklidir. Bu iş için doğada bulunan analog sinyallerin(ısı, ışık, ses, nem vb.) dijital sistemlerin anlayacağı dijital sinyallere çevrilmesi gereklidir. Bu işlem için ADC(Analog Digital Converter) devreleri ve entegreleri kullanılmaktadır.
Bir ADC sinyali 10 bitlik çözünürlüğe sahiptir Bir ADC sinyali 10 bitlik çözünürlüğe sahiptir. Yani bir ADC sinyali 210 =1024 farklı parçaya bölünebilir. ADC entegrelerinde analog sinyali dijitale çevirirken kullanılan Vref(+) ve Vref(-) uçları vardır. Bu uçlar sinyalin üst ve alt aralıklarını belirlemek için kullanılır.
SETUP_ADC() FONKSİYONU Bu fonksiyon ile A/D biriminin mod ayarı yapılır. ADC’nin kapalı olup olmayacağı, ADC frekansı olarak mikrodenetleyicinin kendi frekansını mı? yoksa dışarıdan bir giriş frekansını mı? kullanacağını, eğer kendi frekansı kullanılacaksa bu frekansı kaça böleceğini belirlemek için kullanılır. Kullanılacak «mod» seçenekleri mikrodenetleyici modeline göre değişebilir, bunları denetleyicinin tanıtım dosyasında(16f876a.h) bulabilirsiniz. setup_adc(mod); setup_adc(ADC_OFF); // ADC biriminin kullanılmayacağını belirtir. setup_adc(ADC_CLOCK_INTERNAL); //saat sinyalinin içerdeki osilatör //olduğunu belirtir. setup_adc(ADC_CLOCK_DIV_2); //ADC çalışma frekansı fADC = fOSC/2 setup_adc(ADC_CLOCK_DIV_8); //ADC çalışma frekansı fADC = fOSC/8 setup_adc(ADC_CLOCK_DIV_32); //ADC çalışma frekansı fADC = fOSC/32
SETUP_ADC_PORTS() Bu fonksiyonla denetleyicideki analog pinlerin hangilerinin aktif edileceği belirlenir. Bu pinler denetleyicinin modeline göre değişir ve başlık dosyasında(16f876a.h) bulunabilir. setup_adc_ports(sabit tanım); Örnek: setup_adc_ports(ALL_ANALOG);
SET_ADC_CHANNEL() FONKSİYONU Analog-Dijital çevrim yapılacak kanal seçimini yapan fonksiyondur. Analog sinyali dijital sinyale çevir komutu geldiğinde mikro denetleyicinin hangi girişteki(kabaldaki) analog sinyali dijital bilgiye çevireceğini bilmesi gerekir. set_adc_channel(kanal); Bu fonksiyonda kanal kısmına 0,1,2… diye kanal numaraları yazılır. Her numara kullanılan mikrodenetleyicinin bilgi sayfalarında(data sheet) pin diyagramı kısmında (AN0, AN1,AN2,… diye) görülebilir.
READ_ADC() FONKSİYONU Bu fonksiyon belirtilen kanaldan alınan sinyalin dijital bilgi karşılığını okur ve o değerle geri döner. Önceden anlatılan «setup_adc(), setup_adc_ports(), set_adc_channel()» fonksiyonlarının önceden tanımlanması gerekmektedir. Değişken ismi = read_adc(); setup_adc(ADC_CLOCK_INTERNAL); setup_adc_ports(ALL_ANALOG); set_adc_channel(1); bilgi=read_adc();
PWM SİNYALİ İLE ANALOG VERİ OKUMA
BİZİ DİNLEDİĞİNİZ İÇİN TEŞEKKÜR EDERİZ BU SLAYT HAZIRLANIRKEN SERDAR ÇİÇEK’İN CCS C İLE PIC PROGRAMLAMA KİTABINDAN FAYDALANILMIŞTIR.