DelayMs(500); gecikme sıkıntısı

Başlatan eseneren, 22 Ocak 2011, 22:57:21

eseneren

Selamlar,

DelayMs(500);                                            Bu komut kesinlikle 0,5sn bekleme yapmıyor.
for(i=0;i<10;i++) DelayMs(100);                 Bu komut kesinlikle 1sn bekleme yapmıyor.

Kodun basında
"#define Xtal_FREQ 20MHZ" ekledım

MPlab V8,56
Hi-Tech V9,71A
Windows XP İşletim sistemi kullanıyorum.

Nerde hata yapıyorum bulamıyorum....
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

mozkan87

Delay kütüphanesinin içinde tekrardan XTAL_FREQ tanımlanmış olmasın? Delay kütüphanesinide eklerseniz iyi olur.

Birde Hi Tech'in kendi delay rutinlerinde XTAL_FREQ değilde PIC_CLK diye adlandırılıyor.

eseneren

Başta yazdıgım
#include <htc.h>
#include "delay.c"
#define Xtal_FREQ 20MHZ

Delay.h icinde bu sekılde ibare var
#define   XTAL_FREQ   4MHZ      /* Crystal frequency in MHz */

Ben bunu mu degıstırmeylıyım?
(Calıştıgım klasor ıcınde delay.c ve delay.h kopyaladım)
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

mozkan87

#3
Alıntı yapılan: eseneren - 22 Ocak 2011, 23:57:26
Başta yazdıgım
#include <htc.h>
#include "delay.c"
#define Xtal_FREQ 20MHZ

Delay.h icinde bu sekılde ibare var
#define   XTAL_FREQ   4MHZ      /* Crystal frequency in MHz */

Ben bunu mu degıstırmeylıyım?
(Calıştıgım klasor ıcınde delay.c ve delay.h kopyaladım)

Evet artık aşağıdaki satıra ihtiyacınız yok iptal edin gitsin.
#define   XTAL_FREQ   4MHZ      /* Crystal frequency in MHz */

Birde ilk satırda #define Xtal_FREQ 20MHZ yazmışsınız o yalnış. Doğrusu: #define   XTAL_FREQ   20MHZ
Eğer hala sorun devam ederse 20MHZ yerine 20000000 yaarak deneyin tüm delay rutinini bilmediğim için kesin bir şey diyemeyeceğim.

X-Fi

DelayMs(500); yanlış bir yazım Ms fonksiyonu unsigned char tanımlı 255 den yukarısını yazamazsınız DelayBigMs(500); kullanın.
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

eseneren

@mozkan89 XTAL yazınca hata verıyor delay komutları.
Dedigin gibi kutuphane mı oluyor onun ıcındekı "#define   XTAL_FREQ   4MHZ" yerıne  "#define   XTAL_FREQ   20MHZ" yazdım olmadı.
programın basındakı "#define Xtal_FREQ 20MHZ" yerıne "#define Xtal_FREQ 20000000" yazdım oda olmadı.

@X-Fi Butun orneklerde 200 gibi degerler var ben genel ıhtıyac o yonde oldugunu sanıyordum 8bit den dolayı o sekılde yazıldıgı aklıma hıc gelmemıs ıdı sagolun.
DelayBigMs(500); bu baska kutuphanenın uyesı sanırım hata verdi kurcalıyorum...
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

mozkan87

Birde gözümden kaçmış #include "delay.c" yamışsınız onun yerine #include "delay.h" ile deneyin ve olmazsa aşğıdaki linkteki delay rutinlerini kullanın.
http://hotfile.com/dl/98791559/dd190ec/Delay.zip.html

eseneren

Ben project bolumunu kullanmayı bılmoyrum sanırım oradan,ben sadece delay.c ve delay.h proje ıle aynı klasore koyup #include "delay.c"  yazıyordum
#include "delay.h" yazınca hata verıyor dıye o sekılde yazıyordum.
Simdi project bolumunden ekle dıyerek ( ne ıse yaradıgını bılmesem de) delay.c ve delay.h ekledım. sımdı #include "delay.h" olarak hatasız derleyebıldım.
Lakin simdi "for(i=0;i<20;i++)DelayMs(200);" led yakıyorum hesabımı yanlıs yapıyorum birim mı yanlıs bende acaba
20*200ms=4sanıye dıye beklıyorum ama yarım sanıye kadar oluyor bende cok krıtık calısmadıgım ıcın fazla fazla yazıyorum.
Misal sımdı lcd calıstırıyorum zaman kaybetmek ıstemıyorum gonderdıgınız ekdekı dosyaları kurcalayacagım kutuphane kullanmak (bilmedigimden)  alıskanlıgım degıl herseyı kendım yazmaya calısıyorum o sebeple hemen reaksıyon veremıyorum gonderdıgınız dosya oldu olmadı dıye.
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

tazmania

selam senin sıkıntını bende yaşıyorum sorun mplapın versiyonunda ben daha önxceden mplab 8.0 kullanıyordum onda verdiğim DelayMs ile verdiğim zamanlar doğru çıkıyordu. ancak şimdi mplab 8.5 kullanıyorum zaman gecikmeleri hatalı olyor. sorun mplapta

arslan74

Merhaba,

DelayMs(unsigned char cnt); fonksiyonu parametre olarak en fazla 255 sayısını alabilir. daha fazla sayı giremezsiniz. Birde bu kod oluşan süre kullanılan derleyici göre değişir. Pro veya standart derleyiciye göre derlerseniz ona göre süre değişir. En başta Kullandığınız kristalı hızı belirtmelisiniz. Hiç bir değer girilmez ise bunu 4mhz olarak kabul ediyor. eğer 4Mhz de çalmiyorsanız. kendiniz en başta bir tanımlama yapmalısınız. örneğin #define   XTAL_FREQ   10MHZ      /* Crystal frequency in MHz */ gibi bir tanımlayı eklemelisiniz.

Not: Yine bu fonksiyon tam olarak istediğiniz süreleri vermeye bilir. bunun için kendiniz bir delay fonksiyonu yazmanız daha iyi olur.

Selmalar

eseneren

"#define _XTAL_FREQ 4000000" Diye ekliyorum koda derleyicide problem var diye Mplab 8.0 indirdim denedim yine olmadı. 8,56 yı ve 8.0 ı hepsını sıldım hitech de pc kapatıp actım. 8.0 ı kurdum asagıdakii kodu yazıyorum sanıyede bır led yanmasını beklıyorum ama bekledıgım gıbı olmuyor mozkan dosyalarınıda kullandım (always.h da ekleyerek) yıne netıce alamadım.Mplab sımulasyonda stopwach da 152ms suruyor asagıdakı kod.Stopwacth altında 20 Mhz yazıyor mplabda nereye 20Mhz yazacagımı yada ısaretleyecegımı bulamadım sadece kodda var.

Sizde calısıyor bende mı calısmıyor yoksa kodda, derleyıcıde , pickit2 yazılımı ıle atarken mı bır yerde mı hata yapıyorum. :-\


while(1)
{
PORTB=255;
DelayMs(250);
PORTB=0;
DelayMs(250);
DelayMs(250);
DelayMs(250);
}

Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

arslan74

"#define _XTAL_FREQ 4000000"  eğer 4Mhz çalıştırcaksan bunu yazman gerekmiyor. Eğer 20Mhz çalıracaksan o zaman "#define   XTAL_FREQ   20MHZ" şeklinde tanımla.

eseneren

cok afedersınız 20Mhz yazıyorum.Stopwartch altında frekans yazıyor oradakı frekansı ne degıstırıyor  dıye bulmak ıcın 4mhz olarak ayarlamıs ıdım onu gondermısım kusura bakmayın.
20 Mhz yazdıgı halde bu sıkıntı mevcut
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

elmaalma

#ifndef _XTAL_FREQ
 // Unless already defined assume 4MHz system frequency
 // This definition is required to calibrate __delay_us() and __delay_ms()
 #define _XTAL_FREQ 20000000
#endif


__delay_ms(520); // delay.c delay.h kütüphanelerini kaldır olur. hitech ver 9.80
__delay_us(111);

eseneren

9.71a kabul etmıyor delay(200); bunu kabul edıyor oda 200 saykıl sanırım mplabdakı kronometreden
9.8 ındırıp sonucu ekleyecegım
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk