HSERIN HSEROUT

Başlatan canbulut, 17 Mayıs 2011, 17:18:44

canbulut

s.a arkadaslar...bir sorum olacaktı
usart kesmesi oluşturarak 2ayrı vericinin TXinden gelen veriyi picin RX bacağına bacağına bağlarsam hangisinin gönderdiği veriyi alır?
yani programda kesmenin içinde iki adet HSERiN komutu olursa istediğimi nasıl işletebilirim...denemelerimde sanki kesmeye bir kaç kere giriyor ve istediğim gibi çalıştıramıyorum.yardımcı olursanız sevinirim picproje ailesi.

Ruzgarbey

merhaba. iki vericinin aynı anda veri göndermemesi gerekmektedir.vericilerine bir kimlik numarası ata.
mesala 1. verici kimlik numarası  111 olsun , ikinci vericinin kimlik numarası 122 olsun. veri gönderirken önce preamble sinyali gönder daha sonra kimlik numarası ondan sonra göndereceğin veri. 
verici örneği:
hserout["PRE",111,veri]

Alıcı örneği:
hserin 5,CIK,[wait("PRE"),ID,Gelen]
Select case ID
case 111
........   kodlar

case 122
.....  kodlar

end select

kodu açıklayayım.
1. vericimize 111 kimlik numarası verdik. vericimiz önce PRE datasını ile alıcıda verinin alınması için gerekli Preamble verisinin almasını sağlıyor.daha sonra kendi kimliği olan 111 verisini gönderip daha sonra gerçek göndermesi gereken datayı gönderiyor.
alıcı ise preamble verisinden sonra gelen datayı ID isimli değişkene aktarmış ve ID isimli veriden sonra Gelen datayı Gelen isimli değişkene aktarmıştır.  Hserin komutundan sonra gelen Select Case komutu ile ID değişkeni sorgulanmış belirlenmiş kimlikler için Case ler açılmıştır.ID değişkenindeki dataya göre istenen işlem yapılabilir. bu şekilde istediğiniz kadar vericiden kimlik numarası ile veri gönderip alabilirsiniz. dikkat edilmesi gereken husus vericilerin aynı anda veri göndermemesidir.
umarım faydalı olmuştur.saygılarımla..
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

BenC

Bence abuk subuk bir veri olur hatta veri olarak alınabileceğini bile zannetmiyorum. 1 nci verici veriyi gönderirken verinin içeriğine göre low high olacak peki aynı uca bağlı diğer vericinin durumu ne olacak. ? (High or Low)  Bence picin hardware usartı bu veriyi alamaz.
ŞEHİT KANIYLA ALINMIŞ BU GÜZELİM VATANIN TOPRAKLARI KARIŞ KARIŞ SATILIYOR!!  VATAN HAİNİ OLMA!!

canbulut

ruzgar bey cevabındaki ilgi için öncelikle çok teşekkür ederim...yanlız benim göndereceğim birinci kaynak veri sayısı VERİ değişkeni istediğim şekilde gönderebilmem için veri1,veri2,veri3...veriX'e kadar gidiyor.sayı hiç belli değil...ikinci kaynak gönderici ise kısa bir kod...kısa kodlarla gönderebildiğimi ornek verrmek gerekirse
kesme:hserin,100,git[waıt("al"),verı]:if veri=a then:goto burası:ıf verı=b then:goto şurası:    burası:hserin[waıt("bu"),bılgı1] şurası:[waıt("şu"),bılgı2]
gibi yine yapılabiliyor fakat başka bir kaynak eklenince onun işlevini yapamıyor.case komutunun kullanımını bilmiyorum fakat yarın uğraşacağım...eger senin böyle buna benzer bir çalışman olduysa tekrar görüşelim...

BenC

@canbulut.
her iki vericinin TX pinini birleştirip PIC in RX pinine bağlayıp bu RX pininden kesmeli veya yazılımsal veri alabildin mi? Ve aldığın veri doğru mu? Öncelikle burdaki yapmış olduğun hatayı düzeltip esasa gelelim. Çünkü yaptığın donanım (her iki TX pinini birleştirip RX e girmen) hatalı. Bu şekilde bir bağlantı HATALI veri almana veya hiç alamamana sebep olacaktır.

Madem basic tabanlı yazıyorsun, önemli önceliğe sahip vericinin verisini kesme ile alırsın diğerinide bir loop içerisinde devamlı dinleyerek alırsın. Tabiki farklı bir porttan. 


Loop:

		SerIn2 portx,portbaud,10,gotodevam,[wait ("VERICI2"),Verici2Data] '10ms bekle "VERICI2" string i gelmez ise gotodevam a git
                ......................... 		
                .........................
                .........................

	gotodevam:
	
GoTo Loop


diğer VERICI1 verisinide kesme ile alırsın.
ŞEHİT KANIYLA ALINMIŞ BU GÜZELİM VATANIN TOPRAKLARI KARIŞ KARIŞ SATILIYOR!!  VATAN HAİNİ OLMA!!

canbulut

alamadım benc nereye gittiği hngi amaçla gittiği bile belli değildi..başka portu unut.ikinci bir port olmamalı..ben yapmadım ama yapanlar var sanırım iki işlemci ile bu iş yapılabilir...hyr ben tek işlemci ile iki farklı kaynaktan gelen bilgiyi tek picte alırım diyen varmı?bir portla yapılabilir.yapanlar var.

Klein

Farklı dijital kaynakların çıkışını birbirine bağlamak için çıkışların open collector tipinde olması geekir. Eğer kaynak çıkışları open collector değilse , çıkışlar veya işleminden geçirilmelidir. Bunun birkaç yolu var.
1- Veya kapısı için çip kullanmak.
2- kaynakları seri diyottan geçirip diyot çıkışlarını birleştirmek.
3- Kaynakları transistöre verip , open emitter veya open collector çıkış almak.

eğer diyotlu yapılırsa  diyotların katodlarına kaynak bağlanır. İki diyotun anotları birleştirilir. Bu birleşim noktasından + beslemeye bir pullup direnci takılır ( 4K7 olabilir). Burada dikkat edilecek şey verinin hızıdır. Eğer veri çok hızlı ise hızlı diyot kullanıp , PULLUP direncinin değerini de düşürmek gerekir.
Transistör seçeneği düşünülecekse:
Tercihim Open Collector kullanmak yönünde olurdu. Ama bu transistör çıkışında polaritenin değişmesi demek. Bu durumda veri kaynağının polaritesi değiştirilebiliyorsa kaynaktan değiştirmek veya  çift transistör kullanmak , veya  tek optokublör kullanmak sorunu çözecektir.

canbulut

Alıntı yapılan: Klein - 19 Mayıs 2011, 02:38:46
Farklı dijital kaynakların çıkışını birbirine bağlamak için çıkışların open collector tipinde olması geekir. Eğer kaynak çıkışları open collector değilse , çıkışlar veya işleminden geçirilmelidir. Bunun birkaç yolu var.
1- Veya kapısı için çip kullanmak.
2- kaynakları seri diyottan geçirip diyot çıkışlarını birleştirmek.
3- Kaynakları transistöre verip , open emitter veya open collector çıkış almak.

eğer diyotlu yapılırsa  diyotların katodlarına kaynak bağlanır. İki diyotun anotları birleştirilir. Bu birleşim noktasından + beslemeye bir pullup direnci takılır ( 4K7 olabilir). Burada dikkat edilecek şey verinin hızıdır. Eğer veri çok hızlı ise hızlı diyot kullanıp , PULLUP direncinin değerini de düşürmek gerekir.
Transistör seçeneği düşünülecekse:
Tercihim Open Collector kullanmak yönünde olurdu. Ama bu transistör çıkışında polaritenin değişmesi demek. Bu durumda veri kaynağının polaritesi değiştirilebiliyorsa kaynaktan değiştirmek veya  çift transistör kullanmak , veya  tek optokublör kullanmak sorunu çözecektir.


ilgin için teşekkürler Klein...şimdi ilk olarak open kollektor diye bahsettiğin şey picin rx tx bacaklarının pullup disable olması ise eger zaten dediğin open kollektor ayarlı...
1-veya kapısı kullanırsak ne olacak?her defasında ikisinden birisini alabilmesi içinmi dedin?
2-diyot bağla demişsiin.bildiğimiz diyotlarmı 4148 gibi yoksa hızlı diyot tipinde bir başka model bir diyotmu?pullupa bağlarsam pcye nasıl göndereceğim?
3-transistor tak demişsin anahtar mantığı ile gönderebilmek içinmi?

yada bunların hepsini bir kenarı bırakıp ikinci bir pic taksam sorun daha kolay çözülmezmi?

Ruzgarbey

tekrar merhaba. anladığım kadarı ile olayı donanım olarak ele almışsınız.vermiş olduğum kodlarda donanım ayarlandağı varsayılmıştır.bir projemde 6 adet client ve bir merkez yapmıştım.projem sorunsuz çalıştı.verdiğim kod örneği projemde kullanıdğım mantıktır.donanım olarak pinleri birleştirme işini opto ile yaptım.clientlerin tx pinini optoya girip pullup direnci ile tamamladım RX pinini.kolay gelsin
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

canbulut

Alıntı yapılan: Ruzgarbey - 20 Mayıs 2011, 15:41:04
tekrar merhaba. anladığım kadarı ile olayı donanım olarak ele almışsınız.vermiş olduğum kodlarda donanım ayarlandağı varsayılmıştır.bir projemde 6 adet client ve bir merkez yapmıştım.projem sorunsuz çalıştı.verdiğim kod örneği projemde kullanıdğım mantıktır.donanım olarak pinleri birleştirme işini opto ile yaptım.clientlerin tx pinini optoya girip pullup direnci ile tamamladım RX pinini.kolay gelsin

s.a arkadasım tamam ok. ama bağlantısını tam oalrak nasıl yapıyoruz.açıklayıcı bir bilgi verseniz portları yakmadan sevinirim:):)

canbulut

arkadaslar bağlantı devremde bir yanlışlık var gibi...açıkça yardım ederseniz sevinirim.