5. deney föyü - Alper BAYRAK - Abant İzzet Baysal Üniversitesi

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 *)&param)[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.