NRF24L01 Kullanımı

Başlatan erdogan2734, 26 Haziran 2016, 00:07:04

sakin06

bazen yazaçlarda yazma sorunu olabiliyor onun için yazdıktan sonra okuyup yazdığımla karşılaştırıyorum farklı ise tekrar yaz diyorum ama ETE beyin dediği gibi elimdeki modüllerden de kaynaklı olabilir diye düşüneceğim ama elimde iki takım modül var biri küçük diğeri antenli olanlarından, küçük olanlar 25 mt antenli olanları ise 100mt civarı iletişim sağlıyor, ilk kez denediğim için mesafeler normal mi bilemiyorum

ete

Mesafe konusuna fazla takılma antensiz olanlarla çalıştım 50 m den rahat haberleşiyor. Ama ev içinde denemeyaparsan duvarlar etkiliyor ve mesafe kısalıyor gibi. Açık alanda gerçek mesafeyi bulursun sanırım.
Ete

sakin06

 Teşekkür ederim, denemelere devam edeceğim

sakin06

Merhaba Arkadaşlar işlerinizde kolaylıklar dilerim
nrf24l01 ile epey uğraştım ancak mesafesi bana yeterli gelmedi, bu sebeple sx1278 ile uğraşmaya başladım, hiç ilgilenen oldu mu acaba? ne yaptıysam Lora modunda regirqflags durum yazacını silemedim, diğer yazaçları yazıp okuyabiliyorum ancak bu yazaç r/w değilde r/c formatında acaba yazma adresi mi değişik yada farklı bir yöntem mi kullanmam gerek? bir öneriniz olabilir mi?
teşekkür ederim

Burak

Alıntı yapılan: sakin06 - 26 Şubat 2018, 14:35:59
Merhaba Arkadaşlar işlerinizde kolaylıklar dilerim
nrf24l01 ile epey uğraştım ancak mesafesi bana yeterli gelmedi, bu sebeple sx1278 ile uğraşmaya başladım, hiç ilgilenen oldu mu acaba? ne yaptıysam Lora modunda regirqflags durum yazacını silemedim, diğer yazaçları yazıp okuyabiliyorum ancak bu yazaç r/w değilde r/c formatında acaba yazma adresi mi değişik yada farklı bir yöntem mi kullanmam gerek? bir öneriniz olabilir mi?
teşekkür ederim


Bu farklı bir tümdevre , o yüzden lütfen bunu ayrı bir başlıkta paylaş konu bütünlüğü bozulmasın .


Burak
Ω Gens Una Sumus Ω

alisumer

#140
nrf24 ün registerlerine ulaşamadım ben registerlere ayarlamaları yapabilmek için nasıl bir veri gndermeliyiz bir türlü kavrayamadım bazı kayıtlarda 24 bitlik veri gönderilmiş ayar için ama bana bi anlam ifade etmedi datasına bakıyorum çok iyi ingilizcemde olmadığı için Pic dataları gibi anlamlı gelmiyor hiç bişey  pic e status =%10001001 yazınca iş halloluyor  örneğin nrf de CONFIG registerinin adresi 00 görünüyor bu adrese veri yazmak için ne yapmalıyım sadece bir örnek verilirse yeterli olur gibime geliyor .şimdiden teşekkürler yardım için konunun başında paylaşılan  kodlardan anladığım kadarı ile CE biti 0 CSN biti 1 yapılarak ayar moduna giriliyor ama daha sonra gönderilen  0x234E04 in neresi adres neresi ayar biti çözemedim registerlerin hex adresleri ile karşılaştırıyorum hiç biri ile uyuşan bi veri yok burda
Hep meraktan

ete

#141
Ne yazıkki olay düşündüğün kadar basit bir şey değil. BU NRF adama saç baş yoldurur. Hem bu sistemi anlamak hemde anladığını icraata dökebilmek için data sheet'i yutup yalaman gerekiyor. İşin mantığı anlatmakla öğrenilmiyor.
Yaklaşık 15 gün uğraşmış idim bir kod yazıp çalıştırabilmek için. Çünki göz önünde tutman gereken bir çok konu var bu işte. Şimdi bana kod yaz yine 15 gün uğraşmam gerekir. Çünki yeniden olaya hakim olmak gerekiyor. Bunun için yeniden data sheet okunacak vs. Yazdığım programlara bakıyorum maalesef çok bir anlam çıkartamıyorum. Senin için biraz baktım ve soruna cevap olarak şunları söyleyebilirim.
CONFIG_NRF   con $00    bu config registerin adresi oluyor.
YAZ_REG      CON $20     buda yazdırma registeri adresi oluyor.
CONFIG registerine bir değer yazman için;
W_KOMUT=YAZ_REG+config_nrf  '($20+$00)  şeklinde önce yazma register adresini alıp ona Config adresini ekliyorsun böylece yazılacak değeri elde ediyorsun. Data_OUT isimli değişkene de yazılacak değeri veriyorsun ve sonunda ,
        CSN=0
        SHIFTOUT MOSI, SCK, 1, [W_KOMUT,data_out]
        CSN=1
Şeklinde yazıyorsun. Burada MOSI (Master_Out_Slave_Input) şeklinde açıklanıyor. Yazmayı Master yapıyor almayı ise Slave yapmış oluyor.

Sürekli olarak yazdığını geri okumalısın. Yoksa haberleşme emniyeti kaybolur. Onun içinde;
R_KOMUT=OKU_REG+config_nrf   şeklinde Okuma registeri ile Config adresini ekliyorsun.
Sonra,
        csn=0
        shiftout mosi, sck, 1, [R_KOMUT]  ' trying to read the register
        shiftin miso, sck, 0, [REG0,REG1,REG2,REG3,REG4]
        csn=1
şeklinde önce okuma emrini yazıyorsun sonra 4 registeri okuyup alıyorsun.

Burada hem okuma hemde yazma örneklerini vermiş oldum. Sistem düşündüğün kadar basit ise gerisini çözersin umarım. Değilse data sheet üzerinde epeyce çalışman gerekecek.
Ayrıca öncemi mesajlarda bir takım örnekler olması gerekir. Onlarıda araştırırsan yararı olur sanırım.

Ete



Dtmf

Alisumer nrf ye harciyacagin zamani ve parayi bir tavsiye hc-12 veya lorasx1278 1w 80... mhz gibi moduller var onlarla ugras  :) ilede nrf diyorsan ardunio nano ile programla pic devresi ile haberlestirip kullanabilirsi.mesela ben hava araci projesinde bmp280-mpu6050-neomw6-hmc5883-ssd1306 gibi modulleri ardunio nano uzerinde toplayip pic ile haverlestirip ardunio yu oyle kullaniyorum.sende oyle yapabilirsin

alisumer

#143
Alıntı yapılan: Dtmf - 29 Mart 2019, 15:13:50
Alisumer nrf ye harciyacagin zamani ve parayi bir tavsiye hc-12 veya lorasx1278 1w 80... mhz gibi moduller var onlarla ugras  :) ilede nrf diyorsan ardunio nano ile programla pic devresi ile haberlestirip kullanabilirsi.mesela ben hava araci projesinde bmp280-mpu6050-neomw6-hmc5883-ssd1306 gibi modulleri ardunio nano uzerinde toplayip pic ile haverlestirip ardunio yu oyle kullaniyorum.sende oyle yapabilirsin
lora yada dorji yi düşündün hem seri haberleşmesi var kolay diye  ama elimde iki tane 24l01 var kullanmak istiyorum bunları da ayrıca ayırdığım zaman boşa gitmiyor diye düşünüyorum burdan edineceğim tecrübeye de ihtiyacım var loradan da tabi şu register kaydının mantığını çözersem :( bi sürü c kütüphane yapmışlar modul ile ilgili hiç bişey anlamıyorum elli tane include dosyası var hangisi ne işe yarar araki bulasın ASM ye karışık diyorlar bide .birde arduino işine girmek istemiyorum çünkü onun programcılık ile bi alakası yok yeni başlayanlar için kütüphane yükle çalıştır gibi bi mantığı var ve c de acayip karıık geliyor bana
Hep meraktan

alisumer

Ete hocam teşekkürler Allah razı olsun senden direk çözemesemde en azından senin verdiğin örneklerden bişeyler çıkarabiliyorum datasındaki anlayabildiğim bilgilerle harmanlar bi şekilde halletmeye çalışırım :)
Hep meraktan

alisumer

hocam az çok çözmeye başladım bilmem yanlış mı anladım ama registere yazmak için csn =0  yapıldıktan  sonra yazma aktif etmek için 0X20 ye config registerin adresini ekliyoruz oda 0 yani hex 20 gönderdikten sonra ayarlayacağımız bit  1.bit   ise

spi den 0x20, 0x02 gönderince configreg in pwr_up biti set oluyor
peki şöyle bir sorum olacak datadan anladığım kadarı ile w_registerden ayar yapmak için "Executable in power down or standby modes only."giib bir ibare var power down yapmak için config reg e değer vermemiz gerekiyor onu yapmamız içinde w registerden değer girmemiz gerek ama kısır döngü olmuyormu böyle?
Hep meraktan

ete

Bu bilgileri hatırlayamadım. Kendin çözmeye çalış yanlış bilgi vermeyeyim.
Ete

alisumer

tekrar hayırlı akşamlar nrf konusunda bayağı kafa patlattım hala haberleşme yok "isis" de de deneme şansımız yok sadece alıcı taraf PIC ile verici taraf PIC ın nrf ile spı haberleşmesini simule etmeye çalıştım görünürde datasheet e uyuyor hatta internette bulduğum nrf logic analizer verilerine de uyuyor register ayarları ama bir türlü haberleşmeyi sağlayamadım resim dosyasını atıyorum eksiklik nerde çözemedim bir türlü burak hocam bi el at lütfen

Hep meraktan

alisumer

Burada da tx tarafından gönderdiğim 6 byte uzunluğunda veri var.

NOT: üstteki resimde mosi diye belirttiğim veri PIC in SDO kısmından çıkan veri nrf nin mosi ucuna bağlanıyor
Hep meraktan

alisumer

'****************************************************************
'*  Name    : VERİCİ.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2019 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 13.04.2019                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ __config  _CP_OFF & _PWRTE_ON & _WDT_OFF & _CPD_OFF & _MCLRE_ON & _HS_OSC
include "modedefs.bas"
DEFINE OSC 20
'DEFINE SHIFT_PAUSEUS 1
'DEFINE SER2_BITS 8
'DEFINE HPWM1_TIMER 2
'ASM
'	;	LIST 	p=PIC16F690	
'	#INCLUDE <P16F690.INC>
'	;	__CONFIG 	08E2

SYMBOL  CSN     = PORTC.6
SYMBOL  CE      = PORTC.3
symbol  MOSI    = PORTB.4
SYMBOL  MISO    = PORTC.7

KL      VAR BYTE  $20
KH      VAR BYTE  $21
KYL     VAR BYTE  $22
KYH     VAR BYTE  $23
ML      VAR BYTE  $24
MH      VAR BYTE  $25
DL      VAR BYTE  $26
DH      VAR BYTE  $27
CAMH    VAR BYTE  $38
CAML    VAR BYTE  $40
BAMH    VAR BYTE  $42
BAML    VAR BYTE  $44
KAM     VAR BYTE  $46
BAM     VAR BYTE  $48
KANAT   VAR BYTE  $30
KUYRUK  VAR BYTE  $32
MOTOR   VAR BYTE  $34
DUMEN   VAR BYTE  $36
ZAMAN   VAR BYTE
SURE    VAR BYTE  
TMP1    VAR BYTE
TMP2    VAR BYTE
TMP0    VAR BYTE


CE   = 1
CSN  = 1

BAK:
ASM
AYAR:
        
		BSF		STATUS ,RP0			;BANK 1
		MOVLW	B'00000111'			;PORTA 0-2 GİRİŞ	
		MOVWF	TRISA
		MOVLW	B'00000111'									;PORTC 0-2 GİRİŞ
		MOVWF	TRISC
		MOVLW	B'00010000'			;PORTB	4 GİRİŞ
		MOVWF	TRISB
		MOVLW	B'01000000'
		MOVWF	SSPSTAT
		BSF		OPTION_REG ,7		
		BCF		STATUS ,RP0			;BANK 0
		MOVLW	B'00100010'          ; fosc/64
		MOVWF	SSPCON
		BSF		STATUS ,RP1			;BANK 2
		MOVLW	B'01110111'			;0.1.2.4.5.6 KANALLAR ANALOG GERİSİ DİJİTAL
		MOVWF	ANSEL
		MOVLW	0X00
		MOVWF	ANSELH
		BCF		CM1CON0 ,C1ON
		BCF		CM2CON0 ,C2ON
		BCF		STATUS ,RP1			;BANK 0
		MOVLW	B'10000001'			;ADC AÇIK sağa yaslı  10 bit
		MOVWF	ADCON0
		BSF		STATUS ,RP0			;BANK 1
		MOVLW	B'01100000'			;FOSC/64
		MOVWF	ADCON1
		MOVLW	B'11000000'         ; KESMELER AÇIK
		MOVWF	INTCON
		MOVLW	B'01001000'			;ADIE-SSPIE AÇIK
		MOVWF	PIE1
		BCF		STATUS ,RP0
		BCF		STATUS ,RP1			;BANK 0
		MOVLW	0X00	
		MOVWF	PORTA
		MOVWF	PORTB
		MOVLW   B'00000000'
		MOVWF	PORTC
		
;Delay 100000 cycles
        MOVLW   0x29  ;41 DEC
        MOVWF   _TMP2
        MOVLW   0x05  ;5 DEC
        MOVWF   _TMP1
        MOVLW   0x0A1  ;161 DEC
        MOVWF   _TMP0
        DECFSZ  _TMP0,F
        GOTO $-1
        DECFSZ  _TMP1,F
        GOTO $-5
        DECFSZ  _TMP2,F
        GOTO $-9
		
        endasm

        NRF:    
ASM    
        BSF     _CE
       ; BSF     _MISO
        NOP
        NOP
        BCF     _CSN
        MOVLW   0XAA
        CALL    GONDER
        BSF     _CSN
        MOVLW   0X09
        MOVWF   _TMP0
        DECFSZ  _TMP0 , F
        GOTO    $-1
        BCF     _CSN
        NOP
        MOVLW   0X20
        CALL    GONDER
        MOVLW   0X0C         ;CONFIG REGISTER  0000 1101
        CALL    GONDER
       
       	NOP
        NOP 
        BSF     _CSN
        NOP
        NOP
        BCF     _CSN
        MOVLW   0X021        
        CALL    GONDER        ;   AA DİSABLE
        MOVLW   0X00
        CALL    GONDER
       	NOP
        NOP
        BSF     _CSN
        NOP
        NOP
        BCF     _CSN		
        MOVLW   0X022         ; ENABLE DATA PİPE 1
        CALL    GONDER
        MOVLW   0X01
        CALL    GONDER
       	NOP
        NOP
        BSF     _CSN
        NOP
        NOP 
        BCF     _CSN		
        MOVLW   0X023         ; ADRES UZUNLUĞU 5 BYTE
        CALL    GONDER
        MOVLW   0X03
        CALL    GONDER
       	NOP
        NOP
        BSF     _CSN
        NOP
        NOP 
        BCF     _CSN
        MOVLW   0X024               ;  RETRANSMİT İPTAL
        CALL    GONDER
        MOVLW   0X00
        CALL    GONDER
       	NOP
        NOP
        BSF     _CSN
        NOP
        NOP
        BCF     _CSN          ; FREKANS KANAL  2400+A
        MOVLW   0X025         ; RF SETUP =1 MBPS , 0 dBm ,LNA 1
        CALL    GONDER
        MOVLW   0X0A
        CALL    GONDER
       	NOP
        NOP
        BSF     _CSN
        NOP
        NOP
        BCF     _CSN		
        MOVLW   0X026         ; ADRES UZUNLUĞU 5 BYTE
        CALL    GONDER
        MOVLW   0X06
        CALL    GONDER
       	NOP
        NOP
        BSF     _CSN
        NOP 
        NOP
        BCF     _CSN

        MOVLW   0X030         ; TX_ADDR "A7A7A7A7A7"
        CALL    GONDER
        MOVLW   0XA7
        CALL    GONDER
        MOVLW   0X0A7
        CALL    GONDER
        MOVLW   0XA7
        CALL    GONDER
        MOVLW   0XA7
        CALL    GONDER
        MOVLW   0XA7
        CALL    GONDER
       	NOP
        NOP
        BSF     _CSN
        NOP
        NOP
        BCF     _CSN       
        MOVLW   0X2A
        CALL    GONDER
        MOVLW   0XB5                ; RX_ADDR_P0 "B5B5B5B5B5"
        CALL    GONDER
        MOVLW   0XB5
        CALL    GONDER
        MOVLW   0XB5
        CALL    GONDER
        MOVLW   0XB5
        CALL    GONDER 
        MOVLW   0XB5
        CALL    GONDER
       	NOP
        NOP
        BSF     _CSN
        NOP
        NOP
        BCF     _CSN
        MOVLW   0X31         ; 6 BYTE UZUNLUĞUNDA DATA PİPE 
        CALL    GONDER
        MOVLW   0X06
        CALL    GONDER
        NOP
        NOP
        BSF     _CSN
        NOP
        NOP
        BCF     _CSN
        MOVLW   0X20
        CALL    GONDER
        MOVLW   0X0E          ;CONFIG REGISTER  0000 1110
        CALL    GONDER        ;POWER UP 
        NOP
        NOP
        BSF     _CSN
        movlw   .188
        movwf   _ZAMAN
        movlw   .10
        movwf   _SURE
        decfsz  _ZAMAN,F
        goto    $-1
        decfsz  _SURE,F
        goto    $-3
        nop   
        
        GOTO    ADCOKU 
                   
ENDASM   
BASLA:
 ASM 
ADCOKU:      
  
        MOVLW	B'10000001'
        MOVWF	ADCON0

        CALL    BAK1
        BCF     _CE 
        NOP
        NOP
        NOP
        NOP
        BSF     _CE              
        MOVF	ADRESH ,W
        MOVWF	_KH
        BSF		STATUS ,RP0
        MOVF	ADRESL ,W
        BCF		STATUS ,RP0
        MOVWF	_KL

        MOVLW	B'10000101'
        MOVWF	ADCON0
        CALL    BAK1
        MOVF	ADRESH	,W
        MOVWF	_KYH                    
        BSF		STATUS	,RP0		    
        MOVF	ADRESL  ,W
        BCF		STATUS	,RP0		    
        MOVWF	_KYL
      
        MOVLW	B'10001001'
        MOVWF	ADCON0
        CALL    BAK1
        MOVF    ADRESH  ,W        
   		MOVWF	_MH                     
		BSF		STATUS	,RP0	         
		MOVF	ADRESL	,W
		BCF		STATUS	,RP0		     
		MOVWF	_ML
		
        MOVLW	B'10010001'
        MOVWF	ADCON0
        CALL    BAK1
        MOVF    ADRESH  ,W        
   		MOVWF	_DH                     
		BSF		STATUS	,RP0	         
		MOVF	ADRESL	,W
		BCF		STATUS	,RP0		     
		MOVWF	_DL

        MOVLW	B'10010101'
        MOVWF	ADCON0
        CALL    BAK1
        MOVF    ADRESH  ,W        
   		MOVWF	_CAMH                     
		BSF		STATUS	,RP0	         
		MOVF	ADRESL	,W
		BCF		STATUS	,RP0		     
		MOVWF	_CAML
        
        MOVLW	B'10011001'
        MOVWF   ADCON0 
        CALL    BAK1
        MOVF    ADRESH  ,W        
   		MOVWF	_BAMH                     
		BSF		STATUS	,RP0	         
		MOVF	ADRESL	,W
		BCF		STATUS	,RP0		     
		MOVWF	_BAML	
        GOTO    _HESAP	
BAK1:                                  ;ADC OKUMA TAMAMLANDIMI KONTROL ETME
         ;BSF	ADCON0 ,GO
        MOVLW	0X14
        MOVWF	_ZAMAN
        DECFSZ	_ZAMAN ,F
        GOTO	$-1
                  ;TX DOSYA GÖNDERME PULSİ İÇİN GECİKMEYİ
        MOVLW	0X25                   ; MEVCUT PROGRAM RUTİNİ İLE SAĞLAMAK 
        MOVWF	_ZAMAN                 ;İÇİN KOMUT BU SATIRDA VERİLDİ
        DECFSZ	_ZAMAN ,F              ; BÖYLECE FAZLADAN BEKLEME KOMUTU İLE
        GOTO	$-1                    ;SİSTEM MEŞKUL EDİLMEDİ     
        BCF	    STATUS ,RP0
        BSF	    ADCON0 ,GO
        BTFSC	ADCON0 ,GO
        GOTO	$-1
        RETURN
        BCF     _CSN
        MOVLW   0X20
        CALL    GONDER         ; nrf power up TX mod
        MOVLW   0X0E         ;CONFIG REGISTER  0000 1110
        CALL    GONDER
        BSF     _CSN
  ENDASM

 HESAP:
 KANAT  = (((KH*256)+ KL+1)*/25)+100             '10 BİT VERİNİN 1-2 MS ARASI ZAMAN VERİSİNE DÖNÜŞTÜRÜLMESİ
 KUYRUK = (((KYH*256)+ KYL+1)*/25)+100           'OKUMALAR ASM KULLANILARAK YAPILDIĞI İÇİN "WORD" DEĞİŞKENİ TANIMLANAMIYOR
 MOTOR  = (((MH*256)+ ML+1)*/25)+100             'BUNDAN DOLAYI YÜKSEK BYTE 256 İLE ÇARPILIP DÜŞÜK BYTE İLE TOPLANDIKTAN SONRA 
 DUMEN  = (((DH*256)+ DL+1)*/25)+100             '10 BİT VERİ 100 İLE 200 ARASINDA POT DURUMUNA GÖRE DEĞER ALIYOR
 KAM    = (((CAMH*256)+ CAML+1)*/25)+100         'ALICI TARAFTA PULSOUT KOMUTU İLE DEĞERİN ON KATI ALINARAK İŞLEM YAPILIYOR
 BAM    = (((BAMH*256)+ BAML+1)*/25)+100         'GÖNDERİRKEN LOVBYTE -VE HIGHBYTE AYRI AYRI DA GNDERİLEBİLİR FAKAT
 CSN    = 0                                      'GÖNDERME TRAFİĞİ İKİ KAT UZUN SÜRECEĞİ İÇİN HESAPLANIP 1BYTE GÖNDERİLMESİ DAHA UYGUN GELDİ
'  shiftout PORTC.5,PORTB.6,4, [KANAT,$0C,$26,$0F,$25,$B0]
 'PAUSEUS 2
 ASM
        BCF     _CSN
        NOP
       	MOVLW   0XE1       ;FLUSH FİFO
		CALL    GONDER
		NOP
		NOP
        BSF     _CSN
       	MOVLW	0X09            ; KAYITLAR ARASI GECİKME
		MOVWF	_ZAMAN
		DECFSZ	_ZAMAN ,F
		GOTO	$-1

        
       	MOVLW	0X04            ; KAYITLAR ARASI GECİKME
		MOVWF	_ZAMAN
		DECFSZ	_ZAMAN ,F
		GOTO	$-1
		BCF     _CSN
		NOP
        MOVLW   0XA0                  ; W_TX PAYLOAD   ana veriyi gönderme öncesi fifo reg e kaydetme komutu 
        CALL    GONDER
        MOVF    _KANAT  ,W
        CALL    GONDER
        MOVF    _KUYRUK ,W
        CALL    GONDER
        MOVF    _MOTOR  ,W
        CALL    GONDER
        MOVF    _DUMEN  ,W 
        CALL    GONDER
        MOVF    _KAM    ,W
        CALL    GONDER
        MOVF    _BAM    ,W
        CALL    GONDER
            
        NOP
        BSF     _CSN
     	
        MOVLW	0X03
		MOVWF	_ZAMAN
		DECFSZ	_ZAMAN ,F
		GOTO	$-1
        BCF     _CE
        NOP
        NOP
        NOP
        BSF     _CE
        GOTO    ADCOKU 
GONDER:
        
                                                            ;BCF		PORTC	,6                   			; VERİ GÖNDERME
		MOVWF	SSPBUF	                                   	;BCF		PIR1 ,SSPIF			
		BTFSS	PIR1 ,SSPIF
		GOTO	$-1
		;BSF     PORTC,7
		BCF     PIR1 ,SSPIF
		
		RETURN
ENDASM

END
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2019 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 01.03.2019                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
'Define CONF_WORD = 0x3F2A

'DEFINE HSER_ODD 1
@ __config  _CP_OFF & _PWRTE_ON & _WDT_OFF & _CPD_OFF & _MCLRE_ON & _HS_OSC
;@ INCLUDE <P16F690.INC>
include "modedefs.bas"

DEFINE OSC 20
OPTION_REG.7=1
'DEFINE SER2_BITS 8
'DEFINE CCP1_CON PORTC
'DEFINE CCP1_BIT5
'DEFINE HPWM1_TMR 2
'OPTION_REG.7=1
A1 VAR WORD 
B1 VAR word 
C1 VAR word 
D1 VAR word
E1 VAR WORD
F1 VAR WORD 
A2 VAR byte $21
B2 VAR BYTE $22
C2 VAR BYTE $23
D2 VAR BYTE $24
E2 VAR BYTE $25
F2 VAR BYTE $26
TMP0 VAR BYTE
TMP1 VAR BYTE
TMP2 VAR BYTE
ZAMAN VAR BYTE
SYMBOL  CSN     = PORTC.6
SYMBOL  CE      = PORTC.3
symbol  MOSI    = PORTB.4
SYMBOL  MISO    = PORTC.7


SURE VAR WORD
'ON INTERRUPT GoTo KESME
'SURE = 5





           'PIC 16F690 AYAR"
asm     
        
		BSF		STATUS ,RP0			;BANK 1
		MOVLW	B'00000000'			;PORTA 0-2 GİRİŞ	
		MOVWF	TRISA
		MOVLW	B'00000000'									;PORTC 0-2 GİRİŞ
		MOVWF	TRISC
		MOVLW	B'00010000'			;PORTB	4 GİRİŞ
		MOVWF	TRISB
		MOVLW	B'01000000'
		MOVWF	SSPSTAT
		BSF		OPTION_REG ,7		
		BCF		STATUS ,RP0			;BANK 0
    	MOVLW	B'00100010'          ; fosc/64
		MOVWF	SSPCON
		BSF		STATUS ,RP1			;BANK 2
		MOVLW	0X00			; adc yok
		MOVWF	ANSEL
		MOVLW	0X00
		MOVWF	ANSELH
		BCF		CM1CON0 ,C1ON
		BCF		CM2CON0 ,C2ON
		BCF		STATUS ,RP1			;BANK 0
		MOVLW	B'00000000'			;ADC Kapalı 
		MOVWF	ADCON0
		BSF		STATUS ,RP0			;BANK 1
		MOVLW	B'00000000'			
		MOVWF	ADCON1
		MOVLW	B'11000000'         ; KESMELER AÇIK
		MOVWF	INTCON
		MOVLW	B'00001000'			;ADIE-SSPIE AÇIK
		MOVWF	PIE1
		BCF		STATUS ,RP0
		BCF		STATUS ,RP1			;BANK 0
		MOVLW	0X00	
		MOVWF	PORTA
		MOVWF	PORTB
		MOVLW   B'00000000'
		MOVWF	PORTC
		BSF     _CE
		BSF     _CSN
        MOVLW   0x0B  ;11 DEC
        MOVWF   _TMP2
        MOVLW   0x05  ;5 DEC
        MOVWF   _TMP1              ; 2 MS BEKLEME NRF NİN BAŞLAMASI İÇİN GEREKLİ
        MOVLW   0x3B  ;59 DEC
        MOVWF   _TMP0
        DECFSZ  _TMP0,F
        GOTO    $-1
        DECFSZ  _TMP1,F
        GOTO    $-5
        DECFSZ  _TMP2,F
        GOTO    $-9
        
endasm
        '""""""""NRF AYARLARI""
ASM    
       
        ;BCF     _CSN
        MOVLW   0XAA            ;UYANDIRMA BYTE
        CALL    GONDER
      	MOVLW	0X04
		MOVWF	_ZAMAN
		DECFSZ	_ZAMAN ,F
		GOTO	$-1
        BSF     _CSN
        NOP
        NOP
        BCF     _CSN
        MOVLW   0X20
        CALL    GONDER
        MOVLW   0X0D          ;CONFIG REGISTER  0000 1101  : RX mod
        CALL    GONDER
       	NOP
       	NOP

        BSF     _CSN
        NOP
        NOP
		
        BCF     _CSN
        MOVLW   0X021         ;  AA DİSABLE
        CALL    GONDER
        MOVLW   0X00
        CALL    GONDER
       	NOP
       	NOP

        BSF     _CSN
        NOP
        NOP
		
        BCF     _CSN
        MOVLW   0X022         ;  ENABLE DATA PİPE 1
        CALL    GONDER
        MOVLW   0X01
        CALL    GONDER
       	NOP
       	NOP

        BSF     _CSN
        NOP
        NOP
        BCF     _CSN
        MOVLW   0X023         ; ADRES UZUNLUĞU 5 BYTE
        CALL    GONDER
        MOVLW   0X03
        CALL    GONDER
       	NOP
       	NOP

        BSF     _CSN 
        
        NOP
        NOP

        BCF     _CSN
        MOVLW   0X024         ;  RETRANSMİT İPTAL
        CALL    GONDER
        MOVLW   0X03
        CALL    GONDER
       	NOP
       	NOP
       	BSF     _CSN
       	NOP
       	NOP
       	
        BCF     _CSN
        MOVLW   0X025         ; FREKANS KANAL  2400+A
        CALL    GONDER
        MOVLW   0X0A
        CALL    GONDER
       	NOP
       	NOP

        BSF     _CSN
               
       	NOP
       	NOP
       
        BCF     _CSN
        MOVLW   0X026         ; RF SETUP =1 MBPS , 0 dBm ,
        CALL    GONDER
        MOVLW   0X06
        CALL    GONDER
       	NOP
       	NOP

        BSF     _CSN
        
       	NOP
       	NOP
        
        BCF     _CSN
        MOVLW   0X030         ; RX_ADDR_P0 "B5B5B5B5B5"
        CALL    GONDER
        MOVLW   0XB5           
        CALL    GONDER
        MOVLW   0XB5
        CALL    GONDER
        MOVLW   0XB5
        CALL    GONDER
        MOVLW   0XB5
        CALL    GONDER
        MOVLW   0XB5
        CALL    GONDER
       	NOP
       	NOP

        BSF     _CSN
        
       	NOP
       	NOP     
        
        BCF     _CSN            ;TX_ADDR "A7A7A7A7A7" 
        MOVLW   0X2A
        CALL    GONDER
        MOVLW   0XA7
        CALL    GONDER
        MOVLW   0XA7
        CALL    GONDER
        MOVLW   0XA7
        CALL    GONDER
        MOVLW   0XA7
        CALL    GONDER 
        MOVLW   0XA7
        CALL    GONDER
       	NOP
       	NOP

        BSF     _CSN
        
       	NOP
       	NOP
		
        BCF     _CSN
        MOVLW   0X31         ; 6 BYTE UZUNLUĞUNDA DATA PİPE 
        CALL    GONDER
        MOVLW   0X06
        CALL    GONDER
        NOP
        NOP

        BSF     _CSN
        
        NOP
        NOP
		
		
        BCF     _CSN
        MOVLW   0X20
        CALL    GONDER
        MOVLW   0X0F          ;CONFIG REGISTER  0000 1111
        CALL    GONDER        ;POWER UP -RX MOD
       	NOP
       	NOP

        BSF     _CSN
        movlw   .222
        movwf   _ZAMAN
        movlw   .18
        movwf   _SURE
        decfsz  _ZAMAN,F
        goto    $-1
        decfsz  _SURE,F
        goto    $-3
        nop
        
        ENDASM



basla:
                                                                                  ; "program akışı"
 ASM    
         BCF    _CSN
         NOP

         MOVLW  0XE2
         CALL   GONDER
         NOP
         NOP
         BSF    _CSN
	     MOVLW	0X04            ; KAYITLAR ARASI GECİKME
		 MOVWF	_ZAMAN
		 DECFSZ	_ZAMAN ,F
		 GOTO	$-1
		 
         BCF    _CSN                                                                         ; PİC AYARLAMALARI
         MOVLW  0X61
         CALL   GONDER
         

         NOP
         NOP
         BSF    _CSN                                                                ; ANA PROGRAM
         CALL   ALL                                                               ; HESAPLAMALAR
         MOVWF  _A2                                                               ; KESME ALT PROGRAMI
         CALL   ALL                                                               ; (burada sspbuf değerleri sıra ile 
         MOVWF  _B2                                                               ; ilgili değişkenlere kaydediliyor)
         CALL   ALL                                                               ; ana programa dönülüp servo kontrolleri 
         MOVWF  _C2                                                               ; kaydedilen değerlere göre yapılıyor)
         CALL   ALL
         MOVWF  _D2
         CALL   ALL
         MOVWF  _E2
         CALL   ALL
         MOVWF  _F2
         NOP
         NOP
         BSF    _CSN
         

 ENDASM
  HESAP:

A1 = a2*5
B1 = b2*5
C1 = c2*5 
D1 = d2*5
E1 = E2*5
F1 = F2*5

PULSOUT  PORTC.0 , A1    ' puls out komutu osc ye göre grev yapar girilen değer
PULSOUT  PORTC.1 , B1    '4 MHZ DE 10 İLE ÇARPILIR 100 = 1000 US 
PULSOUT  PORTC.2 , C1    ' 20 mhz de 2 ile çarpılır 500 = 1000 us olur
PULSOUT  PORTA.0 , D1
pulsout  PORTA.1 , E1
PULSOUT  PORTA.2 , F1

SURE = (a1+b1+c1+d1+E1+F1)*2
SURE = 20500-SURE
PAUSEUS SURE
'GOTO HESAP
GOTO BASLA
KESME:
ASM
ALL:
        ;""""SPI"""""""                             ;BSF STATUS ,RP0 
        BCF     STATUS ,RP0                                             ;BTFSS SSPSTAT ,BF
        BTFSS   PIR1 ,SSPIF
        GOTO    $-1
          
        BCF     PIR1  ,SSPIF
        MOVF    SSPBUF ,W                           ; CLRF    SSPBUF       
        ;BSF    _CSN
        RETURN
        ;"""""SERI"""""
        
ENDASM 

ASM
GONDER:       
                                                            ;BCF		PORTC	,6                   			; VERİ GÖNDERME
		MOVWF	SSPBUF	                                   	;BCF		PIR1 ,SSPIF			
		BTFSS	PIR1 ,SSPIF
		GOTO	$-1

		BCF     PIR1 ,SSPIF
		RETURN
ENDASM



Üstteki kod verici kısmı
alttaki kod alıcı kısmı isiste simule ediyorum herşey nrf nindatasına uygun grünüyor ama tık yok hala :(
Hep meraktan

Powered by EzPortal