Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

1

Deney 1-a) Deney 1. Yürüyen ışık

MikroC IDE Programının kullanımı

1. Bekleme süresini değiştirerek tekrarlayınız.


2. Tek led yerine, 2li ve 3lü led dizisi şeklindeki
yürüyen ışık efektini oluşturarak tekrarlayınız..

3. PortC’ye bir bağlayacağınız bir anahtar ile iki


kademeli bekleme süresi (hızlı/yavaş)
oluşturacak şekilde devreyi yeniden düzenleyiniz.

Dr.Öğr.Üyesi Hasan H. ÇELİK


2

Deney 2-a) Anahtar ile led yanıp-sönme Deney 2-b) Anahtar ile 220V lamba aç/kapa
hızını değiştirme denetimi

 V röleyi 24V röle ile değiştiriniz. Röle sürme


işlemini transistör yerine “Optocoupler” kullanarak
tekrarlayınız.

 Anahtar ve Led bağlantılarını PortC ‘ye taşıyarak


devreyi yeniden düzenleyiniz.
 Yanıp sönme hızlarını değiştiriniz.

Dr.Öğr.Üyesi Hasan H. ÇELİK


3

Deney 3-a) Buton Okuma, Led yak/söndür Deney 3-b) Button komutu ile buton okuma
Komut: Button( &Port, pin, süre(ms), aktif konum)

 Butonların basma veya bırakma durumlarından


hangisinde eylemi gerçekleştirdiğini gözlemleyiniz.  Button komutunu, buton bırakıldığında aktif
 Led yerine 220V Lamba yakma ve söndürme olacak şekilde yeniden düzenleyiniz.
şeklinde devreyi yeniden düzenleyiniz.

Dr.Öğr.Üyesi Hasan H. ÇELİK


4

Deney 4-a). 7parçalı display sürme Deney 4-b) 2 buton ile ileri geri display
(Kontrolsüz 0-9 sayıcı ) saydırma

#define tus1 PORTC.B0


#define tus2 PORTC.B1

void main()
{
unsigned char sayac = 0;
unsigned char tablo[ ] = {0x3F, 0x06, 0x5B,
0x4F,0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
TRISB = 0;
TRISC=0xFF;
while(1)
{ if(tus1 == 0)
{ sayac++;
while(tus1==0); //Tuş bırakmayı bekle
}

1. Bekleme süresini değiştirerek tekrarlayınız. if(tus2 == 0)

2. Sayma işlemini: tek sayılar, çift sayılar ve geriye


{ sayac--;
sayma şeklinde düzenleyerek deneleri while(tus2==0); //Tuş bırakmayı bekle
tekrarlayınız. }
3. Döngü işlemini “for” komutu ile düzenleyerek if(sayac >= 10) sayac = 0;
deneyi tekrarlayınız. PORTB = tablo[sayac];
4. Displayi bir buton ile saydıracak şekilde gerekli }
düzenlemeleri yaparak deneyi tekrarlayınız. }

Dr.Öğr.Üyesi Hasan H. ÇELİK


5

Deney 5.a. Timer Interrupt ile kare dalga Deney 5-b. PWM İşareti Üretme
üretme
(fkare=500Hz , fosc=8MHz, önbölücü oranı=64)

OPTION REGISTER
RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
0 0 0 0 0 1 1 0

INTCON REGISTER
GIE EEIE T0IE INTE RBIE T0IF INTF RBIF
1 x 1 1 x x x x

#define tus1 PORTB.B1


#define tus2 PORTB.B3
unsigned char Ton; // Darbe doluluk seviyesi

void ayarlar()
{ TRISB = 255;
TRISC = 0;
PWM1_Init(1000); // PWM1 frekansı set }

void main()
{ ayarlar();
Ton= 16; // ilk “Ton” değeri
PWM1_Start(); // PWM1 modül aktivasyon
PWM1_Set_Duty(Ton); // Set Ton değeri
while (1)
{
if(tus1 == 0)
{ Ton=Ton+16; // pwm oranını arttır
PWM1_Set_Duty(Ton);
while(tus1==0); // tus bırakmayı bekle
}
if(tus2 == 0)
{ Ton=Ton-16; // pwm oranını azalt
PWM1_Set_Duty(Ton);
Not: Doğru tasarım için MicroC ve ISIS ortamında seçilen while(tus2==0); // tus bırakmayı bekle
osc. frekansları (fosc) eşit seçilmelidir.. } } }
 Gerekli düzenlemeleri yaparak, kare dalga
frekansını sırasıyla 1KHz, 2KHz, 10KHz olacak 1. 2KHz ve 4KHz için PWM frekansını değiştirerek
şekilde değiştiriniz. Osiloskop ile ölçerek deneyi tekrarlayınız.
doğrulayınız. (fosc=8MHz) 2. Her butona basışta toplam değerin 1/8’i değişim
 fosc=4MHz seçerek 1KHz kare dalgayı tekrar için gerekli değişimi gerçekleştiriniz.
oluşturunuz. Not: Daha iyi gözlemlemek için while(tus1==0) yerine
delay_ms(50) kullanılabilir.

Dr.Öğr.Üyesi Hasan H. ÇELİK


6

Deney 6-a. LCD ‘ye mesaj yazma ve kayan


yazı. void main()
{
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // Display sil
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,6,txt3); // 1. satıra yaz
Lcd_Out(2,6,txt4); // 2. satıra yaz
Delay_ms(2000);
Lcd_Cmd(_LCD_CLEAR); // Display sil

Lcd_Out(1,1,txt1); // 1. satıra yaz


Lcd_Out(2,5,txt2); // 2. satıra yaz

Delay_ms(2000);

//Kayan yazı …

for(i=0; i<4; i++)

{
// LCD modül bağlantılarını tanımlama… Lcd_Cmd(_LCD_SHIFT_RIGHT);
sbit LCD_RS at RB4_bit; bekle();
sbit LCD_EN at RB5_bit; }
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit; while(1)
sbit LCD_D6 at RB2_bit; {
sbit LCD_D7 at RB3_bit; for(i=0; i<8; i++) // 7kez sola…
sbit LCD_RS_Direction at TRISB4_bit; { Lcd_Cmd(_LCD_SHIFT_LEFT);
sbit LCD_EN_Direction at TRISB5_bit; bekle ();
sbit LCD_D4_Direction at TRISB0_bit; }
sbit LCD_D5_Direction at TRISB1_bit; for(i=0; i<8; i++) // 7kez sağa…
sbit LCD_D6_Direction at TRISB2_bit; { Lcd_Cmd(_LCD_SHIFT_RIGHT);
sbit LCD_D7_Direction at TRISB3_bit; bekle ();
// LCD_Init() için… }
}
char txt1[] = "Marmara "; }
char txt2[] = "Teknoloji ";
char txt3[] = "Lcd4bit";
char txt4[] = "Ornek Program";
char i;
1. Display’e 1. ve 2. satıra farklı mesajlar yazdırınız.
2. Kaydırma hızını değiştirerek tekrarlayınız.
void bekle()
{ // metin kaydırma hızı tek noktadan değiştirilir.
Delay_ms(300);
}

Dr.Öğr.Üyesi Hasan H. ÇELİK


7

Deney 6-b. ADC ve LCD ile Voltmetre Lcd_Cmd(_LCD_CLEAR); // Display sil


Lcd_Cmd(_LCD_CURSOR_OFF); // Kursör kapalı
Lcd_Cmd(_LCD_CLEAR); // Clear display

do
{
veri10bit = ADC_Read(3); // Analog veri oku
WordToStr(veri10bit, cevir);
Lcd_Out(1,1,"Data=");
Lcd_Out(1,6,cevir);

volt= veri10bit*5;
volt=volt/1024;

FloatToStr(volt, gerilim);

Lcd_Out(2,2,gerilim);
// LCD module bağlantı tanımları
Lcd_Out(2,12,"V");
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit; Delay_ms(200);
sbit LCD_D4 at RB0_bit; Lcd_Cmd(_LCD_CLEAR);
sbit LCD_D5 at RB1_bit;
}
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit; while(1);
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;
İşlemler:
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit; 1. Potansiyometreden ölçülen 0-5V bilgisini,
0_100°C sıcaklık ölçen bir sensörden geldiğini kabul

char cevir[6]; ederek, LCD display’e sıcaklık değerini yazdıracak

char gerilim[12]; program değişikliğini oluşturunuz. Ölçlme işlemlerini

float volt; farklı değerler için tekrarlayarak Volt ve sıcaklık

unsigned int veri10bit; verilerinin doğruluğunu gözlemleyiniz.

void main()
{
ADCON1=0x80; //sağa yaslı veri formatı,
// tüm pinler analog, analog giriş: 0..+5V
TRISA = 0xFF; // PORTA giriş
TRISC = 0; // PORTC çıkış

Lcd_Init(); //LCD tanımlama

Dr.Öğr.Üyesi Hasan H. ÇELİK


8

Deney 7.
CAPTURE MODÜL İLE FREKANS ÖLÇME

// LCD module bağlantıları


sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_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;
INTCON.GIE =1; // GIE : Tüm kesmeler için izin
unsigned sayma; INTCON.PEIE=1; // PEIE: kesme izin
float frekans; CCP1IE_bit= 1; // CCP1: kesme izin
char cevir[6];
TMR1L = 0x00;
void interrupt() TMR1H = 0x00; // TMR1 register reset
{ if (CCP1IF) // Int. flag sorgulama
{ while(1)
CCP1IF_bit = 0; // Int. flag reset {
TMR1L=0; // Timer reset sayma=CCPR1H;
TMR1H=0; sayma=sayma<<8; // Ayrık 2x8 bit veriyi
}
sayma=sayma+CCPR1L; // değişkene aktarma
}
frekans=500000/Sayma; // frekans değerine çevirme
void main()
WordToStr(frekans, cevir); // frekans değerini
{ Lcd_Init(); // karaktere çevirme
Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1,1,"f="); // LCD’ye “f=” yaz
Lcd_Cmd(_LCD_CURSOR_OFF); Lcd_Out(1,4,cevir); // LCD’ye ölçülen değeri yaz
}
TRISB = 0x00;
TRISC.B2 = 1; // RC2 pini giriş (CCP1 input) }

T1CON = 0x21; // 0b0010 0001


İşlemler:
// Enable Timer1 , Internal Osc. Prescaler=1/ 4,
1) Frekansı değiştirerek ( 20Hz, 50Hz, 500Hz, 2KHz)
CCPR1L = 0x00;
ölçümleri gözlemleyiniz.
CCPR1H = 0x00; 2) Prescaler bölme oranını değiştirerek 1. adımı
CCP1CON = 0x05; // 0b0000 0101 tekrarlayınız.

// CCP1 modül: tek yükselen kenar yakalama modu,

Dr.Öğr.Üyesi Hasan H. ÇELİK


9

Deney 8. 4x4 Keypad Okuma

unsigned short tuskod, sayac = 0;


char keypadPort at PORTD; // Keypad port tanımlama
char txt[6];

// LCD bağlantıları için pin tanımlama

sbit LCD_RS at RB4_bit;


sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;


sbit LCD_EN_Direction at TRISB5_bit; //Tuş kodunu ASCII koda dönüştür
sbit LCD_D4_Direction at TRISB0_bit;
switch (tuskod) {
sbit LCD_D5_Direction at TRISB1_bit;
case 1: tuskod = 49; break; // 1
sbit LCD_D6_Direction at TRISB2_bit;
case 2: tuskod = 50; break; // 2
sbit LCD_D7_Direction at TRISB3_bit;
case 3: tuskod = 51; break; // 3
case 4: tuskod = 65; break; // A
void main()
case 5: tuskod = 52; break; // 4
{
case 6: tuskod = 53; break; // 5
sayac = 0;
case 7: tuskod = 54; break; // 6
Keypad_Init(); // Keypad'i tanıt case 8: tuskod = 66; break; // B
Lcd_Init(); // LCD'yi tanıt case 9: tuskod = 55; break; // 7
Lcd_Cmd(_LCD_CLEAR); // Displayi sil case 10: tuskod = 56; break; // 8

Lcd_Cmd(_LCD_CURSOR_OFF); // Kursörü kapat case 11: tuskod = 57; break; // 9


case 12: tuskod = 67; break; // C
Lcd_Out(1, 1, "Aktif Tus:"); // 1. satıra mesaj yaz
case 13: tuskod = 42; break; // *
Lcd_Out(2, 1, "ASCII kod:"); // 2. satıra mesaj yaz
case 14: tuskod = 48; break; // 0
case 15: tuskod = 35; break; // #
do {
case 16: tuskod = 68; break; // D
tuskod = 0; // Reset tuskod
}

do // Tuş basma- bırakma kontrol çevrimi Lcd_Chr(1, 12, tuskod); // Tuskodunu LCD'ye yaz
tuskod = Keypad_Key_Press(); // Tus algıla
byteToStr(tuskod, txt); // Sayıyı karakter
while (!tuskod); //tus bırakma kontrol
dizisine dönüştür
Lcd_Out(2, 12, txt); // LCD ye yaz

} while (1);
}

Dr.Öğr.Üyesi Hasan H. ÇELİK

You might also like