pic877 ile 2 tane max232 kullanma

patrol

Üye
Katılım
30 Eki 2007
Mesajlar
32
Puanları
1
selamlar
arkadaşlar bana yardımcı olabilirmisiniz?

pic877 kullanıyorum ve com1 com2 gibi kullanmak üzere 2 tane seri haberleşen cıhazlarla haberleşmem gerekiyor. bildiğiniz üzere 877'nin 1 tane tx,rx uçları var ve 1 tane max232 takılabiliyor. sorunsuz çalışıyor.
ama 2 tane max232 takmam gerekiyor ve bu max'ları bir başka output pin'i ile seçim yaparak dışarıdaki 2 cıhazla, birbirlerini etkiletmeden konuşturmak istiyorum. nasıl yapabilirim. (UART kullanamam max232 veya ona yakın birşey kullanmam gerekiyor)

şimdiden teşekkürler.
 
Selamun aleyküm Arkadaşım şimdi data sheet lerde de yazdığı gibi pic16F877 de bir tane rx bir tane de tx pini vardır fakat bu demek değildir ki o pinlerden başka pinlerle seri iletişim yapamassın yada olmaz.
Pic basic,proton basic,ccs c gibi programlama dilleri ile kendi çapımda yaptığım çalışmalarla emin olarak söyleyeceğim olay şu ki başka pinlerle de seri iletişim kurulup başka pinlerede max232 bağlanabilir.

Gelelim iki farklı seri iletişim ile haberleşen cihazları bir pic içinde toplamanıza iki tane max232 yi farklı pinlerden bağlar iki farklı portu bir picin üstünde toplayabilirsiniz fakat bana kalırsa bu sağlıklı bir yol olmaz neden derseniz şunun için : Pic basic yada proton basic dillerinde yazılımsal seri iletişim kurulurken serin ve serout komutları kullanılır bu komutların içinde serin komutu çok hassas bir komuttur şöyle ki program yukardan aşağıya doğru gelir gelir serin komutuna geldiğinde orada kalır ve ancak o belirlediğin pinden data gelirse serin komutunu işler ve çevrimi tamamlar.

Serin komutunun başka bir işleyiş tarzı da söyledir çevrim serin komutuna geldiğinde belirlenen süre kadar bekletirsin o süre içinde beklerken data gelirse işler gelmesse serin komutunun çevriminden çıkıp başka bir komut yada komut grubu işletebilirsin.Bu şekli ile serin komutunu kullanabilirsin fakat cihazların pic e ne zaman data yollayacağını bilemeyeceğiniz için senkronizasyon hatası ortaya çıkacaktır.Örneğin A cihazı pic e data yolluyor fakat aynı anda pic B cihazından data gelmesi gerekli olan bir zamanı bekliyor dolayısıyla A cihazının yolladığı datayı kaçırıyor yada tam terside olabilir B cihazı data yollarken pic A cihazından gelmesi gereken süreyi bekliyor gelmeyince data yine kaçıyor.

Bence en iyi mantık tek seri port hattından iki portu birleştirmektir şöyle ki pic e bir tane max232 bağlar max232 girişlerine de 2 tane dsub9 seri port konnektörü bağlarım bu defa da cihazlardan gelecek olan verileri kodlar aynı porttan farklı kodlarla gelen datalardan hangi cihaza ait olduğunu çözerim bir nevi cihazları şifrelemiş olurum örneğin A cihazı iş yapacak olan 120 sayısını yollarken birde kendi kimlik bilgisini yollar cihaz_a gibi alıcıda da bu kodlardan çözümleme yapılabilir.

Son olarakta ben size bir arkadaş için yazdığım şifrelenmiş bir program örneği yollayayım.Özellikle alıcı kısmındaki Serin komutunun olduğu yeri incelemenizde fayda olacaktır.
Takıldığınız yada anlamadığınız bi yer olursa daha değişik anlatım yönleri arayabiliriz ama zor bişey değildir bilgilerinize...
 

Ekli dosyalar

  • şifrelenmiş serin.rar
    28.9 KB · Görüntüleme: 317
...Bence en iyi mantık tek seri port hattından iki portu birleştirmektir şöyle ki pic e bir tane max232 bağlar max232 girişlerine de 2 tane dsub9 seri port konnektörü bağlarım bu defa da cihazlardan gelecek olan verileri kodlar aynı porttan farklı kodlarla gelen datalardan hangi cihaza ait olduğunu çözerim bir nevi cihazları şifrelemiş olurum örneğin A cihazı iş yapacak olan 120 sayısını yollarken birde kendi kimlik bilgisini yollar cihaz_a gibi alıcıda da bu kodlardan çözümleme yapılabilir...
Hocam diğer yadıklarınıza katılıyorum ama alıntı yaptığım yerdeki düşüncenize katılmıyorum. Biliyorsunuz seri port Tx ve Rx hatlarında -9,+9 volt arası sinyaller bulunur. Bir max232 çıkışına iki adet Dsub9 konnektör bağlayıp bunları ayrı cihazlara gönderirseniz biri -9 diğeri +9 volt olduğunda (ki ilk veri gönderiminde olacaktır) cihazlardaki portları yakarsınız.

Bulabiliyorsanız Cpress'in PSoC işlemcilerini kullanın. Onlarda iki adet uart modülü var. İstediğiniz bacaklara da bağlantılayabilirsiniz. Bu iş zor derseniz Philips'in Arm7 işlemcileri'ni kullanın. Çift uart vardır. Mesela LPC2106. Proteusta simule edebilirsiniz. erleyici olarak ya Keil Microvision veya Gnu C Compiler (bu ücretsiz) kullanabilirsiniz.

Zamanınız kısıtlı ve mculara geçemem derseniz Piclerin iki uart modülü olan modellerini araştırın. Olmadı iki 877 kullanın, bunlardan birini master yapın ve spi ile aralarında haberleştirin. (18F serisine geçmenizi şiddetle tavsiye ederim)

Cihazlarınızın rs485 çıkışı varsa işiniz çok daha kolaydır. Tek 877 ile işi bitirirsiniz.
 
Sn ze_tr ustam Yazmış olduğunuz yorumunuz için teşekkür ederim imla hatası anlatım hatası yapmışım özür diliyorum...
Aslında anlatmak istediğim olay şu şekilde idi resimde bu olayı anlatmaya çalıştım buyurun bir incelemede bulunun belki işe yarar.

Bu arada yazımımı tekrar okudum şu kısımlarda gerçekten güzel yanlış anlaşılmalar olabilir

"Bence en iyi mantık tek seri port hattından iki portu birleştirmektir şöyle ki pic e bir tane max232 bağlar max232 girişlerine de 2 tane dsub9 seri port konnektörü bağlarım" buraları bayağı bi saçma sapan yazmışım kabul ediyor özür diliyorum aslında anlatmak istediğim olay başka yazdığım olay başka olmuş PARDON
 

Ekli dosyalar

  • KONTROLKALEMI.JPG
    KONTROLKALEMI.JPG
    25.8 KB · Görüntüleme: 145
877 den max232 lere giden hatta (877 soft-Tx) diyot koymana gerek yok.

Mantık güzel. CCS de port okutmadan önce KbHit(Cihaz_1_den) fonksiyonunu çağırıp, veri geliyorsa (fonksiyon 1 olarak dönmüş ise) veriyi okutman (fgetc(Cihaz_1_den) ) işlemin takılmasına engel olur.
 
Ccs C yi çok iyi bildiğimi söyleyemem okulda iken hocamız bi asenkron seri iletişim devresi istemişti onu yapmıştım tek olarak,birde yine okulda ccs c gösteriyordu bütün ccs c bilgim bu kadar ama olayı proton basic veya pic basic olarak düşünürsek birde verileri kodlama usulü yollarsak hiç bir sorun çıkmaz diye düşünüyorum...
 
selamlar
arkadaşlar bana yardımcı olabilirmisiniz?

pic877 kullanıyorum ve com1 com2 gibi kullanmak üzere 2 tane seri haberleşen cıhazlarla haberleşmem gerekiyor. bildiğiniz üzere 877'nin 1 tane tx,rx uçları var ve 1 tane max232 takılabiliyor. sorunsuz çalışıyor.
ama 2 tane max232 takmam gerekiyor ve bu max'ları bir başka output pin'i ile seçim yaparak dışarıdaki 2 cıhazla, birbirlerini etkiletmeden konuşturmak istiyorum. nasıl yapabilirim. (UART kullanamam max232 veya ona yakın birşey kullanmam gerekiyor)

şimdiden teşekkürler.

Sn Patrol

RS232 Point-to-Point(Noktadan noktaya) haberleşme yöntemidir. Arkadaşların bahsettiği yöntemler çalışıyor da olsa tercih edilen bir yöntem değildir. Eğer haberleşmeniz master,slave protokolune dayanıyorsa(anlatmak istediğim master soru sormadan slave cevap vermiyorsa) bir adet MUX entegresi kullanarak sorunu çözebilirsiniz. Mux entegresi ile ilk olarak haberleşmek istediğiniz cihaza ait MAX232'yi PIC'e bağlarsınız. Haberleşme bitince diğeri cihaza ait RS232 entegresini PIC'e yine MUX yardımı ile bağlarsınız. Dolayısıyla haberleşmeniz tamamlanır. (Haberleşme iki yonlu olacagi icin MUX hem TX hemde RX hattı için dogru bir sekilde baglanmalı ve secilmelidir. Kullanılmayan MAx232'nin picten gelen TX girişi Lojik-1 olacak şekilde bağlantılar düzenlenmeli. Sebebi RS232'de haberleşme yokken hattın durumu(idle state) logic-1 dir. Eğer uygulamayı düşünürseniz ayrıntılı anlatabilirim. )

Diğer bir yöntem PIC serisi uC'lar arasında iki adet SCI (UART) portu olan entegreler var ve fiyatlari cok pahalı degil onlara gecebilirsiniz.

Sn.has_artvin_li'nin yazmış olduğu mesajlar pratik olarak uygulanabilir fakat bir iki noktaya dikkatinizi çekmek isterim. Donanımsal (Hardware) UART yapılarında mikroislemcinin CPU'su iş yapmaz. CPU gönderilecek veriyi UART buffer değişkenine yazar ve daha sonra UART donanımının kendisi belirlenen yöntem ve baud rate'de (veri gönderim-alım hızı) veriyi kendisi otomatik olarak gönderir. Oysa yazılımla yapılan UART yapılarında tüm bu fonksiyonları mikroişlemcinin CPU'su yonetir. Eğer CPU sürekli başka işlemler yapıyorsa yani zamanınız kısıtlı ise bahsedilen yöntem uygulanabilir değildir. Fakat haberleşmekten başka işler yönetilmiyorsa veya CPU çok yoğun çalışmıyorsa Sn.has_artvin_li'nin bahsettiği yöntem oldukça uygundur. Birde üç adet RS232 hattını birbirine bağlanması durumunda (donanımların zarar görüp görmeyeceğini göz ardı ederek) eğer iki cihaz aynı anda hatta veri çıkarırsa(collision) bu durum nasıl çözülecek? Can bus daki gibi paket çakışmasını anlayan(collision detection) bir devre max232 mevcut degil. Burada da illa ki yukarıda bahsettiğim master-slave yapisi kullanilmali. Daha sonra Sn.has_artvin_li'nin dediği gibi cihazlar gönderdikleri paketlere kimlik bilgisini içerir bir byte da göndermeli.
 
biraz geç cevap veriyorum ama yurtdışındaydım arkadaşlar ve yoğun bir çalışma içerisindeydim.
ilgilerinize çok teşekkür ederim, tavsiyeleriniz üzere MUX ile konuyu çözdüm.
aslında bir problem var, 'aynı andalık' sağlanamıyor. o da işlemci seçimine göre ancak bu kadar olur diyorum.
18 serisine hatta 30 serisine geçtim bu arada. fakat henüz entegreleri çalıştıramadım sanırım eksiklerim var ve o konuda biraz daha çaba sarfedip beceremezsem tekrar soracağım.
teşekkürler.
 

Forum istatistikleri

Konular
129,842
Mesajlar
930,707
Kullanıcılar
452,689
Son üye
MertCanxx

Yeni konular

Geri
Üst