Seri Portun PIC Mikro denetleyicilerle Pratik Kullanımı

Klavyeah

Üye
Katılım
28 Ağu 2006
Mesajlar
269
Puanları
1
Yaş
39
Seri Portun PIC Mikro denetleyicilerle Pratik Kullanımı

Hatırlayacağınız gibi daha önceki makalede assambly dilini kullanarak PIC’i programlamıştık. Bu yazımda ise hem anlaması hem de üzerinde değişiklik yapması oldukça kolay olan C diliyle PIC programlayacağız. C bilmeyenler için yeri geldikçe bahsedeceğiz değişiklikleri yaparak programı kendi amaçlarına göre değiştirebilirler.

Bilgisayar yazılımı olarak Visual Basic veya başka bir programlama dili bilenler kendi programlarını yazabilirler. Bilgisayar programcılığı ile arası pek iyi olmayanlar Hyperterminal’i (Start>Programs>Accessories>Communications>Hyperterminal) kullanabilirler. Eğer belirttiğim yolda Hyperterminal’e ulaşamıyorsanız Program Ekle/Kaldır’dan Hyperterminal’i yüklemeniz gerekiyor.

Kullandığım C derleyicisi CCS PIC C adıyla download edilebilir. Bu derleyici ile ilgili sorunlarınızı bize bildirirseniz yardımcı olamaya çalışırız.

Seri portla haberleşmede kullanılacak PIC için C kodu aşağıda verilmiştir. Program 16F84 için yazılmış olmasına rağmen;

#include <16F84.h> satırını değiştirerek istediğiniz bir PIC mikro denetleyiciyi kullanabilirsiniz.

#use delay(clock=4000000), satırı ile kullandığınız kristal osilatörün hızını, #use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2) satırı ile de seri haberleşmede kullanacağınız bacakları belirtiyorsunuz.

Hyperterminal’in iletişim hızı 9600 baud olarak ayarlanmış olmalıdır. iç USART’ı olan PIC’ler için RX ve TX bacaklarını kullanmanız daha verimli olacaktır (örneğin PIC 16F877 için RC7 RX ve RC6 TX bacakları kullanılmalıdır).

#byte port_b = 6 satırı PORTB’nin Register’lar (Register Map) arasındaki yerini gösterir. PORTA için bu satır #byte port_a = 5 şeklinde değiştirilmelidir. port_A veya port_B isimleri keyfidir siz bu isimleri programda da değiştirmek şartıyla istediğiniz gibi değiştirebilirsiniz. set_tris_b( 0x00 ); satırı PORTB’nin çıkış olacağını belirtiyor.

Bir portu giriş yapmak için bu satır set_tris_b( 0xFF ); şeklinde değiştirilmelidir.

While (TRUE) satırı sonsuz bir döngü yaratmak için kullanılmıştır.

Programda önce data adında bir değişken tanımlanıyor ve Hyperterminalden okunan tuş bu değişkene atanıyor. Daha sonra boş değişken PORTB’ye gönderiliyor. data değişkenini kullanmayıp port_b = getch(); satırı ile de aynı iş yapılmış olur. delay_ms(1000); satırı 1000 mili saniye yani 1 saniyelik gecikme sağlamak için kullanılmıştır.
Böylece basılan tuşun ascii değeri en az 1 saniye PORTB’deki LED’lerde görülür.

Herhangi bir tuşun ASCII karşılığını öğrenmek için aşağıda verdiğimiz tabloyu kullanabilirsiniz.

PIC mikro denetleyicinin bacaklarını seri portun Rx ve Tx girişlerine doğrudan girmek yerine arada MAX232 entegresini kullanmak verilerin hatasız iletimi açısından gereklidir. MAX232 entegresi -12, +12 V seviyesindeki seri port sinyallerini TTL (+5, 0 V) seviyesine veya TTL seviyesini -12 V, +12 V sinyallerine çevirir. Resimde PA1 ve PA2 PIC16F84’ün PORTA 1 ve 2 bacaklarıdır.

PC seiportu ile PIC’in MAX232 ile birbirine bağlanması

Bilgisayardan PIC’e Seri Portla Bilgi Göndermek

Bilgisayardan PIC’e Seri Portla Bilgi Göndermek için gerekli devre

//klavyeden girilen tuş değeri portb ye bağlı ledlerde görülür

#include <16F84.h>

#fuses XT,NOWDT,NOPROTECT

#use delay(clock=4000000)

#use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2)

#byte port_b = 6 //portb nin ramdeki yeri

main() {

int data;

set_tris_b( 0x00 ); //portb çıkış

printf("calisiyor…\n\r");

while (TRUE)
{

data = getch();
port_b = data; //gönderilen sayıyı portb de göster
delay_ms(1000);

}//sürekli tekrarla
}
PIC’ten Bilgisayara Seri Port ile Bilgi Göndermek

şimdi de PIC’ ten bilgisayara seri port ile bilgi gönderelim. Bunun için gereken devre şeması ve C kodları aşağıda verilmiştir. Sekizli anahtarlarla istenen değer girilir. Pullup dirençleri PIC’in bacaklarının boşta kalıp hatalı değerler okumasını önlemek içindir. RESPAK 8 Sekiz adet direnç içeren pakettir.
Gönderilen bilginin ASCII değeri Hyperterminal de görülecektir. Gerektiğinde yazının sonunda verilen ASCII tablosundan yararlanabilirsiniz.

PIC’ten Bilgisayara Seri Port ile Bilgi Göndermek için gerekli devre

// portb deki data bilgisayara gönderilir

#include <16F84A.h>

#fuses XT,NOWDT,NOPROTECT

#use delay(clock=4000000)

#use rs232(baud=9600, xmit=PIN_A1, rcv=PIN_A2)

#byte port_b = 6 //portb nin ramdeki yeri

main() {

int data;

set_tris_b( 0x00 ); //portb çıkış

printf("calisiyor...\n\r");

while (TRUE)
{

data = port_b; //bilgisayara gönderilecek data portb'de
printf("%d", data);
delay_ms(1000);

}//sürekli tekrarla
}

ASCII TABLOSU

http://www.indiririz.com/klavyeah/Seri_Portun_PIC_Mikro_denetleyicilerle.zip
 
Moderatör tarafında düzenlendi:
weed ' Alıntı:
klavye kardeş sayende pic i de öğrenicez walla.. plc yi söktük sayılır.. herkese bu formu ve seni anlatıyorum canım kardeşim..

Sağol Kardeşim Tşkler:p
 
linkleri göremiyorum ne yapmam gerek..? eksiklik bende mi sitede mi?
 
kaganakinci ' Alıntı:
linkleri göremiyorum ne yapmam gerek..? eksiklik bende mi sitede mi?
kardeş link aşagıda ben tekrar attım eger işine yarıyorsa bir bak iistersenn
 

Ekli dosyalar

  • Seri_Portun_PIC_Mikro_denetleyicilerle.zip
    174.1 KB · Görüntüleme: 0
@KlavYeaH
arkadaşım paylaşım için çok saol.buna benzer bir proje üzerinde çalışıyorum.aranıza yeni katıldım bir hocamın bu siteyi önerisi ile.

ben pic16f877 kullanarak dcservo motordan gelen analog hız bilgisini pc ye kaydetmek istiyorum.877 nin kendi adc sini kullanarak analog dijital dönüşümü yapmayı düşündüm.daha sonra da seri port vasıtası ile pc ye ulaşmayı.fakat picin adc si hakkında takıldığım hususlar var.adc ayalarını yaptık mesela 8 bit olcak falan dedik buraları biliyorum.fakat hangi pinden dijital çıkışı alacağımızı biz mi belirliyoruz yoksa belli bir pin varmı.

eğer biz belirliyorsak ben bunu 877 nin usart özelliğini kullanarak belirleyebilirmiyim.yani tx ve rc pinlerinden haberleşebilirmiyim.veya nasıl yapabilirim yardımcı olabilirmisiniz???
 
merhaba arkadaşım.pic ile pc arasında haberleşmede seri port kullnacaksan ve tabi seri portt kullanaksın,o zaman rx ve tx uçlarını kullanmalısın.ben pic16f877 entegresinin 25 ve 26 pinlerini kullanıyorum.biri rx diğeri de tx.
bu arada ben ve arkadaşlarımla pic16f877 ile yapılmış deneme kartı yaptık.bununla herşeyi deneme imkanına sahip durumdayız.ister program at,ister kayan yazı yap,istersen de harici bir devre yapıp boş pinleri kullanma şansımız var.
 
sağolasın kardeş paylaşm için çok teekkürler , verdiğin bilgiler çok iyi.
 
Arkadaslar bende pic 16f877 ve max232 kullanarak bi devre yaptım. Devrede lcd var. PC klavyesinden ne girilirse lcd de görecektik ama nedense olmadı. Birde proteusta denerken biz baud ayarlarını yapmadık proteusta yapmayı bilen varmı. Başlat/programlar/donaltılar/iletişim/hyper terminalde bu ayarları yaptık ama simulasyondada çalışmasını görmemiz için yapmamız gerekiyormuş bir fikri olan arkadas varmı
 
Komponentleri ekledigimiz bolumde, olcu aleti gorunumunde (AVOMETRE) Virtual Instruments Mode isimli bir ikon vardir. Bu ikona tiklarsaniz Virtual Terminal isimli bir secenek karsiniza cikar. Bunu design dosyaniza tasiyin ve Rx Tx baglantilarini yapin. Virtual Terminal ikonuna cift tiklarsaniz, size Edit Component adinda bir pencere acacaktir. Buradan gerekli ayarlamalari yapabilirsiniz. Bu sekilde butun islem design dosyasi icinde bitmis olur.
2. secenek ise; Windows Hyper Terminal ile Design dosyasini kullanmaktir. Bunun icin design dosyaniza ComPIM (COM Port Physical Interface Model) eklemeniz gereklidir. Daha sonra virtual port benzeri bir program kurmaniz ve sanal port cifti olusturup baglamaniz gerekir(kendisi otomatikman 2 port olusturup, cross olarak baglar). Sonrasinda yapmaniz gereken; Hyper Terminalde portlardan birini, ComPIM de digerini tanimlamaktir. Bu sekilde; yazacaginiz Windows tabanli arayuzleri, design dosyasi ile etkilesime sokabilirsiniz...
 

Forum istatistikleri

Konular
130,117
Mesajlar
933,283
Kullanıcılar
453,180
Son üye
pmux53

Yeni konular

Geri
Üst