TMR2 delay loop sorunu

Başlatan FUNKY, 03 Mart 2011, 21:43:18

FUNKY

merhabalar 
timer2 yi  1/16  prescale  PR2=255 değerleriye pic timer calculator e göre led in yanıp sönme  arası 4,08ms  gecikme sağlaması lazım .fakat  kod çalışmıyor  neresi eksik veya hatalı bakarmısınız..

       Device 16F628A
       Xtal 4
       
        Config WDT_OFF, PWRTE_ON,  BODEN_OFF , LVP_OFF, CP_ON ,INTRC_OSC_NOCLKOUT

        CMCON =7
        TRISA =%00000000
        TRISB =%00000000
       
         Symbol led=PORTA.1
         
         T2CON=%00000010 '1/16 prescale , TMR2 off
         PR2 = 255
       
While 1=1
          High led
          T2CON.2=1       'tmr2on
          TMR2=0             'timer2 henüz başlamış sıfırlamaya gerek varmı?
          While TMR2 >255 :Wend  '4,08ms
          T2CON.2=0        'tmr2 off
          Low led
         T2CON.2=1       'tmr2on
          TMR2=0             'timer2 henüz başlamış sıfırlamaya gerek varmı?
          While TMR2 >255 :Wend  '4,08ms
          T2CON.2=0        'tmr2 off

  Wend

Maxim

hiç interrupt tanımı falan yok kodda
timer çalışıyormu acaba ?

birde high led demişsin , bir kaç satır aşağıda low led
tam olarak led 11us de bir yanıp sönüyor, timerla falan alakası yok

FUNKY

#2
hocam kodu düzelttim  low  led için süre koymamıştım   led burada proteusta    timr2 nin çalıştığını görmek için bir  bir işaret   timer burada sayarak  gecikme yi sağlayacak   While TMR2 >255 :Wend  satırı çalışmıyor 

t2

While TMR2 >255  niye çalışsın? Daha yeni çalışmaya başlayan timer zaten 255den büyük değildir. dolayısıyla o satır hiççalışmaz.

tmr2, 16bit timer mı ki 255 den büyük olsun?  Eğer öyleyse önce  255 i geçene kadar beklersin. daha sonra  While TMR2 >255  diyebilirsin. 

Belki de büyük yerine küçük demek istemişsindir.

FUNKY

hocam  255 i  100 yapsam da  çalışmıyor  şimdi   While TMR2 >100 :Wend    demek  sıfırdan  saymaya başlayan tmr2  değeri 101 olana kadar bu satır da bekle demek değilmi ?

t2

#5
While TMR2 >100 :Wend  demek  100den büyükse, küçülene kadar bekle demek. büyük değilse orada hiç beklemez.
While TMR2 <100 :Wend  dersen 0dan 100e kadar bekler. sonra devam eder.

While = iken
<  = küçük
>  = büyük

4ms lik gecikmeyi, gerçek zamanlı  izlerken göremezsin. en az 20ms gibi aralıklarla yanıp sönerse farkedilebilir

FUNKY

#6
t2  hocam  teşekkür ederim   küçükse işareti  < olacakmış  yanılmışım  şimdi çalıştı .


hocam   led   sadece bir  işaret almak için koyduğum  kod  du   scop ta görmek için  normal yazımımda  o kısım olmayacak . tekrar teşekkürler