rf seri iletişim konusunda algoritma hatası mı ?

Başlatan sinasos, 08 Mayıs 2014, 20:41:51

sinasos

merhabalar arkadaşlar,
öncelikle yardımcı olan veya olmayan herkese teşekkür eder, selamlar sunarım. basit bir rf sistemi kurmayı deniyorum ancak biraz kilitlendim. sorunum şu;
ete hocam öncelerde bu konuyu işlemiş ve bulabildiğim makalelerini okudum, anlamaya çalışıyorum. 3-4 tane rf verici modülü 12f675 ile kontrol ederek 16f628 işlemciye bağlı rf alıcı modülden 7 seg. display de o kumandanın numarasını yazdırmaya çalıştım. proteusta çalışıyor ama protoboard üzerine kurduğumda saçma sapan çalışıyor. (bazen çalışıp bazen çalışmıyor) ve birde ilk bastığım vericiyi algıladığında sonrakileri almıyor. hiç sinyal vermeden beklerken zaman zaman farklı numaralar yazıyor.
7 seg. hakkında bilgim olmadığı için okuduklarımla bişeyler yapmak istedim.
ilgilenenler olursa kodlar ve dosyalar ekte. Ete hocam bakarsa yine kızacak böyle proğram hazırlanırmı diye ! ama yaş 42 ve öğrenmeye çalışıyorum elimden geldiğince.
sizden bu konuda yardım rica ediyorum .
saygılarımla.

verici

@ DEVICE pic12f675 'işlemci 12F675 
@ DEVICE pic12f675, WDT_on 'Watch Dog timer kapalı 
@ DEVICE pic12f675, PWRT_ON 'Power on timer açık 
@ DEVICE pic12f675, PROTECT_OFF 'Kod Protek kapalı 
@ DEVICE pic12f675, MCLR_OFF 'MCLR pini kullanılıyor. 
@ DEVICE pic12f675, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
include "modedefs.bas"
DEFINE OSC 4
define OSCCAL_1K 1
CMCON=7
ANSEL=0
OPTION_REG=7           
ADCON0=%10000000
TRISIO=%000010
WPU=0
SYMBOL AC=GPIO.0
SYMBOL buton=GPIO.1
SYMBOL LED=GPIO.2

VERICI VAR BYTE
VERICI=0

PAUSE 500

BASLA:
    low led
IF buton=0 THEN
VERICI=10 : high led ' bu kısıma her kumanda için farklı numara veriyorum. (10-15-20-25 vs.. gibi)
GOSUB GONDER
    PAUSE 100
ENDIF
GOTO BASLA


GONDER:

SEROUT2 AC,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 ac,396,["T","S","R","M",VERICI]
SEROUT2 ac,396,["T","S","R","M",VERICI]
SEROUT2 ac,396,["T","S","R","M",VERICI]
SEROUT2 ac,396,["T","S","R","M",VERICI]

return
END


alıcı

@ DEVICE pic16F628A 'işlemci 16F628 
@ DEVICE pic16F628A, WDT_on 'Watch Dog timer kapalı 
@ DEVICE pic16F628A, PWRT_ON 'Power on timer açık 
@ DEVICE pic16F628A, PROTECT_OFF 'Kod Protek kapalı 
@ DEVICE pic16F628A, MCLR_off 'MCLR pini kullanılıyor. 
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak
include "modedefs.bas"
DEFINE OSC 4
CMCON=7
TRISA=%00000011
TRISB=%00000000
PORTA=0
PORTB=0

ALICI VAR BYTE
SAYI VAR BYTE
BIRLER VAR BYTE
ONLAR VAR BYTE

SYMBOL GIRIS=PORTA.0
SYMBOL RES=PORTA.1
SYMBOL BUZZER=PORTA.2
symbol led=porta.3
SYMBOL T1=PORTB.6
SYMBOL T2=PORTB.7
SYMBOL LE=PORTB.4
symbol LE1=PORTB.5
SYMBOL A=PORTB.0
SYMBOL B=PORTB.1
SYMBOL C=PORTB.2
SYMBOL D=PORTB.3
'******************** ekran kontrol animasyon sayıcı ********************
ekran:
IF RES=0 THEN RESET
HIGH T1:HIGH T2:high buzzer:high led:pause 500:low buzzer :low led
SAYI=0
FOR SAYI=0 TO 98
SAYI=SAYI+1
BIRLER=SAYI     DIG 0
ONLAR=SAYI      DIG 1
PORTB=240 | BIRLER           
LOW LE1:PAUSE 1
HIGH LE1:PAUSE 1
PORTB=240 | ONLAR
LOW LE:PAUSE 1
HIGH LE:PAUSE 1
SAYI=SAYI-1
PAUSE 70
NEXT
PAUSE 500
GOSUB SIFIRLA

BASLA:
IF RES=0 THEN RESET
'***************** SİNYAL DOĞRULAMA BÖLÜMÜ ********************************
SERIN2 GIRIS,396,[WAIT("TSRM"),ALICI]
'***************** HANGI KUMANDADAN SİNYAL VAR AYRIMI *********************
IF ALICI=10 THEN 'kumandanın hangisi olduğunu bu kodlardan anlıyorum (10-15-20 vs... gibi)
    GOTO BIR
ENDIF
IF ALICI=15 THEN
GOSUB IKI
ENDIF
IF ALICI=20 THEN
GOSUB UC
ENDIF
    IF ALICI=25 THEN
GOSUB DORT
ENDIF
IF ALICI=30 THEN
GOSUB BES
ENDIF

GOTO BASLA
'************************* yan proğramlar **********************************
RESET:
giris=0:alici=0
high led:LOW BUZZER
HIGH T1:HIGH T2
SAYI=0
BIRLER=SAYI     DIG 0
ONLAR=SAYI      DIG 1
PORTB=240 | BIRLER           
LOW LE1:PAUSE 1
HIGH LE1:PAUSE 1
PORTB=240 | ONLAR
LOW LE:PAUSE 1
HIGH LE:PAUSE 1
pause 200:low led
GOTO BASLA

BUZER:
HIGH BUZZER
PAUSE 500
LOW BUZZER
RETURN

SIFIRLA:
HIGH T1:HIGH T2
SAYI=0
BIRLER=SAYI     DIG 0
ONLAR=SAYI      DIG 1
PORTB=240 | BIRLER           
LOW LE1:PAUSE 1
HIGH LE1:PAUSE 1
PORTB=240 | ONLAR
LOW LE:PAUSE 1
HIGH LE:PAUSE 1
RETURN


'*********************** DİSPLAY BELİRLEME KISMI ***************************

BIR:
IF RES=0 THEN RESET
HIGH T1:HIGH T2
SAYI=1
BIRLER=SAYI     DIG 0
ONLAR=SAYI      DIG 1
PORTB=240 | BIRLER           
LOW LE1:PAUSE 1
HIGH LE1:PAUSE 1
PORTB=240 | ONLAR
LOW LE:PAUSE 1
HIGH LE:PAUSE 1
GOSUB BUZER
GOTO BIR

IKI:
IF RES=0 THEN RESET
HIGH T1:HIGH T2
SAYI=2
BIRLER=SAYI     DIG 0
ONLAR=SAYI      DIG 1
PORTB=240 | BIRLER           
LOW LE1:PAUSE 1
HIGH LE1:PAUSE 1
PORTB=240 | ONLAR
LOW LE:PAUSE 1
HIGH LE:PAUSE 1
GOSUB BUZER
GOTO IKI

UC:
IF RES=0 THEN RESET
HIGH T1:HIGH T2
SAYI=3
BIRLER=SAYI     DIG 0
ONLAR=SAYI      DIG 1
PORTB=240 | BIRLER           
LOW LE1:PAUSE 1
HIGH LE1:PAUSE 1
PORTB=240 | ONLAR
LOW LE:PAUSE 1
HIGH LE:PAUSE 1
GOSUB BUZER
GOTO UC

DORT:
IF RES=0 THEN RESET
HIGH T1:HIGH T2
SAYI=4
BIRLER=SAYI     DIG 0
ONLAR=SAYI      DIG 1
PORTB=240 | BIRLER           
LOW LE1:PAUSE 1
HIGH LE1:PAUSE 1
PORTB=240 | ONLAR
LOW LE:PAUSE 1
HIGH LE:PAUSE 1
GOSUB BUZER
GOTO DORT

BES:
IF RES=0 THEN RESET
HIGH T1:HIGH T2
SAYI=5
BIRLER=SAYI     DIG 0
ONLAR=SAYI      DIG 1
PORTB=240 | BIRLER           
LOW LE1:PAUSE 1
HIGH LE1:PAUSE 1
PORTB=240 | ONLAR
LOW LE:PAUSE 1
HIGH LE:PAUSE 1
GOSUB BUZER
GOTO BES

END

sinasos

teşekkür ederim arkadaşlar sorunu çözdüm.

ete

Ete hoca kızacak diye bir laf dokundurması yapmışsın ama asıl kızdığım konu bir sorun olduğunda yardım isteyip sonra sorunu çözerek yalnızca sorunu çözdüm diyerek mesaj vermektir.
Bir sorunun vardı ve onu çözdün. Bu mesajları okuyanların tamamı şimdi çatlıyorlardır nasıl çözdü acaba diye.
Doğru davranış, sorun şuymuş çözdüm şeklinde bir mesaj verilmesi olacaktı. Bunu bekliyorum senden.

Ete

Powered by EzPortal