ÇOKLU PIC KULLANIMI
Bu makalede iki PIC 16F877 nin birbirine bağlanması ve birinin ürettiği dinamik değerin diğer PIC e iletilmesi, 2. PIC te değerlendirilip alıcı cihaz, devreye iletilmesi anlatılacaktır.
Bu çalışma ile bir mikroişlemcinin dışarıdan nasıl dinamik bilgi aldığını ve sürekli değişen bu bilgileri nasıl değerlendirdiğini ve yeni veriler şeklinde çıkışa vererek bağlı olduğu cihazı nasıl kontrol ettiğini görmüş olacağız. Birçok proje için bir ilham kaynağı olabilir ve aynı zamanda mikroişlemcileri kontrol etme yeteneğinizi artıracak bir uygulama olacaktır.
Uygulamayı basit tuttuk. Birinci PIC ikinci PIC ten bilgileri 8 bit olarak alan ve bunları kontrol edip çıkışa veren PIC tir. İkinci PIC ise birinci PIC e bağlıdır ve bu PIC e sürekli veri gönderimi yapmaktadır. 2. PIC 1’den 255 e kadar olan sayıları 1 er, 1 er sayar ve 2. PIC e gönderir. 2. PIC gelen bu bilgileri okur ve çıkışa yönlendirir. Böylece ikilik düzende sayma sisteminin bitlerini gösteren led’ler, bitlerin 1 veya 0 oluşuna göre yanıp söner.
2. PIC den gelen bitler portread() fonksiyonunda okunuyor ve sayısal bir değere çevriliyor. Biz PIC2 den okunan verileri direkt D portlarının çıkışına da yönlendirebilirdik ama amacım tabii ki led yaktırmak değil PIC mikroişlemciye hakim olmanızı sağlamak.
PIC1 KAYNAK KODLARI
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
int portread();
void main()
{
while(TRUE)
{
setup_psp(PSP_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_b(0xFF);
set_tris_d(0x00);
output_b(0x00);
output_d(0x00);
set_tris_a(0xFF);
output_a(0x00);
int micro1=0;
while(TRUE)
{
if(input(PIN_A0)==1)
{
micro1=portread();
output_d(micro1);
delay_ms(300);
}
else
{
output_d(0b00000000);
}
}
}
}
int portread()
{
int sayi=0;
if(input(PIN_B0)==1)
{
sayi = sayi +1;
}
if(input(PIN_B1)==1)
{
sayi = sayi +2;
}
if(input(PIN_B2)==1)
{
sayi = sayi +4;
}
if(input(PIN_B3)==1)
{
sayi = sayi +8;
}
if(input(PIN_B4)==1)
{
sayi = sayi +16;
}
if(input(PIN_B5)==1)
{
sayi = sayi +32;
}
if(input(PIN_B6)==1)
{
sayi = sayi +64;
}
if(input(PIN_B7)==1)
{
sayi = sayi +128;
}
return sayi;
}
PIC2 Kaynak Kodları
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
void main()
{
while(TRUE)
{
setup_psp(PSP_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_b(0x00);
output_b(0x00);
int deger;
while(TRUE)
{
for(int i=0; i<255; i++)
{
deger=i;
output_b(deger);
delay_ms(300);
}
}
}
}
SANATSAL BİLGİ
06/11/2016