timer0 kesmesi hpwm yi durdurdu

Başlatan cann, 11 Eylül 2013, 20:41:02

cann

kesme ile ilgili eklediğim bir şey Hpwm üretimini engelliyor veya hpwm üretmek için kesmelerden zaman kalmıyor?? diğer parametreler yani analog değerlerde ve karşılaştırmalarda sorun yok.

göze çarpan yada hpwm yi devre dışı bırakan bir ayar var mı acaba? bu intcon veya T0con hpwm yi engelliyor olabilir mi? HPwm satırının altındana ve üstünden ekrana veri gönderdim ikiside görünüyor yani hpwm üretimi engellenmiş durumda

teşekkürler

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
--------------------------------------- 
T0CON=%11000101
INTCON=%10100000
CMCON=7
Clear
DelayMS 200
  PORTC.0=0

On Interrupt GoTo kesme

   
   
   
   
   basla:
   etiket4 = ADIn 7
   saci=(ADIn 4)/2.71
   saci=saci-96
   Print At 2,4, "        "
   Print At 2,4, SDec saci
   Print At 2,14,"     "
   Print At 2,14, Dec etiket4
   Print At 6,3, "            "
   Print At 6,3,"  ",Dec2 saat,":",Dec2 dak,":",Dec2 sn,"  "
     
   
   If saci>sileri Then
   
   pin1 = 1
   pin2 = 1
   pin3 = 0
   pin4 = 1
   
   HPWM 1,127,10000
   GoTo basla
   End If
   
Disable
   
kesme:
   sayac=sayac+1
   If sayac=5 Then
   sayac=0
   sn=sn+1
   If sn=60 Then
   sn=0
   dak=dak+1
   If dak=60 Then
   dak=0
   saat=saat+1
   If saat=24 Then
   saat=0
   End If
   End If
   End If
   End If
   INTCON.2=0
   Resume
   Enable
   End

Maxim

öncelikle dikkat ediyorum hiç config ayarları yapmıyorsun
olmaz böyle
her işlemci için config satırlarını tek tek ayarlaman bakman lazım

ikincisi
kullandığın kesme yazılımsal kesme
asıl donanım kesmesine yönelmelisin
yazılım kesmesi diğer komutları bekler

On Interrupt GoTo kesme
bu yazılım kesmesidir

On_Interrupt GoTo kesme
bu da hardware yani donanım kesmedir
tanımlamaları falan farklıdır ama gerçek kesme budur

help pdf dosyasında detay var

cann



on_interupt goto
ile saymadı ne yazık ki. help okudum ama sonrası komutlarda bir farklılık olup oladığını yazmıyor. hpwm sanırım disable komtundan kaynaklanıyor. disable olmaksızın on_interupt goTo ile yapılabiliyor mu? yada programın başlamasıyla geçen süreyi hesaplayacak kesme dışında bir yöntem yok mu?

bilgisayar yazılımı yapanlar time.h değerini alıp sonrasında istedikleri zaman yenisini alıp farktan geçen süreyi hesaplıyorlar. bunun gibi kolay bir yöntem yok mu?

Maxim

hardware kesmede disable falan yok

tam olarak ne yapmak istiyorsun?

cann

programın çalışma süres,n, belirlemek istiyorum, sadece. saat yapmak değil yani.

Maxim

ben onu ölçmek için boş bir bacağı high-low yaptırarak scop ile ölçüyorum

cann

yol gösterecek bir örnek bulamıyorum ne yazıkki

bulduğum tek şey yine buradan OG yazmış:

ON_INTERRUPT GOTO Labelx

Goto Basla  ' Ana program döngüsü

Basla:  ' Bu arada kesme yokken normal kodlar
Kodlar.
Goto Basla

Labelx:  ' kesme ile girilen etiket
Context SAVE  'sistem yazmaçları yedeklenir
Kesme bayrağını temizle
Aradaki varsa diğer kodlar
Context Restore ' yedeklenen değerler geri çağırılıp tekrar ana programa dönülür.

cann

#7
arkadaşlar on_interrup GoTo ile ilgili
sade bir örnek, varmı?

ON_INTERRUPT GOTO Labelx

Goto Basla  ' Ana program döngüsü

Basla:  ' Bu arada kesme yokken normal kodlar
Kodlar.
Goto Basla

Labelx:  ' kesme ile girilen etiket
Context SAVE  'sistem yazmaçları yedeklenir
Kesme bayrağını temizle
Aradaki varsa diğer kodlar
Context Restore ' yedeklenen değerler geri çağırılıp tekrar ana programa dönülür.

çalıştıramadım

benim programda
T0CON=%11000101
INTCON=%10100000
de değişiklik yapmam gerekiyormu ve  kesme bayrağı temizle komutu nasıl olmalı

Teşekkürler

cann

#8
en son geldiğim nokta (on interrupt) ile (on_interrupt) aynı sonuç: yani kesme var sayma var, hpwm yok.

Device 18F4620
Declare Xtal = 4
Declare Adin_Res=10


Declare Adin_Delay=50

CCP1CON = %00001100
Declare CCP1_Pin PORTC.2

   
TRISA = %00100000
  TRISD = %00000000
   TRISB = %01111000
    TRISC = %00000000
   ADCON2.7=1
T0CON=%11000101
INTCON=%10100000
CMCON=7

Clear
  DelayMS 200
  PORTC.0=0
On_Interrupt GoTo kesme
         
             
   
    basla:
   etiket4 = ADIn 7
   saci=(ADIn 4)/2.71
   saci=saci-96
   Print At 2,4, "        "
   Print At 2,4, SDec saci
   Print At 2,14,"     "
   Print At 2,14, Dec etiket4
   Print At 6,3, "            "
   Print At 6,3,"  ",Dec2 saat,":",Dec2 dak,":",Dec2 sn,"  "
     
   
   If saci>sileri Then
   
   pin1 = 1
   pin2 = 1
   pin3 = 0
   pin4 = 1
 
   
   
   HPWM 1,n,10000
   
   GoTo basla
   End If

   
    kesme:
    INTCON.2=0
    Context Save
 
sayac=sayac+1
   If sayac=5 Then
   sayac=0
   sn=sn+1
   If sn=60 Then
   sn=0
   dak=dak+1
   If dak=60 Then
   dak=0
   saat=saat+1
   If saat=24 Then
   saat=0
   End If
   End If
   End If
   End If
 
     
   Context Restore

mesaj birleştirme:: 12 Eylül 2013, 18:53:24

tamam çözdüm!!!!!

yukarıdaki programda

'CMCON=7

'Clear
  'DelayMS 200
  'PORTC.0=0

satırlarını çıkarınca hem sayma hem pwm çalıştı.