pic programlama dersleri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

PIC PROGRAMLAMA 15--- EPROMLAR


Epromalar bir hafıza elemanıdır.16f877 denetleyicisi içersinde 2 adet eprom hafıza alanı bulunmaktadır.Bunlar;Dahili data eeprom ve Flash program eeprom hafıza alanıdır.Epromlar elektrik kesildiginde hafızasındaki beriyi kaybetmezler.Ancak bu veri programla okunur,yazılır veya silinebilir.Dahili epromlara 8 bit veri yazılır ve okunur.16f877 denetleyicisine 256byte hafızaya sahiptir.Yani 256 tane 8 bit veri saklanabilir.


1)#int_eeprom


Epromlarda yazma işlemi bitince istenirse kesmeye gidilebilir.

2)read_eeprom()


Bu fonksiyon ile eprom adresindeki veriyi okuruz.
Degişken ismi=read_eeprom(adres) şeklindedir.Adres kısmı eeprom hafıza kapasitesine göre 8 bit veya 16 bit olarak degişir.

veri=read_eeprom(42)//42 nolu adres okunur ve veri degişkenine atılır

3)write_eeprom()

Bu fonksiyon ile eprom adresine yazı yazarız.
Degişken ismi=write_eeprom(adres,bilgi) şeklindedir.Adres kısmı 8 yada 16 bit olabilir.Bilgi kısmı 8 bitlik bir tamsayıdır.

write_eeprom(42,veri)//veri degerini 42. adrese yaz

#FUSE CPD=data eeprom korumasını aktif yapar
#FUSE NOCPD=data eeprom korumasını kapatır
#FUSE NOPROTECT=kod hafıza korumasını pasif yapar
#FUSE PROTECT=kod hafıza korumasını aktif yapar
#FUSE WRT=hafıza yazmaya karşı korumalı
#FUSE NOWRT=hafıza yazmaya karşı korumasız



Gelelim uygulamamıza :




#use delay(clock=4000000)
#define use_portd_lcd true
#include <lcd.c>
long int oku,tl5,tl10,tl15,tl20,tl25,toplam;
void main()
{
set_tris_a(0xff);//a portu tamamen giriş
set_tris_d(0*00);//d portu tamamen çıkış
lcd_init();//lcd hazırlanıyor
while(true)
{
oku=read_eeprom(5);//5 nolu adresten veri okunuyor
if(oku==255)//epromlar üzerinde oynama yapılmadıgından dolayı en fazla 255 kadar saymaktadır
{
write_eeprom(0,0);//0 adresi degeri 0 yapılır
write_eeprom(1,0);//1 adres degeri 0 yapılır
write_eeprom(2,0);
write_eeprom(3,0);
write_eeprom(4,0);
write_eeprom(5,0);
}
lcd_gotoxy(2,1);//lcd imleci 2.sütün 1.satıra gider
printf(lcd_putc,"TOPLAM MIKTAR");//toplam tutar ekrana yazdırılıyor
tl5=read_eeprom(0);//tl5 degişkenine eprom 0 adresindeki veri aktarılır
tl10=read_eeprom(1);//tl10 degişkenine eprom 1 adresindeki veri aktarılır
tl15=read_eeprom(2);
tl20=read_eeprom(3);
tl25=read_eeprom(4);
toplam=tl5*5+tl10*10+tl15*15+tl20*20+tl25*25;//toplam degişkenine para tutarları aktarılıyor
lcd_gotoxy(6,2);//imleç 6.sütün 2. satıra gider
printf(lcd_putc,"%ld TL",toplam);//toplam degeri ekrana yazdırılır
if(input(pin_a0)==1)//pin_a1 aktif mi ?
{
while(input(pin_a0));//butondan el çekinceye kadar bekle
lcd_init();//lcd hazıla 
tl5++;//tl5 degerini arttır
write_eeprom(0,tl5);//0. adresi tl5 degerini ata
}
else if(input(pin_a0)==1)
{
while(input(pin_a0));
lcd_init();
tl5++;
write_eeprom(0,tl5);
else if(input(pin_a1)==1)
{
while(input(pin_a1));
lcd_init();
tl10++;
write_eeprom(1,tl10);
}
else if(input(pin_a2)==1)
{
while(input(pin_a2));
lcd_init();
tl15++;
write_eeprom(2,tl15);
}
else if(input(pin_a3)==1)
{
while(input(pin_a3));
lcd_init();
tl20++;
write_eeprom(3,tl20);
}
else if(input(pin_a4)==1)
{
while(input(pin_a4));
lcd_init();
tl25++;
write_eeprom(4,tl25);
}
}
}


PİC PROGRAMLAMA-12
Merhaba arkadaşlar.Bugün aşşa yukarı her kavşakta trafik ışıgı görüyoruz.Bunun yazılım kısmını anlatacagım bugün.Şekilde görüldügü gibi devremizi olusturuyoruz.

Gelelim kod kısmına;

void main()
{

   while(TRUE)
   {delay_ms(100);//0,1 sn bekletmemin sebebi ilk başlattıgımız anda ilk satırı atlıyor
   //bu atlamayı engellemek için bu komutu kullandım
output_high(pin_b6);//b6 pini aktif
output_high(pin_b0);//b0 pini aktif
delay_ms(2000);//2 sn bekle.Bu saniye kısmını kendınız ayarlayabılırsınız
output_low(pin_b0);//b0 pini pasif
output_low(pin_b6);//b6 pini pasif
delay_ms(1000);//1 sn bekle
output_high(pin_b1);//b1 pini aktif
output_high(pin_b5);//b5 pini aktif
delay_ms(2000);//2 sn bekle.
output_low(pin_b1);//b1 pini pasif
output_low(pin_b5);//b5 pini pasif
delay_ms(1000);//1 sn bekle
output_high(pin_b2);//b2 pini aktif
output_high(pin_b4);//b4 pini aktif
delay_ms(2000);//2 sn bekle.
output_low(pin_b2);//b2 pini pasif
output_low(pin_b4);//b4 pini pasif
delay_ms(1000);//1 sn bekle
   }

}
PİC PROGRAMLAMA-9
Merhaba arkadaşlar.Bugünkü dersimizde lcd ile kayan yazı yazmayı ögrenecegiz.Şekilde görüldügü gibi devremizi oluşturalım.
Ve kod kısmına geçelim :
#include <main.h>
#define use_portb_lcd true
#include<lcd.c>
int sayi,i;
void main()
{
   while(TRUE)
   {
      for(i=0;i<40;i++)//40 karekterlik döngü
      {
      lcd_gotoxy(1,1);//imlece 1.satır 1. stüna getirir
      lcd_send_byte(0,0x1c);//karekteri sola kaydırır
      printf(lcd_putc,"http://elektro-blogger.blogspot.com.tr/");//ekrana yazırılacak yazı
      delay_ms(250);
      }
   }

}
Not:lcd_send_byte(0,0x18) komutu ise lcd ekranında yazımızı saga kaydırmanıza yarar

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.

PIC PROGRAMALAMA-6
Merhaba arkadaşlar.Bugün kü projemizde lcd kullanarak sayıcı yapmayı deneyecegiz.
Şekildeki devremizi oluşturuyoruz.
İleri butonumuz=2 nolu bacagımıza
Geri butonumuz=3 nolu bacagımıza bagladık
Gelelim kodlarımıza ;
#define use_portb_lcd TRUE// lcd mızın hangı portta baglı oldugunu tanımladık
#define ileri pin_a0// a0 pinine ileri butonumuzun baglandıgını tanımladık
#define geri pin_a1// a1 pinine geri butonumuzun baglandıgını tanımladık
#include<lcd.c> // lcd için eklenmesi gereken kütüphane
int x;
int y=100;
void main()
{set_tris_a(0*10);// a portumuzun 2 girişi aktif olmasını için kullanıyoruz
set_tris_b(0*00);// b portumuz aktif degil
lcd_init();//lcd hazırlanıyor
printf(lcd_putc,"SAYI1=0");//lcd ekranımızda sayı1 i yazdık
printf(lcd_putc,"\nSAYI2=100");//lcd ekranımıza sayı2 i yazdık
while(true)
{if(input(pin_a0))//ileri butonumuz aktif ise
{x++;//x i arttır
y=100;//y ilk degerine döndür
while(input(pin_a0))//buton bırakıldımı(bu sayıların hızlıca artmasını engelleyen fonksiyondur)
{if(x==100)//x=100 ise
{delay_ms(10);
x=0;//başa döndür yani ilk degerine}}
printf(lcd_putc,"\fSAYI1=%d",x);//x degerini lcd ye yaz
}
if(input(pin_a1))//geri butonumuz aktif ise
{y--;//y yi azalt
x=0;//x i ilk degerini ata
while(input(pin_a1))//buton bırakıldımı(bu sayıların hızlıca artmasını engelleyen fonksiyondur)
{if(y==0)//y=0 ise
{delay_ms(10);
y=100;//başa döndür yani ilk degerine}}
printf(lcd_putc,"\f\nSAYI2=%d",y);//y degerini lcd ye yaz}
}
}}}}}}

PIC PROGRAMALAMA-5
Merhaba arkadaşlar.Bugün yapacagımız projemiz ise lcd ekranına yazı yazdırma olacak.
Öncelikle şekildeki devremizi oluşturuyoruz.
Gelelim kod kısmımmıza ;

#include "C:\Users\Eren Uzbay\Desktop\CCS pic programlama\Yeni klasör\lcd.h"
#define use_portb_lcd TRUE // lcd nın hangı porta baglı olacagını gösteririr
#include<lcd.c> // lcd çalışması için eklememiz gereken kütüphanemiz
int x; // int yani tamsayı şeklinde bir degişken tanımladık
float y;// float yani gerçel sayı şeklinde bir degişken tanımladık
void main()
{
x=12;
y=5.56;
set_tris_b(0*00);// b portumuz çıkış
lcd_init();// lcd hazırlanıyor
while(true)// sonsuz döngüye sokuyoruz
{//C++ tan hatırladıgımız ekrana bir degeri yazdırırken printf komutunu kullanmıstık.Burdada aynı komutu kullanıyoruz
printf(lcd_putc,"\f Merhaba ");// burada lcd_putc yazamamızın sebebı lcd ekranına yazı yazdırmak için kullanıyoruz.
//2. önemli noktamız ise \f kullanma sebebımız ise lcd ekranında önceden kalan yazıları temizlemek için kullandık
delay_ms(1000);// 1000 ms gecıkme süremiz
printf(lcd_putc,"\f\n1.sayimiz:%d ",x);//\n komutu ıle ımlecımızı yanı yazımızı 1 satır alta kaydırdık ve x degişkenimizi ekrana yazdırdık
delay_ms(1000); 
printf(lcd_putc,"\f2.sayimiz:%f",y);//y degişkenımızı ekrana yazdırdık
delay_ms(1000);
printf(lcd_putc,"\fELEKTRO-BLOGGER");
delay_ms(3000);

}

PIC PROGRAMLAMA-4
Merhaba arkadaşlar.Bugün kü projemiz buton ile sayıcı devresi tasarımı yapacagız.İlk olarak şekilde ki gibi proteus devremızı olusturuyoruz.
Şimdi gelelim kodlarımıza;
#define buton pin_A0    // "buton" adında "pin_A0" kelimesine eşit bir sabit tanımlanıyor
int i=1;     // i değişkeni tanımlanıyor
void main ()
{  
   set_tris_a(0x01);    // RA0 pini giriş olarak yönlendiriliyor
   set_tris_b(0x00);   // RB0 portu tümüyle çıkış olarak yönlendiriliyor
  output_b(0x00);      // B portu çıkışları sıfırlanıyor
   while(true)       // Sonsuz döngü oluşturuluyor
   {
      if (input(buton))
      {
         delay_ms(15);  // Butona basılınca meydana gelen arkın etkisini önlemek için verilen gecikme
         output_b(i);   // b portuna i değeri yükleniyor
         i=i+1;         // i değeri 1 arttırılıyor
         while(input(buton)); // Buton bırakılana kadar bekle
         if (i==10)     // i değeri test ediliyor.i değeri 10 olunca sıfırlanıyor.
         { i=0;// i değeri sıfırlanıyor
       
         }
      }
   }

PIC PROGRAMLAMA-3
Merhaba arakadaşlar.Bugünkü uygulamamızda 0-9 arası ileri-geri sayıcı devresi ve 0-99 arası arası ileri-geri sayıcı devresi tasarımı yapacagız.
İlk olarak 0-9 arası sayıcı devremizden başlayalım.
 Devremizi şekildeki gibi kuralım. Gelelim kod kısmımıza arkadaşlar;
void main()
{
int i;
   while(true)
   {
   for(i=0;i<10;i++)//0-9 arası ileri sayım yapar
   {
   output_b(i);//i yi b çıkışına at
   delay_ms(1000);//1 sn bekle
 
   }
   for(i=9;i>0;i--)//9-0 arası geri sayım yapar
   {output_b(i);//i yi b çıkışına at
   delay_ms(1000);//1 sn bekle
   }
   }
   }
....
Şimdi gelelim 0-99 arası sayıcı devremizi tasarlayalım
Gelelim şimdi  kod kısmına;
void main()
{
int i,birler,onlar,binler;//birler ve onlar basamıgını tanımladık
while(true)
{
for(i=0;i<1000;i++)//0-99 arası sayım yapılacak dongü
{
birler=i%10;//birler basamagını belirledik(sayımızın 10 ile bölümünde kalanına göre işlem yaptık)
onlar=i/10;//onlar basmagını belirledik(10 ile tam bölünen sayılara göre işlem yaptık)
output_a(onlar);//a portumuzun  çıkışına onlar basamagını atadık
output_b(birler);//b portumuzun çıkışına birler basamagını atadık
delay_ms(100);//0,1 sn bekledik
}
for(i=99;i>0;i--)//99-0 arası geri sayım yaptıgımız döngümüz
{
birler=i%10;//birler basamagını belirledik
onlar=i/10;//onlar basmagını belirledik
output_a(onlar);//a portumuzun  çıkışına onlar basamagını atadık
output_b(birler);//b portumuzun çıkışına birler basamagını atadık
delay_ms(100);//0,1 sn bekledik
}
}

}


PIC PROJE-2 
Merhaba arakdaşlar. Bu projemizde butonlarla led yakmayı gösterecegim. Şekildeki devremizi similasyon programımızda oluşturuyoruz. Gelelim kod kısmımıza. Kodlamaya başlamadan önce,kodların içerisinde if-else yapısını kullanacagımız için kısaca ondan bahsetmek istiyorum. 
İf(gerçekleşmesini istedigimiz şartımız)
{
şartımız oldugu takdirdeki
kolarımızı buraya yazıyoruz.
}
else
{
şartımız olmuyorsa kodlarımızı buraya yazıyoruz
}
Örnek verecek olursak;
if(a%2==0)//a syısının 2 ile bölümünden kalan 0 ise
{
printf("%d sayısı çifttir",a);// bunları yap
}
else// degilse
{
printf("%d sayısı tektir",a);// bunu yap
}
Gelelim pic kodumuza arkadaşlar :

void main()
{
set_tris_a(0*00);//a portunu çıkış olarak gösterdik
output_a(0*00);// a portu çıkışları sıfırladık
while(true)
{
if(input(pin_b0)==1)//Eger B0 port girişi high(aktif) ise A0 pinini high(aktif) yap
{
output_high(pin_a0);
}
else//Degilse A0 portunu low(pasif) yap
{
output_low(pin_a0);
}
if(input(pin_b1)==1)//Eger B1 port girişi high(aktif) ise A1 pinini high(aktif) yap
{
output_high(pin_a1);
}
else//Degilse A1 portunu low(pasif) yap
{
output_low(pin_a1);
}
if(input(pin_b2)==1)//Eger B2 port girişi high(aktif) ise A2 pinini high(aktif) yap
{
output_high(pin_a2);
}
else//Degilse A2 portunu low(pasif) yap
{
output_low(pin_a2);
}
if(input(pin_b3)==1)//Eger B3 port girişi high(aktif) ise A3 pinini high(aktif) yap
{
output_high(pin_a3);
}
else//Degilse A3 portunu low(pasif) yap
{
output_low(pin_a3);
}

}
}

Merhaba arkadaşlar. Pic ile ilgili anlatımlarımıza başlıyoruz
Öncelikli olarak "pic nedir?" sorusuna cevap verelim.
Pic,bir programı içerisinde depolayıp daha sonra çalıştırabilme özelliklerine sahip tek bir chip 'ten oluşan bilgisayardır.
İlk programımız klasik led-yakıp söndürme olacak. Eger pic ile ilk defa tanışmıssanız led yakıp-söndürme olayını ciddiye alın.Çünkü temel fonksiyonları ve kavramları nasıl kullanacagınız ögrenmiş olursunuz.Evinizde simülasyonla da devrenizin nasıl çalıştıgını görürsünüz.
Öncelikle Pic programlamak için pic basic,assembley,CCS gibi programlardan bir tanesini yüklemeniz gerekir. Ben CCS i tercih ediyorum . Çünkü kullanımı C++ çok benziyor.
Şimid ilk olarak CCS ile proje oluşturmayı ögrenelim.
CCS açtıgımızda önümüze böyle bir ekran geliyor.Burada sol üst taraftaki klasöre tıklayıroz ve New-Project Wizardı seçiyoruz.


Project wizarda tıkladıktan sonra dosyamızı nereye kaydedecegimizi seçtigimiz ekran karşımıza geliyor.

Projemizi kaydedecegimiz yeri seçtikten sonra karşımıza bböyel bir ekran geliyor.Burada pic türümüzü,frekansımızı ayarlayabilyoruz.İlk projemiz oldugundan PIC16F628A yı kullanacagız ve frekansımız 4Mhz yapacagız.Alt taraftanda frekansımızın 4Mhz den büyük olmasını seçiyoruz.



Karşımıza kodlarımızı yazacagımız ekranımız çıkıyor.
Bu ekranımızda:
void main()
{
kodlarımızı buraya yazıyoruz.
}


Gelelim ilk projemize;
 İsis ten PIC16F628A,led ve direnç(resistör) elemanlarını alalım.

Elemanlarımız ister şekildeki gibi istersekte başka şekillerde dizebiliriz. 
Gelelim kod kısmına;

void main()
{
set_tris_b(0*00);// b portu çıkışımız
output_b(0*00);// b portu çıkışlarımızı sıfırlıyoruz
   while(true)
   {
   output_high(PIN_B0);//B0 pinini aktif(yani +5V) yaptık
   delay_ms(100);// gecikme süresini 100 ms olarak belirledik
   output_low(pin_b0);//B0 pinini pasif(yani 0V) yaptık
   output_high(PIN_B1);
   delay_ms(100);
   output_low(pin_b1);
   output_high(PIN_B2);
   delay_ms(100);
   output_low(pin_b2);
   output_high(PIN_B3);
   delay_ms(100);
   output_low(pin_b3);
   output_high(PIN_B4);
   delay_ms(100);
   output_low(pin_b4);
   output_high(PIN_B5);
   delay_ms(100);
   output_low(pin_b5);
   output_high(PIN_B6);
   delay_ms(100);
   output_low(pin_b6);
   output_high(PIN_B7);
   delay_ms(100);
   output_low(pin_b7);
   }
}
NOT:ilk programımız oldugu için teker teker yazdım ki kodların nasıl kullanıldıgını görmeniz açısından.

ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger