Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: mstylmz - 24 Kasım 2017, 18:15:53

Başlık: RS485 İletişim Problemi
Gönderen: mstylmz - 24 Kasım 2017, 18:15:53
Merhaba Arkadaşlar

Master cihazına 4 adet slave cihazı bağlıyorum. Slave cihazları ve master farklı güç kaynaklarından besleniyor. Master ilk başta slave cihazları ile haberleşmeyi sorunsuz bir şekilde sağlıyor.Master çalışmaya devam ederken slave cihazlarının güç kaynağını kapatıyorum.Bir süre sonra  güç kaynağını  tekrar açtığımda slave cihazları normal çalışma moduna devam ediyor fakat bazı slave cihazları seri port kesmesi almıyor.(Bazen sadece 1. slave haberleşmiyor, bazende 3. ve 4. slaveler gibi) Dolayısıyla master'ın sorgusuna geri cevap veremiyor. Bu sorunu seri haberleşme kesmesi belirli bir süre gelmediğinde slave cihazlarına  yazılımsal reset attırarak çözüyorum.Böylece master ile haberleşmeye devam ediyor.

Yazılımsal reset kullanmadan bu haberleşme sorununu nasıl çözebilirim?

Master(PIC18F46K22)
Slave(PIC18F24K22)



Başlık: Ynt: RS485 İletişim Problemi
Gönderen: tunayk - 25 Kasım 2017, 15:09:31
Üstad sizin sorun sanki izolasyon sorunu gibi.  Eğer cihazlarda farklı gnd seviyeleri oluşuyor ise 485 hattı voltajı Slave deki gnd ye göre yeterli seviyeye kadar yükselmiyordur.  Öncelikle 485 hattında gnd leri birleştirip deneyin. Sonuca göre yorum yaparız
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: Klein - 25 Kasım 2017, 15:11:59
Muhtemelen  daha port ve alıcı ayarlarını bitirmeden , master cihazdan veri geliyor.  Tüm ayarlar bittikten sonra seri portu açarsanız muhtemelen düzelir.
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: mstylmz - 25 Kasım 2017, 15:42:43
Güç kaynaklarının gnd lerini birleştirdiğimizde maalesef sorun düzelmiyor. Zaten bütün başlangıç ayarlarını yaptıktan sonra GLOBAL İnterruptları açıyoruz.

Her bir slave ve master cihazının RS485 kısmında şekildeki gibi koruma devresi var. Kablo olarak da örgülü ve alüminyum folyosu olan RS485 kablosu kullanıyoruz.

(https://s2.postimg.cc/us34m4oid/Screenshot_3.jpg) (https://postimg.cc/image/us34m4oid/)
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: tunayk - 25 Kasım 2017, 19:47:20
Hocam işin en güzeli, master Tx bacağından Slave Rx bacağına kadar hattı osiloskop ile incelemek.  Rx bacağına sinyal girdiği halde mi kesme oluşmuyor yoksa pice bişey gelmiyor mu.


Sorun yazılımsal da olabilir.
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: mstylmz - 25 Kasım 2017, 19:57:12
Hocam bu dediğinizi defalarca osiloskop ile yaptım. Rx  pinini kontrol ettiğimde  verinin düzgün bir şekilde geldiğini görebiliyorum.Veri geldiği halde kesme almıyor
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: exmachine - 25 Kasım 2017, 21:02:47
Hangi derleyiciyi kullanıyorsun? XC8, CCS C, Vs.
Ne tür bir kesme mantığı kullanıyorsun?
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: OptimusPrime - 25 Kasım 2017, 22:48:03
Başlangıç ayarları yapıldıktan sonra global kesmeleri acman kesme kapalıyken gelen isteği aktif etmeyebilir. Dolayısıyla UART modülü bir sonraki data geldiğinde aşırı sürülmüş olur kendini kitler. Reset den ziyade hatadan kurtarma eklemek daha mantıklı olur.bunun için ilgili modülün registerlarini kontrol edip buna göre modülü resetlemeli veya gelen veriyi komple atmalisin ki modül kullanılabilir hale gelsin.


Bu sadece bir tahmin ama olasılığını fazla gibi
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: yas - 25 Kasım 2017, 23:42:55
@OptimusPrime 'ın dediği gibi çok çok yüksek ihtimalle donanım hataya düşüyor.  "RCSTA.1" biti kontrol edersen göreceksin.
Eğer hata bundansa ana döngünün içerisinde aşağıdaki gibi kontrol edersen sorun düzelecektir. Hangi dili kullandığını bilmediğim için basic ile örnek veriyorum.

If RCSTA.1=1 Then
        RCSTA.4 = 0
        RCSTA.4 = 1
EndIf
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: mstylmz - 27 Kasım 2017, 10:53:22
Kusura bakmayın arkadaşlar geç yazım.

Derleyici olarak CSS C kullanıyorum.Clear_interrupt fonksiyonu kullanmıştım. İlgili portun kesme bayrağını temizliyordum. Sorun maalesef düzelmemişti. Acaba UART' ın RX bufferını silmek işe yarar mı ? Bunu denedikten sonraki durumu tekrar yazacağım.
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: yasin_arsln - 27 Kasım 2017, 23:10:00
Alıntı yapılan: mstylmz - 24 Kasım 2017, 18:15:53
Merhaba Arkadaşlar

Master cihazına 4 adet slave cihazı bağlıyorum. Slave cihazları ve master farklı güç kaynaklarından besleniyor. Master ilk başta slave cihazları ile haberleşmeyi sorunsuz bir şekilde sağlıyor.Master çalışmaya devam ederken slave cihazlarının güç kaynağını kapatıyorum.Bir süre sonra  güç kaynağını  tekrar açtığımda slave cihazları normal çalışma moduna devam ediyor fakat bazı slave cihazları seri port kesmesi almıyor.(Bazen sadece 1. slave haberleşmiyor, bazende 3. ve 4. slaveler gibi) Dolayısıyla master'ın sorgusuna geri cevap veremiyor. Bu sorunu seri haberleşme kesmesi belirli bir süre gelmediğinde slave cihazlarına  yazılımsal reset attırarak çözüyorum.Böylece master ile haberleşmeye devam ediyor.

Yazılımsal reset kullanmadan bu haberleşme sorununu nasıl çözebilirim?

Master(PIC18F46K22)
Slave(PIC18F24K22)

Merhaba,
Sorun donanımsal da olabilir.
RS485 'in A ve B uçları arasında gerilim seviyesini kontrol edebilirmisin. RS485 Diferensiyel fark ile çalışan bir yapıya sahip. Eğer A ve B arasındaki gerilim 0.3V'nin altına düşüyorsa doğru bir iletişim göremezsin.Mcu'da bunu algılayamaz. MikroE'nin mikro bus adında ürettikleri kitlerin schematiclerindeki gibi bir gerilim destekleyici işini görebilirim. Resimde görebilirsin. Umarım sorunun çözülür iyi çalışmalar.

(https://s33.postimg.cc/7idnnd3bf/485_mikroe-1024x422.png) (https://postimg.cc/image/7idnnd3bf/)
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: OptimusPrime - 28 Kasım 2017, 00:44:38
@mstylmz
cihaz data alamaz hale geldiginde uart modulunun hata bitlerini kontrol et. modul kitlenmis ise kesme bayragi temizleyerek veya bellegini bosaltarak kurtaramazsin.
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: dumansiz - 28 Kasım 2017, 08:18:48
Çalışmadığını söylediğin "slave" lerin sadece "UART"ları mı çalışmıyor?
Slave ünite üzerinde led,lcd gibi bir şey var mı?
Slave ünitedeki yazılımın UART haricinde çalıştığını ispat eden bir delil var mı?

Maaşallah korumayı bayağı abartmışsınız.(MOV, TVS)
Diğer arkadaşların söyledikleri bir çözüm olmazsa, bu korumaları çıkarıp deneyin derim.
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: mstylmz - 28 Kasım 2017, 12:07:06
#use rs232(baud=19200, xmit=RS485_TX, rcv=RS485_RX, enable=RS485_ENABLE, bits=9, long_data, parity=n, stop=1, stream=MASTER, ERRORS, DISABLE_INTS)

@OptimusPrime Yukarıda görüldüğü üzere  RS232 önişlemci yönergesinde bulunan ayarlarda ERRORS kullandım. ERRORS  uartdaki hataları kontrol ediyor.Eğer bir hata varsa sıfırlıyor.

@dumansiz   Evet bu durumda çalışmayan tek şey Uart modülü oluyor. Slave üzerinde durum ledleri mevcut. Slave cihazları normal çalışmasına devam ediyor. ESD ortamlarına uygun bir cihaz tasarımı yapmak için bu komponentleri kullanmak zorundayız.Bu korumalar sahip olmayan bir cihazımız daha var. Bu cihaz çok kolay bir şekilde ortamdan etkilenip reset alıyor.Abartmış sayılmayız :)

@yasin_arsln Diferansiyel fark ile bir sorun yok. A ve B arası 0,3 volt civarı

Başlık: Ynt: RS485 İletişim Problemi
Gönderen: OptimusPrime - 29 Kasım 2017, 09:31:24
@mstylmz
ERRORS kullandiginda muhtemelen derleyici ekstra kesme rutini ureterek modul kilitlendiginde buraya dallaniyor. fakat yine ayni noktaya geliyoruz. boyle bir kesme rutini olsa bile modul kilitlendikten sonra global kesmeleri aciyorsan (veya boyle bir duruma denk geliyorsan) program bu kesme rutinine hic ugramayabilir!

kesmeler genellikle yuksen veya dusen kenarda olusturulurlar. yani hali hazirda bir bit set edilmisse sen global kesmeleri actiginda, islemci aaa bunu kacirmisiz dur ilgili kesme programini bi calistiralim sonra kaldigimiz yerden devam ederiz demeyebilir.

bundan emin ol derim. en basit yolu ya modulun kilitlendiginde bitleri kontrol edeceksin yada modulu kullanima sokmadan once global kesmeleri aktif edeceksin.

bu arada data alamiyorum derken umarim islemcinin geri kalan gorevleri yaptigindan yani biryerlerde takilip kalmadigindan eminsindir.
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: mstylmz - 02 Aralık 2017, 16:18:45
@OptimusPrime  Kesme fonksiyonlarını normalde init() fonksiyonu içerisine yazarak kullanıyordum.Fakat bu fonksiyonları main fonksiyonun başında kullandıktan sonra sorun düzeldi. Sanırım bu şekilde modulu kullanima sokmadan once global kesmeleri aktif ediliyor. Açıkçası hala tam anlamıyla anlamış değilim.
   
(https://s2.postimg.cc/aqlikxcxx/Screenshot_3.jpg) (https://postimg.cc/image/aqlikxcxx/)
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: OptimusPrime - 03 Aralık 2017, 03:04:51
Attık tuttu desene. Geçmiş olsun. Datasheetinde bariz bir açıklama bulamadım ama genelde kesme işleri mcu larda aynı mantık üzeredir. Bir sinyalin yükselen veya düşen kenari kesme oluşturur ona ait bir bit set edilir. Fakat global kesme kapalıyken geldiyse bu kenar tetiklemesi islemciye ulaşmaz. Sadece ilgili bit set edilir böyle bir durum oldu sen yokken diye. Bu noktadan sonra global kesmeyi acman sonucu değiştirmez çünki kesme kaynağı çoktan kacirilmistir.
Başlık: Ynt: RS485 İletişim Problemi
Gönderen: mstylmz - 04 Aralık 2017, 10:31:51
@OptimusPrime  Çok faydalı bilgiler verdiniz. Cevaplarınız için teşekkür ederim :)