kesme

Başlatan can, 04 Eylül 2013, 18:12:05

can

6. dersdeki saati yapmaya çalışıyorum, external osilarör olmaksızın

anlamadığım bir kaç nokta var
kesme olduğunda kesme etiketine git komutu kesmeye gönderiyor
kesmeyi nasıl başlatacağım.

benim işlemci 18f4620

şu şekilde yazıyorum ama olmuyor, ayrıca TMR=0 kabul etmiyor bu işlemciyle ilgili sanırım başka tanım gerekiyor.

Device 18F4620

Declare Xtal = 4
Declare Adin_Res=10
Declare Adin_Delay=50

TRISA = %00100000
  TRISD = %00000000
   TRISB = %01111000
    TRISC = %00000000  'bunlar işlemcinin diğer fonksiyonları için zorunlu
ADCON2.7=1

All_Digital = TRUE
Declare LCD_DTPort =PORTD               
Declare LCD_RSPin = PORTC.1               
Declare LCD_ENPin = PORTC.3               
Declare LCD_RWPin = PORTC.0               
Declare LCD_CS1Pin = PORTB.0               
Declare LCD_CS2Pin = PORTB.1             
Declare LCD_Type =  GRAPHIC               
Declare Internal_Font = On               
Declare Font_Addr = 0
Declare GLCD_CS_Invert On
  PORTC.5 = 1
     PORTC.4 = 0
     PORTB.2 = 0                 
        Symbol offf = PORTB.6 
      PORTA.0 = 0
        PORTA.1 = 0
         PORTA.2 = 0
          PORTA.3 = 0
           PORTB.7 = 0
  -------------------------------------------------       
Dim sayac As Byte
  Dim sn As Byte
  Dim dak As Byte
  Dim saat As Byte
------------------------------------------------
On Interrupt GoTo kesme
  T0CON=%10000101
INTCON=%10100000
   
  CMCON=7
-------------------------------
Clear
   DelayMS 200
    'Print At 6,1,"                    "
   PORTC.0=0
------------------------------------------------------------ 
basla:       
   Print At 6,1," ",Dec2 saat,":",Dec2 dak,":",Dec2 sn,"  "       
    GoTo basla
    Disable
   kesme:
 
   sayac=sayac+1
   If sayac=61 Then
   sayac=0
   sn=sn+1
   If sn=60 Then
   sn=0
   dak=dak+1
   If dak=60 Then
   dak=0
   saat=saat+1
   End If
   End If
   
  End If
   INTCON.2=0
   Resume
   Enable           
                 
   End

Hattuşa

kesme bayraklarını açmamışsınız, ayrıca kesme alt rutini vs eklenmemiş, yerinizde olsam simülasyon için basit bir isis şeması çizip buraya ekleyerek yardım isterdim, zira kimse sizin şemanızın ne olduğunu bilemez, girişlerinizde ve çıkışlarınızda ne bağlı bilelim ona göre hareket edelim.

can

#2
Device 18F4620

Declare Xtal = 4
Declare Adin_Res=10
'declare Adin_tad=FRC
Declare Adin_Delay=50
'DECLARE PLL_REQ = ON

   CCP1CON = %00001100
Declare CCP1_Pin PORTC.2


TRISA = %00100000
  TRISD = %00000000
   TRISB = %01111000
    TRISC = %00000000


ADCON2.7=1
All_Digital = TRUE
Declare LCD_DTPort =PORTD                 '
Declare LCD_RSPin = PORTC.1               '
Declare LCD_ENPin = PORTC.3                '
Declare LCD_RWPin = PORTC.0               '
Declare LCD_CS1Pin = PORTB.0               '
Declare LCD_CS2Pin = PORTB.1              '
Declare LCD_Type =  GRAPHIC                '
Declare Internal_Font = On               
Declare Font_Addr = 0
Declare GLCD_CS_Invert On
  PORTC.5 = 1
     PORTC.4 = 0
     PORTB.2 = 0                 
        Symbol offf = PORTB.6 
      PORTA.0 = 0
        PORTA.1 = 0
         PORTA.2 = 0
          PORTA.3 = 0
           PORTB.7 = 0
         


şu andfa geldiğim nokta şu:
Symbol GIE = INTCON.7 ' Global Interrupt Enable
Symbol PEIE = INTCON.6 'peripheral interrupt enable
Symbol TMR0IE = INTCON.5 ' TMR0 OVERFLOW Interrupt Enable
Symbol TMR0IF = INTCON.2 ' TMR0 OVERFLOW INTERRUPT FLAG
Symbol TMR0ON = T0CON.7 'TMR0 ON - OFF
Dim TIMER0 As TMR0L.Word

T0CON=%11000101
INTCON.6=1
INTCON.7=1
T0CON.7=1
  INTCON.5=0 
Clear TMR0L   
   basla:
   Print At 0,1,"                    "
   Print At 0,1,Dec TMR0L     
  Print At 6,1,"                    "
  Print At 6,1," ",Dec saat,":",Dec dak,":",Dec sn,"  "
GoTo basla
On_Interrupt GoTo kesme

kesme:

                   
sayac= sayac+1
If sayac=61 Then

sn=sn+1
If sn=60 Then
sn=0
dak=dak+1
If dak=60 Then dak=0
saat=saat+1
End If
End If

INTCON.2=0
Resume
Enable
End


sonuç:1. satırda TMR0L değeri
           6. satırda anlamadığım değerler:34:37:102 gibi

isis ekde

ete

Birinci programın doğru. Yalnızca T0CON Register değerini ikinci programdaki kullandığını kullan. Tmr0 bu işlemcide hem 8 bit hemde 16 bit çalışır. Kullandığın sistem 8 bit çalışmaya uygun. Bu nedenle T0CON registeri 6.cı biti "1" yapmalısın. Eksik olan bu ilk programda.
Bunu yaparsan Çalışması gerekir. Tabiiki proton derleyicisi her zamanki gibi bir azizlik yapmıyor ise.
İkinci verdiğin programda saçmalamışsın. Kesme değerlerinde aç kapa yapmışsın sürekli.
Dediğim şekilde çalışması gerekir.
Ete

can

Hocam teşekkürler çalıştı; yalnız şöyle bir sorun var, saniye kısmı 1 sn debir değil 12 sn de bir artıyor.

ete

Simulasyona bakıp konuşuyorsan doğaldır. Ama gerçek devren böyle çalışıyor ise sorunu Proton derleyicisinde araman gerekecek herhalde.

Ete

can

#6
gerçek devre hocam.
benim lcd yavaş ama kesmenin onla ilgisi yok sanırım, atlaya atlaya doğru sayması gerek, yanlışmı düşünüyorum.
61 i 5 yaptım 1 dk da 2sn geri kalıyor.

ete

Sorunun kaynağı vermediğin sigorta ayarlarında osc seçeneği olmalı.
Kristalmi kullanıyorsun ne kullanıyorsan bunu ayarlarda belirtmen gerekiyor. Daha doğrusu XT OSC olarak ayar vemen gerekiyor. Dahili OSC si varmıydu bu işlemcinin hatırlayamadım. Var ise onu kullandığını ve varsa OSCCON registerine ayar da vermen gerekir.

Ete

can

dahili osilatör kullanıyorum hocam

ete

O halde programın başına;
OSCCON=%01100000
komut satırını ilave et ve yeniden dene istersen
Ama Confiq request ile sigorta ayarlarınıda girmeyi ihmal etme bence.

Ete


can

#10
Hocam çok teşekkürler yardımlarınız için
OSCON denedim değişmedi sonuç
config ayarlarınıda bilmiyorum.
hiç bir sigorta ayarı mevcut değil programda
sadece pickit2 nin kendi yaptığı config1-7 ayarları var

Hattuşa

sa.
@can usta
fuse configurator diye bir program var (picproje sitesinde aratırsanız çıkar) onu yüklerseniz derleyicinizin bir kenarında o özellik çalışır, bu özellik sayesinde fuse ayarlarını aç-kapa yaparak hızlı bir şekilde yapabilirsiniz.
sizin işlemciye göre basit bir fuse configrasyonu yaptım
Device 18F4620
Xtal 4
Config_Start
   OSC = XT ; XT
   FCMEN = OFF ; Disabled
   IESO = OFF ; Disabled
   PWRT = OFF ; Disabled
   BOREN = OFF ; Disabled
   WDT = OFF ; Disabled
   MCLRE = OFF ; Enabled
   LPT1OSC = OFF ; Disabled
   PBADEN = OFF ; PORTB<4:0> digital on Reset
   CCP2MX = PORTC ; Multiplexed with RC1
   STVREN = OFF ; Disabled
   LVP = OFF ; Disabled
   XINST = OFF ; Disabled
   Debug = OFF ; Disabled
Config_End


bunu deneyebilirsiniz. ayrıca keşke isis simüle dosyasını eklemiş olsaydınız simülasyonda aksayan kısımlarına bakardık, herneyse artık kendiniz deneyebilirsiniz

can

a.s. pr0-TR

akşam verdiğiniz kodları gireceğim

çok teşekkürler

can

biliyorsunuz saati çalıştırdım. şimdi bu programı anaprograma yerleştirdim. ama program akışı devam etmiyor sadece saat çalışıyor. program şöyle akıyordu:

başla:.
.
.
ileri:
.
.
geri:
.
.
stop

şimdi şu şekilde yerleştirdim
saat:
.
.
başla:
.
ieri:
.
geri:
.
stop

bu döngüde sadece saat çalışıyor, başlaya geçemiyor.
ben programın eskisi gibi çalışmasını, çalıştıkcada süreyi göstermesini istiyordum. kesme geri planda çalışıyor diye.

nasıl düzenlemeliyim?

Hattuşa

@can usta
program yok, isis şema yok nasıl yardımcı olabiliriz inan bilmiyorum

Powered by EzPortal