avatar_elektro77

TRANSRECEIVER KULLANIMI

Başlatan elektro77, 10 Aralık 2016, 00:52:32

elektro77

Allah rızası için protonda 16f877 kullanılarak yazılmış sadece portd.1 deki şaseye çekilmiş bir ledi yakmak için yazılmış bir alıcı verici kod örneği gönderebilir misiniz.verici devrem 16f628. Normal ask alıcı verici ile çalıştırdım fakat mesafe uzatmak için bir çok para verip direnç.net ten 4adet dorji 7020d20 transparan transreceıver aldım. Kullanamıyorum.(Proton kullanma nedenim ise grafik LCD kolaylığıdır)

Aşağıdaki vericimin kısmi kodları. pic basic proda yazıldı. Ask verici modüle göre ayar yapılırsa gerçekte de çaşıyor. fakat alıcısı grafik LCD kullan kolaylığı için bilmediğim bir dil olan protonda yazdım.grafik lcd kullanım kısımlrını anlaşılması açısından koymadım. Ask alıcı ile proton kodlarımın koymadığım kısımlarınıda gerçekte çalıştırdım.amacım verici yazılımından veri  yollarken verici modül olarak kullandığım transreceıverde sadece tx i çalıştırmak, alıcıdada veri alırken alıcı olarak kullandığım transceıverde sadece rx i çalıştırmak. Yazılımda bir ayar yapmadan verici olarak kullandığım transceıverin rx pinini lowa çektim çalışmadı. Frekansmetre ile ölçtüğümde bu şekilde hiçbir çıkış alamadım. Alıcı olarak kullandığım transceıver modulunde ise tx pinini lowa çektim çalışmadı.
bilgi 1 ise sadece portd.1 deki ledi yakacak .bunu başarsam diğer yapmak istediklerimi üzerine ekleyebilirim. karşılıklı alıp verme yapmayacak. Modüller vericide verici alıcıda alıcı olarak kullanılacak. Allah rızası için yardımcı olur musunuz? İnanın tam 1 aydır uğraşıyorum.

@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_ON
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_OFF
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
DEFINE OSC 4
cmcon=7
' -------------- haberlesme define
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 9600 Baud @ 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

TRISA=%00010100
PORTA=0
TRISB=%00000000
portb=0

VERICI VAR BYTE
VERICI=0
symbol LED=PORTA.0
symbol TUS1=PORTA.2
Symbol TUS2=PORTA.4

BASLA:
IF TUS1=1 THEN   
VERICI=1
GOSUB GONDER
ENDIF

IF TUS2=1 THEN 
VERICI=101
GOSUB GONDER
ENDIF

GOTO BASLA

gonder:
       HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]'uyandirma sinyali preambl
       HSEROUT ["$","U","M",VERICI]
       HSEROUT ["$","U","M",VERICI]
       HSEROUT ["$","U","M",VERICI]
return
END


ALICIDADA ANCAK BUNLARI YAPABİLDİM.
Device = 16F877
Config XT_OSC,WDT_OFF,PWRTE_ON,BODEN_ON,LVP_OFF,DEBUG_OFF,CP_ALL 
Xtal = 8
'-----------------------------------------------------------------------
TRISA=%00000001
PORTA=0
TRISB=0
TRISC=%10000000
TRISD=%00000000
TRISE=0
PORTD=0
PORTE=%00000010
ADCON1=7
'CMCON=7 
INTCON=%11000000
'--------------------------------------------------------------------------
OPTION_REG.7=1
'------------------------------------------------
Declare HSER_RCSTA 90h ' Enable serial port & continuous receive
Declare HSER_TXSTA 20h ' Enable transmit, BRGH = 0
Declare HSER_SPBRG 25  ' 9600 Baud @ 4MHz, 0,16%
Declare HSER_CLROERR 1 ' Clear overflow automatically

Dim TEMP   As Byte
Dim BILGI  As Byte 'okunan digital değer.
Symbol GIE  =INTCON.7   'genel interruptları açıyor
Symbol PEIE =INTCON.6   'peripheralinterruptları açıyor
Symbol RCIE =PIE1.5     'USART Recive interrupt enable bit
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
'-------------------------------------------------

RCIE=1
PEIE=1
GIE=1
On Interrupt GoTo INT

BASLA:

If BILGI=1 Then PORTD.1=1
If BILGI=101 Then PORTD.1=0           

GoTo BASLA

Disable
INT:
    GIE=0
    HSerIn  [Wait("$UM"),BILGI]
    TEMP=RCREG
    GIE=1
    Resume
    Enable
                               
End
                                                 
code]
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Hattuşa

hocam bu kadar üzmeyin kendinizi yaw illa ki basit bir yerde kod eksiği vardır. inanın gecenin bu saatine kadar takıldığım yer vardı uğraştım çözemedim ama çözülecek ETE gibi bir hocamız olduktan sonra korkmayın. inanın yazınızı 2-3 kez okudum ama anlayamadım o kadar kafam karışık. ancak yardımcı olmak adına kendi çalışan devremde alıcıya ait kodu ekleyeyim belki yardımcı olur. bu arada verici ve alıcı arasına yani vericinin TX ile alıcını RX arasına bir kablo atıp datanın gidip geldiğinden emin olduktan sonra transceiverinizi bağlasaydınız hataya daha yakın olurdunuz. bu arada söylediğim testi yapmak için iki devrenin beslemesi aynı kaynaktan olsun.

OPTION_REG =%10000000
Declare Hserial_Baud  = 9600      ' Set baud rate to 9600
Declare Hserial_RCSTA = %10010000  ' Bit7 SPEN: Serial Port Enable bit
Declare Hserial_TXSTA = %10101100  ' Bit5 TXEN: tx enable , Bit3 BRGH: High Baud Rate Select
Declare Hserial_Clear = On         ' Optionally clear the buffer before receiving
Declare Hserial_SPBRG =25        ' 20MHZ osilatör ve 9600 baud rate için SPBRG=129 bkz.datasheet
Declare FSR_CONTEXT_SAVE = On


Symbol RCIE = PIE1.5   ' USART Receive Interrupt Enable
Symbol TMR1IF = PIR1.0 ' TMR1 Overflow Interrupt Flag
Symbol RCIF = PIR1.5   ' USART Receive Interrupt Flag


RCIE =1


Symbol PEIE = INTCON.6 ' Peripheral Interrupt Enable
Symbol GIE = INTCON.7  ' Global Interrupt Enable


GIE =1
PEIE =1
 
GIE =0
On_Hardware_Interrupt GoTo KeSMe
Dim dEgEr As Byte
Dim KoNum As Byte
Dim sIfrE As Byte
Dim X As Word
Dim TeMp As Byte
Dim BaK As Bit

Dim ProB As Byte

ProB =4     'PROBLARIN ATAMASI BURDAN YAPILIR
BaK =0
sIfrE =0
KoNum =0
DelayMS 500
A =0
DelayMS 1200
M =0
DelayMS 1200
N =0
DelayMS 1200
B =0
DelayMS 1200


GIE =1

BASLA:
If BaK =1 Then
If KoNum =0 Then GoSub BoStA
If KoNum =1 Then GoSub A_kOnUm
If KoNum =2 Then GoSub M_kOnUm
If KoNum =3 Then GoSub N_kOnUm
If KoNum =4 Then GoSub B_kOnuM   
BaK =0
Else
For X =0 To 250
DelayMS 1
Next
EndIf

GoTo BASLA


BoStA:
   M =0
   N =0
   A =0
   B =0
   Low ROlETeK
   Low rOlEcIfT
Return
A_kOnUm:     '300V KONUMU
   M =0
   N =0
   A =1
   B =0
   Low ROlETeK
   High rOlEcIfT
Return
B_kOnuM: 'GND KONUMU
   M =0
   N =0
   A =0
   B =1
   High ROlETeK
   Low rOlEcIfT
   
'   High ROlETeK
'   High rOlEcIfT
Return
M_kOnUm:   'INA 1-GIRIS
   M =1
   N =0
   A =0
   B =0
   High ROlETeK
   High rOlEcIfT
'   Low ROlETeK
'   High rOlEcIfT
'   Low aB
Return
N_kOnUm:  'INA 2-GIRIS
   M =0
   N =1
   A =0
   B =0
'   Low ROlETeK
'   High rOlEcIfT
'   High aB
Return


KeSMe:

Context Save

HSerIn 20,ATLA,[Wait("$RF"),sIfrE ,dEgEr]
If sIfrE =ProB Then KoNum =dEgEr  :BaK =1
ATLA:
TeMp =RCREG
Context Restore

ta3usl

#2
Merhaba,

Şöyle bir belge buldum.
http://www.dorji.com/docs/data/DRF7020D20.pdf

Burada yazanlara göre , bu modülde SET pini varmış. SET pinini high yaptığınızda geçerli ayarlarla çalışıyor , low yaptığınızda da ayar moduna geçiyormuş.

Bağlantıları kontrol ettiniz mi ? SET pini high mı?

Bir de diyor ki , bilgisayara bağlayıp DORJI RF tool yazılımı ile parametreleri yükleyebilirsiniz. Sıkıntı bundan kaynaklı olabilir. Kullanacağın modüllerin parametreleri aynı olmayabilir. Default değerler aynıdır diye düşünsen de , kontrol et.

Parametreler aynı değerlerde mi diye kontrol edip deneme yapmanı öneririm. Dökümanda parametre sayfasını göremedim. Sanırım, yazılım üzerinde gerekli açıklamalar mevcuttur.


elektro77

Set pini normal çalışmada high da olmalı değilmiydi.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ta3usl

Evet kusura bakma, ters yazmışım. Üstteki yazıyı da düzenledim.

Set pini low iken ayar modu , high iken normal modda. Pini kontrol edip, ayrıca modülün çalışma parametrelerini kontrol ettiniz mi ?

elektro77

Ben genelde her olasılığı denedikten sonra buraya yazıyorum. Fakat dorji ayar kitim olmadığı için kontrol edemiyorum. Böyle bir kit olduğunu sonradan öğrendim.drf 7020d20 nin biri arızalı çıktı. Nerden anladın derseniz: vericiye data gönderme anında rx pinini anlık low çektiriyorum o anda frekansmetrede 434 Mhz yi görüyorum. Zaten şu anda drf4320 kullanmaya başladım.sanırım modül parametreleri birbirine uygun. Bunu nerden anladın derseniz: yine data gönderirken anlık olarak elle rx pinini low A çektiğimde frekansmetrede frekansı okuyorum ve alıcıda mavi bir ledin yandığını görüyorum. Ancak data bilgisi gelmiyor. Dediğim gibi kodlarımın uart olmayan normal ask verici için çalışan bir versiyonu var. onlarla hiç sorunum yok. Ancak kodlarımın sadece uart versiyornunda sorunlar yaşıyorum. Dediğim gibi sorunum transreceıverlerdeki rx ve tx pinlerini doğru anda açıp kapayamamak.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

pro_TR
teşekkür ederim yardım etmeye çabaladığınız için. Çok sağolun.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#7
yazılım rx ve tx pinini bu ayarlara göre kendimi açıp kapatıyor.

vericide:(pic basic pro)
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 9600 Baud @ 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

alıcıda (proton)
Declare HSER_RCSTA 90h ' Enable serial port & continuous receive
Declare HSER_TXSTA 20h ' Enable transmit, BRGH = 0
Declare HSER_SPBRG 25  ' 9600 Baud @ 4MHz, 0,16%
Declare HSER_CLROERR 1 ' Clear overflow automatically

Ayrıca bu işi illa kesme ile mi yapmak zorundayız.
Serout2 ve Serin2 komutu gibi kesmesiz kullansak çalıştıramazmıyız.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ta3usl

Bildiğim kadarıyla evet.

Kesmesiz de yapabilirsin de zamanlama kısmını çok iyi tutturman lazım. Kesme ile olursa , farklı işlerle uğraşması daha kolay olur. Bilirsin ki veri geldiğinde pic bunu zaten alacak.

HC-12 kullanmıştım bir ara, dorji farklı mıdır bilemem... Yazılımsal uart kullandığım zaman gönderilen veriyi alamıyordum. Bilgisayara taktığımda alıyordu. Yanlış hatırlamıyorsam, ana döngü içerisinde rsout olarak tanımladığım pini 1 yaptığımda sorun çözülmüştü.

Declare HSER_TXSTA 24h olarak dener misin?  Bir de alıcı kısmında ana döngü içerisinde , pic TX (modülün RX) pinini 1 yaparak denemeni önereceğim.

Gerçi , üstatlar farklı yorumlarla nokta atışı sorunu çözerler   ;)

elektro77

teşekkür ederim deneyeceğim
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#10
bu proton alıcı kodları ile simülasyonda tx-rx arası direk bağlantı ile de datayı alamıyorum.
Device = 16F877
Config XT_OSC,WDT_OFF,PWRTE_ON,BODEN_ON,LVP_OFF,DEBUG_OFF,CP_ALL 
Xtal = 8
'-----------------------------------------------------------------------
TRISA=%00000001
PORTA=0
TRISB=0
TRISC=%10000000
TRISD=%00000000
TRISE=0
PORTD=0
PORTE=%00000010
ADCON1=7
'CMCON=7 
INTCON=%11000000
'--------------------------------------------------------------------------
OPTION_REG.7=1
'------------------------------------------------
Declare HSER_RCSTA 90h ' Enable serial port & continuous receive
Declare HSER_TXSTA 24h ' Enable transmit, BRGH = 0
Declare HSER_SPBRG 25  ' 9600 Baud @ 4MHz, 0,16%
Declare HSER_CLROERR 1 ' Clear overflow automatically

Dim TEMP   As Byte
Dim BILGI  As Byte 'okunan digital değer.
Symbol GIE  =INTCON.7   'genel interruptları açıyor
Symbol PEIE =INTCON.6   'peripheralinterruptları açıyor
Symbol RCIE =PIE1.5     'USART Recive interrupt enable bit
Symbol RCIF =PIR1.5     'USART Receive interrupt flag bit
'-------------------------------------------------

RCIE=1
PEIE=1
GIE=1
On Interrupt GoTo INT
BASLA:
If BILGI=33 Then PORTD.1=1
                 

GoTo BASLA

Disable
INT:
    GIE=0
    HSerIn  [Wait("$UM"),BILGI]
    TEMP=RCREG
    GIE=1
    Resume
    Enable
                               
End
                                 


verici pic basic pro kodları da bunlar. Datayı sorunsuz gönderiyor sanırım.
[/@ DEVICE pic16F628
@ DEVICE pic16F628, WDT_ON
@ DEVICE pic16F628, PWRT_ON
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, MCLR_OFF
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
DEFINE OSC 4
cmcon=7
' -------------- haberlesme define
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 25  ' 9600 Baud @ 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

TRISA=%00010100
PORTA=0
TRISB=%00000000
portb=0

VERICI VAR BYTE
VERICI=0
symbol LED=PORTA.0
symbol tus1=PORTA.2
Symbol tus2=PORTA.4
BASLA:

IF tus1=1 THEN 
VERICI=1
GOSUB GONDER

ENDIF


IF tus2=1 THEN   
VERICI=101
GOSUB GONDER
ENDIF
GOTO BASLA




gonder:
IF VERICI=1 THEN PORTA.1=1 'programın buraya geldiğini görmek için
IF VERICI=101 THEN PORTA.1=0
       HSEROUT [REP$AA\5,REP$00\5,REP$FF\5]'uyandirma sinyali preambl
       HSEROUT ["$","U","M",VERICI]
       HSEROUT ["$","U","M",VERICI]
       HSEROUT ["$","U","M",VERICI]
returncode]
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#11
Verici olan 16f628 de ki bu ayarı DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
24 ü 20 yapınca sistem çalıştı. Sebebi nedir. Bu ayar ne işe yarar. Gerçekte sorun yaratırmı? yazılımdan anladığım kadarıyla 20h yapınca bu pini high yapıyor 24h yapınca low yapıyor.
16f628 in datasheetinde txtsta pinini karşısında adres olarak 98h yazıyor. Fakat yazılıma 98 h koyduğumda çalışmıyor. Sebebleri nelerdir.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

16F877 işlemcide çalışan programda osilatör frekansın 8 Mhz gözüküyor. Ama seçilen OSC tipi XT OSC. bu yanlış.
Kristal 8 Mhz ise HS osc seçmen gerekir.
Diğer taraftan USART parametreleride bu programda 4 Mhz'e göre verilmiş. Sistemin çalışmama sebebi bu olsa gerek.
877 de ki parametreleri;
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 12  ' 9600 Baud @ 8MHz, 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

şeklinde değiştir.

628 deki parametreleri eski haline getir çalışması gerekir.

Ete

elektro77

#13
Dediklerinizi harfiyen yaptım fakat çalışmadı ete hocam
ancak vericiyi şu şekilde
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 9600 Baud @ 0,16%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically

alıcıyıda şu şekilde yaparsan simülasyon çalışıyor
Declare HSER_RCSTA 90h ' Enable serial port & continuous receive
Declare HSER_TXSTA 20h ' Enable transmit, BRGH = 0
Declare HSER_SPBRG 12  ' 9600 Baud @ 8MHz, 0,16%
Declare HSER_CLROERR 1 ' Clear overflow automatically

20h ları 24 yaparsam çalışmıyor.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

ete

24 ile 20 nin farkı sadece High/Low speed. 24 olunca High speed, 20 olunca Low speed haberleşme yapıyorsun. Demekki kullandığın modül hızlı haberleşemiyor. Burdan bu sonuç ortaya çıkıyor.
ete

Powered by EzPortal