Proton da rs 485 ile ilgili kod çalışması olan nasıldı

Başlatan Murat Mert, 08 Nisan 2009, 12:36:56

Murat Mert

arkadaşlar merhaba.
Proton da rs 485 ile kod çalışması olan varmı? Bilgi verirmisiniz? inverter sürücü için 0-10 V yada 485 çalışması yapacağım ama protonda 485 nasıl bilmiyorum. Kolay gelsin.
mert07

dombilik



MAX485 leri bir incele istersen..
Yaptığım bir uygulamada PC master durumda ve üç adet slave istasyon vardı.Slave istasyonlarda MCU lar,MAX 485 in 2,3 nolu pinlerini sürekli lojik "0" da tutuyor ve haberleşme hattını dinliyordu.MCU ları RX hattına bir veri geldiğinde kesme olacak şekilde ayarladım.PC veriyi haberleşme hattına yolluyordu.Hangi slave istasyonla haberleşeceksem o istasyona ait bilgi hatta veriliyor.Tüm slave istasyonlar aynı anda bilgiyi alıyor.Slave istasyondaki MCU lar RX durumunda kesme olacak şekilde ayarlı olduğundan hepsi aynı anda gelen veriyi alıyor.Gelen veri içeriğinde hangi istasyondan veri istendiği belli olduğu için sadece o istasyonda az önce bahsettiğim MAX 485 in 2,3 nolu pinlerini lojik "1" yapıyor ve istenilen veriyi TX ten yolluyordu.
Master ile slave istasyon arasında yapacağın haberleşme protokolü tamamen sana kalmış.
Örneğin;
PC hatta @100 bilgisini versin.Tüm slave istasyonlar bu veriyi alsın.
Her slave istasyon içindeki yazılımda '@1' kısmını ve '00' kısmını ayır.
'@1' hangi slave istasyonda tanımlı ise bu istasyon gönderime geçsin diğer istasyonlar kesme den çıksın.'00' ilede slave istasyondan ne istediğini öğren...

Kolay gelsin.
Bildiklerini kime miras bıraktın?kimseyemi? O zaman bildiklerinin ne önemi kalır. ******** /////////// ******** PROTON-ASM PROTEUS 7.4 SP3 EAGLE 5.40

Murat Mert

Yanlış anlattım galiba ben protonda 485 için kod yazan varmı? Örneğin Include "PROTON_4.INC"
16F877 için lcd bağlantısı belli rx tx uçları belli pwm uçları belli vs. Ama rs485 surmek için DE ve RE uçlrını alış verişte kontrol edecek sistem yazılımı nasıldır? öğrenmek istediğim o yoka 555 ilemi kontrol etmeliyim yada protonun hazır veya başka kodu varmı? Teşekür ederim rs 485 sistemini anlatmışın. Emeğin hakkı ödenemez Allah razı olsun. Kolay gelsin. :)
mert07

OG

Alıntı yapılan: "mert07"Yanlış anlattım galiba ben protonda 485 için kod yazan varmı? Örneğin Include "PROTON_4.INC"
Soru şuna benzemiş, "TTL için koda ihtiyacım var". Bunu neden söylüyorum, RS485'in yazılım protokolu gibi tanınmış olması arkadaşları bu düşünceye sevkediyor olsa gerek.

RS485 donanımdır, çift tellidir, dengeli (balanced) data fiziğine sahiptir. Bu sebeple data hattı 2 uçtur (GND ile 3 yapar). Datayı gönderdikten sonra işleyebilmek için tekrar tek uca (unbalanced) çevrilir ve PIC gibi benzeri ortamlara uygulanır. PIC gibi ortamlardan alınan tek uçlu data (GND ile 2 yapar) başka bir yere taşınmak istenirse (özellikle mesafeli ve gürültülü ortamlarda), tekrar 2 uca çevrilir ve gönderilir. Yani arada yalnızca uç sayısı değişiyor. Aslında data protokolunde tek bir hattı taşımak ile bir farkı yok. Kısaca bu data taşıma şekline RS485 deniyor. Belli bir hız limiti ve önerilen max taşıma mesafesi (kablo boyu) var. Bu mesafe tekrarlayıcılar ile arttırılabilir.

1 uçtan 2 uca veya 2 uçtan 1 uca dönüşüm yapan entegrelere RS485/TTL data converter gibi isimler verilir.

Yani aslında elimizden 1 adet tel var gibi düşünebiliriz. Bu telden normal koşullarda ya gönderme yada alma yapabiliriz. İkisi beraber olmaz. Aynı hattan sıra ile gönderme ve alma yapmak istersek ve araya RS485 entegresi giriyor ise entegrenin kontrol pinleri ile (DE ve RE) içindeki mevcut gönderme ve alma birimlerinden yalnızca birisini açarız. İkisi beraber açık olmaz. Yani DE (Driver Enable) ve RE(Receiver Enable) gönderme ve alma ünitesini açma/kapama yaptırır.

Tek hattımız var, Bu hattan hem TX hem RX yapacağız;







Gönderme (TX) yapacaksa
data  PIC==>Harici Ortam yönünde olmalı, hat ucundaki entegrede TX ünitesi çalışmalı yani DE=H olmalı, bu anda RX i kapatmak gerekir RE=1 (RX ünitesi ile data hattı bağlantısı kesilir) olmalı.






Alma (RX) yapacaksa
data  PIC<==Harici Ortam yönünde olmalı, hat ucundaki entegrede RX ünitesi çalışmalı yani RE=L olmalı, bu anda TX i kapatmak gerekir DE=1 (TX ünitesi ile data hattı bağlantısı kesilir) olmalı.






Aynı hatta hem gönderme hem alma işleminin bu şekilde paylaşılmasına yarım dubleks (half duplex) çalışma denir. Yani çift yönlü iletişim ama her ikisi de aynı zamanda yapılamıyor demektir. Her ikisinin aynı anda yapılabilmesine full duplex denir, RS485 de bunu sağlamak için çift taşıyıcı olması (4 hat) gerekir.

Yani kısacası RS485 bir taşıma ortamıdır. Limitlerine uymak şartı ile istediğin lojik datayı (analog olmaz) gönderebilirsin ve alabilirsin.

Bir arkadaş uğraşıp türkçeleştirmiş, http://rapidshare.com/files/219117600/rs485_TR.pdf

.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Murat Mert

Include "PROTON_4.INC"
		
        Declare ADIN_RES 10 			  
        Declare ADIN_TAD FRC 			  
        Declare ADIN_DELAY 50 			  
        TRISA = %00000001 				  
        ADCON1 = %10000010
		
        Dim VERI As Byte 				  
        Dim AI1 As Word	
        		 
    TEST:
    High PORTD.1
    DelayMS 200
    Low PORTD.1
    
    GoTo BASLA	   		   
	 	
    BASLA:
    AI1 = ADIn 0
    HSerIn [VERI] 
      
    If VERI=49 Then 
    HSerOut ["VERI:",Dec AI1,10,13]
    EndIf
    
    GoTo BASLA


Sn. OG 5 bölgeden böyle analog veriler okumak istiyorum. Benim istediğim RS 485 için buna naıl bir kod eklmeliyim. Benim sorum o idi.
Bunun için özelbir kod varmı? yada şöyle mi yapmalıyım:

[code]BASLA:
   AI1 = ADIn 0
   HSerIn [VERI]
     
   If VERI=49 Then
   High PORTC.5 '485 için uç High
   HSerOut ["VERI:",Dec AI1,10,13]
   DelayMS 100
   Low PORTC.5 '485 için uç Low
   EndIf
   
   GoTo BASLA [code]
mert07

OG

RS485 entegresinin Pin2 ve Pin3 ü birleştirirsin.

Bu uçları PIC ile kontrol ederek istediğin zaman RX istediğin zaman TX konumuna sokarsın.


1 master 5 slave data hatlarını birbirine bağlarsın

Master ve slaveler başlangıçta RX pozisyonunda olacak.

Master sırası ile slave lerden bilgiyi isteyecek.

Örneğin 1 den isterken
mybyte=1
rs485 i tx yap
HSerOut ["DATAVER", mybyte]
rs485 i rx yap

Örneğin 2 den isterken
mybyte=2
rs485 i tx yap
HSerOut ["DATAVER", mybyte]
rs485 i rx yap

gönderirsin,
SLAVE uniteler ise

rs485 i rx yap
HSERIN [WAIT( "DATAVER" ) , alinan] komutu ile dinlemededirler.

1. ünite
sirano=1
if alinan=sirano then datagonder

2. ünite
sirano=2
if alinan=sirano then datagonder

gibi kendisini ilgilendiren komutu bekler.

datagonder:
rs485 i tx yap
HSerOut ["ALSANADATA", sirano, esasdata]
rs485 i rx yap

Master ünite de o anda dinlemededir
rs485 i rx yap
beklenen_sira=1
HSERIN [WAIT( "ALSANADATA" ) , gelensira, mydata...]
if gelensira=beklenen_sira then degerlendir

Böylece veya benzer bir şekilde hiyerarşi sağlanır.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

Murat Mert

Sn. OG değerli bilgileriniz için çok teşekkür ederim. Galiba proton bunu otomatik olarak rx tx yapmıyor. Kolay gelsin.
mert07

OG

Proton böyle birşey yapmaz, hiçbir dil bunu yapmaz, dediğim gibi bu bir yazılım değildir. Yapılan iş seri data transferi, yalnızca TX ve RX için aynı hattı kullanacağın için yol verme zamanına dikkat etmektir yapılan iş.

data akışının zamanlamasına uyarak  RX yapacağın zaman 2/3 pinlerini LOW a çekersin, TX yapacağın zaman HIGH a çekersin. Boş zamanlarda RX de tutmaya dikkat etmek gerekir.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OtacoN

Bir sorum olacak fakat konu 2009'a ait,ben yine de şansımı deneyeyim.

Ben proteus'ta 3 tane slave 16f877'yi(sayısı 3ten fazla olacak normalde) bir tane master 18f4550'ye anlatıldığı şekilde bağladım,yazılımını da atıp simülasyon'a başladım, master en başta slave birimlerden adres talebi bekliyor ve adres talebi gelince BUS 'a adres bilgisini basıyor ve ilgili slave bu adresi alıp hafızasına atıyor. Buraya kadar herşey tamam ve çalışıyor. Kullandığım entegre de max487 unutmadan söyleyeyim. Data sheetteki 120 ohm degerinde hat dirençlerini de bağladım.

1.pic adres talep ediyor ve alıyor. tekrar talep ederse yine alıyor problem yok.(Adres alma işlemini pic'e reset attırarak yapıyorum,her resette yeni adres talep ediyor ve alıyor)

2.pic adres talep ediyor ve alıyor.

3.pic adres talep ettiği anda master duruyor ne adres veriyor ,ne bişey yapıyor.

Osiloskop ile baktığımda 1. 2. sinyaller darbe şeklinde aynı genlikte sinyaller.(....|''|..|'|... gibi)
Fakat 3. pic'in sinyali( |''''''''''''''''' ) şeklinde ve güderek düşüyor.

Not: Tüm pic kombinasyonlarını denedim,3.pic dediğim 3.adreslenen pic.

Teşekkür ederim. Baglantıda mıdır yoksa yazılımda mıdır,ki uygulamada çalışacak gibi geliyor bana. Konu 2009 tarihli,kapanmadıysa devre şemasını da paylaşacağım. Bildiğimiz bağlantı şekli zaten. Bu arada OG'hocam verdiğiniz yukardaki bilgiler çok iyi oldu,Allah razı olsun tüm paylaşımcı arkadaşlardan.Bilginin zekatını veriyorsunuz.

Devreye 7 pic daha ekledim ilk 6pic güzel güzel çalışıyor fakat 7.yani son adresledigim pic master'a iletim yapmıyor, normalde A yolunda 1.72V ,B 'de -0.06V varken bu son pic aktif edildiğinde yani hata bağlandığında A 2.70V B 2.30V oluyor.
"Ne kadar zengin ve müreffeh olursa olsun, istiklâlden mahrum bir millet, medenî insanlık karşısında uşak olmak mevkiinden yüksek bir muameleye lâyık sayılamaz."Gazi Mustafa Kemal Atatürk

OtacoN

Alıntı yapılan: OG - 10 Nisan 2009, 18:16:25
Proton böyle birşey yapmaz, hiçbir dil bunu yapmaz, dediğim gibi bu bir yazılım değildir. Yapılan iş seri data transferi, yalnızca TX ve RX için aynı hattı kullanacağın için yol verme zamanına dikkat etmektir yapılan iş.

data akışının zamanlamasına uyarak  RX yapacağın zaman 2/3 pinlerini LOW a çekersin, TX yapacağın zaman HIGH a çekersin. Boş zamanlarda RX de tutmaya dikkat etmek gerekir.

CCS C 'de
#use rs232<... ... ... ... ,enable=pin_b5(mesela),...>
"Ne kadar zengin ve müreffeh olursa olsun, istiklâlden mahrum bir millet, medenî insanlık karşısında uşak olmak mevkiinden yüksek bir muameleye lâyık sayılamaz."Gazi Mustafa Kemal Atatürk