pic ile led kontrol etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

PİC PORGRAMLA-10

Merhaba arkadaşlar.Bügünkü dersimizde Timer0 kesmesi ne demek onu anlatmaya çalışacagım.Diyelim ki güzel bir film izliyorsunuz.Filmin en heyecanlı yerinde telefonunuz çaldı.Filminizi durdurup telefonunuza bakarsınız.Ardından kaldıgınız yerden filminizi izlemeye devam edersiniz.Kesme olayıda aynen bu mantık üzeine çalışmaktadır. Kesme sinyali geldigi anda ana program çalışmayı bırakıp kesme de yapılacak olan işlemlere gidiyor ve onları icra ediyor.Ardından tekrardan ana programa geri dönüyor.16F877  ait kesme örnekleri;
1)RB0 kesmesi
2)RB4-RB7 pinlerindeki degişiklik kesmesi
3)Timer0 birimi taşma kesmesi
4)Timer1 birimi taşma kesmesi
5)Timer2 birimi taşma kesmesi
6)A/D çevirimi yapıldıgında meydana gelen kesme
7)CCP1 modulu kesmesi
8)CCP2 modulu kesmesi
9)Paralel porttan veri geldiginde oluşan kesme
10)Seri porttan veri geldiginde oluşan kesme

   setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2); // Timer0 ayarları yapılıyor.
//RTCC_EXT_H_TO_L=+5 volttan 0 volta düşünce olacak
//RTCC_EXT_L_TO_H=0 volttan +5 volta çıkınca olacak olan kesme
//RTCC_INTERNAL=Denetleyicinin çalışma frekansı olacak
//RTCC_DIV_2=bölme oranın ifade eder(2,4,8,16,32...256 olarak yazılabilir)
   set_timer0(254);   // TMR0 değeri belirleniyor
   enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
   enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver

Gelelim kod kısmına; 

#include <16f877.h>    
int sayi=0;
#int_timer0  // Timer0 kesmesi
void  timer0_kesme ()   // Kesme fonksiyonu ismi
{
      set_timer0(254);   // TMR0 değeri belirleniyor
       sayi++; // sayi değeri 1 arttrılıyor
      output_b(sayi);   // sayi değeri B portuna gönderiliyor

}
void main ( )
{
   setup_psp(PSP_DISABLED);       
   setup_spi(SPI_SS_DISABLED);   
   setup_timer_1(T1_DISABLED);    
   setup_timer_2(T2_DISABLED,0,1);
   setup_adc_ports(NO_ANALOGS);   
   setup_adc(ADC_OFF);            
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);           

   set_tris_a(0x10); // RA4 pini giriş
   set_tris_b(0x00);   // B portu komple çıkış
   output_b(0x00);     // B portu çıkışı ilk anda sıfırlanıyor
   setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2); // Timer0 ayarları yapılıyor
   set_timer0(254);   // TMR0 değeri belirleniyor
   enable_interrupts(INT_timer0); // int_timer0 kesmesini aktif yapar
   enable_interrupts(GLOBAL);     // Aktif edilen kesmelere izin ver
   while(true);   // Sonsuz döngü

 }
PİC PROGRAMLAMA -8
Merhaba arkadaşlar.Bugün ledler ile kalp animasyonu yapacagız.

Şekildeki gibi devremizi oluşturuyoruz. Ve gelelim kod kısmına :
int32 RND[]={0b00010001000100010001000100010001,//1-5-9-13-17-21-25-29 ledler yanacak
0b00110111011101110111011101110111,//4-8-12-16-20-24-26-30 ledler yanmayacak
0b00111111011111110111111101111111,//8-16-24 yanmayacak
0b00111111111111111111111111111111,//tüm ledler yanacak
};
void ShowAnimation(int32 anim)
{  output_a(anim);
   output_b(anim >> 6);
   output_c(anim >> 14);
   output_d(anim >> 22);
   }
int8 i;
void main()
{output_a(0*00);//a,b,c ve d portlarımız çıkış portumuz ve çıkışlarını lojik-0 olarak ayarladık
output_b(0*00);
output_c(0*00);
output_d(0*00);
set_tris_a(0*00);
set_tris_b(0*00);
set_tris_c(0*00);
set_tris_d(0*00);
delay_ms(100);
   while(TRUE)
   {
     ShowAnimation(RND[3]);//rnd dizisininin 3 indisindeki degeri alacak ve çıkışa gönderecek
     delay_ms(200);
     ShowAnimation(RND[2]);//rnd dizisininin 2 indisindeki degeri alacak ve çıkışa gönderecek
     delay_ms(200);
     ShowAnimation(RND[1]);//rnd dizisininin 1 indisindeki degeri alacak ve çıkışa gönderecek
     delay_ms(200);
     ShowAnimation(RND[0]);//rnd dizisininin 0 indisindeki degeri alacak ve çıkışa gönderecek
     delay_ms(200);
     for(i=0;i<30;i++)
     {delay_ms(500);
     ShowAnimation(0xFFFFFFFF<<(30-i));//bu döngü son ledden başlyarak 1.lede kadar yakar
     }
     delay_ms(500);
     for(i=0;i<30;i++)
     {delay_ms(500);
     ShowAnimation(0xFFFFFFFF>>i);//bu döngü son ledden başlayark 1.lede kadar söndürür
     }
     delay_ms(500);
     for(i=0;i<30;i++)
     {delay_ms(500);
     ShowAnimation(0xFFFFFFFF>>(30-i));//bu döngü 1.ledden başlayarak son lede kadar sırayla ledlerı yakar
     }
     delay_ms(500);
     for(i=0;i<30;i++)
     {delay_ms(500);
     ShowAnimation(0xFFFFFFFF<<i);//bu döngü 1.ledden başlayarak son lede kadar sırayla söndürür
     }
     delay_ms(500);
   }
}


Burada zaman ayarlaması ve animasyonlar üzerinde oynama yapabiliriz.
Devrenin proteus dosyasını isteyen arkadaşlar bize facebook üzerinden ulaşırlarssa seviniriz.
PIC PORGRAMALAMA-7
Merhaba arkadaşlar.Bugün karaşimşek devresini yapmayı anlatacagım sizlere.Pic programlama 1 de ki kodları kullanarak ta karaşimşek devresi yapılır.Fakat programcı mantıgını kavramış olmazssınız.Sadece zamanınızı boşa harcamış olursunuz.
Şekildeki devremizi oluşturup kod kısmına geçiş yapalım.
Gelelim kod kısmımıza;
void main()
{int a,b;//a ve b adı altında 2 degişken tanımladık
while(true){b=1;//kaydırma işlemimiz için sayılsal deger atadık
for(a=0;a<8;a++)
{output_b(b);//b çıkışındaki ledleri yak
b=b<<1;//b yi 1 birim sola kaydır
delay_ms(100);//100 ms bekle
}}}
Bu projemizi 16f877 entegresi ile de gerçekleştirebiliriz arkdaşlar.

ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger