Seri iletişim, RF modüller ve Şase olayı

Başlatan dyonizos, 01 Temmuz 2012, 12:25:51

dyonizos

selam arkadaşlar
aşağıdaki sekilde basit bir seri iletişim yapmaya çalışıyorum 2 pic arasında.
Devrede sadece data uçlarını (5 nolu pinler) birbirine bağladığımda iletişim kuramıyorum iki devrenin GND uçlarınıda birbirine bağlarsam iletişimde hiç sorun yok.
Doğal olarak bu devrede data uçlarına birer RF alıcı verivi modül bagladığımda şaseler ortak olmadığı için rf ile iletişim olmuyor. Bu RF iletişimde şase ve data bağlantısı olayı nedir? benim atladığım birşeymi var?
Herkes klasik olarak seri iletişimi yapıp sadece uçlarına rf bağlayınca çalıştığından bahsediyor. ben nerede hata yapıyorum acaba?
Kablolu seri iletişimde GND lerin ortak olması gerekiyormu? eger gerekiyorsa RF de GND olayı nasıl hallediliyor?

teşekkürler

Verici kodları

Devre şeması



Device 12F629
Config INTRC_OSC_NOCLKOUT, MCLRE_OFF, WDT_OFF, PWRTE_ON,

XTAL 4

SET_OSCCAL
GPIO=%00000000
TRISIO=%00000011
CMCON = 7
OPTION_REG.7=0

Dim VERICI As Byte	
	VERICI=0
DelayMS 500


BASLA:
	If GPIO.0=0 Then
	VERICI=10
	GoSub GONDER
	Else
	Low GPIO.2
'DelayMS 50
	EndIf
	
		If GPIO.1=0 Then
	VERICI=20
	GoSub GONDER
	Else
	Low GPIO.2
'DelayMS 50
	EndIf


GoTo BASLA


GONDER:

SerOut GPIO.2,1200,[Rep $AA\5,Rep $00\5,Rep $FF\5]
SerOut GPIO.2,1200,["D","A",VERICI]
SerOut GPIO.2,1200,["D","A",VERICI]
SerOut GPIO.2,1200,["D","A",VERICI]
SerOut GPIO.2,1200,["D","A",VERICI]
SerOut GPIO.2,1200,["D","A",VERICI]
'delayms 1000
'low gpio.2
Return
End


Alıcı Kodları

Device 12F629

Config INTRC_OSC_NOCLKOUT, MCLRE_OFF, WDT_OFF, PWRTE_ON 
XTAL 4
SET_OSCCAL


GPIO=%00000000
TRISIO=%00000100
CMCON = 7
OPTION_REG.7=0

Dim ALICI As Byte

DelayMS 500

High GPIO.0
High GPIO.1
DelayMS 200
Low GPIO.0
Low GPIO.1


BASLA:

DelayMS 50

ALICI=0
SerIn GPIO.2, 1200 ,100, err,[Wait("DA"),ALICI]


	If ALICI=10 Then
	High GPIO.0
	Else
	Low GPIO.0
	EndIf
	
	If ALICI=20 Then
	High GPIO.1
	Else
	Low GPIO.1
	EndIf

GoTo BASLA

err:
GoTo BASLA

End

OG

Şöyle düşün,

PIC'den PIC'e aktarırken data akımı bir PIC'den diğerine gidebilmesi için ikisinin GND si de bağlanması gerek. Çünkü bu elektriksel bir akım.

Araya RF alıcı verici girince PIC 'den PIC'e olmuyor.

PIC'den ---> RF vericiye
veyaaa
RF Alıcı'dan ---> PIC'e oluyor.

Bu durumda
PIC'den ---> RF vericiye data ve GND bağlarsak  ikisi arasında elektriksel akımı sağlarız.

Yine aynı şekilde
RF Alıcı'dan ---> PIC'e data ve GND ucunu bağlarsak ikisi arasında elektriksel akımı sağlarız.

Geriye ne kaldı?

RF Verici'den ---> RF Alıcı'ya

Bunlar da zaten bağlantıyı elektriksel olarak sağlamıyorlar, havadan sağlıyorlar. Yani arada tel falan yok.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

dyonizos

#2
O zaman öyle görünüyor ki benim elimdeki modüllerde bir problem var. Bağlantı dediğimiz sadece data ve gnd uçlarını alıcı ve vericiye bağlamak olduğuna göre bu noktada bir sorun yok. O zaman geriye sadece modüllerdeki arıza durumu kalıyor.


mesaj birleştirme:: 02 Temmuz 2012, 13:54:28

tekrar selamlar,
bugun 2 adet daha alıcı ve verici takım aldım asagıda fotografı olanlardan.

http://www.diytrade.com/china/pd/7285834/315_433MHZ_ASK_receiver_module.html

ancak yinede data gönderimi yapamıyorum. Kodlarda bir sorun olmaması lazım kablo ile iletimde bir sorun çıkmıyor. 1200  baudrate imi düşürmeliyim acaba?
devre şemasındaki RF yazan uçları direk alıcı ve vericinin data uçlarına bağlıyorum.
Yardımcı olabilecek kimse varmı bu konuda?


mesaj birleştirme:: 02 Temmuz 2012, 22:18:48

uyandırma sinyalini sadece usart kullanırkenmı kullanıyoruz. Serin ile software seri iletişimde uyandırma kullanılmazmı?

mustafa_cmbz

err:
GoTo BASLA


alıcıdaki kod da ki şu kısmı şöyle düzenle :

err:
high gpıo.1 ' hangi pin boş işe o pini yaz ve şemaya led bağla
GoTo BASLA


şayet modüller ile iletişim kuramıyor isen yani modül çalışıyordur ama senin datan eksik gidiyordur yarım kalıyordur vs. err moduna geçip program buraya dallanacak ve ilgili uçtaki led yanacak ozaman da sen teşhisi koyacaksın...

sen bu kısmı atlamışsın sanırım ve modülleri gerçek ortamda çalıştırırken kodlar eksik geldiğinde sıkınt olduğunda alıcı hata konumunda sen devreye goto basla yanı basa dön diyorsun sana hiç bir ikaz vermeden tekrar başa döndürüyorsun programı...

diyelim led yandı bu demek oluyorki datalarım yarım geliyor askıda kalıyor yada parazit var datayı tam algılamıyor....yapacağın şey ise preample sinyalini arttırmak (gönderme sayısını ve süresini) ve data gönderim hızını düşürmek..

kullandığın modüllerden ben çok kullandım canavar gibiler fakat uyandırma sinyalini iyi gönderemezsen sıkıntı yaşıyorsun..



uart falan hikaye kendi protokolünüzü yazın derim ben size...ozaman uart alıcı kısımda genellikle yaşanan data beklerken başka işlem yapamama sorununu da ortadan kaldırmış olursunuz...

nasılmı kısaca: pic ile göndereceğiniz datalar belli bir senkronda diyim artıkın 1 palslerinin sürelerine göre 1-0 olarak gönderilecek ve alınacak....mesela 50us ile 60us arası bir kare dalgayı " 1" olarak 70us ile 80us arasını "0" olarak alacaksınız...ozaman sorun ortadan kalkıyor ve yalnış hatırlamıyorsam çağatay hocamın dediğine göre de mesafe daha da artıyor....(nedendir bilinmez :P )

OG

#4
Böyle dene,
TX:

Device = 12F629 
Config FOSC_INTRCIO, WDTE_OFF, PWRTE_ON, MCLRE_OFF, BOREN_OFF, CP_OFF, CPD_OFF
Xtal 4
Set_OSCCAL

TRISIO = %11111011
GPIO = %00000000
CMCON = 7
OPTION_REG.7 = %00001111

Dim VERICI As Byte	
VERICI = 0

GPIO.2 = 1
DelayMS 500


BASLA:
    If GPIO.0 = 0 Then
        VERICI = 10
        GoSub GONDER
        GoTo BASLA
    EndIf
    
    If GPIO.1 = 0 Then
        VERICI =20
        GoSub GONDER
        GoTo BASLA
    EndIf


GoTo BASLA


GONDER:

    SerOut GPIO.2,813,[170,170,170]
    SerOut GPIO.2,813,["D","A",VERICI]
    SerOut GPIO.2,813,["D","A",VERICI]
    SerOut GPIO.2,813,["D","A",VERICI]
    SerOut GPIO.2,813,["D","A",VERICI]
    SerOut GPIO.2,813,["D","A",VERICI]
Return



RX:

Device = 12F629 
Config FOSC_INTRCIO, WDTE_OFF, PWRTE_ON, MCLRE_OFF, BOREN_OFF, CP_OFF, CPD_OFF
Xtal 4
Set_OSCCAL



TRISIO = %11111100
GPIO = %00000000
CMCON = 7
OPTION_REG.7 = %00001111

Dim ALICI As Byte

DelayMS 500

High GPIO.0
High GPIO.1
DelayMS 200
Low GPIO.0
Low GPIO.1


BASLA:
    DelayMS 1
    If GPIO.2 = 0 Then BASLA

    SerIn GPIO.2, 813 ,100, BASLA,[Wait("DA"),ALICI]


    If ALICI = 10 Then
        High GPIO.0
    Else
        Low GPIO.0
    EndIf
    
    If ALICI = 20 Then
        High GPIO.1
    Else
        Low GPIO.1
    EndIf

GoTo BASLA


mesaj birleştirme:: 02 Ağustos 2012, 22:34:21

Bir de kullandığın verici nedir? Küçükler genelde 3V ile çalışıyor.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

izturk

Alıcı devrende modülden pic e giren data hattını 10k direnç ile toprağa çekip dene bi de.