16f877 ile rf haberleşme sorunu...

Başlatan elminster, 22 Ekim 2008, 16:18:35

elminster

Merhabalar, Rf iletişim üzerine devam etmekte olan bir uğraşım söz konusu. Elimde Rf ile seri iletişim yaparak bir pic'ten diğerine harf gönderimini buton yardımı ile yapan bir devre var. Kısaca devreyi özetlemek gerekirse; butonlara atanan her harf bizim butona her basışımızda seri iletişim sayesinde diğer pic'e aktarılıyor. Aktarmadan önce ve aktarmadan sonra gönderilen harfin LCD ekranda gösterimi yapılmış bulunmakta. Fakat en sonda yer alan butona tıklandığında bu sefer kelime sadece verici pic'in LCD ekranında yer alıyor. Diğer pic'e seri olarak iletimi sağlanmamış. benim amacım bu iletimi gerçekleştirmek. Ama sorun burda karşıma çıkıyor, kelime olarak iletmem araştırıp okuduğum kadarı ile döngüler ile atamalarla mümkün olabilirmiş. CCS c dilini yeni yeni öğrenen biri olarak zorluk çekiyorum. Sizden de bu konuda fikir almak istiyorum. Bu kelime aktarımını seri iletişim ile CCS c'de nasıl sağlayabilirim?

Bu arada bu kelime olarak iletişim bilgisayar yardımı ile klavye sayesinde verici pic'ine girdi olarak verilecek ve diğer alıcı pic'ten çıktı LCD de gösterilecek.

Araştırmalarım denemelerim tüm yoğunluğuyla devam ediyor. Buradan da ilerleme kaydedebilirsem sizinle paylaşacağım. Yardımlarınıza açığım.

Tüm devre proteus şemasını ve kodlarını veriyorum ekte. Kodlara ve devreye bir göz atıp fikir paylaşırsanız çok sevinirim. Şimdiden teşekkürler...

Devre şeması ve kodlar: http://www.mediafire.com/?0jzzylrmlnj
Only two things are infinite, the universe and human stupidity and I'm not sure about the former  --Albert Einstein--

neotr

yaptıgın projenın aynısını bende yaptıöv calıstırdımda.. devre şemasına baktım.
Galiba alıcı ve verici olarak UDEA dan ATX-ARX kullanacaksın sende.
ben bu projeyı cok rahat bır sekılde bu projeyı yaparsın gözünü korkutma benım yaptıgımda ben yazıyı akarabılıyorum. Fakat mesela a tşuna bastın kasıda bazen ıkı tane a cıkartıyordu burdada benım bır eksıklıgım vardı oda haberlesme protokolu yazmamıs olmamdandı.
Sen bıraz ugras kafana takılan konularda sana gene yardımcı olurum.

elminster

Sizin yaptığınız benzer projede hangi programlama dilini kullandınız acaba. ben ccs c ile yapmaya çalışıyorum ve bir yandan da araştırdım aynı projeyi jal ile yapmış olanlar var. Sizin tavsiyeniz hangi dil üzerine uğraşmam olur?

İlgilendiğiniz için teşekkürler...
Only two things are infinite, the universe and human stupidity and I'm not sure about the former  --Albert Einstein--

elminster

Selam arkadaşlar, uzunca bir süre oluşan zorunlu vize arasından sonra tekrardan aranıza dönme imkanım oldu nihayetinde. Proje konusunda ilerle kaydetmiş bulunuyorum ama yine de aklıma takılan sorular var.

Bildiğiniz gibi pic16f877 nin rx ve tx olmak üzere veri aldığı ve veri ilettiği pinleri bulunmakta. Ben buton kombinasyonu ile iki pic arasında seri haberleşme pinleri olan tx ve rx i kullanarak iletişim sağladım. Butonlardan kelime oluşturup bunları enter görevi gören bi tuşla kurduğum döngü sayesinde aktarabiliyorum.

Şimdi uğraştığım konu ise bu gönderimi max232 ve rs232 ile hyper terminal kullanarak veri aktarımı sağlamak. Sorunum şu: rs232 ve max232 entegrelerini pic 16f877 ile kullandığımda rx ve tx pinlerini mecburi olarak pic ile bu entegrelerin birbiri arasında iletişim kurmasında kullanıyorum. Fakat bana piclerin kendi aralarında iletişim sağlayabilmesi için tx pini zaten gerekiyor. Yani tx pinini ortak olarak kullanamıyorum. 16f877 için ayrı bir pin çıkışı var mıdır ki bana yine tx ve rx görevi görsün ya da max232 ve rs232 entegreleri bulunan devre için pic in başka pinlerini veri iletişimi için kullanabilirmiyim?

Araştırdığım kadarı ile 16f877 pic'inin tek veri giriş çıkışı rx vr tx pin çıkışları. Ben devremde bu pinleri nasıl paylaştıracağım yoksa yapmak istediğim iş için yeterli pin çıkışı mı yok?

Bu devreyi yapan arkadaşlardan bu noktada nasıl bir çözüm bulduklarını öğrenmek istiyorum. Bilgilerini paylaşırlarsa çok memnun olurum. şimdiden teşekkürler...
Only two things are infinite, the universe and human stupidity and I'm not sure about the former  --Albert Einstein--

neotr

Yapmayı dusundugun proje ıcın bence her ıkı taraf ıcınde tek PIC yeterlı varsayalımkı TX tarafındayız ve PC den aldıgımız bılgıyı Dıger PIC e yolluycaz.

1. if(kbhit())  fonksıyornu rx bufferı bır verı aldıgında kesme olusturacak bunun Karsı PIC tenmı geldıgını PC denmı geldıgını anlamak ıcın kontrol byte ı koyucaksın eger bu kontrol byte Sana PC yım dıyorsa aldıgını TX ucundan dıger PIC e rahatca yollayabılırsın.Ha kontrol byte ı sana Ben PIC ım dıyorsa o pıcın yolladıgı verıyle gereklı ıslemlerı yapabılırsın.
2.TX ederkende bır protokol hazırlıycaksın gonderırken PC ıcın ayrı bır kod PIC ıcın ayrı bır kod olacak hangısı kendısıne uygunsa o bu verıyı alacak bu mantıgı rx ıcınde degerlerndr
projen sorunsuz calısacaktır...

Dikkat etmen gereken tek nokta aynı anda hem PC hem PIC dıger PICın RX ucuna verı basmamalı ....yol cekısmesı denen olayla karsılasırsın..

Bunun ıcınde aklıma gelen busy pini kullanmak olabilir yada daha farklı yontemler dusunuyorsan sende uretebılrsın..

Tagli

PIC'ler arasında başka bir protokol kullanabilirsin. Mesela kullandığın 16F877'nin dahili SPI ve I2C modülleri var. Bunların ikisi de senkronize seri iletişim protokolleridir.
Gökçe Tağlıoğlu

elminster

paylaşılanlar için teşekkürler, söylediklerinizi en kısa zamanda uygulamaya koyacağım sonuçlarla birlikte döneceğim...
Only two things are infinite, the universe and human stupidity and I'm not sure about the former  --Albert Einstein--

elminster

Dedikleriniz üstüne düşündüm ve bazı denemelerde yaptım kesme kullanmak gibi ama yinede diğer pic'e string yollayamadım. Yaptığım devremi sizlere incelemek için göstermek istedim. Okla gösterdiğim yer bahsettiğim bağlantı TX'den aldığım ikiye ayırdığım bağlantı. Devre bu durumda iken sadece max232 devreden virtual terminal yardımı ile string gönderip RX pinine bağlandığı pic'in LCDsinde göstermeyi başarabildim. Diğer sağdaki pic'e TX aracılığı ile transfer yapamıyorum :?: seri iletişim olduğu için döngü şeklinde karakter karakter göndermek için çabaladım stringleri ama sonuç alamadım. hatta bu döngüyü kesmelerin disable edildiği fonksiyonun içinde denedim o da olmadı kesmelerin enable edildiği sonsuz döngü içine attım o da olmadı :?:

acaba TX'i ikiye ayırmam sorun mu yaratıyor yoksa.

İşte devre şeması;

:?:  :?:  :?:
Only two things are infinite, the universe and human stupidity and I'm not sure about the former  --Albert Einstein--

elminster

tek çıkıştan ikiye ayırmak yerine ikinci çıkışın farklı bir yerden verilmesi olayının iki adet rs232 satırı ile halledebileceğimi öğrendim


burada belirtilen olay

#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7 stream=SENSOR)
#use rs232 (baud=9600, xmit=pin_D1, rcv=pin_D2 stream=TERMINAL)

bu satırlar ile çıkışların ayrılmasından başka birşey değil. yalnız aklıma takılan
****************************************************************
for( k=0;k<10;k++ ){
 
     for(i=0;i<5;i++)
     {
        putc(0b10101010);       // 5 byte Preamble değeri gönderiliyor.
     }
   
     putc('y');                     // Öncü veri gönderiliyor
     putc( klavye[k] );
     putc( klavye[k] );
}        
****************************************************************

Ben bu komutlarda söylenildiği gibi nasıl SENSOR ve TERMINAL kelimelerini dahil edeceğim. O çıkışlara nasıl yönlendirebilirim...

Fikri olan var mı acaba. Şimdiden teşekkürler...
Only two things are infinite, the universe and human stupidity and I'm not sure about the former  --Albert Einstein--

elminster

Sorun çözüldü arkadaşlar. Tx pin çıkışını max232 ve diğer pic'in RX pinine gidiş olarak ayırmama hiç gerek yokmuş. TX çıkışını direk olarak diğer pic'e yolladım. Bir diğer nokta ise iki pic'in çalışma frekanslarını eşitlemem ile senkron olmaları ve birbirlerine uyum sağlamarı ile halledildi.

ilgilenen ve yardımcı olan arkadaşlara çok teşekkürler...

pratiğe dökme aşamasında da yardımlarınıza ihityacım olacak gözüküyor. Udea modülleri ile uygulamaya başlıyorum...
Only two things are infinite, the universe and human stupidity and I'm not sure about the former  --Albert Einstein--

uzakcil

herkese merhaba .. acaba linkleri tekrar yineleyebilir misinz .. ben de ilgilenmek istiyorum .devrenin son hali ile ccs programını atabilir misiniz ?

alaattincindarik

Arkadaşlar CCS ile yazılmış kod ve devrenin son halini benimle paylaşırsanız sevinirim  :D ŞİMDİDEN TEŞEKKÜRLER