rs485 iletimde sorun

Başlatan fm, 11 Nisan 2013, 22:19:50

skara1214

2 pine gerek yok sanırım ikisini birleştirip tek pin gibi kullanın aynı anda yazıp okuma sansınız yok çünkü
Herkes ölür ama herkes gerçekten yaşamaz

arslan74

Alıntı yapılan: fm - 16 Nisan 2013, 15:35:51
Hocam rs485 ile ilgili bilgim tasarımda ve kodlarda olduğu kadar. Ben C4 ve C5 pinlerini sırası ile okuma ve yazma durumları için low ve high yaparak çalıştırabileceğimi düşünmüştüm. Sizin dediğiniz geçiş işlemleri sırasındaki mod geçiş işleminin bu olduğunu sanıyordum.
Kodda ne yazmam gerekiyor?

Saygılarımla..

Sizin sorularınızı burada bir arkdaşımış cevapladı onları niye uygulamiyorsunuz?

Alıntı yapılan: camby - 12 Nisan 2013, 14:32:23
DE ve Re pinleri birleştikten sonra bir pin'e girilmiş. Bu pin sanırım sağdaki pic için C3. Şimdi C3 çıkışına 1 verirseniz 485 veri gönderme modunda olur , 0 verirseniz veri alma modunda olur. 485 datasheetine de dikkatlice bir göz atın , şemasından kolayca anlaşılır bu işin nasıl yapıldığı.

Ayrıca nasıl yapman gerekeni de adım adım açıklamış. bundan sonrası artık kod yazmaya kalmış.

Alıntı yapılan: camby - 12 Nisan 2013, 17:19:34
Master :

- Veri Gönderme moduna al
- Datayı gönder
- Veri Alma moduna al


Slave :

- Veri alma moduna al ve bekle
- Data geldiğinde
     - Veri Gönderme moduna geç
     - Veriyi gönder
     - Veri alma moduna geri dön ve beklemeye devam et.


max485'lere giden kontrol pininin çalıştığından emin oldun.
Sistemi adım adım çalıştırıp datanın gönderilip gönderilmedeğine bakabilirsiniz. Picler olmadan simülasyonda sadece 485 leri de kontrol edebilirsiniz. Hatayı bulmada yardımcı olur.

Devre fiziksel olarak var mı ? Sadece proteus ortamında mı çalışyıor.

Bu arkadaşımız çok bilgili birisi onun sözlerini dikkate alın.

Not: Bu arkadaşı şahsen tanımam. Yani onun reklamını yaptığımı sanmayın. Sadece onun cevaplarına dayanarak bunu söylüyorum.


camby

#32
@arslan74 , estagfurullah hocam teşekkür ederim , burdan aldığımı buraya vermekten başka bir şey yapmıyorum.


Arkadaşlar kod kısmında yardımcı olamıyorum/z çünkü herkesin kullandığı dil yaptığı kodlama biçimi hatta kullandığı platform farklı. Ama aynı olan bir şey var o da işin mantığı. O da bu anlattıklarımız oluyor.

Çalışmıyor demek yerine , neresinin çalışmadığını , tam olarak nerde sorun olduğunu bulabilirseniz iş çözülecektir. Daha önceki mesajlarda parça parça yazdım şimdi toparlıyorum.

- Kontrol pinlerini birleştirip DE-RE , tek yoldan işlemciye girin , bu sayede işlemciden 1 veya 0 verdiğinde 485 entegresi giriş yada çıkış olacaktır , ayrı ayrı pice girmenize gerek yok.

- Öncelikle 485 hattını kullanabildiğinizden emin olun , başka bir boş bir isis sayfasında 485 entegrelerini bu şemada olduğu gibi kurun. Master tarafından 2 tane sinyal verin bunların biri data gönderme pinine , diğeri yön seçim pinlerine girsin. Alıcı tarafta da 1 tane logic state ile yön seçim pinleri ile alıcı moduna getirin , logic probu u da data girişine bağlayıp sistemi çalıştırın. Logic statelerin durumunu değiştirikçe çıkışları gözlemleyin , 485 çalışmasına bu sayede hakim olabilirsiniz. Hatta bunu fiziksel olarak kurun , aynı işlemleri breadboard üzerinde yapın , çıkışa led bağlayıp girişleri değiştirin , olanı biteni gözlemleyin , voltmetre ile sinyalleri ölçün. Diferansiyel olayını anlamaya çalışın.

- 485 olmadan karşılıklı haberleşme oluyor sorunsuz bir şekilde , 485 işin içine girince data gidiyor ancak geri gelmiyor demişsiniz. Bu durumda aslında işin büyük bir kısmı halledilmiş çünkü iletişim sağlanıyor küçük pürüzleri var , bu pürüzü bulmalısınız. Büyük ihtimalle şu oluyordur : Master veri gönderdikten hemen sonra data olma moduna geçmez ise slave in gönderdiği datayı alamaz. Mod değiştirme dediğim de sadece bu DE/RE pinlerini 1-0 yapmaktan ibaret. Aynı şekil slave de alma modunda bekler iken cevap vermesi gerektiği sırada , data gönderme durumuna geçmeli.

Simülasyon yerine 2 tane breadboard 2 tane pic alıp devreyi fiziksel olarak kurmakta fayda var. 2 pice sürekli farklı farklı kodlar atmanız gerektiğinden adım adım gitmek de çok önemli.

fm

Öncelikle bu konuda cavap verdiğiniz için teşekkürederim. Kesinlikle yanlış anlaşılmak istemem. Daha önce cevap veren hocalarımın da paylaştıkları bilgiler ışığında, anladığım kadarı ile tasarımı ve kodu düzenledim ancak yine sorun yaşadım. Oyüzden anladığım kadarı ile yapıp tekrar paylaştım. Demekki anlamamışım.
Simülasyonda almak istediğim data PIC in RX bacağına geliyor ancak datayı almıyor hala. Konuya verilen cevapları tekrar dikkatlice okyup bir daha bakacağım. Tekrar teşekkürederim..

Saygılarımla..

skara1214

-1. si ve ben kodlarında göremedim herhalde temel sıkıntın bu printf ile birşey yazıyorsan sonuna \r yi eklemen gerekliki karşıdaki pic onu string olarak alsın.yoksa takılır kalır pic \r yi bekler
-2.si sprintf(data v.s gibi bir satırın var buna ne gerek var?direk printf diye ya sonuna \r koy örn; printf("%f%f\r",sicaklik1,sicaklik2).
-3. sü re ve de yi birleştir sonra o pini #use rs232 nin sonuna enable=pin_xx olarak yaz örn #use rs232(baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, uart1, stop=1,enable=pin_xx)
başlangıçta re,de bağlı bulunan pin 0 da dursun.sistem her yollama yapmak istediğinde pini high a çeker sonra lowa çeker.(senin birşey yapmana gerek kalmaz
Herkes ölür ama herkes gerçekten yaşamaz

m_tuter

Merhaba Arkadaşlar,
Benim sorumda MAX485 haberleşmesi ile ilgili olduğundan yeniden konu açmadım ve burada sizinle paylaşmak istedim.
Öncelikle bu haberleşmeyi daha önceden hiç denemediğimi belirtmek isterim.
Bilgisayarımda kullandığım usb-rs485 çeviricimden (çevirici sağlamdır) gönderdiğim bilgiyi mikrodenetleyicime ( 16F877A)
göndermek istiyorum.
Bunun için bağlantıları yaptım, Programda ayarlamaları yaptım( bunlar için internette dökümanları araştırdım)
fakat çeviricimden gönderdiğim datalar 16F877A' ya farklı gelmektedir ve bunun sebebini bir türlü bulamadım.
Daha önceden bu tarz haberleşme ile ilgili tecrübesi olan arkadaşların fikirlerine ihtiyacım vardır. Yardımcı olursanız sevinirim.

Not:
max485 den sadece data almaya ayarladım yani ilgili pine(RE, DE)  0 verdim.(doğruda 0 ' a bağladım denetleyicinin pininden vermedim)
mikrodenetleyiciye gelen dataları hem PORTB deki lambaları yakarak kontrol ediyorum hemde 2x16 lcd ye yazıyorum.Bu şekilde gelen dataya bakıyorum.
Eğer mikrodenetleyicimden bilgisayara(RE, DE  =1 olduğunda)  bilgi gönderirsem o bilgide herhangi bir bozulma olmamaktadır.
1 ad max485 kullanmaktayım.
 

SBTECH

RE-DE pinlerini birleştirip 10k direnç üzerinden gnd ye verip , pinlerin birleştiği noktayı , yani direncin üst noktasını pic in bir bacağına bağlayıp use rs232 de enable pinini,  bağladığınız pin olarak tanımlayıp deneyebilir misiniz ?
Elektronik ilimdir..

Kabil ATICI

Veri gönderdiğine göre donanımın çalışıyor gibi görünüyor. (MAX485  bağlantı uçları arasına 120 Ohm direnç koymuş olduğunu varsayıyorum. Hat yapısından kaynaklanan bozulmalar için gereklidir.)  (Entegrelerin besleme bacakları arasına 100nF eklemiş olduğunu kabul ediyorum)

Yazılımın tam çalıştığından emin ol. Gelen veriyi okuduğun değişkene sabit bir değer ataması yaparak bu değerin doğru işlendiğinden emin ol. (Program içinde gelen verinin bir yerde bozulma olabilir)
ambar7