16F1938 Doğru şekilde kullanamıyorum

Başlatan alfurkan1064, 01 Eylül 2021, 11:24:06

alfurkan1064

Merhabalar ,
Daha öncelerinde 16f628a olan projemi yeni nesil ve uygun fiyatlı bir pic olan 16f1938e geçirme kararı aldım lakin bir türlü tam olarak verim alamıyorum.

Örneğin:
Arttır ve azalt butonlarıma delay koyuyorum yavaş arttırmak ve azaltmak için burada 50'msn bir delay mevcut butona basılı tutulur ise bu delay düşüyor ve ekrandaki değer hızlı bir şekilde artıyor veyahut azalıyor lakin 16f1938'de bu delaylar hiçbir etki etmiyor 5000msn de yazsam 1msn de yazsam hep aynı hızda düşüyor yada yükseliyor bu konu hakkında bir kaynak bulamadım.

Arttır ve Azalt butonlari internal pullup dirençli şekilde kullanıyorum

Not:Aynı kodlar ve sistem 16F628A'da sorunsuz bir şekilde çalışıyor ve aktif olarak kullanılıyor.

Hatam nerede bilgilendirirseniz memnun olurum,teşekkürler.

Fuse Ayarlarım
#include <16F1938.h>
#OPT compress

#fuses HS,NOWDT,PROTECT,NOBROWNOUT,NOLVP,NOPUT,CPD,NOMCLR,NOVCAP,NOSTVREN
#use delay(clock=20MHz, crystal=20MHz)


Arttır Butonu Kodum Azalt ile aynı
if(input(ARTTIR) == 0  && input(AZALT)==1 && mod== 0)
{
if(katlama==0 && mlmod==0){deger++;if(deger >= 9999) deger=1;delay_ms(40);}
else if(katlama==0 && mlmod==1){mldeger=mldeger+0.1;if(mldeger >= 999.9) mldeger=1;delay_ms(18);}
if(dxc!=5){dxc++;}
if(dxc==5){katlama=1;dxc=0;}
if(katlama==1 && mlmod==0){deger++;delay_ms(20);if(deger >= 9999) deger=1;}
else if(katlama==1 && mlmod==1){mldeger=mldeger+0.1;delay_ms(1);if(mldeger >= 9999) mldeger=1;}
}
if(input(ARTTIR)==1){katlama=0; dxc=0;}

sadogan

#1
Kırık ccs böyle şeyler yapıyor.
Proje dosyalarını "save As" den tek tek yeniden aynı dizine save edip deneyin.

alfurkan1064

Değerli yorumunuz için teşekkür ederim,yaptığım değişiklikler programa işliyor sadece delay kısımlarında problem yaşatıyor,Sıcaklık sensörü olarak DS18B20 kullanıyorum Fuse kısmında  #use delay(clock=20MHz, crystal=20MHz) kaldırıp , #use delay(clock=20MHz) yazdığım zaman bile derece göstergesi 0 derece olarak sabit kalıyor bu sıkıntıyı bir türlü çözemedim.

mustafa_cmbz

config ayarlarını gözden geçir derim ürün patates değilse bence hatan config ayarlarından çıkacak.Datasheet okuyarak farklı bir donanım var ise o portta ondan dolayı sorun yaratıyor olabilir.

sadogan

Bu mcu yu bende kullanıyorum , delay ile ilgili hiç bir sıkıntı ile karşılaşmadım.
#include <16f1938.h> //smd
#device *=16
#device adc=10
#fuses NOWDT,PROTECT ,NOLVP,noMCLR,noBROWNOUT,put,INTRC_IO
#use delay(internal=16MHz)
internal osc yi kulanıyorum , yapılandırma böyle.
internal osc 32mhz dede çalışıyor.
DS18b20 kodun beklemeli çalışıyorsa yaklaşık 700ms sonuç vermek için bekliyor.
internal osc ile dene istersen.

Murat Mert

S.A.
Main içindeki ayarlardan hemen sonra delay_ms(1500); koyup denermisiniz,
void main()
{

   setup_oscillator(OSC_PLL_ON);
   setup_oscillator(OSC_64MHZ);
   setup_adc_ports(sAN0 | sAN1, VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2 | ADC_TAD_MUL_2);
   set_timer1(61536);
   set_timer3(49536);
   setup_timer_1(T1_FOSC | T1_DIV_BY_4);      
   setup_timer_3(T1_FOSC | T3_DIV_BY_4);
   
   delay_ms(1500);
     while(1)
       {
       
        }
}

Yeni bir işlemci de denemeler yaparken delayı koyduktan sonra çalıştı.
mert07