avatar_mustafa

seri haberleşme master slave

Başlatan mustafa, 27 Ocak 2012, 17:41:15

mustafa

arkadaşlar bu devreyı yaptım yazılımı da yaptım ancak hata var.verici kısmı gayet ıyı calısıkrken alıcı bu verıyı alıp ıslem yapmıyor devreyı ekte koydum arkadaslar.ınceleyıp yardımcı olursanız cok sevınırım.
çok dusundum ama ben bulamadım malesef hatayı:(

ete

Çok basitçe düşünülmüş bir sistem. Gördüğüm hatalar şunlar,
- Programların bazılarında; SERIN2 GIRIS,84,[WAIT("A"),# KIMLIK,# YON] şekinde komut;
  bazılarında , SerIn2 GIRIS,84,[WAIT ("B"),KIMLIK,YON]  şeklinde komut kullanılmış.
Bu tek bir sistem ise komutlar eşit olmalı. değişkenler ya "KIMLIK" şeklinde yada "#KIMLIK" şeklinde kullanılmalıdır.
Yarısı öyle yarısı böyle olmaz.

- Alıcı programlarda
LCDOUT $FE,1,"SAGA DONUYOR"
PAUSE 500
LCDOUT $FE,1
ENDIF
şeklinde bir komut gurubu var. aynınısı SOLA dönüş içinde kullanılmış. 500 ms lik gecikme gelen bilginin alınmamasına sebep olacaktır. Bu nedenle oradaki bekleme komutunu kaldırmak gerekir.
Aksi halde bilgilerin alımında senkron kaybolacaktır.

Ete


mustafa

Merhaba Erol Bey,
ilgilendiğiniz ve cevap verdiğiniz için teşekkür ederim.Alıcı kısmında lcd yi tamamen onun yerine led bağladım ve toggle ile ledlerin durumunu kontrol etmek istedim ama yine işe yaramadı malesef.Sistem çok basit ama bu basit sistemi bile çalıştıramadım.

ete

#3
Sistem basit belki ama şeman çok karmaşık. Kimin ne yaptığını anlamak için saatler harcamak lazım. Doğrusu insanın bakası gelmiyor.

Bir anlatsan belki kısa yoldan bir şeyler yapılabilir. Anlatırken her bir Pic içinbir referans numarası kullanki şaşırmayalım.

Ete

Edit:  Senden cevap gelinceye kadar bir bakayım dedim. Bir sürü kusur vardı programlarda. İlişikte çalışan bir proje yolluyorum. Tabiiki seri port fonksiyonunu iptal ettim. Ne amacı var bilemiyorum ama illaki seri port kullanacak isen o şekilde kullanamazsın. Çünki verici isimli programınb en başına koyduğun SERIN2..... komutu seri portdan bilgi beklemektedir. O bilgi gelmediği müddetçe program o satırdan ayrılmaz. Bu nedenle alt kısımlarıda çalışmıyor idi.
Şayet seri port kullanacak isen mutlaka USART kesmesi kullanman gerekiyor. Öncelikle bu çalışan sürümde programları incele neleri değiştirmişim neler ilave etmişim ve nasıl bir mantık kullanmışım gözlemle. Sonra ilerisine devam edersin.
Haberleşme hızını 9600 baud dan 2400'e düşürdüm. 4 Mhz çalışma frekansında bu daha emniyetli bir haberleşme hızıdır. Bu arada devre şemanda da bazı kusurlar vardı onlarıda düzelttim. Özellikle Alıcı2 yi çalıştıran pic de bazı değişiklikler yapmışsın pic çalışmıyor idi. Onu değiştirdim. Bu nedenle "DEVRE " isimli şemayı ekledim onu kullan.


mustafa

Merhaba Erol Bey;
ilgilendiğiniz için çok teşekkür ederim.Ve bazı gereksiz şeyleri hala orda tuttuğum için özür dilerim.Oradaki butonları masterdan slave e bilgi gönderiyormu diye denemek için kurmuştum.Normalde onlar olmayacak yani.Devre direk seri porttan gelen kimlik ve yön bilgisini slavelere aktaracak.yani en soldaki seri porta bağlı olan pic sadece bilgisayar ve slave ler arasındaki iletişimi sağlayacak.slave picler kendisine gelen bilgilerden kimlik bilgisini kontrol edecek ve eğer kimlik bilgisi slave in kendi kimliği ile uyuşuyorsa slave işlem yapmaya başlayacak ve gelen yön bilgisi doğrultusunda step motoru sürebilmek için gerekli olan sinyalleri yollayacak.şu an isis dosyasında 2 adet slave var ama gercekte 30 kadar slave pic olacak.Master pic e gerekli olan sinyaller ise c# da yazılmış bir program sayesinde yollanacak.Emek harcayıp ekteki dosyalar üzerinde işlem yaptığınız için çok teşekkür ederim.Vereceğiniz değerli bilgileri ise can kulağıyla dinleyip uygulayacağım.İyi akşamlar dilerim

mustafa

Erol bey yukarıda söylediklerimin yanında bilgisayar programı hakkında da biraz bilgi vermek isterim.bilgisyar programında en basit hali ile 4 buton olacak.Bu butonlardan bir tanesi kimlik bilgisini , bir tanesi sağa dönmesi için yön bilgisini , bir tanesi sola dönüş için yön bilgisini ,sonuncu buton ise hangi slave çalışıyorsa yani hangi motor çalışıyorsa onu durdurma bilgisini yollayacak.
İyi akşamlar dilerim.

ete

Mustafa açıklamalar için teşekkürler ama ben zaten sana çalışan bir sistem verdim gerisini sen geliştireceksin artık.

Ete

mustafa

Merhaba Erol Bey,
Yardımlarınız için teşekkür ederim.Ben bugün çalışıp bu sistemi tamamlamaya çalışacağım.Ancak takıldığım yerler olursa mesaj atabilirmiyim?

ete


mustafa

Erol bey merhaba;

sizin verdiğiniz bilgiler doğrultusunda ve site içerisindeki örneklere bakarak programı değiştirdim.alıcılardan biri usart ile diğeri ise normal seri haberleşme ile haberleşemektedir.Vericini çıkışına bağladığım virtual terminal ile c# da yazdığım programdan gönderdiğim kodu aynen görebiliyorum.Yani bu bilgi alıcılara gidiyo ama alıcılarda bulunan ledler yanıp sönmüyor bir türlü nedenini de anlayamadım.

ete

Mustafa,
Kötü huyların var. Birincisi programlara isim vermeye üşeniyorsun. Ortalıkta 3 adet program olunca onlaraisim vermek zorundasın.
İsis de işlemci edit penceresini açıp onların çalışma frekanslarını doğru vermelisin 1Mhz olarak duruyorlar.

Tris registerleri ayarlanırken TRISA ya 5 bit değer vermemelisin TRIS registeri 8 bitliktir 5 bitdeğil.
Giriş çıkış pinlerinin anlamlarını hala bilmiyorsun sanırım. Bir TX pini çıkışdır. Tris registerindeki değeri sıfır olmalıdır. Bir RX pini ise giriştir ve Tris registerindeki değeri ise 1 olmalıdır. Bunlara dikkat etmen gerekiyor.
4Mhz de 2400 baud ayarların yanlış onların doğrularını yazmalısın. Ben doğrularını yazdım.
Alıcı programlarda led değişkenlerini kontrol et. Programın birisinde Yon=2 de olsa 3 de olsa hep LED isimli değişken çalışıyor.

PC RS232 portu TTL değildir. Yani PC RS232 portundan HIGH çıktığı zaman onun voltaj aralığı -10V dur (GND ye göre)
Aynı portdan LOW çıktığı zaman ise +10V dur yine GND ye göre.  Pic ise TTL dir. Yani High sinyali +5V dur. Low sinyali ise 0V (GND) dir. O halde bu iki aletin bir birlerini anlamaları için voltaj seviyeleri eşitlenmelidir.
Bu işi Max232 entegresi yapar. Bu entegrenin bir T girişleri (TTL yani Pic tarafından gelen girişler) birde R girişleri (yani PC tarafından gelen ) vardır. Her bir girişin birerde çıkışı vardır elbette. Bu nedenle Pic ile RS232 portu arasında MAX232 entegresini kullanmak zorundasın. RS232  TX portunden gelen uç Max232 nin R1 veya R2 girişine girecek Aynı girişin çıkışı ise Pic in RX pinine bağlanacaktır. Şayet Pic den RS232 ye bağlantı yapacak isen bu seferde Pic den gelen TX ucu Max 232 nin T1 veya T2 giriş ucuna girecek ve çıkış ise RS232 portunun RX pinine bağlanacaktır.
Max232 entegresi 5V besleme ile hem +10V hemde -10V sinyal seviyelerini ürettiği için kondansatörlerine dikkat etmek gerekir. Özellikle 2 ve 6 nolu pinlerine bağlanan kondansatörlerin bacakları ters gibi gelebilir ama değildir.
İlişikteki şemayı incelemeni tavsiye ediyorum.
Hyper terminalden değer girilmesi zor bir işlemdir. Girdiğin değerleri araya bir şey koymadan girmen gerekiyor.

Verici programda alma anında hemen verme işini yapmamalısın. Kesme kısmına büyük süreli pause komutları kullanmamalısın.
Bunları ana program ksımında yaparsan daha uygun olacaktır.

Ben uğraştım biraz aslında programları doğru hale getirdim ancak hyper terminalden girdiğim bilgiyi kabul ettiremedim. Çünki tuşa bastığın an bu hemen çıkışa veriliyor. Halbuki paket halinde verilmesi gerekir.
Şimdiye kadar Hyper terminal ile pek çalışmadım. Bu konuda pek tecrübem yok. Bilenler var ise anlatsınlar.
Anlatılacak konu ("A"),1,3 bilgisi bir seferde nasılverilecek Hyper terminalden. A13 olarak yapıyorum ama A tuşuna basar basmaz bunu yolluyor. SOnra basılan tuşlarda ise yeniden A bekliyor bu nedenle bir türlü A13 değerlerini doğru giremedim.
Ete


mustafa

Merhaba Erol bey;
Verdiğiniz bilgiler için çok teşekkür ederim.Max232 koymamamın sebebi proteus un türkiye distribitörlüğünü yapan bir firma ile daha önce bu konuda konuşmuştum.Onlar bana isiste max232 nin kullanılmasına gerek olmadığını söylediler,ben de o yüzden kullanmıyorum.Hyperterminal konusunda ise o program yerine termit isimli programı kullanmak daha sağlıklı .Hiç problem çıkarmıyor.

mustafa

Erol Bey merhaba;
sizin gönderdiğiniz devreyi aynen denedim ama olmadı.Bende aradaki max232 yi çıkardım.Ve rs232 nin Rx ini master ın Rx ine bağladım , bu sekılde master verı aldı ve bilgi geldiği anda kesıme gıttı. master kesime gidip Tx üzerinden alıcılara veri gönderdi bunu hem watch window dan hemde tx e bağladığım virtual terminalden görebildim.Ancak alıcılara veri gitmesine karşın alıcılar hiç birşey yapmadılar.Ekte termit programını da gönderiyorum Erol bey.

ete

Mustafa,
Artık gerisini sen hallet lütfen.
Bu arada bu sistemi gerçekten yapmayı düşünüyorsan nasıl yapacağınıda açıkla. Zira Picleri TX pinlerinden yada RX pinlerindenbir birlerine bağlayamazsın. Bu RS232 formatına aykırıdır. İsisde çalışıyor gözükebilir ama gerçekte çalışmaz bunu bildireyim istedim. Şayet böyle bir niyetin var ise araya MAx485 entegresi bağlamanda yarar var. Bu şekilde bir empedans uyuşmazlığı olmayacaktır.

Hyper terminalden bu bilgiyi el ile girmek zor. Gerçeği olsa muhtemelen çalışacaktır. Ben denememi araya bir başka pic sokarak yaptım. Çalışıyor. O halde geriye sana bu işi gerçekleştirmek kalıyor. Biraz daha devre üzerinde çalışıp ekisklerini tamamlaman gerek. Her şeyi ben söylersen yada yaparsam senin bir şey öğrenmen mümkün olmayacak. İlk projende sana çalışan sistem verdim sen ikincisinde verdiğim programnlarda yaptığım değişikliklerin hiç birisini itibar bile etmemişsin. Kendi bildiğin yolda ilerliyorsun devam et yada dediklerimni uygula. Aslında hatalarını birer birer not edip açıklayacaktım ama o kadar çok ki yazmaktan bıktım. Zamanımı da alıyor üstelik. O nedenle kendi yazdıklarınla benim yazdıklarımı satır satır karşılaştır ve gör en iyisi neler farklı. Bir kısmını yazdım sana zaten.

Ete

ete

Mustafa,
Yine dayanamayıp sistemi hyper terminalden çalıştırdım.
İlişikte yolluyorum. İsisde çalışıyor ama gerçekte çalışmayacağını düşünüyorum. Çünki Pic lerin RX bacaklarını birleştirirsen hem empedans bozulacak hemde voltaj seviyesi düşecektir diye düşünüyorum. Gerisi sana kalmış

Hyperterminalden bilgi girerken bekletmeden;
- A12 şeklinde 1 nolu devre 1. led
- A13 şeklinde 1 nolu devre 2. led
- A22 şeklinde 2 nolu devre 1.led
- A23 şeklinde 2 nolu devre 2. led'i kontrol edebilirsin.
girişlerde bekleme olursa zaman aşımı oluşur.

Programlarda biraz değişiklik yaptım.

Ete

Powered by EzPortal