Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: skara1214 - 03 Ocak 2012, 20:32:56

Başlık: rs232 iletiminde kitlenme
Gönderen: skara1214 - 03 Ocak 2012, 20:32:56
2 tane pici aynı rs232 hattı üzerine bağladım bilgisayarla iletişimi ftdi ile sağlıyorum, piclerin tx lerini yalıtmak içinde diyot koydum.Eğer komut yollayıp bir picin işini bitirmesini beklersem daha sonra diğer pice komut yollarsam sıkıntı yok ama bir pice komut yollayıp iş yaptırırken aynı yol üstünden diğer picede komut yollarsam iş yapan pic işi yaptıktan sonra kitleniyor.heralde iş yaparken tx e veri gelince sıkıntı çıkıyor sizce bu problemi nasıl aşarım.Komut almayı rda kesmesiyle yapıp iş yaparken bu kesmeyi disable yapsam rx bufferı hiçbirşey almaz sonrada enable yapsam düzelirmi? problem çözülürmü? yada başka önerebileceğiniz bir yöntem varmı?
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: FEHMİ_ASM - 03 Ocak 2012, 20:56:03
  Hocam bunu tek başına Usart'la nasıl çözersiniz bilmiyorum. Ama tahmin ettiğim, her iki pic'e de bilgisayardan benzer ya da aynı bilgileri gönderme ihtimaliniz var. Ve Usart modülü, adreslemeyi desteklemeyen bir protokol kullanıyor. (Eusart'lardan bilgim yok).

  Eğer iki pic için de benzer veriler gidebilecekse, bence Bilgisayardan çıktıktan sonra Usart'ın taa sonuna bir I2C tampon yerleştirin ve verileri burada paylaştırın.  Bunun ayrı bir donanım yükü getirmesinin yanında, net bir çözüm olduğunu biliniz.

  Belirtmeliyim ki, her iki pic için göndereceğiniz 8 byte'lık paketlerin hiçbirisi aynı değil ise, yukarıdaki yolu denemeyiniz, çünkü problem muhtemelen veri alma algoritmanızda ya da bayrak kontrolünüzdedir.

  Bir de 'rda kesmesi' diye bir tabir kullanmışsınız. Bu nedir?
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 03 Ocak 2012, 21:22:10
ilk olarak aynı yol üstünden iki pikede aynı komutlar gidiyor picler kendi içinde if algoritması ile kendilerini ilgilendirip ilgilendirmediklerine bakıyor.yani mesele iş yaparken rx i ne veri gelmesi.iş yaparken rxe veri gelince işi bitirip kitleniyor.Ve ayrıca kendi iş yaparken diğer pic birşey tx ile yollamak istersede yollayamayor iş yapan picin işi bitince tx den bilgisayara veri geliyor.Eğer kitlenen picin elektriğini kesip yeniden verirsem o zaman düzeliyor.Bende yazılımsal reset attım işini bitirdikten sonra  ama buda işe yaramadı.Sizin sorduğunuz rda kesmeside rx 'e veri gelince oluşan kesme
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: iyildirim - 03 Ocak 2012, 21:48:16
Sorun yazılımsal görünüyor.  Büyük ihtimalle de RX kesmesi veya gelen komutu değerlendirdiğiniz yerde.  Diyot konusunu hatırlıyorum.  Her iki pic de aynı anda veri gönderseler bile en fazla veri bilgisayara bozuk gelir.  Kilitlenme Pic komutu alıp iş yaparken gelen veriden kaynaklanıyor olması lazım.  Rx kesmesini disable belki çözüm olabilir ama rx bufferinda okunmadan kalan veri kalması ihtimalini de değerlendirmeli. Kodu eklerseniz bir şey söylemek daha kolay.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 03 Ocak 2012, 23:44:01
hocam kısmen hallettim ama hep çalışmıyor.ilk gelen komutu normal mainin içinde aldım ve göreve başlamadan önce rda interruptını açıyorum birşey gelirse z diye bir stringe atıyorum iş bitince interruptı kapatıyorum main içinde alıyorum.Bazen çalışıyor bazen çalışmıyor ilginç bir durum
 
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: Kabil ATICI - 04 Ocak 2012, 14:00:48
Bu gibi durumlar için uart kesmesinde ben işe yaptırmayıp olabildiğince kısa tutar gelen veriyi alması için bir tampon ve veri geldiğini belirten bir bayrak kullanırım. Yada tamponu doğrudan kullanırım. Kontrol işlemini sadece ana döngü içinde yaptırırım. Tampondaki veri kontrol edildikten sonra tampon sıfırlanır.

kısaca
Kesmede sadece gelen veri tampona konur.

ana döngü içinde
tampondaki veri kontrol edilir ve işlem sonunda sıfırlanır.

Ama sıkı zamanlama gerektiren işlemlerde kesmelerin geçici olarak durdurulması gerekiyor. 1 telli bağlantı gibi donanım ile gerçekleştirilmeyip yazlımla gerçekleştirilen ama zamanlama büyük önem taşıyan sistemlerde kesinlikle kesme sorun oluyor.

Gerçi pic'ler tüm kesmeler için aynı kesmeyi kullanıyor ama bu hatayı yaptığınızı zannetmiyorum. Gerekli kontrol ve önlemleri aldığınızı düşünüyrum.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 04 Ocak 2012, 15:55:57
hocam benim istediğim iş yaparken rx'i disable etmek.registerlerle oynayarak bunu yapabilirmiyim?İkinci olarak iş yaparken tx ide durduruyor yani diğer pic birşey yollamak isterken yollayamıyor işin bitmesini bekliyor
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: Kabil ATICI - 04 Ocak 2012, 16:10:47
İşlemcinin veri kağıtlarına bakarak olup olmayacağını veya nasıl olabileceğini söylemek istedim ama siz işlemci adını belirtmemişsiniz.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 04 Ocak 2012, 16:56:53
haklısınız hocam belirtmemişim,işlemci 16f886
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: Kabil ATICI - 04 Ocak 2012, 17:16:20
PIE1: (çevre birim kesme izin resgisteri 1-PERIPHERAL INTERRUPT ENABLE REGISTER 1)
PIE1 registerinin RCEIE biti (5. bit)  (EUSART alma kesme izin biti- EUSART Receive Interrupt Enable bit)

1 yapılarak alma kesme izni veriliyor,
0 yapılarak alma kesme izni yasaklanıyor.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: iyildirim - 04 Ocak 2012, 17:19:49
Alıntı yapılan: skara1214 - 04 Ocak 2012, 15:55:57
hocam benim istediğim iş yaparken rx'i disable etmek.registerlerle oynayarak bunu yapabilirmiyim?İkinci olarak iş yaparken tx ide durduruyor yani diğer pic birşey yollamak isterken yollayamıyor işin bitmesini bekliyor

Disable ettiğinizde sanırım UART modülünü durduruyorsunuz. Böyleyse diğerinin gönderme yapamamasının nedeni iş yaparken durdurulan PIC 'in  TX pininin bağlı olduğu port low olması. Modülü disable ettiğiniz veya durdurduğunuzda TX pinini  HIGH yapmayı deneyin.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 04 Ocak 2012, 17:29:00
benim istediğim rx kesmesini engellemek değil gelen veriyi  rx bufferına almayı engellemek ,kesmeyi engellemek için disable interrupts demek yetiyor.
@iyi yıldırım hocam ben daha rx bufferını engelleyemedim ,ondan sonra dediğiniz gibi high yapabilirim tx i,ama ilk önceliğim iş yaparken gelen veriyi almamak bunun çözümünü arıyorum
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: iyildirim - 04 Ocak 2012, 17:41:00
Modül çalıştığı sürece gelen veri alınır. Veri alınması bittikten sonra kesme flag'ı set edilir. Kesme oluşur vs. 16F leri fazla tanımıyorum. Eğer almayı ve/veya göndermeyi anlık olarak engelleyecek bir register varsa bu iş görebilir.  Yoksa modülü disable etmeniz gerekir.  Disable ettiğiniz durumda da ilgili tx pininin kontrolü GPIO ya geçecek. Yani modülü çalıştırmadan önce pini bir kereliğine HIGH  yapmanız da iş görebilir.


Program yapınız nasıl bilmiyorum ama, modülü disable etmek pek de doğru bir çözüm değil. Bunun yerine gelen komutları bufferlayıp sırayla işleyecek bir yapı kurmanız daha doğru.  Kesmede gelen komutları bir ring buffer'a okuyup ana döngünüzde sırayla komutları çalıştırmak gibi. 

Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 04 Ocak 2012, 20:04:49
Alıntı yapılan: iyildirim - 04 Ocak 2012, 17:41:00
Bunun yerine gelen komutları bufferlayıp sırayla işleyecek bir yapı kurmanız daha doğru.  Kesmede gelen komutları bir ring buffer'a okuyup ana döngünüzde sırayla komutları çalıştırmak gibi.
hocam zaten ilk komutu alıp işe başlıyorum o arada diğer komut geliyor yani 2 komutun gelme süreleri bir değil. Tx i high yapmak mantıklı gibi ama ilkönce rx problemini halletmeye çalışacağım.Modülü disable etmeyi deneyeceğim.Baskada yapacak birsey kalmıyor
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: SpeedyX - 05 Ocak 2012, 02:56:02
Overrun olusuyor.

CCS kullaniyorsan #USE kismina ERRORS ekle yada oerun bitini kontrol edip usart i resetle.

Bir datasheet acip baksan bunu burada sormayacaksin bile.

Ayrica bu metod o is icin hic uygun degil, eger bu bir urunse;
Forumlarda ezbere ogrenilen cozumlerle ve onun bunun kod kutuphanesini kullanarak yapilan urunlere biz kullanicilar nasil guvenecegiz? Kisisel almayin, genelleme yapiyorum.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 05 Ocak 2012, 03:27:42
Alıntı yapılan: SpeedyX - 05 Ocak 2012, 02:56:02
CCS kullaniyorsan #USE kismina ERRORS ekle yada oerun bitini kontrol edip usart i resetle.
dediğinizi yaptım ve çalıştı errors komutu eklemem yeterli oldu.
Alıntı yapılan: SpeedyX - 05 Ocak 2012, 02:56:02
Forumlarda ezbere ogrenilen cozumlerle ve onun bunun kod kutuphanesini kullanarak yapilan urunlere biz kullanicilar nasil guvenecegiz? Kisisel almayin, genelleme yapiyorum.
Problem çıkıyor bende soruyorum sağolun yardım ediyorsunuz fakat anlamadığım nokta forumları bu amaç dışında ne amaçla kullanmamız gerekiyor?
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: SpeedyX - 05 Ocak 2012, 12:22:36
Forumu kullanma amacinizda sorun yok, sorun USART modulunun aktif pasif edilebilecegini bile bilmeden benim hap niyetine verdigim seyi kullanip cozum bulmaniz. Bu islemcinin nasil register lari nasil kontrol bitleri var, asil onemli olan seyleri bilmeden ortaya urun cikarmak tehlikeli. Ya ERRORS un bir yan etkisi varsa? Oysa USART modulunu kullanan bir teknik adam overrun olayini cok iyi sindirmis olmaliydi, siz daha yeni duyuyorsunuz. Problem burada. CCS i birakip microchip derleyicisine gecin yada CCS built-in fonksiyonlarini hic kullanmayin, bunlari zorla ogrenmeniz gerekeceginden yaptiginiz projelerin her noktasindan emin olacaksiniz, CCS sizi tembellestirip ezberci yapmis, bundan kurtulmaniz gerekiyor.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 06 Ocak 2012, 00:20:00
Alıntı yapılan: SpeedyX - 05 Ocak 2012, 12:22:36
Forumu kullanma amacinizda sorun yok, sorun USART modulunun aktif pasif edilebilecegini bile bilmeden benim hap niyetine verdigim seyi kullanip cozum bulmaniz. Bu islemcinin nasil register lari nasil kontrol bitleri var, asil onemli olan seyleri bilmeden ortaya urun cikarmak tehlikeli.
Bu mesaja 4-5 kişi cevap vermiş 209 kişi görüntülemiş hiçbirisi bunu söylemedi siz söylediniz cevabını demekki o kadarda yaygın bilinen birşey değilmiş.Bana başkalarının kütüphanelerini kullanma diyorsunuzda sizde microchipin kütüphanelerini kullanıyorsunuz tek fark ben biraz fazla kütüphane kullanıyorum siz az kullanıyorsunuz.CCS ye güvenmeyin diyorsunuz microchipin kütüphanelerine nasıl güvenelim o zaman oturup pic library sini yazmıyoruzya kendimiz bir compiler yazarak.Dünya çapında firma ccs dediğiniz.Ama tembelleştirdiği konusunada katılıyorum mesele ortasını bulmak isterseniz ccs dede register tanımlamaları yapıp ayarlayabilirsinizki  ki zaten 33f serisi için dac ve adc uygulamarını yapıp burada paylaşmıştım.Neyse bu konu çok uzadı bence biraz fazla abartıyorsunuz deyip konuyu burada sonlandırmak istiyorum yardımlarınız için teşekkür ediyorum
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: FEHMİ_ASM - 06 Ocak 2012, 00:34:38
Alıntı yapılan: skara1214 - 04 Ocak 2012, 17:29:00
önceliğim iş yaparken gelen veriyi almamak bunun çözümünü arıyorum

    Sanırım bunu algoritmaya birkaç eklenti yaparak halledeceksiniz.

    Gelme kesmesi oluştu deyelim (RCIE ve izinler açık iken RCIF 1 oldu yani). Pıc doğal olarak hemen Kesme Alt Programına gidecek. Siz de kesme alt programının tam bu noktasında, RCIE bitini Ljk-0 yaparak, kesmeyi erteleyin. (Ancak buffer'ı okumayınız).  Şimdi PIC işine devam edebilir. Pıc'in işini tam bitirdiği satırda RCIE'yi Ljk-1 yapın. Buffer'ı da burada okuyabilirsiniz. Ve en önemlisi, bu Pic'e Kesme oluştuktan sonra -- Buffer'ı okuyuncaya dek veri gelmemesi daha uygun olur.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 06 Ocak 2012, 00:57:10
hocam o meseleyi errors komutuyla çözdüm.Ama madem konu devam ediyor yine ilginç bir sorunla karşılaştım bunu belirteyim.Ftdi ile bağlantılımı tam bilemiyorum ama ilk iletişim kurulduğunda pice 2 harften büyük bir string yollarsanız bunu düzgün algılamıyor ve 2. veriyi düzgün algılıyor.Errors komutu kullanılıncada heralde usarta  reset atıyor(elektrik gidip gelmiş gibi) ve ilk gelen komutu almıyor. eğer  tek harf falan yollanırsa sıkıntı yok ama 3 harfli birşey yollarken düzgün yollamıyor pic bunu algılamıyor 2. yollanan veriyi algılıyor.Bununla ilgili fikriniz varmı?
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: SpeedyX - 06 Ocak 2012, 01:04:15
CCS e guvenmeyin demedim ki. Pek anlayamamissiniz.
Tavsiye niteliginde ve tecrubeyle sabit bir mesaj yazdim, anlayan anlamistir, kimsenin sahsina degil, boyle yapan herkese yazdim.
Ayrica microchip kutuphanesi vs kullanmiyorum, PIC ile sadece es dosta yardim amacli basit devre yaparim, bildiklerim tamamen genel kultur ve eskiden hatirladiklarim.
Faydali seyler soyledim ama once anlamak gerek. Ben bu sekilde yapilmis urunlere guvenip satin almazdim, millet olarak biraz ozelestiride bulunup kendimizi gelistirmeliyiz bence.
Kolay gelsin.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: FEHMİ_ASM - 06 Ocak 2012, 01:17:22
  Hocam CCS ve komut setini bilmediğim den son sorduğunuz soruyu cevaplayamayacağım.

  İki veya üç byte ardarda gönderdiğinizde verinin doğru değerlendirilmeyiş sebebiniz, veri alma kontrolünü doğru yapamadığınızdan kaynaklanabilir. TXREG çift tamponlu bir bellektir. Hatta TSR ile üç sayılır. Ama TSR dolduğunda üstüne yazma hatası oluşur (Hatta TSR dolana kadar RCIF çoktan Ljk-1 olmuştur). İşte bu sebepten iki veya daha fazla harf (byte demek istediniz sanırım) gönderdiğinizde okunamayabilir, hatta hatalı okuma oluşabilir.

  Denemelerinizi gerçek ortamda yapıyorsunuz sanırım. ISIS ile denemenizde fayda olacaktır mutlaka.
 
  Bir de her iki tarafın iletişim parametreleri (hız ve veri genişliği falan) aynı olmalı.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: skara1214 - 06 Ocak 2012, 01:28:51
Alıntı yapılan: SpeedyX - 05 Ocak 2012, 02:56:02
onun bunun kod kutuphanesini kullanarak yapilan urunlere biz kullanicilar nasil guvenecegiz?
Bunları siz yazıyorsunuz,sonrada anlamayan ben oluyorum.Kaç mesajdır alttan alıyorum ama sizde tipik bir türk olarak alttan alınca iyice üste çıkma politikası uyguluyorsunuz.Bunu daha önce fx devede söyledim.Çocuk azarlar gibi yardım etmenizin bir faydası yok eğer datasheeta bakmadığımı düşünüyorsanız yada gerekeni yapmadığımı düşünüyorsanız yardım etmeyin buda sizin en doğal hakkınız.
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: SpeedyX - 06 Ocak 2012, 13:26:36
Ben bunlarin hepsini direkt size yazmadim, zaten bu konuda kutuphane kullanilmiyor. Yazida mimik belirtilemediginden de azarlama gibi anlasiliyor demek ki.

Netten bulma, birinden duyma yanlis, hatali kod ve semalarla urun yapip satan insanlar goruyorum, bu hic hos degil.

Datasheet herzaman acik olsun ve surekli inceleyin. Registerlari direkt tanimlayip kullanin, donanim hakimiyetinizi kaybetmeyin.

Bu konu vesilesiyle bu durumlara sitem ediyorum sadece.
Simdi anlasildim mi?
Başlık: Ynt: rs232 iletiminde kitlenme
Gönderen: KABO - 06 Ocak 2012, 20:34:51
diyode koyma olayı cok uygun.diode koymadan rs232 ye ikitane işlemci baglanamaz.Bence Bu konuda yapılacak en uygun secenek,saglam bir protokol olusturmak.sorun yazılımsal.ben aynı işlemi 8051 de yaptım sorunsuz bir şekilde çalıştım.iyi bir protokol hazırlarsan sende sorunsuz bir şekilde haberleştirebilirsin.