Bilgisayardan PIC e veri gidiyor ama PIC ten PC ye gitmiyor.

Başlatan tayyip, 04 Haziran 2005, 20:26:17

tayyip

Borland C++ ta yazdığım program ile PIC ile PC arasında haberleşmem gerekiyor. Öncelikle bilgisayardan PIC e bir baytlık bir kontrol baytı gönderiyorum. Veriyi alan PIC cevap olarak kontrol baytını aldığına dair bir baytlık veri gönderiyor. Bilgisayardan PIC e veri gidiyor. ama PIC ten bilgisayara gitmiyor. Ne yaptımsa olmadı. PCW de yazdığım program (interrupt fonksiyonu olarak kullandım) ;


#int_rda
void serial_isr()
{
rs232_buffer=getc();
switch (rs232_buffer)
  {
  case (0x60):
     output_bit(ENABLE_X,0);
     output_bit(ENABLE_Y,0);
     output_bit(ENABLE_Z,0);
     putc(0x59);
   
  case (0x61):
     putc(0x62);
  break;
  }
}

bu program bilgisayardan 60 hex gelirse 59 gönderiyor, 61 gelirse 62 gönderiyor. veriyi PIC in alabildiğine eminim çünkü birinci case in içine girdiğini orda putc den önce yapılan işlemlerin yapıldığını görebiliyorum. Bilgisayarın seri port unda da bir problem yok. Ayrıca başka bilgisayralarda da denedim onlarda da olmadı. baud rate de de sorun yok. ayrıca pice bağlı olan max232 nin çıkışını ölçerek kontrol ettim max 232 nin  çıkışında veriyi görebiliyorum. bunu denemek için ordaki putc yerine küçük bir döngü koyarak 1 sn 0x00 bir saniye 0xff gönderdim ve çıkışı ölçtüm herşey normal. ama bilgisayarla bağlayınca pic ten giden veriyi bilgisayar göremiyor... Peki ama sorun nerde?

İlgilenecek arkadaşlara şimdiden çok teşekkürler...

Erkan Gench

Merhaba sorun bilgisayar tarafında gibi görünüyor. CCS de tools menüsünün altında serial port monitor diye bir program var onu kullanarak seri porta gelen verileri görebilirsiniz. eğer veri geliyorsa sorun yazdığınız programda olabilir.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

tayyip

mesele interrupt ın içinde veri göndermemesi değil. Daha önce dediğiniz gibi dışında göndermeye de çalıştım, öyle de olmuyor. artık max 232 nin çıkışının bilgisayarın seri portunu süremediğini falan düşünmeye başladım, yani voltaj değerleri açısından. Pek alakası olacağını da sanmıyorum aynı zamanda...

Erkan Gench

Merhaba programı isis ile simule ettim birinci case'ten sonra break koymadığınız için 0x60 gönderince hem 0x59 hem 0x62 ard arda gidiyor. (case tutmamasına rağmen :?: )  belkide sorun buradadır.

dediğim gibi serial port monitor ile gelen verileri inceleyebilirsiniz.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

tayyip

maalesef olmuyor. case in sonuna break te koysam ne de koysam olmuyo. sorun picten bilgisayara veri gitmiyo ama max 232 nin çıkışında bilgi okunuyo ilk mesajımda belirttiğim şekilde test etmiştim. ayrı seri port monitörüyle de spy modunda porta giden gelen verileri izliyorum ve benim bilgisayar programının kontrol baytını gönderdiğini gösteriyo ama picten veri geldiğini göstermiyo. ama dediğim gibi max 232 nin çıkışında veri var peki kablomu bozuk? o da deil çünkü aynı kabloyla pici programlıyorum, zaten test ettim kablo sağlam. geriye ne kalıyor. benim aklıma bişe gelmiyo....

ahmetu

Alıntı yapılan: "tayyip"max 232 nin çıkışında bilgi okunuyo

bunu nasıl test ettiniz scoplamı?

tayyip

iki for döngüsü içinde 10000 defa 0x00 ve ardından 10000 defa 0xff gönderdim. max 232 nin çıkışına avometre bağladım ve 1 saniye boyunca +6v ve diğer bir saniye boyunca -7 volt okudum. böylece test etmiş oldum. tam bir test sayılmaz ama en azından max232 de dahil max 232 ye kadar olan kısmın sağlam olduğunu gösteriyor diye düşünüyorum. zaten başka max 232 de denedim aynı durum söz konusu. yardımcı olan arkadaşlara çok teşekkürler...

tayyip

ilkinde picli devre bilgisayara bağlı değilken yaptığım ölçümlerde max232 çıkışı +6 volta kadar çıkıyordu. Ancak bilgisayara bağlıyken yaptığım ölçümlerde 4.4 volt gösteriyor (pic sürekli 0x00 gönderirken). Bildiğim kadarıyla seri port için -5 volt ile +5 volt arası anlamsız. Sorun bundan kaynaklanıyor olabilir mi acaba? Ama farklı max232 lerle yaptığım ölçümlerde de aynı sonucu aldım. Buna bir çare varmı onu da bilmiyorum.

Erkan Gench

eğer pici jdm türü bir devre ile programlıyorsanız pici yazabiliyor olmanız kablonun tamamen sağlam olduğu anlamına gelmez çünkü jdm rx hattını kullanmıyor. öncelikle rx hattının sağlam olduğunu kontrol edin.

kablonun ve bilgisayarın seri portunun sağlamlığını kontrol etmek için en basit yöntem şase hattını ortak yaptıktan sonra rx ucunu +5 volt üzerine rastgele değdirmektir. rx'i +'ya sürterken bir seri port monitöründen karmaşık veriler gelip gelmediğini kontrol edin geliyorsa buraya kadar tamam.

daha sonra pic ile bilgisayara direkt olarak veri gönderin gitmiyorsa sorunun max232'den kaynaklanıp kaynaklanmadığını anlamak için picin çıkış (tx) hattını hardware hattından başka bir hat olarak tanımlayın (mesela c7 yerine d0 hattı) ve invert seçeneğini seçerek (max232 veriyi tersliyor) bu hattı direkt olarak seri portun rx hattına bağlayın (korkmayın ben çok denedim hiç bi sorun olmadan çalışıyor) veri bu sefer gidiyorsa sorun max232'dedir.

buraya kadar bahsettiğim rx pc'ye göre olan rx

kolay gelsin.
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

tayyip

merhaba, dediğiniz gibi bilgisayara bağlı olan seri port kablosunun receive ucuna rasgele +5 volt uyguladım ama seri port monitöründe herhangi bir veri görülmedi. Yalnız bu yöntem uygunmu bilemiyorum çünkü seri port sinyal tipi 1 bit başlagıç biti (1 yani -5 ile -15 volt arası) 8 bit veri ve 1 bit te sonlandırma biti (o yani +5 volt ile +15 volt arasında bir değer). yani ben receive pinine rstgele +5 volt uygularsam hiçbir zaman - gerilim uygulamadığım için başlangıç biti hiçbir zaman verilmemiş olacak. dolayısıyla herhangi bir veri görememem normal gibi gözüküyor. Siz böyle bir denemeyi daha önce yapmışmıydınız?

Erol YILMAZ

Kablonun saglamligindan emin olmak icin 2 ile 3 u kisa devre edin.
Gonderdiginiz bilgiyi geri alirsiniz.

2 - RX - Data Receive (IN)
3 - TX - Data Transmit (OUT)

Denedim.

Erkan Gench

tekrar merhaba bu yöntem her zaman kullandığım yöntem. aynı zamanda erol'un dediğinide yapabilirsiniz o da işinizi görür.

teoride ne söylediği o kadar önemli değil seri porta 0 - 5 volt arası veri gönderirseniz (yani pici direkt bağlarsanız ) haberleşme yapabilirsiniz.
hatta pc'den gelen veriyide bir kaç K lık dirençle pice bağlarsanız gelen veriyide alırsınız. zaten bunları deneme olsun diye kullanıyoruz yoksa piyasaya süreceğiniz cihazı bu şekilde yapmazsınız.

siz kabloyu 5 volta sürtünce pc'ye karmaşık olarak 1 ve 0 lar gönderiyorsunuz bunun sonucunda rastgele karakterler görmelisiniz. bu olmadığına göre ya kabloda yada seri portta bir sorun vardır.

söylediklerimin hepsi şiddetle denenmiştir :)
Zorluklar, zamanında yapmamız gerekip de yapmadığımız kolay şeylerin birikmesiyle oluşur. Henry Ford ----------- Ya Rabbi Filistin'deki ve dünyanın her tarafındaki Müslüman kardeşlerime yardım et.

Erol YILMAZ

Sadece pic'e veri girmem gerektigi zaman sekildeki baglantiyla yapiyorum.  Baglanti karmasasi- delik adedi - zaman gibi konularda avantaji oluyor. Birde MAX232 yi bedava vermiyorlar :)


z

Sıfırın altına inmeyen sinyallere tepki vermeyen PC lere rastladım.
Eğer PC'den gönderdiğiniz sinyal 0..5v aralığında ve sizdeki PC nin interface devresi de illaki negatif voltaj istiyorsa PC karakterleri kabul etmez.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com