Abant İzzet Baysal Üniversitesi Elek.-Elekt. Müh. Bölümü Mikroişlemciler Laboratuvarı II Deney 5 Amaç: Bu deneyin amacı, öğrencilere i) PROTEUS ISIS programında “Osciloscope” ve “Analogue Analysis” araçlarının kullanımını, ii) PIC mikrodenetleyicinin PWM, capture (yakalama) ve Timer1 (Zamanlayıcı1) modüllerinin kullanımını öğretmektir. Yöntem: 1. Şekil 1'deki devreyi kurun. Şekil 1. Deney tasarımı. 2. Şekil 1'de kırmızı ok işareti ile gösterilen eleman, bir sinyal üretecidir. Bu sinyal üreteci, Şekil 2'de kırmızı daire içine alınarak gösterilmiş olan “Generaor Mode” penceri altında bulunmaktadır. Bu pencereden “SINE” üretecini seçerek devreye ekleyiniz ve Şekil 1'de görüldüğü gibi bağlayınız. Abant İzzet Baysal Üniversitesi Elek.-Elekt. Müh. Bölümü Mikroişlemciler Laboratuvarı II Şekil 2. “ Generaor Mode” penceresi. 3. Şekil 1'de mavi ok ile gösterilen “Analogue Analysis” aracını devreye eklemek için Şekil 3'de kırmızı daire içinde gösterilen “Graph Mode” düğmesine basınız ve açılan pencereden “ANALOGUE” elemanını seçiniz. Seçtikten sonra çizim penceresine gelerek istediğiniz bir yerde farenizin sol tuşuna basınız ve basılı tutunuz. Fare ile istediğiniz büyüklükte bir dikdörtgen oluşturunuz ve farenin sol tuşunu bırakınız. “Analogue Analysis” aracı oluşturmuş olduğunuz dikdörtgenin içine yerleşecektir. Şekil 3. “Graph Mode” penceresi. 4. “Analogue Analysis” aracının üzerine sağ tıklayın ve “Add Traces” seçeneğini seçin. “Add Transient Trace” penceresi açılacaktır. Bu pencerede “Probe P1:” sekmesinin önündeki açılır metin kutusuna tıklayın. Devrenize eklemiş olduğunuz “Voltage Probe” aracının adı bu listede görünecektir. “Voltage Probe”un adını listeden seçin ve “OK” tuşuna basın. 5. “Analogue Analysis” aracının üzerine sağ tıklayın ve “Edit Graph” seçeneğini seçin. “Edit Transient Graph” penceresi açılacaktır. Bu pencerede “Start time:” sekmesine “0”, “Stop Time:” sekmesine 2 yazın ve “OK” tuşuna basın. 6. Şekil 1'de yeşil ok ile gösterilen “Oscilloscope” aracını devreye eklemek için Şekil 4'de kırmızı daire içinde gösterilen “Virtual Instruments Mode” düğmesine basınız ve açılan pencereden “OSCILLOSCOPE” elemanını seçiniz ve Şekil 1'de görüldüğü gibi devreye yerleştiriniz. 7. Şekil 1'de sarı ok ile gösterilen “Voltage Probe” aracını devreye eklemek için Şekil 4'de kırmızı daire içinde gösterilen “ Voltage Probe Mode” düğmesine basınız ve Şekil 1'de görüldüğü gibi devreye yerleştiriniz. Abant İzzet Baysal Üniversitesi Elek.-Elekt. Müh. Bölümü Mikroişlemciler Laboratuvarı II Şekil 4. “Virtual Instruments Mode” penceresi. Şekil 5. “Voltage Probe” aracı. 8. Bir MikroC projesini açın ve aşağıdaki kodu yazın. unsigned int sayi; unsigned int i,a,l,x; char *text1; /*karakter tipinde işaretçi tanımlanıyor.İşaretçiler oldukça geniş konudur.sadece * la gösterildiğini bilmek yeterlidir*/ char *isim ; char veri, alim; unsigned int dizi[4]; char kontrol; char kar_say=1; unsigned long fr; char sira=0; #define Hi(param) ((char *)¶m)[1] sbit LCD_RS at RB2_bit; sbit LCD_EN at RB3_bit; sbit LCD_D4 at RB4_bit; sbit LCD_D5 at RB5_bit; /*LCD bağlantıları ayarlanıyor*/ Abant İzzet Baysal Üniversitesi Elek.-Elekt. Müh. Bölümü Mikroişlemciler Laboratuvarı II sbit LCD_D6 at RB6_bit; sbit LCD_D7 at RB7_bit; sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D4_Direction at TRISB0_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D7_Direction at TRISB3_bit; / ************************************************************************** ***/ / ************************************************************************** ***/ void ayarlar(){ //Portlar PORTB=0; TRISB=0x00; TRISC.B1=0; TRISC.B2=1; //PWM2 PR2 = 0XFF; T2CON = 0b00000101; CCPR2L = 0b01111111; CCP2CON = 0b00111100; //PWM1 /*PR2 = 0XFF; T2CON = 0b00000101; CCPR1L = 0b01111111; CCP1CON = 0b00111100;*/ //seri port INTCON.GIE = 1; INTCON.PEIE = 1; PIE1.RCIE = 1; //enable interrupt. Uart1_Init(9600); Delay_ms(1000); //Timer1 T1CON=0B00001001; //CAPTURE1 CCP1CON=0B00000100; CCP1IF_bit=1; CCP1IE_bit=1; // Lcd_Init(); // Lcd_Init PORTB LCD için hazırlandı //LCD_Cmd(_LCD_BLINK_CURSOR_ON); // LCD kursör yanıp sönecek LCD_Cmd(_LCD_CURSOR_OFF); // LCD kursör yok Abant İzzet Baysal Üniversitesi Elek.-Elekt. Müh. Bölümü Mikroişlemciler Laboratuvarı II LCD_Cmd(_LCD_CLEAR); } void yaz(char a) { UART1_Write(a); while (!UART1_Tx_Idle()) {} } void metin_yaz(char *text2,char sayi) { for (i=0; i<sayi; i++) { yaz(*text2); text2++; } } void PWM_uret() { sayi=veri*102,3; sayi=sayi/10; CCP2CON.B5=sayi>>1; CCP2CON.B4=sayi>>2; sayi<<=6; CCPR2L=Hi(sayi); } void PWM_yaz() { dizi[0]=(int)veri%10; dizi[1]=(int)(veri/10)%10; dizi[2]=(int)(veri/100)%10; Lcd_Cmd(_LCD_SECOND_ROW); Lcd_Cmd(_LCD_RETURN_HOME); Lcd_out(2,1,text1); for(i=0; i<3; i++) { Lcd_Chr_CP(48+(char)dizi[2-i]); } } void frekans_yaz() { fr=(unsigned long)(500000/CCPR1); //fr=50000; // LCD de rastgele karekter oluşmaması için silindi Abant İzzet Baysal Üniversitesi Elek.-Elekt. Müh. Bölümü Mikroişlemciler Laboratuvarı II fr=fr*10; dizi[0]=(int)fr%10; dizi[1]=(int)(fr/10)%10; dizi[2]=(int)(fr/100)%10; dizi[3]=(int)(fr/1000)%10; Lcd_Cmd(_LCD_FIRST_ROW); Lcd_Cmd(_LCD_RETURN_HOME); for(i=0; i<4; i++) { Lcd_Chr_CP(48+(char)dizi[3-i]); } Lcd_Chr_CP(' '); Lcd_Chr_CP('H'); Lcd_Chr_CP('z'); } void interrupt() { if (CCP1IF_bit==1) { TMR1ON_bit=0; TMR1L=0; TMR1H=0; CCP1IF_bit=0; TMR1ON_bit=1; } else { veri=UART1_READ(); kontrol=1; PIR1.RCIF=0; GIE_bit=1; } } / ************************************************************************** ***/ void main() { ayarlar(); sayi=1023; veri=50; text1=" MERHABA "; /*58karekterlik bilgi satırı*/ for(i=0; i<23; i++) /*burada 0 56 arası 57lik döngü kuruldu ve her seferinde bilgi bir artırılarak ekranda gösterilir.*/ { /*deger 0 iken bilgi sıfır 15 arası ekranda gösterilirdeğer bir artırılır 1 17 arası 2 18 arası*/ text1++; /*bu şekilde yazıya kayma efektri verilir bu yapı aşağıdaki bilgi metni Abant İzzet Baysal Üniversitesi Elek.-Elekt. Müh. Bölümü Mikroişlemciler Laboratuvarı II içinde kullanıldı. */ Lcd_out(1,1,text1); delay_ms(20); } LCD_Cmd(_LCD_CLEAR); delay_ms(50); //LCD İLK DEĞER veri=50; PWM_uret(); PWM_yaz(); // while (1) { if (kontrol==1) { kontrol=0; PWM_uret(); PWM_yaz(); } frekans_yaz(); } } Abant İzzet Baysal Üniversitesi Elek.-Elekt. Müh. Bölümü Mikroişlemciler Laboratuvarı II Deney 1. Aşağıdaki devredei kurunuz. Şekil 6. Deney devresi. 2. PWM modülünü, RC1 ve RC2 bacaklarının her ikisinden de, 5kHz frekansında sinyal alınacak şekilde ayarlayınız. 3. PWM sinyallerinin doluluk oranlarının Şekil 6'da olduğu gibi LCD ekranda gösterilmesini sağlayınız. 4. Seri porttan gönderilecek komutlarla her iki PWM sinyalinin doluluk oranlarının ayrı ayrı ayarlanabilmesini sağlayınız.
© Copyright 2024 Paperzz