Ad, Soyad, Numara ve İmzanızı tükenmez kalem ile doldurunuz.
Ad, Soyad:
Öğrenci No:
İmza: 08/06/2018, Cuma
DUMLUPINAR ÜNİVERSİTESİ
ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ MİKRODENETLEYİCİLER DERSİ FİNAL SINAVI
SORULAR
1. (25 puan) Aşağıdaki program kodunun icrası sırasında tanımlı hafıza bölgelerinin içeriklerini her komuttan sonra ne şekilde değişecektir? Kutucuklara doldurunuz. (Bazı komut satırları, değişkenlerin içeriğine göre program akışında işletilmeyebilir. Bu satırları doldurmayınız.)
Değişken ve Adresi > w
kaydedicisi
FSR INDF A
0x20h B 0x21h
C 0x22h
Kaydedicilerin Başlangıç Değerleri > 0x00 0x00 0x00 0xBA 0xC3 0xF8
….
movlw 0x21 0x21 0x00 0x00 0xBA 0xC3 0xF8
movwf FSR 0x21 0x21 0xC3 0xBA 0xC3 0xF8
incf FSR,1 0x21 0x22 0xF8 0xBA 0xC3 0xF8
swapf INDF,1 0x21 0x22 0x8F 0xBA 0xC3 0x8F
rrf INDF,0 (Carry=0) 0x47 0x22 0x8F 0xBA 0xC3 0x8F btfss A,1 0x47 0x22 0x8F 0xBA 0xC3 0x8F xorwf INDF,0 atlar
subwf INDF,1 (0x8F-0x47=0x48) 0x47 0x22 0x48 0xBA 0xC3 0x48 2. (20 puan) Aşağıdaki boşlukları uygun şekilde doldurunuz.
- 0x5F3A – 0x2F8D çıkarma işleminin 0x2FAD dir.
- 1 Mhz saat (clock) frekansına sahip bir PIC mikrodenetleyicisi için bir komutun çalıştırılması için gerekli süre 4 mikrosaniye dir.
- TRISB= 0xCC olarak atandığında, B portunun 2,3,6,7 numaralı pinleri giriş, 0,1,4,5 numaralı pinleri çıkış olarak tanımlanmıştır.
- ADCON1= 0x09 atandığında PIC’in A0, A1, A2, A3, A5, E0 pinleri analog giriş olarak kullanılabilir.
- “btfss A,1” komutunun makine dili karşılığı 01 1100 1010 0000 dır.
- 16Kbyte lık bir RAM hafıza elemanın adres hattı 14 bittir.
- 4Mhz kristal osilatör frekansı kullanan bir devrede PWM modülü kullanılacaktır. Bunun için, Timer2 preskaler değeri (PS) 16 ve PR2 kaydedici değeri 0x7F için üretilen PWM sinyalinin frekansı yaklaşık 0.5 kHz dır. İş yapma (duty) periyodu %50 olması için CCPR1L kaydedicine 0x3F değeri atanmalıdır.
3. (20 puan) PortC.0 ve PortC.2 de iki adet LED bağlıdır. PortC.1 ve PortC.3 de iki adet pull-down bağlı buton vardır. PortC.1 deki butona basıldığında PortC.0 deki LED durum değiştirmektedir. (sönük ise yanacak, yanık ise sönecek). Ve PortC.3 deki butona basıldığında PortC.2 deki LED’in yanması istenmektedir. Bu program kodunu MikroC dilinde yazın. (kullanılmayan pinler giriş tanımlanmalıdır.). Devrenin şemasını çiziniz.
#define buton1 PORTC.RC1
#define buton2 PORTC.RC3
#define led1 PORTC.RC0
#define led2 PORTC.RC2 void main(){
TRISC = 0xFA; // C portunun girisi ve cikis lari ayarlandi.
led1=0; led2=0;
for(;;){
if(buton1==1) // pulldown olduğu için butona basıldığında pinden lojik1 okunur { led1 = ~led1;
Delay_Ms(100); } if(buton2==1) { led2 = 1;
Delay_Ms(100); } } // sonsuz dongu
}
4. (15 puan) PIC16F877 ile Akım Ölçümü (Ampermetre): Ölçüm direnci ile akım ölçme işlemi için aşağıdaki devre kullanılmaktadır. Devreden geçen akım, ölçüm direnci üzerinde bir gerilim düşümü oluşturur.
(Völçüm=IxRölçüm). Bu gerilim okunarak ohm kanunundan akım değeri hesaplanır.
Rölçüm=0.5ohm’luk bir seri direnç üzerindeki gerilim PortA.2 analog kanalına üzerinden okunmaktadır. a) Direnç üzerinde 1A’lik akım geçerse, direnç üzerindeki gerilim nedir ve ADC den hangi değer okunmaktadır. b) PIC’in analog kanalından okuyabileceği maksimum akım değeri ne olur? c) PIC16f877 için bu devre kullanılarak akımı ölçen ve LCD ekranda gösteren programı MikroC dilinde yazınız. (LCD pin tanımlamalarını yazmayınız.)
c) char txt1[] = " Akim= ";
char txt2[] = "00" ; unsigned int akim;
void main(){
ADCON0 = 0x11 ; // AN2 kanalı için olabilecek ADCON1 = 0x00; // değerlerden biri
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,txt1);
for(;;) // ana program sonsuz dongu {
akim = ADC_Read(2); // ADC okuma akim = akim/ 100 ; // Akim değerine dönüşüm txt2[0]= (akim %/10) +48; // Onlar basamagi txt2[1]= (akim %10)+48; // Birler basamagi Lcd_Out(1,11,txt2); // akim degiskeni yazdirilir } }
a) 1A için direnç ucundaki gerilim 0.5V olur 10 bit ADC için 5mV, 1 ADC adımıdır
0.5V ise 500mV/5mV = 100 adımdır.
Yani 1A, 100 ADC adımıdır.
b) Max 5V gerilim PIC ile dijitale dönüştürülebilir.
1A için direnç ucundaki gerilim 0.5V ise X A için direnç ucundaki gerilim 5V olur.
X= 5/0.5 = 10 A bulunur. (max)
Bu devre ile 0 -10 A akım değeri örneklenebilir.
5. (20 puan) PortB ye 3 adet 7 segment displayin veri hattı bağlanmıştır. PortC’nin 0,1 ve 2. bitleri ile bu displayler aktif edilmektedir. Displaylerde sürekli olarak “Uo=” yazısı gösterilecek şekilde çalışan devre için MikroC programını yazınız. (Bağlantı şeması ve display görüntüsü şekilde verilmiştir)
#define sec0 PORTC.RC0
#define sec1 PORTC.RC1
#define sec2 PORTC.RC2 void main(){
ADCON1 = 0x07;
TRISC = 0b11111000;
TRISB = 0x00;
sec0 = 0; sec1 = 0; sec2 = 0;
for (;;) {
sec0 = 1; sec1 = 0; sec2 = 0;
PORTB = 0x3E; // 1. display "U" yazildi Delay_ms(1); // 1 ms bekle
PORTB = 0x00; // displaya sifir yazildi sec0 = 0; sec1 = 1; sec2 = 0;
PORTB = 0x5C; // 2. display "o" yazildi Delay_ms(1); // 1 ms bekle
PORTB = 0x00; // displaya sifir yazildi
sec0 = 0; sec1 = 0; sec2 = 1;
PORTB = 0x48; // 3. display "=" yazildi Delay_ms(1); // 1 ms bekle
PORTB = 0x00; // displaya sifir yazildi }}
Not: Süre 90 dk.’dır. Hesap makinası kullanılabilir. Başarılar. Dr. Kadir VARDAR