18F46K22 Çalışma Hızı Hakkında

Başlatan aRci, 03 Nisan 2025, 17:49:14

aRci

Merhaba;
18F46K22 ile yazdığım kodda yaptığım son derlemeden sonra pic anormal şekilde çalışmaya başladı. Proje detayında kuluçka makinasıdır. portb.0 dan sıfır geçiş tetiği alıp porte.0 dan triak ı sürüyorum burada portb.0 kesmesi alıp timer1 kesmesi ile de gecikme ayarlıyorum.

Son derleme ile program 35400byte civarına geldi.Şuan portb.0 kesmesi oluyor ancak kaçırıyor ve timer kesmeside aynı şekilde çalışıyor. normal kesme haricindeki kısımlarda sistemde çok fazla bir durağanlık var butonlar neredeyse 2sn ve fazlası basarsam algılıyor. deneme yaparken enerjisini kesip açtığımda normal çalışmaya başladı ancak daha sonraki yüklemede yine aynı şekilde sistem çalışma hızı değişti. osccon ve osccon2 nin değerini lcd ekrana bastığımda alddaki şekilde gözükmekte buna göre pll devrede olmalı.
OSCCON = 01111100
OSCCON2 = %10000111

kodlar içerisinde gecikmeleri portb.0 kesmesine bağlı yaptırıyorum.kesme oluşunca gecikme tamamlanıyor. benimde sorunum burada başlıyor gibi neden kesme yi algılamadığını bulamadım.Alttaki program içi geçikme rutinim.

rutinde başlamadan once RBMesgul değişkeninden değer alınıyor bu değişken her portb.0 kesmesinde değeri 1 artıyor. ayrıca ACOFF ile de döngüye bir gecikme sınırı olarak kullandım eğer şu anki halında ACOFF kaynaklı bir döngü den çıkılmıyor.

IntBkl:
RbTemp = RBmesgul
'INTCON.1 = 0 'or INTCON.7 = 0 then Intcon = %11010000
AcOff = 0
while RbTemp = RBmesgul and AcOff < 2000
pauseus 1
AcOff = AcOff + 1
wend
if AcOff >= 2000 then gosub bip':pause 50:gosub bip
return

Sizden ricam sigorta ayarlarında ne hatam varki bu kadar zamanda çalışan kod şimdi hata veriyor. yardımcı olur musunuz.

'****************************************************************
'*  Name    : 18F46K22.BAS                                      *
'*  Author  : Ruhi GÖK (aRci)                                   *
'*  Notice  : Copyright (c) 2024 SanaRci ( Sancakbeyi & aRci )  *
'*          : All Rights Reserved                               *
'*  Date    : 26.05.2024                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
define OSC 64
asm
 __CONFIG    _CONFIG1H, _FOSC_INTIO67_1H & _FCMEN_ON_1H & _IESO_ON_1H & _PLLCFG_ON_1H
 __CONFIG    _CONFIG2L, _PWRTEN_ON_2L & _BOREN_ON_2L & _BORV_285_2L
 __CONFIG    _CONFIG2H, _WDTEN_OFF_2H & _WDTPS_16384_2H
 __CONFIG    _CONFIG3H, _MCLRE_EXTMCLR_3H & _HFOFST_OFF_3H & _PBADEN_OFF_3H & _CCP2MX_PORTC1_3H
 __CONFIG    _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L
 __CONFIG    _CONFIG5L, _CP0_ON_5L & _CP1_ON_5L & _CP2_ON_5L & _CP3_ON_5L
 __CONFIG    _CONFIG5H, _CPB_ON_5H & _CPD_ON_5H
 __CONFIG    _CONFIG6L, _WRT0_ON_6L & _WRT1_ON_6L & _WRT2_ON_6L & _WRT3_ON_6L
 __CONFIG    _CONFIG6H, _WRTB_ON_6H & _WRTC_ON_6H & _WRTD_ON_6H 
 __CONFIG    _CONFIG7L, _EBTR0_ON_7L & _EBTR1_ON_7L & _EBTR2_ON_7L & _EBTR3_ON_7L
 __CONFIG    _CONFIG7H, _EBTRB_ON_7H
endasm
OSCCON = %01111000 ' 16MHz Dahili Osilatöre Ayarlandı
OSCCON2 = %10000100
OSCTUNE = %01000000
CM1CON = 0
CM2CON = 0
 
Symbol SPEN      = RCSTA.7    'Seri Bağlantı Noktası Etkin = 1
Symbol CREN      = RCSTA.4    'Sürekli veri alma etkin = 1
Symbol OERR      = RCSTA.1    'Sürekli veri alma etkin = 1
Symbol FERR      = RCSTA.2
'===============================================================================
'===============================================================================
    while OSCCON.2= 0:wend
    T1CON = %00110000
    PIE1.0 = 1
    Symbol TmrFl     = PIR1.0
    Symbol TmrOn     = T1CON.0
'===============================================================================
'===============================================================================
    'RCON = %01011100
    INTCON = %11010000
    INTCON2= %01000000
'===============================================================================
'===============================================================================
    RCSTA = $90   ' Enable serial port & continuous receive
    TXSTA = $24   ' Enable transmit, BRGH = 1
    SPBRG = 130   ' 9600 Baud @ 64MHz, -0,02%
    SPBRGH = 6
    BAUDCON.3 = 1 ' Enable 16 bit baudrate generator
'===============================================================================
'===============================================================================
    ON INTERRUPT goto KESME
'===============================================================================
'===============================================================================

ete

Sigorta ayarlarında bir kusur gözükmüyor. İşlemciyi PLL destekli 64Mhz çalıştırmak için gerekenleri yapmışsın. Sorunu programın başka yerlerinde aramalısın.

Bu gibi işlemcilerde en çok yapılan hataların başında Çıkış pinlerinin LATX.z olarak tanımlanması gereken pinlerin PORTX.z şeklinde tanımlanması geliyor. Bu şartın seri haberleşme pinlerinde geçerli olmadığını da söylemem gerek.

Kesmeler için bu işlemcide priority (öncelik) tanımlaması var istediğin kesmeye öncelik verebilirsin. Bu sayede aynı anda birden fazla kesme oluşsa bile öncelik, verdiğin kesmede olur ki buda pek çok yerde işine yarayabilir.

Ete

aRci

Alıntı yapılan: ete - 03 Nisan 2025, 22:10:30Sigorta ayarlarında bir kusur gözükmüyor. İşlemciyi PLL destekli 64Mhz çalıştırmak için gerekenleri yapmışsın. Sorunu programın başka yerlerinde aramalısın.

Bu gibi işlemcilerde en çok yapılan hataların başında Çıkış pinlerinin LATX.z olarak tanımlanması gereken pinlerin PORTX.z şeklinde tanımlanması geliyor. Bu şartın seri haberleşme pinlerinde geçerli olmadığını da söylemem gerek.

Kesmeler için bu işlemcide priority (öncelik) tanımlaması var istediğin kesmeye öncelik verebilirsin. Bu sayede aynı anda birden fazla kesme oluşsa bile öncelik, verdiğin kesmede olur ki buda pek çok yerde işine yarayabilir.

Ete
Cevap için teşekkürler;
Haklısınız malesef koda ekleme yaptkca önceki işlemleri etkileyen baı hatalar yapmışım. sogutma işlemi sonrası bunun hafızaya kaydedilmesi ve ardından tüm ayar değişkenlerinin değerleri hafızadan okunarak normal çalışmaya dönmesi gerekiyordu ama bu işlemi gün içinde tek sefer yapacak tekrar yapması için gün değişmesi gerekiyor.burada yapılan işlem hatam sonucu her seferinde epromdan veriler okunuyor ve buda döngüleri bozuyor ayrıca okuma sırasında kısa pauselerim var bunlarda kesme duzeninin bozuyormuş.
kodda parça parça bölümleri silerek anca bulabildim.
şuan kodlar çalışıyor olması gerektiği gibi.

Powered by EzPortal