avatar_Mayhoş

MAX485 Modül Bilgi Alma ve Bilgi Gönderme

Başlatan Mayhoş, 23 Aralık 2019, 08:43:46

Mayhoş

Merhaba,

Pic 16F877A ile modbus rtu haberleşme yapmaya çalışıyorum. Programı derleyip isiste simüle edince hiçbir sorunum yok. Modbus poll ve Modbus tester programlarında hem veri okuyorum hem de veri yazabiliyorum.

Programı pic'e atıp rs232 ile bilgisayara bağlanınca da bir sorunum yok. Yine veri okuyup yazabiliyorum.

Fakat MAX485 modülünü kullanarak plc'ye bağlandığımda plc'den pice veri yazabiliyorum ama pictekini okuyamıyorum.

MAX485 ile plc den pic'e veri yazacağım zaman RE ve DE pinlerini 0V'a bağlıyorum gayet güzel pic'e veri yazabiliyorum. Veri okuayacağım zaman ise 5V'a bağlıyorum ama verileri okuyamıyorum.

Simülasyonlardan farklı olarak sadece arada MAX232 değil de MAX485 var. Acaba bu entegre için programda ek bir şeyler mi yapmam gerekir? Programımın rs232 tanımlamaları ve diğer tanımlamalar aşağıdaki gibi.


#include <16F877A.h>

#device ADC=16

#use delay(crystal=20MHz,clock=20MHz)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

#byte TXSTA = 0x098
#bit  TRMT = TXSTA.1

#byte PIR1 = 0x00C
#bit  TXIF = PIR1.4
#bit  RCIF = PIR1.5

#byte TXREG1 = 0x019

...
...
...

ete

Max232 ile çalışırken. Her iki tarafta da kullanılması gerekir. Bu işte en çok yapılan hatalar genellikle max232 kondansatör bağlantılarında yapılıyor. Unutmayın bu entegre 5v dan hem +10V hemde -10V üretmektedir. Bu nedenle kondansatör bağlantılarında kutup yönlerine dikkat edin. Max232 voltaj seviye düzelticidir. pic ve benzeri cihazlar TTL dir yani High=+5v. Low=0V dur. Rs232 de yani PC lerde High=-10V ve Low=+10v dur ve buiki cihaz birbiri ile haberleşecek ise seviyelerin birbirlerine uyacak şekilde düzeltilmesi gerekir kiMax232 de tam olarak bu işi yapar. Şimdi bu mantık üzerinden sistemini yeniden değerlendir.
Ete

Mayhoş

#2
Ete hocam cevabınız için teşekkürler.

Pic'e attığım programı bilgisayarda denemek için aşağıdaki çeviriciye TX ve RX girişlerimi bağlıyorum.
Gerekli direnç ve kondansatörler hazır şekilde üzerinde.
Bu bağlantım sorunsuz çalışıyor. Bilgisayar üzerinden Pic'e veri gönderiyorum ve picte ki veriyi okuyabiliyorum.



Simülasyonlarda çalıştığını gördükten sonra aşağıdaki modüle RX ve TX bağlantılarımı yapıyorum.
DE ve RE pinlerini 0V'a bağlayıp PLC'den pic'e veri gönderiyorum. Burada da bir sorunum yok.
Fakat DE ve RE pinlerini 5V'a bağladığımda da picte ki veriyi okumam gerekiyor ama okuyamıyorum.
Yine bu modülde de dirençler ve kondansatörler hazır şekilde üzerinde bulunuyor.



Modülümde bir sorun vardır belki diye aynı modülden 3 tane aldım hepsinde durumum aynı. Simülasyonlarda çalışmasa yazılımda bir sorun var diyeceğim ama simülasyonlarda çalışıyor. Simülasyondan tek farklı olan şey ttl-rs232 modülü çıkartıp ttl-rs485 modülü takıyorum.

Şunu dene diyebileceğiniz bir şey var ise çözümlere açığım.
Çünkü kendimce denemediğim şey kalmadı.

Teşekkürler.

ete

#3
Şunu dene diyebileceğim bir şey yok maalesef. Önereceğim tek şey DE ve RE pinlerine 5V verdiğinde max485 de aynı pinler high oluyormu bakmanı öneririm.

dnaci

#4
@emaxx modülün şemasını inceleyin. 5 volt vermenize gerek yok zaten şemada pull up dirençlerini göreceksiniz.

https://arduinoinfo.mywikis.net/wiki/RS485-Modules

Burada yapmanız gereken pull up dirençlerini söküp, pic pininden 10 k ile enable pinlerini gerektiğinde high yapmak. Enable pinlerini normalde de 10k direnç ile gndde tutabilirsiniz.

Mayhoş

#5
Alıntı yapılan: dnaci - 23 Aralık 2019, 17:48:13@emaxx modülün şemasını inceleyin. 5 volt vermenize gerek yok zaten şemada pull up dirençlerini göreceksiniz.

https://arduinoinfo.mywikis.net/wiki/RS485-Modules

Burada yapmanız gereken pull up dirençlerini söküp, pic pininden 10 k ile enable pinlerini gerektiğinde high yapmak. Enable pinlerini normalde de 10k direnç ile gndde tutabilirsiniz.

Merhaba, cevabınız için teşekkürler.

Buradaki R2-R3 dirençlerini söküp, onun yerine programda Rx_Cx_Cnt pini mevcut, RE ve DE'yi birleştirip 10K direnç ile o pine mi bağlayayım?



Aşağıdaki haliyle, hiçbir direnci sökmeden modülü olduğu gibi kullanarak kendim doğrudan 5V'a bağladığımda picdeki bilgiyi okuyamıyor muyum yani bu modülde?




ete

Bu soruya cevap vermek yada verilen cevabı da anlamak için max485 entegresinin nasıl çalıştığını anlamak gerekir. Aslında çalışma şekli açısından tek kuralı var DE ve RE pinlerini birleştir. Birleşik pinlere LOW verirsen entegre ALMA (RX) moduna girer. BU modda data yollayamazsın.
Birleşik pinlere HIGH verirsen entegre VERME TX) moduna girer ve bu modda da Alma yapamazsın.
Pullup dirençleri entegreye sabit bir değer veriyor. PULLUP yapılmış bir pine LOW vermek zorunda kalıyorsun ne kadar pulldown oluyor acaba?. Bu nedenle en temizi o pullup dirençlerini sök ve bahsi geçen birleşik pinleri direk işlemciye yada başka bir kontrol ünitesine bağla ki gerektiği zaman bu pinlere LOW ver gerektiğinde de HIGH ver.
DI pini TX den gelen DATA INPUT pini dir. Bu pini DE pini kontrol eder. DE nin HIGH olduğu durumda TX den gelen bilgi Çıkışa yönlendirilerek entegre Gönderme yapar.  RO pini Gelen datanın çıktığı yani RX e bağlanacak olan pindir. Bu pinide RE (Receive Enable) pini kontrol eder ve bu pin LOW olduğunda entegre Alma yapar.
Şimdi yaptığın çalışmaya yeniden bak. Bazı konumları çalıştırıyor bazılarını çalıştıramıyorsun. Sebebi Pullup dirençlerinde araman gerekir diye düşünüyorum. Zaten topu topu 2 farklı sebepten dolayı sorun oluşur. Ya DE/RE pinlerine gereken lojik konumu veremiyorsundur yada lojik voltaj seviyen hatalıdır (TTL/RS232 uyumsuzluğu) başkada bir sebep olamaz.
Umarım daha iyi anlamışsındır şimdi. Neden DE ve RE pinlerini birleştirdiğimize gelince. Pin işaretlerine bakarsan RE üzeri çizgilidir yani AKtif olması için LOW gerekir. Dİğeri ise çizgisizdir yani aktif olması için HIGH gerekir. Bir diğerinin lojik olarak tersi olduğu için birleştirmekte sakınca yoktur ve verdiğin lojik değere göre her iki pin tek değerle işlem yaptırır hale gelir.

Şimdi bağlantılarını, lojik seviyeleri ve programını kontrol et ve dediklerimi uygulamaya çalış.
Bu işi fiziki olarak bir çok kez yaptım. Hemen belirteyim hazır alınmış çevirici hiç kullanmadım. Hep kendim yaptım ve o bahsi geçen pinlerde de hiç pullup direnci kullanmadım şimdiye kadar.
Üstelik giriş çıkış pinlerinede Pullup bağlanmış ki bence yanlış bu uygulama.

Ete

dnaci

@emaxx @ete hocam çok iyi anlatmış, bu anlatımı şemaya dökersek bu şekilde kullanmalısın rs485'i ben uygulamalarımda pine 10k takıyorum ve gndye çekiyorum böylelikle 485 alıcı modda kalıyor. Ne zaman pini 1 yaparsam 485 verici moda geçiyor. Rs485 modül gereksiz dirençlerle doldurulmuş bu da bir gerçek.


Mayhoş

Çok teşekkür ederim @dnaci @ete söylenenleri aynen deneyeceğim

Powered by EzPortal