Dijital girişten zaman saymak.

Başlatan . Kağan, 11 Mart 2014, 21:20:55

. Kağan

    Dijital bir girişten verilen 5v gerilimi istediğim süre dolana kadar nasıl saydırabiliriz. Örneğin portb.5 10 saniye gerilim altında kalınca portb.6 çıkış versin ve kilitlesin gibi.

Çok basit diye kızmayın lütfen.

Şu şekilde olurmu acaba

@ __config _WDT_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF & _INTRC_OSC_CLKOUT

CMCON =  7       
OPTION_REG.7 = 0 
     
TRISA = %00000000
TRISB = %00100010

LED    VAR PORTB.0
ALM    VAR PORTB.1
CIKIS  VAR PORTB.2
DUR    VAR PORTB.3   

SAY    VAR BYTE
LOCK   VAR BYTE
     
SAY=0
LOCK=0

BASLA: 

IF ALM=1 THEN
    PAUSE 1000
    SAY=SAY+1
    IF SAY>=5 AND ALM=1 THEN
        HIGH CIKIS
        LOCK=1 
    ENDIF
ENDIF


IF ALM=0 AND LOCK=0 THEN
   SAY=0   
ENDIF

IF DUR=0  THEN
   SAY=0   
   LOCK=0
   LOW CIKIS     
ENDIF


    Low LED       
    Pause 500       
    High LED       
    Pause 500     ' Delay for .5 seconds 
                           REM     PAUSE 1000    ' 1SANİYE BEKLER
Goto BASLA   
END

pwm3434

#1
timer0  kesmesi  aktif.  dur butonu   aktif değil  on  değil  ise  kesme  sayacı  bir artırır.  projenin  ne   olduğunu  tam  bilmiyorum  ama  şu  yazılıma  işini  görür  gerekli  yerleri  isteğine  göre  değiştirirsin.   DUR  PORTB.3  giriş  butonu  olarakmı  kullandın.  ben böyledir  diye  buna  göre  yazdım.  dedim ya  isteğine  göre  değiştirebilirsin.derlenmiştir.

@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_off              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628A, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
TRISA = %00000000
TRISB = %00001010
CMCON =  7
DEFINE OSC 4       
ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%00000101 'Pull up dirençleri İPTAL- Bölme oranı 1/64.
INTCON=%10100000

LED    VAR PORTB.0
ALM    VAR PORTB.1
CIKIS  VAR PORTB.2
DUR    VAR PORTB.3   

SAY      VAR BYTE
LOCK     VAR BYTE
SAYAC    VAR BYTE
SN       var WORD
X        VAR BYTE   
SAY=0
LOCK=0

BASLA: 

    Low LED       
    Pause 500       
    High LED       
    Pause 500     ' Delay for .5 seconds 

Goto BASLA   


DISABLE
KESME:
IF DUR=0  THEN 'DUR  BUTONU ON  İSE  KESME TIMER  SAYMAZ
   SAY=0   
   LOCK=0
   LOW CIKIS
ELSE  'DUR  BUTONU  OFF  İSE  BİR  SATIR  AŞAĞIYA BAK
 
  IF ALM=0  THEN 'ALM  BUTONU ON İSE  STIMER BAŞLA
    SAYAC=SAYAC+1
   
    IF SAYAC=61 THEN
     SN=SN+1
     
      IF SN=5 AND ALM=0 THEN ' TIMER  DEĞRI  5  SANIYE OLUNCA CIKIS IGH
       HIGH CIKIS
        LOCK=1
  ELSE
       
       
ENDIF
ENDIF
ENDIF       
ENDIF

END

. Kağan

kesme kullanmayı bilmiyorum.
ON INTERRUPT GoTo KESME 'kesme oluşursa KESME adlı etikete git.


ne demek? nasıl kullanılır? Anlatırmısınız?

Teşekkürler.

pwm3434

 sadece  bu  satırınmı  ne  olduğunu  soruyosun. gördüğün gibi  kesme oluşunca  kesmeye  git  deniliyor  başka  bir teferruatı  yok. eğer  bu  satırı  yazmaz  isen kesme  ye  gitmeyecek.

. Kağan

Kesme nerede oluşuyor. Ve kesmenin teknik bir anlamı varmı yoksa sadece etiketmi?

pwm3434

#5
kesmenin  teknik  bir  anlamı  var  evet   kesme  bir alt program  etiketir.yani  kesmenin  oluşutuğu alt  programdır.kesme  pıc tarafından  oluşturulur  intcon  kaydedicisinden  gerekli  ayaralar yapılır  ve  aktif edilinir.  gerekirse  option_reg  registerindende  gerekli  ayarlar  yapılır  tabiki.
ete hocamızın derslerinde  kesme  ile  alakalı dersini  okumalısınız  eğer okumamışsanız  yoksa  sorularınız  ardı  arkası  kesilmeyecek :D  neyse dediğim  gibi derslere  bir göz atın  derim  size.

http://etepic.com/index.php/topic,17.0.html

ete

#6
Bana kalırsa ihtiyaç kesme değil bir port pininin belirli bir süre çıkış vermesini sağlamak.
" Dijital bir girişten verilen 5v gerilimi istediğim süre dolana kadar nasıl saydırabiliriz. Örneğin portb.5 10 saniye gerilim altında kalınca portb.6 çıkış versin ve kilitlesin gibi."
Belirli süre olarak 10 sn yi esas alırsak 10sn=10.000 ms dir. Bunu direk Pause 10000 diyerek bir seferde halledebileceğimiz gibi 100 er ms lik dilimlere bölersek 100*100=10000 ms olarak da saydırabiliriz.
IF PORTB.5=1 then
  PORTB.6=1
  pause 10000
  PORTB.6=0
ENDIF
 

şeklinde olabileceği gibi
IF PORTB.5=1 THEN
    SAYAC=0:PORTB.6=1
     WHILE SAYAC<100
       Pause 100
        SAYAC=SAYAC+1
     WEND
     PORTB.6=0
ENDIF
   
şeklinde de yapmak mümkündür.

Ete

. Kağan

Verdiğiniz yazıları okudum. Fakat kesme nasıl kurulur?

pwm3434

#8
sormak  istediğinizi  anlayamadım.  Kesme kurulmadan  önce  malum  hangi  kesme  çeşidini  kullanacaksın örneğin timer0 yada rb0 vs vs,  timer0 kesmesi  kurulacağını  varsayalı.  Kesmeleri kurman  için  INTCON  kaydedicisinden kesme kurulum ayarını yapabilirsin.  evet  timer0  için,    INTCON=%10100000  yaparsın.  gördüğün  gibi 5.bit lojik  1 yaparak timer0 kesmesi seçilmiştir   ama  kesme  çalışmayacaktır  7.bi'in lojik 1  yapılması  ile  kesme aktif olacak  devamında  ete  hocanın  dersinde  yazıyor. :d  dersi takip  edip  sormak istediğinizi  sorabilirsiniz.

Powered by EzPortal