PIC16F877 ve comport haberleşmesi

Başlatan aeldem, 21 Ocak 2013, 09:30:05

aeldem

Merhaba arkadaşlar.
PIC16F877 nin B portuna bağlı 8 tane butonum var. bunlardan hangisine basılırsa o anda rs232 üzerinden comporta veri göndermesini  istiyorum.  daha sonrada c# gibi bir programdan da comport taki veriyi okuyup durumlara göre işlem yapmak istiyorum. bilgisayarımda comport yok. o yüzden de virtual serial port driver eltima yı kurdum. 2 tane sanal port belirledim. 1 ini ISIS te diğerini de C# ta kullanacağım. ama ben PICC de yazdığım kodu bir türlü ISIS teki arayüzde çalıştıramadım. yani ISIS i çalıştırdığım anda butona bastığımda bacaklardaki değişikliği o anda görüyorum. ama comport a herhangi bir veri aktarmıyor. eltima dan bakıyorum herhangi bir sent işlemi varmı diye. ama hep 0 gösteriyor. C# tan da comporttan gelen bir veri varmı die bakıyorum. orda da boş bilgi görünüyor. (bu arada PIC i yeni öğreniyorum)

Devrenin Kodu

#include <16f877.h>
#use delay (clock=4M)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1,bits=8)

void main()
{
set_tris_b(0xff); //b portu giriş olarak ayarlandı
 while(1)
 {
   if(input(PIN_B0)==1)
      putc('a');
   if(input(PIN_B1)==1)
      putc('b');
   if(input(PIN_B2)==1)
      putc('c');
   if(input(PIN_B3)==1)
      putc('d');
   if(input(PIN_B4)==1)
      putc('e');
   if(input(PIN_B5)==1)
      putc('f');
   if(input(PIN_B6)==1)
      putc('g');
   if(input(PIN_B7)==1)
      putc('h');
 }
}



Devrenin Şeması



jrcapa

 if(input(PIN_B0)==1)
B portu zaten komple 1.
if(!input(PIN_B0)) şeklinde değiştirin.Veya bacakları gnd'ye çekin.
Bir de butonlara basım sonrası ark gecikmesi ya da  while(!input(PIN_B0))  gibi bekleme süresi koymanız sağlıklı olur.

aeldem

#2
jrcapa kodu dediğiniz gibi kodu değiştirdim ama hala çalışmıyor :( yani veri iletimi yapmıyor:( yapabileceğim başka birşey varmı? devredeki buton bağlantılarını da internette gördüğüm gibi yaptım hep. orda varmı dikkatinizi çeken bişey??


void main()
{
set_tris_b(0xff); //b portu giriş olarak ayarlandı
 while(1)
 {
 if (input(PIN_B0)==0)
   {
     putc('a');
     delay_ms(2000); 
   }
 }
}

jrcapa

#3
c1 ,c2  22pF olacak. max232'nin Vcc' sini bağlamamışsınız. X1 kristalini 4MHz 'e ayarlayın. Pic frekansını da 4Mhz yapın. MCLR bacağını 10k ile 5V'a çekin.Bağlantılara dikkat edin.

aeldem

#4
jrcapa dediklerinizi yaptım. tekrar denedim ama yine veri iletmiyor:((


jrcapa

c1, c2 nF mı pF mı? Dostum pice yeni başladıysan basit uygulamardan başla, kitap kaynak bol sitede. Kendin uğraşma bizi de uğraştırma :) 
Aşağıda Serdar Çiçek'in kitabındaki devreyi incele,bağlantıları özellikle. Kolay gelsin.

http://www.yukletr.com/download.php?file=3f545390ca7bf81f369db3e2c0f15eea

aeldem

jrcapa gönderdiğin dosyalar için teşekkür ederim. bende ordaki devreye göre kendiminkini düzenledim. compim bileşeni yerine 9 pinli konnektörü koydum. ve oldu. yani butonlara basınca ekraana yazdı.
ama 9 pinli konnektör koyunca c# ta com1 i oku dediğimde haliyle okumuyor. çünkü compim de com1,com2 diye seçebiliyorduk. ama 9 pinli konnektörde öyle bir durum yok :( bu arada devreye compim koydum ve devre çalışmadı. o yüzden 9 pinli konnektörün com1 mi com2 mi olduğunu söylemem gerekiyor. onu nasıl göstertebilirim ???  :((

aeldem


tamam o sorunu da çözdüm. forum da aynı konu daha önceden konuşulmuş. jrcapa yardımlarınız için teşekkür ederim tekrardan. iyi çalışmalar

https://www.picproje.org/index.php?topic=33056.0