RF Alıcı Verici Devresinde Yazılım Değişikliği

PIC16F84A ile 6 Kanal 433 MHz RF Alıcı Verici Devresini Tuna Yıldız adlı arkadaş yapmış. İstek üzerine yazılımda değişiklik yaparak devrenin çalışma şeklini değiştirdim değiştirilen Picbasic Kodları
Devre ilk hali itibariyle, bir butona basıldığında o butona karşılık gelen LED yanıyor fakat butonu bıraktığında sönmüyordu, ta ki başka bir butona basana kadar. Yani devrede sürekli olarak bir tane LED hep yanık kalıyordu.
Programda mantık itibariyle sadece butonlara basıldığı zaman veri bilgisi gönderiliyordu. Bende buna ek olarak butonlar hem basılı iken hem basılmadığı zamanlarda veri bilgisi göndererek, butonlar basılı iken ilgili LED’i yakan bıraktığın zaman da (benim eklediğim komutlar burada devreye giriyor.), söndüren bir hale getirdim.

IF PORTA.1=0 THEN VERICI=10 GOSUB GONDER ENDIF
Programın ilk halinde butonların kontrolü sadece yukarıdaki komutlarla yapılmış ve sadece buton basıldığı zaman işlem yapıyordu. Butonu bıraktığımızda hiçbir işlem yapmıyordu. Programın bizim istediğimiz gibi çalışması için aşağıdaki komut satırları bütün butonlar için ayrı ayrı yazıldı.
IF PORTA.1=1 THEN VERICI=15 GOSUB GONDER ENDIF
Temel olarak bizim eklediğimiz kodlar yukarıdaki kalıp ile aynı.
İlk programda sadece butonlar basıldığında veri gönderiliyordu, biz butona basılmadığı zamanda veri göndererek devreyi istediğimiz hale getirdik.
Devrenin alıcı kısmında ise aşağıdaki komut satırı kullanılıyordu. Görüldüğü üzere sadece HIGH konutu vardı ve bu komut sadece LED’i yakmaya yarıyordu.
IF ALICI=10 THEN HIGH PORTB.0 ENDIF
LED’i söndürmek için bizde aşağıdaki komut satırlarını ekledik ve böylece butona basılmadığı zaman LED sönük kalıyordu. LED’i söndürmek için bizde LOW komutunu kullanarak LED’in sönük kalmasını sağladık
IF ALICI=15 THEN LOW PORTB.0 ENDIF
Yazar: Ramazan
Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 16 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız; Ramazan












merhabalar,
bu devreyi 3 tane 16f628a ve 1 tane 16f877 ile tek kanaldan seri haberleşme sağlayarak haberleştirmek mümkünmüdür.(Sıra sıra 628 lerden gelen bilgiyi 877 alacak.)
cevabınızı bekliyorum
17 nolu çıkışları birbirine bağladım mı devre çalısıyor ama alıcı verici taktım mı çalışmıyor alıcı ve vericiler aynı frekanslı diye aldım ama çalışmadı :S
@ Maxvell
dediğini yapmak mümkün. bunun için yazıım ile biraz daha oynamak lazım…
@Gazi
kitleri aldığın yere bir uğra istersen. sorunun kitlerde anlaşılan.
Ben denedim de ilk başta sadece 16f84a ile yapmaya çalıştım, yalnız alıcı kodlarını değiştirmedim sadece verici kodlarından bazılarını değiştirdim “3 tane verici olarak 84a kullandım” fakat simülasyon çalışmadı.Pic programlamada yeni olduğumdan elbette yanlışım vardır.Siz benim için yazılımla biraz oynayabilir misiniz.
@Maxvell
Dediğin bu sistem oturup 5 dk da yazılacak bişey değil ne yazık ki. Alttaki linkte bir tartışma konusu var. tam senin istediğin gibi. olayın nasıl yapılacağı konusunda sana çok fazla fikir vereceğini düşünüyorum. Yazıyı incele takıldığın bir yer olursa yardımcı olurum yine.
http://www.eproje.com/modules.php?name=Forums&file=viewtopic&t=5711
Teşekkür ederim Ramazan Bey,
Yazıyı inceledim fakat tam olarak faydalanamadım.Benim projem ona göre daha basit gibi, çünkü ben 3 sensörden gönderdiğim bilgiler sıra sıra gidecek yani sensörler arasında 20 şer metre olduğunu düşünürsek ve her gönderilen veri farklı farklı olduğundan hangi picden geldiği önemli değil de ne geldiği önemli çünkü piclerden “A” “B” “C” göndermem yeterli olacak buna göre işlemeler yapılacak buna göre arayüz hazırladım çünkü. Bu durumda veri gönderiminde çakışma olur mu sizce.Benim yaptığıma gelince:
Yukarıdaki devreyi proteusta açtım ve verici kısmını kopyalayp alta 2 tane yapıştırdım ve birinci vericinin sadece 1. butonunu kullanıp diğerlerini devre dışı bıraktım.aynı işlemleri 2.buton ve 3.buton olarak kullandım fakat 3 ü aynı anda olunca çalışmıyor.bu konuda yardıma ihtiyacım var.
işte sorunda tam dediğiniz noktada. birden fazla verici(aynı frekanslı) aynı anda çalışmaz. bunu önlemek için şöyle bir sistem tasarlaman lazım;
kullanacağın devrelerde 1 adet MASTER(yönetici) olacak.
diğer picler ise SLAVE konumunda olacak ve bunların hepsinde ayrı bir ID -Numara,isim ne dersen artık- olacak. MASTER pic ile bunların hepsinin aynı anda çalışmasını engellemen lazım. sistemde 3 tane SLAVE var ise bunlarda A,B ve C olarak isimlendirilmiş ise şöyle yapacaksın;
MASTER pic ilk olarak A pici ile iletişime geçmek için “A” verisini gönderecek bu sırada diğer picler “dinleyici”(alıcı) olacağından “A” verisi hangisinde tanımlı ise o pic ile haberleşek ve MASTER’ın istediği veriyi gönderecek.(diğer picler yine dinleyici) MASTER, A picinden veriyi aldıktan sonra B pici ile haberleşmek için “B” verisini gönderecek. bu seferde sadece B pici MASTER’ın istediği veriyi gönderecek. Sonra “C” verisini gönderecek bu seferde sadece C pici MASTER’ın istediği veriyi gönderecek.
Anladım o halde bunları araştırıp öğrenmek düşüyor bana, bu tarz örnek var mıdır acaba varsa paylaşarmısnız.
yardımlarınız için çok teşekkürler.
Şahsen bende yok. ama nette biraz araştırırsan RF MASTER SLAVE şeklinde bişeyler bulabilirsin. Devreyi yapmaya niyetin varsa yardımcı olurum teknik anlamda. Teknik anlamda takıldığın bir yer varsa yardım edebilirim.
Evet kesin yapmam lazım şuan bununla uğraşmaktayım.Yardımcı olursanız çok iyi olur.
Okulda Pic i Assembly dilinde programlamayı öğreniyoruz. Ben de bu proje ödevim için böyle bişey yapmayı düşünüyordum. Kendi uğraşlarımla ve bir çok yanlışlarla Bu sistemi Assembly dilinde programlamaya uğraştım. Kısaca açıklarsam ; Alıcı pic ayrı verici pic ayrı programladım. Ancak daha yeni öğrendiğim için çok yanlışım vardır diye düşünüyorum. Aşağıda verici devresindeki pic için yazdığım program parçası var. Ancak benim yapacağım vericide portlar biraz farklı. Yani ; PortA ÇIKIŞ PortB GİRİŞ. Butonların hepsi B portuna bağlı. Yanlışım vardır elbet daha öğrenciyim :)
Porgramın bir kısmı :
BSF STATUS,5
CLRF TRISA
MOVLW h’FF’
MOVWF TRISB
BCF STATUS,5
TEST
BTFSS PORTB,0
GOTO BUTON1
BTFSS PORTB,1
GOTO BUTON2
BTFSSPORTB,2
GOTO BUTON3
.
.
BTFSS PORTB,5
GOTO BUTON6
GOTO TEST
BUTON1
MOVLW h’01′
MOVWF PORTA,0
GOTO TEST
BUTON2
MOVLW h’02′
MOVWF PORTA,0
GOTO TEST
.
.
BUTON6
MOVLW h’06′
MOVWF PORTA,0
GOTO TEST
END
Alıcı devresindeki pic için de bir program yazdım ( Assembly )
Program parçası :
BSF STATUS,5
CLRF TRISB
MOVLW h’FF’
MOVWF TRISA
BCF STATUS,5
TEST
MOVF PORTA,W
SUBLW h’01′
BTFSS STATUS,2
GOTO h_O2
GOTO LED_1
h_02
MOVF PORTA,W
SUBLW h’02′
BTFSS STATUS,2
GOTO h_03
GOTO LED_2
h_03
MOVF PORTA,W
SUBLW h’03′
.
.
h_06
MOVF PORTA,W
SUBLW h’06′
BTFSS STATUS,2
GOTO TEST
GOTO LED_6
LED_1
MOVLW b’00000001′ ; PORTB NİN 1 NOLU LEDİNİ YAK
MOVWF PORTB
GOTO TEST
LED_2
MOVLW b’00000010′ ; PORTB NİN 2 NOLU LEDİNİ YAK
MOVWF PORTB
GOTO TEST
.
.
LED_6
MOVLW b’00100000′ ; PORTB NİN 6 NOLU LEDİNİ YAK
MOVWF PORTB
GOTO TEST
END
Umarım anlaşılır olmuştur.