serin2 komutu icra edilirken diğer işlemlere nasıl geçilir ?

Başlatan sinasos, 09 Şubat 2018, 14:30:26

ete

Gerçekten problemin ne olduğunu anamakta zorlanıyorum.
Sen de yapılan işi anlayasın diye programları biraz değiştirdim. Simulasyonuda biraz değiştirdim. Anlayasın diye.
Bir RF sisteminden ne beklenir? Vericide bir tuşa basıldığı zaman alıcıda o tuşa ait bir işlem yapılması istenir.
Sende 5 adet tuş bulunuyor. Bu tuşlara basıldığı zaman sırası ile 35-40-45-50-55 bilgilerini verecek şekilde dğzenledim programı. Butonlarıda sıraya soktum (vericide). Alıcıya da vericiden hangi raka gelirseonu ekrana yazdırmasını sağladım.
Sonucu gör bakalım.

Bu arada sende sorun gibi gözüken bir 3 bir 4 gösterilmesinin sebebi şu iki satır;
'IF AL=35 THEN LCDOUT $FE,$80,"    3. MESAJ    ":x=3:GOSUB BEEP':GOSUB SILME
'IF AL=35 THEN LCDOUT $FE,$80,"    4. MESAJ    ":x=4:GOSUB BEEP':GOSUB SILME
Bak her ikiside 35 alırsa biri ekrana 3 diğeri 4 yazıyor. Bu sence hata değilde nedir?
Ete


sinasos

Ete hocam merhaba,
Aşağıdaki vericinin kodunda şu şekilde bir sıkıntı çıkıyor.
Herhangi bir tuşa basıyorum, sinyal gönderiyor alıcı çalışıyor, tuşu bırakıyorum, başka bir kumanda ile sinyal gönderiyorum(Reset kodu) ama alıcı tepki vermiyor. Alıcıyı Osilaskopa bağladım, aşağıdaki kodu yazılı vericiye enerji verdiğimde skoptaki kare dalgada bir değişiklik yok, herhangi bir tuşa bastığımda kodu gönderiyor tuştan elimi çektiğimde aynı şekilde devam ediyor ve diğer (reset kumandasından) gönderdiğim kodları almıyor.
Sizce bu şekilde olmasının sebebi ne olabilir ? video yüklemeye çalışacağım.


DEFINE OSC 4
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
CMCON = 7
OPTION_REG.7=0
ANSEL = 0
GPIO=0
TRISIO=%00111110
symbol AC=GPIO.0
SYMBOL BUTON1=GPIO.1
SYMBOL BUTON2=GPIO.2
SYMBOL BUTON3=GPIO.3
SYMBOL BUTON4=GPIO.4
SYMBOL BUTON5=GPIO.5

VERICI VAR BYTE 56
Q      VAR BYTE

pause 300

BASLA:

IF BUTON1=0   THEN VERICI=35:GOSUB GONDER
IF BUTON2=0   THEN VERICI=40:GOSUB GONDER
IF BUTON3=0   THEN VERICI=45:GOSUB GONDER
IF BUTON4=0   THEN VERICI=50:GOSUB GONDER
IF BUTON5=0   THEN VERICI=60:GOSUB GONDER

VERICI=0
GOTO BASLA

GONDER:
SEROUT2 AC,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 ac,396,["E","T","E",VERICI]
SEROUT2 ac,396,["E","T","E",VERICI]
return

END



ete

Bu sorunu anlamak için,
Alıcı ve Reset gönderen programa da bakmak gerek. Belliki reset haricinde diğer işleri yaptıran verici sürekli veri yolluyor.
Şayet bu işi yapan yukarıda verdiğin program ise sürekli veri yollamaması gerekiyor. Zira veri yollaması için butonlardan birine basılması gerekir.  Basmıyorsan ve veride gidiyor ise Pic butona basıldığınız sanıyordur. Sanması içinde o buton pininin LOW olması gerekiyor.
Aslında ne olup bittiğini anlamak için butona basıp Alıcıdaki bir ledi yaktıktan sonra Alıcı voltajını kesip yeniden ver bakalım led yaktıracakmı yine. Aynı ledi yaktırıyor ise vericideki butonda veya buton pininde sorun var demektir ve sorunda olsa olsa pullup sorunudur.  O pin bozulmadı ise elbette.

Alıcı programınada bir bakmak gerekiyor. Zira oda bir bilgi aldıktan sonra sürekli meşgul hale geliyor ise reset bilgisini alamaz duruma gelebilir.

Buton pinleri arasında MCLR pinide mevcut. Bu pin pullup kabul etmiyor. Bu durumda o pine Pullup direnci bağlaman gerekir.
Diğerleri istemez. Sende bağlımıdır acaba?

Ete

sinasos

Hocam sistem şu şekilde,
İki adet Alıcı var, bir tanesi 2x16 Lcd ekranlı (bilgilenmek amaçlı), diğeri röle kontrolü için alıcı. Ekranlı alıcının devresi zaten önceki mesajlarda mevcut aynı devre içerisinde birde 12f675 Butonlu verici var.675'in GPIO.4 pini 628'in PORTB.4 pinine bağlı. Burası PullUp direnci ile + da. 12f675 Reset için buradan (-) gnd bilgisi alıyor.
Alıntı YapAslında ne olup bittiğini anlamak için butona basıp Alıcıdaki bir ledi yaktıktan sonra Alıcı voltajını kesip yeniden ver bakalım led yaktıracakmı yine. Aynı ledi yaktırıyor ise vericideki butonda veya buton pininde sorun var demektir ve sorunda olsa olsa pullup sorunudur.
bahsettiğiniz şekilde denedim enerjiyi kesip verince tekrar çekmedi.Ancak videodaki gibi veri yollama sinyallerini görmeye devam ediyorum skopta !
Alıntı YapO pin bozulmadı ise elbette.
işlemci değiştirdim olay aynen devam ediyor.
Alıntı YapButon pinleri arasında MCLR pinide mevcut. Bu pin pullup kabul etmiyor. Bu durumda o pine Pullup direnci bağlaman gerekir.
Diğerleri istemez. Sende bağlımıdır acaba?
Bu pinde 10 k direnç mevcut.

Ekranlı Alıcı Programı;

@ DEVICE pic16F628A 'işlemci 16F628 
@ DEVICE pic16F628A, WDT_on 'Watch Dog timer Açık 
@ 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
'-------------------------- LCD Tanımlama --------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_RSREG PORTA 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
define LCD_RWREG    PORTA
define LCD_RWBIT    0
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor

'** BU ALAN SERİ İLETİŞİM PROTOKOLLERİ İÇERİR TÜM PİCLER İÇİN AYNIDIR **
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






OPTION_REG.7=1 'portB deki dahili PULL-UP lar iptal edildi.
CMCON=7 'komparatör pinleri iptal hepsi giriş çıkış yapıldı
TRISA=%00101100
TRISB=%00000010
PORTA=0
PORTB=0

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

SYMBOL AC=PORTA.4       'DİĞER İŞLEMCİYE RESET KOMUTU GÖNDERİMİ
SYMBOL RST=PORTA.5      'RESET BUTONU
SYMBOL BZR=PORTA.6      'BUZER ÇIKIŞI

temp var BYTE
AL  VAR BYTE 56
Y   VAR WORD
x   var byte 57
q   var BYTE
V   VAR WORD
VER VAR BYTE
R   VAR BYTE

AL=1
y=0
x=0
q=0
V=0
AC=1
PAUSE 10


    BZR=1:PAUSE 50:BZR=0
    LCDOUT  $FE,1
    LCDOUT  $FE,$80," RF ODA KONTROL "
    LCDOUT  $FE,$C0,"   SiSTEMLERi   "
    pause 1500:BZR=1:PAUSE 250:BZR=0:LCDOUT  $FE,1:GOSUB EKRAN

'*************   kesme oluşturma****************
INTCON=%11000000
ON INTERRUPT GOTO INT
RCIE=1
'***********************************************


'***********************RF  KONTROL KISMI ***********************************
BASLA:
AC=1
if AL=1 then LCDOUT $FE,$80," KOMUT BEKLIYOR "
IF AL=10 OR AL=15 OR AL=20  OR AL=25 THEN LCDOUT $FE,$80,"    TELEFON     ":GOSUB SAY
                            IF AL=30 THEN LCDOUT $FE,$80,"    30 GELDI    ":GOSUB SAY
                            IF AL=35 THEN LCDOUT $FE,$80,"    35 GELDI    ":GOSUB SAY
                            IF AL=40 THEN LCDOUT $FE,$80,"    40 GELDI    ":GOSUB BEEP
                            IF AL=45 THEN LCDOUT $FE,$80,"    45 GELDI    ":GOSUB BEEP
                            IF AL=50 THEN LCDOUT $FE,$80,"    50 GELDI    ":GOSUB BEEP3
                            IF AL=55 THEN LCDOUT $FE,$80,"    55 GELDI    ":GOSUB BEEP3
                            IF AL=60 THEN LCDOUT $FE,$80,"    60 GELDI    ":GOSUB BEEP
                            IF AL=75 THEN al=1
                            IF AL=>1  THEN GOSUB EKRAN
                            'al=1
GOTO BASLA

SAY:  'bu alanda 20-30 saniyede bir ikaz veriyor
IF Y=>200 THEN Y=0
Y=Y+1':IF RST=0 THEN AC=0:AL=1:V=0:Y=200':GOSUB GONDER
if Y=1 or y=100 then GOSUB BEEP2
RETURN

BEEP:
BZR=1
for v=0 to 250:next
BZR=0
FOR V=0 TO 2500:next
AL=1:AC=1:GOSUB EKRAN
RETURN

BEEP2:
BZR=1
for v=0 to 50:next
BZR=0
FOR V=0 TO 5:GOSUB EKRAN:next
AL=1:GOSUB EKRAN
RETURN

BEEP3:
BZR=1:IF RST=0 THEN V=25:RETURN
for v=0 to 25:next
BZR=0:IF RST=0 THEN V=500:RETURN
FOR V=0 TO 500:GOSUB EKRAN:next
GOSUB EKRAN
RETURN


EKRAN:
   if AL=1 then LCDOUT $FE,$80," KOMUT BEKLIYOR "
   IF AL>2 THEN LCDOUT $FE,$C0,"A:",dec al,"V:",DEC V,"Y:",DEC Y,"SiSTEM CALISIYOR"
   IF AL<2 THEN LCDOUT $FE,$C0,"BiLGi BEKLENiYOR"
   IF RST=0 THEN V=500
   IF RST=0 THEN
   AC=0
   else
   ac=1
   endif
return

'************************ KESME ***********************************
DISABLE
INT:
GIE=0
hserin 7,ATLA, [wait("ETE"),AL] 
IF RST=0 THEN
AL=1:V=0:AC=0:RETURN
ELSE
AC=1
ENDIF

ATLA:
TEMP=RCREG
GIE=1
Resume
enable


END


Butonlu Verici Programı ;


DEFINE OSC 4
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
CMCON = 7
OPTION_REG.7=0
ANSEL = 0
GPIO=0
TRISIO=%00111110
symbol AC=GPIO.0
SYMBOL BUTON1=GPIO.1
SYMBOL BUTON2=GPIO.2
SYMBOL BUTON3=GPIO.3
SYMBOL BUTON4=GPIO.4
SYMBOL BUTON5=GPIO.5

VERICI VAR BYTE 56
Q      VAR BYTE

pause 300

BASLA:

IF BUTON1=0   THEN VERICI=35:GOSUB GONDER
IF BUTON2=0   THEN VERICI=40:GOSUB GONDER
IF BUTON3=0   THEN VERICI=45:GOSUB GONDER
IF BUTON4=0   THEN VERICI=50:GOSUB GONDER
IF BUTON5=0   THEN VERICI=60:GOSUB GONDER

VERICI=0
GOTO BASLA

GONDER:
SEROUT2 AC,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 ac,396,["E","T","E",VERICI]
SEROUT2 ac,396,["E","T","E",VERICI]
return

END



Reset Programı ;


@ 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  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
CMCON = 7
OPTION_REG.7=0
ANSEL = 0
GPIO=0
TRISIO=%00000000
symbol AC=GPIO.0
symbol led=gpio.1

VERICI VAR BYTE 56
v      var word
verici=0
pause 20

BASLA:
led=0
verici=60
gosub gonder
GOTO BASLA

GONDER:
for v=0 to 300:next
led=1
SEROUT2 AC,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 ac,396,["E","T","E",VERICI]
SEROUT2 ac,396,["E","T","E",VERICI]
for v=0 to 300:next
return

END



Röleli Alıcı Programı ;


@ 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

OPTION_REG.7=1

CMCON=7
TRISA=%00000000
TRISB=%00000010
PORTA=0
PORTB=0

ALICI VAR BYTE
VERICI VAR BYTE
MESAJ VAR BYTE
Y   VAR byte
x   var byte
VERICI=0
ALICI=0
y=0
x=0
PAUSE 10

SYMBOL GIRIS=PORTB.1    'RF GİRİŞİ
SYMBOL VER  =PORTB.2    'RF ÇIKIŞI (KULLANILMIYOR)
SYMBOL LED1=PORTA.2     'LED1 ÇIKIŞI
symbol LED2=porta.3     'LED2 ÇIKIŞI
SYMBOL ROLE1=PORTB.6    '1.ROLE ÇIKIŞI
SYMBOL ROLE2=PORTB.5    '2.ROLE ÇIKIŞI
SYMBOL ROLE3=PORTB.4    '3.ROLE ÇIKIŞI
SYMBOL ROLE4=PORTB.3    '4.ROLE ÇIKIŞI
SYMBOL ROLE5=PORTA.1    '5.ROLE ÇIKIŞI
SYMBOL ROLE6=PORTA.0    '6.ROLE ÇIKIŞI
SYMBOL ROLE7=PORTB.0    '7.ROLE ÇIKIŞI
SYMBOL BZR  =PORTB.7    'BUZER ÇIKIŞI

BZR=1  :PAUSE 50:BZR=0
LED1=1 :PAUSE 250:LED2=1:PAUSE 250
ROLE1=1:PAUSE 250
ROLE2=1:PAUSE 250
ROLE3=1:PAUSE 250
ROLE4=1:PAUSE 250
ROLE5=1:PAUSE 250
ROLE6=1:PAUSE 250
ROLE7=1:PAUSE 250

ROLE1=0:PAUSE 250
ROLE2=0:PAUSE 250
ROLE3=0:PAUSE 250
ROLE4=0:PAUSE 250
ROLE5=0:PAUSE 250
ROLE6=0:PAUSE 250
ROLE7=0:PAUSE 250
LED1=0 :PAUSE 250:LED2=0

'***********************RF  KONTROL KISMI ***********************************
BASLA:
'***************** SİNYAL DOĞRULAMA BÖLÜMÜ ********************************
SERIN2 giris,396,[WAIT("ETE"),ALICI]
'***************** HANGI SİNYAL VAR AYRIMI *********************
IF ALICI>10 OR ALICI<60 THEN
LED1=1
ELSE
LED1=0
ENDIF

        IF ALICI=10 OR ALICI=15 OR ALICI=20 OR ALICI=25  THEN 'TELEFON
        gosub beep:role1=1
        else
        role1=0
        endif
IF ALICI=30 THEN         'KAPI  ACIK
    gosub beep:role2=1
    else
    role2=0
endif
    IF ALICI=35 THEN     'DiNLENiYOR
        gosub beep:role3=1
        else
        role3=0
    endif
    IF ALICI=40 THEN         'HABERCi GELSiN
    gosub beep:role4=1
    else
    role4=0
    endif
    IF ALICI=45 THEN     'TOPLANTI VAR
        gosub beep:role5=1
        else
        role5=0
    endif
IF ALICI=50 THEN         'RAHATSIZ ETMEYiN
    gosub beep:role6=1
    else
    role6=0
    endif
    IF ALICI=55 THEN     'reset
        gosub beep:role7=1
        else
        role7=0
        endif
   
IF ALICI=60 THEN GOSUB BEEP:GOSUB BEEP:GOSUB BEEP:role1=0:role2=0:role3=0:role4=0:role5=0:role6=0:role7=0 'RESET

GOTO BASLA
'************************* yan proğramlar **********************************

BEEP:
BZR=1
PAUSE 20
BZR=0
pause 70
RETURN
END

ete

Programlara bakılırsa RESET yollayan verici sürekli çalışıyor. Şayet butona basınca devreye voltaj vermiyor isen.
Ayrıca Bu RESET programı bilgi olarak 60 yolluyor ama Ana alıcıda 60 alınca şunu yapsın diye bir komut yok?

Nasıl resetleyecek acaba?

Anlayamadığım yerler var mesela;
INT:
GIE=0
hserin 7,ATLA, [wait("ETE"),AL] 
IF RST=0 THEN
AL=1:V=0:AC=0:RETURN
ELSE
AC=1
ENDIF

ATLA:
şeklindeki kodlara bakılırsa, ETE bilgisi gelmiyor ise program sürekli ATLA etiketine atlayacak.
ETE gelmiş ise AL bir değer alacak ve altındaki satırda yer alan;
IF RST=0 THEN... diye başlayan komut icra edilecek.
Bu durumda bir bilgi gelmez ise sen AL=1, V=0, AC=0 yapamayacaksın demektir. Bu doğrumu sence?

Röleli alıcıda AL değerini en aşağıda GOTO BASLA satırından evvel sıfırlasan iyi olacak sanırım.
Ama sıfırlarsan anında Led1 de sönecektir. Bunu istemiyorsan sıfırlamayacaksın. Bu programda BEEp alt programı programı gecikmeye uğratıryor. Bu esnada veri gelirse onu kaçırmasına sebep oluyor bence.

Ortada 3 ayrı program olunca hepsinin bir biri ile olan ilişksini çözmek zor üstelik kafadan düşünerek yapmak daha zor.
Donanım olarak da devrleri bilmek gerekiyor. Mesela RESET devresi sürekli veri yollayacak şekilde tasarlanmış. Bu devre sürekli çalışırsa diğerleri bir şey yapamaz. Mutlaka reset gerektiği zaman veri yollamalı sonra kapatılmalıdır. Muhtemelen öyledir ama nasıl öyledir bilemiyorum.

Şimdi olaya senaryo ile bakmak gerek. Diyelimki,
- Butonlu verici ile 35 gönderdin.
- Ekranlı alıcı sadece alıp beep yapıyor bir iş yapmıyor
- Röleli alıcı 35 rakamını alıp LED1' i yakıyor. Ardından Röle3'ü çektiriyor.
- Sonra gelip Serin komutunda bekleme yapıyor. Bir veri gelir ise AL değeri değişir ama gelmez ve gelen bir parazit ise 65 sn bekler sonra aşağıdaki komutları yeniden icra eder.
Bu nedenle AL değeri en aşağıda sıfırlanmalı bu programda. En azından bunu bir uygula. Led söner ama Röle3 çekili kalır. Bu durumda iken Reset devresi reset edebilecekmi bir bak bakalım. Başlangıç aşamasında REset devresi çalışıyor yada reset yaptırıyor. Ama bir röle çekili iken yaptırmıyor her nedense.
Video ya bakılırsa sorun butonlu vericide gözüküyor. Çünki bir kere butonlardan birine bastınımı sanki sürekli basılmış gibi veri yolluyor. Programda böyle bir durum yok. Ya orada farklı bir program uygulanıyor yada donanımda bir kusur var. Uzaktan ancak bu kadar tespit yapabilirim.


Ete

edit: Sorunun asıl kaynağı BUTONLU VERICI programın. Bu programda sigorta ayarı olmadığı için MCLR pini gerektiği gibi aktive edilemiyor. Edilmeyince sürekli o pindeki butona basılmış gibi veri yolluyor. O programa aşağıdaki satırları ekle düzelecek;

@ DEVICE PIC12f675 'işlemci 12f675
@ DEVICE PIC12f675, INTRC_OSC_NOCLKOUT
@ DEVICE PIC12f675, WDT_OFF
@ DEVICE PIC12F675, PWRTE_ON
@ DEVICE PIC12F675, MCLRE_OFF
@ DEVICE PIC12F675, CP_OFF

Ete


sinasos

Hocam merhaba,
Sanırım sorun çözüldü ! vericideki butonlara basılmadığında Dorji RF vericiler saçma sapan veriler gönderiyor. bunu RF sinyal girişini işlemciden low seviyesine çekince çözmüş oldum. şu an çalışmasında bir sorun görünmüyor gibi. İnşallah başka bir sıkıntı oluşmadan tamamlarım. Size çok çok çok teşekkür ederim.
Saygılarımla.

ete

Butonlu verici programına sigorta ayarları eklemez isen ve orada MCLR_OFF yapmaz isen o sorun çözülmeyecek.

Ete

sinasos

Sigorta ayarları bu şekilde ama !

@ 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  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
CMCON = 7
OPTION_REG.7=0
ANSEL = 0
GPIO=0
TRISIO=%00111110
symbol AC=GPIO.0
SYMBOL BUTON1=GPIO.1
SYMBOL BUTON2=GPIO.2
SYMBOL BUTON3=GPIO.3
SYMBOL BUTON4=GPIO.4
SYMBOL BUTON5=GPIO.5

VERICI VAR BYTE 56
Q      VAR BYTE
v      var byte


yanlışlık varmı hocam ?

ete

Yukarıda verdiğin kodlarda sigorta ayarı gözükmüyor. Bunları sonradan ekledin ise onlarda sorun yok. Önemli olan MCLR_OFF olması.

Ete

sinasos

ETE hocam iyi geceler,
aklıma takılan bir durum oldu ve bu saate kadar sonuçlandıramayınca sizden fikir alma ihtiyacı duydum.
RF sistemde


verici=20
SEROUT2 AC,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 ac,396,["E","T","E",VERICI]
SEROUT2 ac,396,["E","T","E",VERICI]
şeklinde bir kod gönderdiniz. Ve alıcı olarak'ta

ALDIM VAR BIT
BASLA:
if ALDIM=1 then
led1=1
ALDIM=0
else
led1=0
led2=1
for I=0 to 500:next
led2=0
endif

DISABLE
INT:
GIE=0
hserin 10,ATLA, [wait("ETE"),ALICI]
ALDIM=1
ATLA:
'ALICI=0 'BU SATIRI AKTİF EDİNCE LEDLER KARARSIZLAŞIYOR, YANIP SÖNÜYOR...
TEMP=RCREG
GIE=1
Resume
enable
kodunu kullandınız. Ben vericiden gönderim yapıldığı sürece bir led yakmak istiyorum, ancak gönderim bitince de ilk ledi söndürüp ikinci ledi flash yaptırmak (yanıp sönsün) istiyorum. Bunu saatlerdir yapmaya çalışıyorum ancak bir türlü başaramadım. ALICI değişkeni son gönderdiğiniz kodda kalıyor. Bu ALICI değişkenini ATLA etiketinin altında sıfırlıyorum(ALICI=0) bu seferde led yanıp yanıp sönüyor. kararsızmış izlenimi veriyor. Sizce hangi yoldan bunu gerçekleştirebilirim?
Şimdiden çok teşekkür ederim.

İlyas KAYA

Hserin 7, atla komutu 7ms içinde veri alınmaz ise atla etiketine gir demek. 7ms çok küçük bunu en azından 20ms yada 100ms yapın.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ete

Yazdığın örneği olması gerektiği gibi değiştirdim.
Bak istersen. Denemedim ama benzer işleri daha önce aynı yöntemle yapmış idim.
İşin temeli şu, bilgi gelirse ALDIM=1 olur daima. Glmez ise ALDIM=0 da kalır.
O halde bunu kullanarak ledleri ana bölümde yakıp söndirebilirim. Bunu yaptım.
Ete

sinasos

Merhabalar,
Gece yorgunluktan size izahım eksik olmuş, şimdi farkettim hocam ! Aslında olması gereken, vericiden sinyal geldiğinde led1 birkez yanıp sönecek, sinyal kesildiğinde led2 birkez yanıp sönecek.


IF ALICI=20 THEN GOSUB BAK

BAK:
IF ALDIM=1 THEN
LED1=1:ALDIM=0
FOR V=0 TO 500:NEXT
LED1=0
ELSE
LED2=1
FOR V=0 TO 500:NEXT
LED2=0
ENDIF
RETURN


DISABLE
INT:
GIE=0
hserin 10,ATLA, [wait("ETE"),ALICI]
ALDIM=1
ATLA:
TEMP=RCREG
GIE=1
Resume
enable


Bu şekilde yaptım ancak tabi bu da çalışmadı !

ete

Gerçekten yorgunluktanmı? yoksa birazını hallettin bir adım öteyemi geçmek istiyorsun?

Kod da yer alan
FOR V=0 TO 500:NEXT
komut satırı bir ledin yandığını yada söndüğünü görmek için yeterli zamanı vermez. 500 sayısı enazından 2000-5000 gibi olmalı. Ama değişken tipide Byte olmamalı word olmalı.
Muhtemelen sistem çalışıyor ve sen görmüyorsundur.

Ete



Powered by EzPortal