MikroC ile PIC Programlama

Slides:



Advertisements
Benzer bir sunumlar
SAYISAL MODÜLASYON Bir haberleşme sisteminde iki veya daha fazla nokta arasında dijital olarak modüle edilen analog sinyallerin iletimidir. Analog sisteme.
Advertisements

Hazırlayan ve Sunan Ali Yasin Çakılcı HUNROBOTX
ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama
PLC.
ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama
OP-AMP PWM.
INVERTER NEDİR? NASIL ÇALIŞIR?
8259A Programlanabilir Kesme Denetleyicisi (PIC)
Elektronik Laboratuvarı deneyleri 2013
Ali AKMAN Reset, WDT, Basic Timer, Timer-A BİL325  C Ders - 6.
Endüstriyel Otomasyon Mekatronik Mühendisliği Bölümü
PARALLEL ADDER y0y1y3y0y1y3 s0s1s3s0s1s3 X 4-bits Y 4-bits S 4-bits x0x1x3x0x1x3.
Ders Adı: Sayısal Elektronik
PIC Mikrodenetleyiciler
DC-AC DÖNÜŞTÜRÜCÜLER / İNVERTERLER
ARM Tabanlı Mikrodenetleyici Temelleri ve Programlama
8088 Kesme Operasyonu.
ORT – 104 Hoş Geldiniz.
MikroC ile PIC Programlama
PIC MIKRODENETLEYICILER-3: GECİKME ve KESME PROGRAMLARI
Güç Elektroniği Bilgisayar Eğitim Paketi
BÖLÜM 2: BİLGİSAYAR SİSTEM YAPILARI
PIC Mikrodenetleyiciler
MikroC ile PIC Programlama
DERS 12 PIC 16F84 ile KESME (INTERRUPT) KULLANIMI
PROGRAMLAMA VE ASSEMBLY DİLİ
5. EGITIM Mikrodenetleyiciler PIC16F628 – PIC16F877
MikroC ile PIC Programlama
ARDUINO İLE ANALOG ÇIKIŞ VERMEK
PROGRAMLAMA VE ASSEMBLY DİLİ
16F628 TANIMLAMA KISMI Devrenizi çalıştırmak için 16F628 mikrodenetleyicisini programlarken kullanacağınız tanımlama kısmı verilmiştir. Defterinize not.
ARDUINO DİJİTAL PİN KONTROLÜ
Mikroişlemci (μP) Mikroişlemci çoğu zaman bilgisayarların beyni olarak adlandırılır. Bilgisayar yazılımındaki tüm işlemleri yapmakla sorumludur ve merkezi.
ARDUINO.
İSTANBUL İLİNDEKİ ENDÜSTRİ MESLEK LİSELERİN KONUMUNU BELİRTEN HARİTA
Timer 1 16bit (65535) Programlanabilir dahili ve harici saat kaynağı
Mikroişlemciler ve Mikrobilgisayarlar
DERS 5 PIC 16F84 PROGRAMLAMA.
ANALOG/SAYISAL ÇEVİRİM
KESMELER (Interrupts)
DERS 13 PIC 16F84 ile DONANIM SAYICI KULLANIMI
Ders Kodu: EET134 Ders Adı: Sayısal Elektronik Ders Hocası: Assist. Prof. Dr. MUSTAFA İLKAN.
LD/LDI LD X0 LDI X0 X0 Y0 X0 Y1 Temel Komutlar
Ali AKMAN Subroutine, Interrupt, LPM BİL325  C Ders - 5.
Dijital Çıkış Mantığı.
CCS C İLE PİC PROGRAMLAMA DERS -1-
CCS C İLE PIC PROGRAMLAMA DERS-2-
CCS C İLE PIC PROGRAMLAMA DERS-4-
ARDUINO DİJİTAL PİN KONTROLÜ
CCS C İLE PIC PROGRAMLAMA DERS-3-
Bileşik Mantık Devreleri (Combinational Logic)
Karşılaştırıcı ve Aritmetik İşlem Devreleri
ARDUINO İLE SAYAÇ UYGULAMASI
//UART KULLANIMI #define YLED_ON PORTD.B0=1 #define YLED_OFF PORTD.B0=0 + #define KLED_ON PORTD.B1=1 #define KLED_OFF PORTD.B1=0 unsigned short i; char.
PWM (Pulse Width Modulation- Sinyal Genişlik Modülasyonu)
BMET 262 Sayısal İşaret İşleme.
DERS 5 PIC 16F84 PROGRAMLAMA.
Doğu Akdeniz Üniversitesi Bilgisayar Ve Teknoloji Yüksek Okulu
Sayıcı Entegreleri Prof. Dr. Hüseyin EKİZ.
Doğu Akdeniz Üniversitesi Bilgisayar Ve Teknoloji Yüksek Okulu
MİkroİŞlemcİler ve programlanmasI Mekatronik Mühendisliği Bölümü
MİkroİŞlemcİler ve programlanmasI Mekatronik Mühendisliği Bölümü
MİkroİŞlemcİler ve programlanmasI Mekatronik Mühendisliği Bölümü
DERS 12 PIC 16F84 ile KESME (INTERRUPT) KULLANIMI
DERS 1 Gömülü Sistemlere Giriş
Ders 7 Arduino Genel Amaçlı Giriş-Çıkış Bacakları
Ders 6 Atmega328P Mikrodeneyleyicisi
INTERCONNECTION PROTOCOLS
Ders Adı: Sayısal Elektronik
MİkroİŞlemcİler ve programlanmasI Mekatronik Mühendisliği Bölümü
Sunum transkripti:

MikroC ile PIC Programlama 9.Hafta Mikrodenetleyiciler

16F877 CCP Modülü 16f877 içerisinde 2 adet CCP donanım modülü bulunmaktadır. Bunlar CCP1 ve CCP2 olarak adlandırılmaktadır. CCP modülü sayesinde donanımsal olarak yakalama (capture), karşılaştırma (compare) ve PWM sinyali üretme işlemleri yapılabilir. CCP modülünün çalışma modları için ihtiyaç duyulan zamanlama/sayma referansı 16f877 içerisinde bulunan Timer/Counter birimleri tarafından karşılanır. Bu amaçla, Capture ve Compare için Timer1 zamanlayıcısı, PWM modu için Timer2 zamanlayıcısı kullanılmaktadır. Mikrodenetleyiciler

CCP1 Modülü CCP modülü, düşük kısmı 8 bit olan CCPR1L ,yüksek kısmı 8 bit olan CCPR1H olan ve CCPR1 olarak adlandırılan bir kaydediciden oluşmaktadır (2 adet 8-bit yazmaç). CCP1 modülünün işlemleri ise CCP1CON kaydedicisi tarafından kontrol edilmektedir. Bu modüldeki kaydedicilerin tümü yazılabilir ve okunabilir özelliktedirler. PIC 16F877’nin CCP modülleri olan CCP1 ve CCP2’nin çalışmaları özel tetikleyicileri dışında hemen hemen aynıdır. CCP Timer İlişkisi

CAPTURE (Yakalama) Modu Capture modunda; RC2/CCP1 pinindeki bir takım olaylarla (RC2/CCP1 pini üzerinde bir olay oluştuğunda) TMR1’in 16 bitlik değerini yakalanır ve CCPR1H:CCPR1L e kaydedilir. RC2/CCP1’deki olaylar şu şekilde tanımlanmaktadır: • Her düşen kenar • Her yükselen kenar • Her 4. yükselen kenar • Her 16. yükselen kenar RC2/CCP1’deki bu durumlardan birisi CCPxM0:CCPxM3 bitleri sayesinde seçilir. Bir yakalama işlemi gerçekleştiğinde CCP1IF (PIR1,2) kesme bayrağı set olur ve bir kesme talebinde bulunulur. Eğer yeni bir yakalama gerçekleşirse CCP1R kaydedicisine yeni değer kaydedilir ve eski değer tamamıyla silinir.

CCP1CON – CCP2CON Kaydedicisi CCP modüllerinin yaptığı işlemleri denetler ve yetkilendirmeleri yapar. CCPxCON,0:3(CCPxM0:CCPxM3): CCP birimleri için mod seçim bitleridir. Bu bitlerin aldığı değerlere göre CCP1 modülü capture/compare/PWM modlarında çalıştırılabilir. 0000 = Capture/Compare/PWM etkin değil (CPM kullanım dışı ) 0100 = Capture modu, her düşen kenarda 0101 = Capture modu, her yükselen kenarda 0110 = Capture modu,her 4. yükselen kenarda 0111 = Capture modu, every 16. yükselen kenarda 1000 = Compare modu, denklik durumunda çıkışı 1’le(H) (CCPxIF=1) 1001 = Compare modu, denklik durumunda çıkışı 0’la (L) (CCPxIF=1) 1010 = Compare modu, denklik durumnda yazılım kesmesi üret 1011 = Compare modu, özel tetikleme (CCPxIF=1, CCP1 TMR1’i resetler, CCP2 TMR1’i resetler ve A/D çevirme başlar.(Eğer A/D çevirme modülü yetkilendirilmişse).) 11xx = PWM modu CCP1CON,4:5(CCPxX:CCPxY): CCP modülün PWM modundaki Lsb ayarlarını gerçekleştiren bitlerdir.

CCP1CON – CCP2CON Kaydedicisi CCP modüllerinin yaptığı işlemleri denetler ve yetkilendirmeleri yapar. CCP’de prescaler ayarlarını gerçekleştirmek üzere; CCP1M3:CCP1M0 bitleri ayrılmıştır. CCP modülü kullanım dışı ise veya CCP modülü capture modunda kullanılmıyorsa prescaler sayıcısı temizlenmiş vaziyette durur. Bu herhangi bir resetleme durumunda prescalerin temizleneceği anlamına gelir. Capture prescaler’i diğer bir kesmenin üretilmesi durumunda değişim gösterir. Örnekde CCP prescalerin kurulmasına dair bir örnek verilmiştir. Bu örnek programda prescaler sayıcı temizlenmiştir ve hata kesmelerinin üretilmesi engellenmiştir. 0100 = Capture modu, her düşen kenarda 0101 = Capture modu, her yükselen kenarda 0110 = Capture modu,her 4. yükselen kenarda 0111 = Capture modu, every 16. yükselen kenarda

Capture Modunda Pin Durumu Capture modunda RC2/CCP1 pini TRISC<2> vasıtasıyla giriş olarak ayarlanmalıdır. Bu sayede RC2/CCP1 pini capture işlemi için gerekli saat palsini alabilecektir. Şekilde capture modunda veri yakalama işleminin nasıl gerçekleştiğini gösteren diyagram bulunmaktadır. Capture birimini kullanmak için; Timer1 CCP birimlerinin ayarları yapılır. Kesmeden yararlanılacaksa CCPxIE ve CCPxIF birimleri set edilir veya temizlenir. Olay yakalama yaparak ne kadar süre geçtiyse, geçen süreyi Timer1 zamanlayıcısından alarak CCP biriminin özel kaydedicilerine yükler. Daha sonra CCP birimine kaydedilen zamanlar okunarak gerekli işlemler yapılır. Encoder ile hız hesaplaması, frekans hesaplaması, .. vs uygulamalarda kullanılabilir.

MikroC ile Capture örneği Örnek: RC2 pinine bağlı butona 4 kez basıldığında Timer değeri yakalanır. PortB içeriği bir arttırılır. void interrupt() { if (CCP1IF) portb++; // CCP1 yakalama oluştu, portb içeriğini 1 artır // TMR1'in içeriği otomatik olarak CCPR1 içeriğine aktarılır. CCP1IF_bit = 0; // CCP1IF bayrağı temizlendi } void main() { ADCON1 = 0x07; // AN pinleri dijital I/O yapılandırıldı CMCON = 0; // Comparators (karşılaştırıcılar) pasif edildi TRISB = 0x00; // PORTB çıkış yapıldı PORTB = 0x00; // PORTB temizlendi TMR1L = 0x00; // TMR1L ve TMR1H kaydedici çifti sıfırlandı TMR1H = 0x00; T1CON = 0x33; // TMR1 1:8 prescaler ve T13CKI girişinden gelen // her 8. yükselen darbe kenarında 1 artmaya ayarlandı TRIS.RC2 = 1; // RC2 pini giriş yapıldı CCPR1L = 0x00; // CCPR1L ve CCPR1H kaydedici içeriği temizlendi CCPR1H = 0x00; CCP1CON = 0x06; // CCP1 donanımı sinyalin her yükselen 4. kenarını CCP1IE_bit = 1; // yakalar. CCP1 donanımı aktif edildi. INTCON = 0xC0; // GIE, PEIE bitleri set edildi while(1) { } // Sonsuz döngü.

COMPARE (Karşılaştırma) Modu

COMPARE (Karşılaştırma) Modu Öncelikle Timer1 ve Compare modu ayarları yapılır. CCPRxH ve CCPRxL kaydedicilerine yakalanmak istenen sayı yüklenir, (Örneğin 20 kez tuşa basılması.) Timer1 harici kaynak beslemesi kullanılır. Timer1 dış osilatör girişine bağlanan butonla TMR1 kaydedicisinin değeri artar. TMR1 kaydedicisi ile CCPRx kaydedicisi birbirine eşit olduğunda kesme bayrağı set edilir. (Tuşa 20 kez basıldığında C2 pini set edilir) Örnek uygulama devresi

MikroC ile Compare örneği Örnek: CCPR1 değeri 3, timer1 8 darbede artım için Compare örneği, 3*8=24 darbede sayan program void interrupt() { if (CCP1IF) portb.rb7 = 1; CCP1IF_bit = 0; // CCP1IF bayrağı temizlendi } void main() { ADCON1 = 0x07; // AN pinleri dijital I/O yapılandırıldı CMCON = 0; // Comparators (karşılaştırıcılar) pasif edildi TRISB = 0x00; // PORTB çıkış yapıldı PORTB = 0x00; // PORTB temizlendi TRISC.RC0 = 1; // RC0/T13CKI pini giriş yapıldı. TMR1L = 0x00; // TMR1L ve TMR1H kaydedici çifti sıfırlandı TMR1H = 0x00; T1CON = 0x33; // TMR1 1:8 prescaler ve PORTC0/T13CKI girişinden gelen // her 8. yükselen darbe kenarında 1 artmaya ayarlandı CCPR1L = 0x03; // TMR1 ile CCPR karşılaştırması için CCPR1L = 0x03 CCPR1H = 0x00; // değeri yüklendi. CCP1CON = 0x0B; // CCP1 donanımı Compare modu, özel tetikleme modu CCP1IE_bit = 1; // CCP1 donanımı aktif edildi. INTCON = 0xC0; // GIE, PEIE bitleri set edildi while(1); // Sonsuz döngü.

PWM (Pulse Width Modulation) Darbe Genişlik Modülasyonu PWM, Darbe Genişlik Modülasyonu), üretilecek olan darbelerin, genişliklerini kontrol ederek, çıkışta üretilmek istenen analog elektriksel değerin veya sinyalin elde edilmesi tekniğidir. PWM elektrik ve elektronikte birçok alanda, farklı amaçlar için kullanılmaktadır. Telekomünikasyon, güç elektroniği, motor sürücüler, voltaj düzenleyiciler, ses üreteçleri veya yükselteçler gibi çeşitli uygulama alanları ve farklı uygulamaları bulunmaktadır. Analog olarak testere dişi sinyalin, DC yada AC kontrol voltajı ile karşılaştırılması ile elde edilir.

PWM (Pulse Width Modulation) Üretilen kare dalga darbe sinyallerinin genişliklerinin ortalaması, çıkışta üretilecek olan analog değerin elde edilmesini sağlar. Ymin = 0 olduğunda ortalama gerilim Yort= D . Ymax olmaktadır. D: Duty (İş yapma periyodu) T: PWM periyodu

PWM 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. PIC16f877'de iki adet CCP modülü olduğundan 2 adet de 10 bit PWM çıkış ucu vardır. PWM modunda, PWM çıkışı olarak kullanılan RC1/T1OSI/CCP2 ve RC2/CCP1 pin'leri çıkış olarak yönlendirilmelidir. Duty periyodunu için üst 8bit CCPRxL de, alt 2 bit CCPxX, CCPxY tir. (x=1,2). Bu bitlerin CCPxCON<5:4> kaydedicisindeki isimleri DCxB0, DCxB1 dir.

PWM

PWM PWM sinyali aşağıdaki adımlarda oluşur; - TMR2, PR2’ye eşit olduğunda TMR2 temizlenir, - CCPx pini set edilir (Duty cycle=%0 ise set edilmez), - CCPRxL’den CCPRxH’a yükleme gerçekleşir. - Duty cycle, PWM periyodundan büyük olamaz.

PWM başlatılması PWM periyodu PR2 kaydedicisine yazılarak ayarlanır. 2. PWM duty periyodu CCPR1L and CCP1CON<5:4> kaydedici ve bitlerine yazılarak kurulur. 3. CCP1 modülü için TRISC<2> biti çıkış olarak alınır. 4. Set the TMR2 prescale değeri ayarlanır ve Timer2, T2CON kullanılarak etkinleştirilir (enable biti ile) 5. CCP1 modulü PWM operasyonu için CCP1CON ile ayarlanır. Mikrodenetleyiciler

MikroC ile PWM örneği Örnek: RC2 pinine PWM1 modülü üzerinde 8 Mhz osc, Fpwm= 2 kHz için uygulama. void main() { ADCON1 = 0x07; CMCON = 0; TRISC.RC2=0; // PWM1 modulu çıkışı T2CKPS1_bit=0; // 0b01 icin TMR2 prescaler 4 T2CKPS0_bit=1; PR2=0xFF; CCPR1L=0x01; // PWM için Yüksek 8 bit CCP1CON.CCP1X= 0; CCP1CON.CCP1Y= 0; // PWM için Düşük 2 bit TMR2ON_bit=1; CCP1CON=0b00001100; // 0bxxxx11xx icin PWM modu while(1){ CCPR1L=0x3F; // Yüzde 25 Duty Delay_Ms(500); CCPR1L=0x7F; // Yüzde 50 Duty CCPR1L=0xC0; // Yüzde 75 Duty CCPR1L=0xFE; // yaklaşık Yüzde 95 Duty } // Sonsuz döngü. }

MikroC PWM kütüphanesi MikroC PWM rutinleri PWM1_Init PWM1_Set_Duty PWM1_Start PWM1_Stop PWM1_Init : PWM1 modülünü içerisine yazılan PWM frekansı olacak şekilde tüm gerekli kaydedicileri ile birlikte ayarlar. Frekans değeri long tipi ve Hertz cinsindendir. void PWM1_Init(const long freq); Örnek: 5 kHz için PWM modülü ayarlanması , PWM1_Init(5000); PWM1_Set_Duty : Duty periyonun yüzdesini değiştirilip belirlenmesini sağlar. %0 için 0, %50 için 127 ve %100 duty için 255 olacak şekilde 0-255 arası short tipi değer girilir. Örnek: %75 duty nin ayarlanması, PWM1_Set_Duty(192); PWM1_Start : PWM modülünü başlatır. PWM1_Start(); PWM1_Stop : PWM modülünü durdurulur. PWM1_Stop(); Mikrodenetleyiciler

MikroC ile PWM örneği Örnek: RC2 pinine PWM1 modülü üzerinde 8 Mhz osc, Fpwm= 2 kHz için uygulama. Kütüphanesiz void main() { ADCON1 = 0x07; CMCON = 0; TRISC.RC2=0; // PWM1 modulu çıkışı T2CKPS1_bit=0; // 0b01 icin TMR2 prescaler 4 T2CKPS0_bit=1; PR2=0xFF; CCPR1L=0x01; // PWM için Yüksek 8 bit CCP1CON.CCP1X= 0; CCP1CON.CCP1Y= 0; // PWM için Düşük 2 bit TMR2ON_bit=1; CCP1CON=0b00001100; // 0bxxxx11xx icin PWM modu while(1){ CCPR1L=0x3F; // Yüzde 25 Duty Delay_Ms(500); CCPR1L=0x7F; // Yüzde 50 Duty CCPR1L=0xC0; // Yüzde 75 Duty CCPR1L=0xFE; // yaklaşık Yüzde 95 Duty Delay_Ms(500); } // Sonsuz döngü. } Kütüphane ile void main() { ADCON1 = 0x07; CMCON = 0; TRISC.RC2=0; // PWM1 modulu çıkışı PWM1_Init(2000); // 2kHz PWM frekansı PWM1_Set_Duty(192); PWM1_Start(); while(1){ PWM1_Set_Duty(63); // Yüzde 25 Duty Delay_Ms(500); PWM1_Set_Duty(127); // Yüzde 50 Duty PWM1_Set_Duty(192); // Yüzde 75 Duty PWM1_Set_Duty(250); // yaklaşık Yüzde 95 Duty Delay_Ms(500); } // Sonsuz döngü. }

Analog Comparator (Karşılaştırıcı) 16f877A içerisinde 2 adet ANALOG KARŞILAŞTIRMA donanım modülü bulunmaktadır. Modüller 8 farklı modda çalışabilmektedir… RA0 – RA3 pinleri modül1 RA1 – RA2 pinleri modül2 Mikrodenetleyiciler

Analog Comparator (Karşılaştırıcı) Karşılaştırma yapabilmek için RA0 – RA3 pinleri analog giriş olarak ayarlanmalıdır. Karşılaştırıcı modül çıkışı olarak ise RA4 ve RA5 pinleri kullanılabilir. RA4 pini açık kollektör yapı içerdiğinden dolayı çıkış olarak kullanabilmek için pull-up direnci bağlanmalıdır. CMCON kaydedicisi kullanılarak modül ayarları yapılır. Mikrodenetleyiciler

Analog Comparator (Karşılaştırıcı) CMCON : Karşılaştırıcı kontrol ve ayar kaydedicisi CVRCON : Karşılaştırıcı gerilim referans kontrol ve ayar kaydedicisi INTCON : Kesme kontrol ve ayar kaydedicisi PIR2 : Kesme bildirim kaydedicisi PIE2 : Kesme ayar kaydedicisi PORTA : Giriş ve çıkış pin kaydedicileri TRISA : pin yönlendirme kaydedicileri Mikrodenetleyiciler

Analog Comparator (Karşılaştırıcı) Mikrodenetleyiciler

Analog Comparator (Karşılaştırıcı) Mikrodenetleyiciler

Analog Comparator (Karşılaştırıcı) Mikrodenetleyiciler

Karşılaştırıcı Gerilim Referans Modülü Mikrodenetleyiciler

MikroC ile Komparatör örneği void main() { TRISA = 0x0f; // RA3:RA0 giriş, diğerleri çıkış PORTA = 0; // PORTA sıfırlandı CMCON = 3; // İki bağımsız karşılaştırıcı, çıkış PIC çıkışları TRISB.RB0=0; // PORTB0 çıkış while(1){ PORTB.RB0=C2OUT_bit; // karşılaştırıcı çıkışı B0'a da yazılıyor. }