Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

16F628A RF Haberleşme problemi

Başlatan worthy42, 12 Haziran 2010, 22:04:26

worthy42

2 adet 16f628a kullanarak ,rf iletşimle,2 adet dc motor kontrol etmek istiyorum.Fakat rf haberleşmede problemim var.
Verici kısmın kodu:
@ DEVICE PIC16F628A                                                     
@ DEVICE PIC16F628A, WDT_OFF       
@ DEVICE PIC16F628A, PWRT_ON             
@ DEVICE PIC16F628A, PROTECT_OFF         
@ DEVICE PIC16F628A, MCLR_OFF             
@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT

CMCON = 07    ;PORTA Dijital
INCLUDE "modedefs.bas"
OPTION_REG.7 = 1    ;PORTB Pull-UP lar aktif
TRISB = %11110000
TRISA = %00000000
K VAR BYTE
K = 0

PAUSE 500

SEROUT2 PORTA.0,16780,[REP$AA\5,REP$00\5,REP$FF\5]
;Preamble + Sencron Gönderimi 

ANADONGU:
       IF PORTB.4 = 1 THEN K.BIT0 = 1
       IF PORTB.5 = 1 THEN K.BIT1 = 1
       IF PORTB.6 = 1 THEN K.BIT2 = 1
       IF PORTB.7 = 1 THEN K.BIT3 = 1

    SEROUT PORTA.0,N2400, [254]
    SEROUT PORTA.0,N2400, [K]
    SEROUT PORTA.0,N2400, [192]   
    PAUSE 10
    K = 0       
GOTO ANADONGU
-------------------------------------------------------------------------------------------------
Alıcı kısmın kodu

@ DEVICE PIC16F628A                                                     
@ DEVICE PIC16F628A, WDT_OFF       
@ DEVICE PIC16F628A, PWRT_ON             
@ DEVICE PIC16F628A, PROTECT_OFF         
@ DEVICE PIC16F628A, MCLR_OFF             
@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT

CMCON = 07     ;PO
TRISB = %00000010

DEFINE HSER_RCSTA 90h 
DEFINE HSER_TXSTA 20h 
DEFINE HSER_BAUD 2400 
DEFINE HSER_CLROERR 1

SOLILERI VAR PORTB.3
SOLGERI VAR PORTB.4
SAGILERI VAR PORTB.5
SAGGERI VAR PORTB.6
K VAR BYTE
ERRCHK VAR BYTE
PAUSE 250
     
ANADONGU:

   HSERIN [ WAIT(254),K,ERRCHK]   
   SOLGERI = 0:    SAGGERI = 0:  SAGILERI = 0:    SOLILE
     
    IF ERRCHK = 192 THEN        ;Gelen veri doğru formatta
        IF K.BIT0 = 1 THEN 
            SOLILERI = 1
        ELSE
            SOLILERI = 0
        ENDIF
        IF K.BIT1 = 1 THEN 
            SOLGERI = 1
     ELSE
            SOLGERI = 0
        ENDIF
        IF K.BIT2 = 1 THEN
            SAGILERI = 1
        ELSE
            SAGILERI = 0
        ENDIF
        IF K.BIT3 = 1 THEN
            SAGGERI = 1
        ELSE
            SAGGERI = 0
        ENDIF
    ENDIF
PAUSE 10
GOTO ANADONGU
-----------------------------------------------------------------------------------------------

Yardımcı olursanız çok sevinirim,Pazartesi gününe teslim etmem gerekiyor yoksa mezun olamıyorum.

mustafa_cmbz

kullandığın rf modüllerin markası modeli nedir_?

ayrıca ince bir detaya değinmek isterim preample sinyallerini rbx1 modülü kullanıyor isen şayet artı artına 10- hatta 20 kes gönderirsen en sağlıklı şekilde iletişimini gerçekleştirmiş olursun yani vericideki data gönderdiğin tek satırın tamamını 3-4 kes alt alta copy paste et :) iyi çalışmalar...

worthy42

Teşşür ederim cevap verdiğiniz için.Modülüm udea nın modullerine benziyor, ama anladığım kadarıyla çin malı.fakat arkadasım bi projesinde çalıştırmıştı.Söylediğinizi denedim ama olmadı

ete

BU konuda çalışan programlar aşağıdadır.

Önce TX - VERİCİ programı
'****************************************************************
'*  Name    : RF-TX.BAS                                         *
'*  Author  : [E.T.E]                                           *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 13.06.2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE PIC16F628A                                                      
@ DEVICE PIC16F628A, WDT_OFF        
@ DEVICE PIC16F628A, PWRT_ON             
@ DEVICE PIC16F628A, PROTECT_OFF         
@ DEVICE PIC16F628A, MCLR_OFF             
@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT

CMCON = 07    ;PORTA Dijital 
INCLUDE "modedefs.bas" 
OPTION_REG.7 = 1   ;PORTB Pull-UP lar aktif 
TRISB = %11110000 
TRISA = %00000000 
K    VAR BYTE 56
ESKI VAR BYTE 57
ERR  VAR BYTE 58
K = 0 
 
PAUSE 500 
err=192 
 PORTB=0
ANADONGU: 
'       IF PORTB.4 = 1 THEN K.BIT0 = 1 
'       IF PORTB.5 = 1 THEN K.BIT1 = 1 
'       IF PORTB.6 = 1 THEN K.BIT2 = 1 
'       IF PORTB.7 = 1 THEN K.BIT3 = 1 
        K=PORTB >> 4
       IF K=0 THEN ANADONGU
       SEROUT2 PORTA.0,396,[REP$AA\5,REP$00\5,REP$FF\5]  ;Preamble + Sencron Gönderimi    
       SEROUT2 PORTA.0,396, ["E","T","E",k,dec err]  
'       PAUSE 10 
       ESKI=K
'       K = 0       
       GOTO ANADONGU


Şimdi RX- ALıcı Programı
'****************************************************************
'*  Name    : RF_TX.BAS                                         *
'*  Author  : E.T.E]                                            *
'*  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 13.06.2010                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE PIC16F628A                                                      
@ DEVICE PIC16F628A, WDT_OFF        
@ DEVICE PIC16F628A, PWRT_ON             
@ DEVICE PIC16F628A, PROTECT_OFF         
@ DEVICE PIC16F628A, MCLR_OFF             
@ DEVICE PIC16F628A, INTRC_OSC_NOCLKOUT

CMCON = 7     ;PO
TRISB = %00000010
TRISA=%00000000

OPTION_REG.7=1

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
DEFINE HSER_SPBRG 25  ' 2400 Baud @ 4MHz, 0,17%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_BAUD 2400 'Hser baud rate 

SYMBOL SOLILERI=PORTB.3 
SYMBOL SOLGERI=PORTB.4 
SYMBOL SAGILERI=PORTB.5 
SYMBOL SAGGERI=PORTB.6 

K VAR BYTE 56
ERRCHK VAR BYTE 57
W var byte
PAUSE 500 
PORTB=0     
ANADONGU: 
   
'   serin2 portb.1,396,5,atla,[ WAIT("ETE"), K, dec errchk]  'buda çalışır
   HSERIN 10,atla,[ WAIT("ETE"), K, dec errchk]  
ATLA: 
 
    IF ERRCHK = 192 THEN        ;Gelen veri doğru formatta 
       PORTA=K
        SOLILERI=K.BIT0
        SOLGERI =K.BIT1
        SAGILERI=K.BIT2
        SAGGERI =K.BIT3
        ERRCHK=0
        GOTO ANADONGU
     endIF
     PORTB=0:PORTA=0 
GOTO ANADONGU


Programlar simulasyonda denenmiştir. Butona basıldığı müddetçe karşıda iligili çıkış aktif olmakta buton bırakılınca çıkış sıfır yada Low olmaktadır.

Programlar daha iyi bir mantıkla yazılabilirdi. Ancak yukarıda verilen şekle uyum sağlamaya çalıştığımdan fazla bir şey eklemedim.
Neler yapılabilirdi anlatayım,
Öncelikle PULLUP lı buton kullanırdım. Böylece PortB nin dahili pullup larını kullanır ilave direnç bağlama işleminden kurtulurdum.
USART pinlerini kullanırdır. ALıcıda ise USART kesmesi kullanırdım. Böylece daha emniyetli bir haberleşme sağlanırdı.
Bit bazında kontrolleri byte bazına çıkartarak kod ları daha da azaltmak mümkündür.
Bir tarafta bunu yaptım ama görülsin diye diğer tarafta yapmadım.
Şimdilik söyleyeceklerim bu kadar.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com