Delay fonksiyon Süresi

Başlatan M_B, 14 Ocak 2013, 07:58:16

M_B

Merhaba arkadaşlar;
Stm32F407 Discovery kitime ST nin kutuphanesini kullanarak ufak tefek programlar yazabiliyorum.

Kitle DS18B20 uygulaması yapacağım.  Ama zamanlamalar konusunda sıkıntım var.
Sıkıntım derken program icinde kullanmış olduğum
void Delay(__IO uint32_t nTime)
{ 
  TimingDelay = nTime;

  while(TimingDelay != 0);
}

ve
void DelayUs(u32 t)	
{
    t*=6;			
    while(t--);
}


void onewire_reset(void)
{
    TRIS_PIN(out);
    DQ_PIN_WRITE(0)
    DelayUs(480);
    TRIS_PIN(in);
    DelayUs(400);
    TRIS_PIN(out);
}


DelayUs(400); yani burdaki 400us
gercekten 400mikro saniyemi yoksa yaklasık mı ?

fonksiyonlara vermiş olduğumuz değerin
gercekle ne kadar alakası vardır. 

Bu değerleri nasıl gerçeğe yakın ayarlayabiliriz. İşlemcinin çalışma frekansı değiştikce.
Hiç araştırma yapmadan direk sordum.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Hocam buradaki değerler 32Mhz için geçerli. Değerler 32Mhz de tutuyor. Belki 1-2us şaşıyordur ama pek önemi olmuyor bu sapmaların.

Ben denemiştim. Hatta çalıştırıyorum şuanda

M_B

Alıntı yapılan: Mucit23 - 14 Ocak 2013, 10:01:04
Hocam buradaki değerler 32Mhz için geçerli. Değerler 32Mhz de tutuyor. Belki 1-2us şaşıyordur ama pek önemi olmuyor bu sapmaların.

Ben denemiştim. Hatta çalıştırıyorum şuanda
Mucit23 hocam dogru soyluyorsun Bu degerler 32Mhz icin gecerli
Cünkü X-Fi  hocanın STM32F107 işlemcisi icin yazmış olduğu koddan alıntıdır.

Ben bu kodu direkt olarak STM32F407 discovery kitte çalıştırmak icin düzenlediğimde delay sureleri farklı olacaktır diye düşündüğüm
için sorma ihtiyacı duydum. ( Discovery kiti 32Mhz de çalıştırmayacağım için)  Yoksa farklı olmuyor mu ? Bu konuda hiç fikrim yok.

İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

Mucit23

Hocam 72 Mhz de çarpanların değerini iki katına çıkarmıştım. Ama 168Mhz de ne olur bilemiyorum açıkçası

muhittin_kaplan

bu iş biraz sıkıntılı bir durum.
Aşmanın yöntemi systemtick gibi bir zamanlayıcı kullanmak. Ama Nasıl ?

M_B

Alıntı yapılan: muhittin_kaplan - 14 Ocak 2013, 11:04:31
bu iş biraz sıkıntılı bir durum.
Aşmanın yöntemi systemtick gibi bir zamanlayıcı kullanmak. Ama Nasıl ?
Evet hocam dediğiniz gibi ama nasıl ?
Biraz araştıralım bakalım ne olacak.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

M_B

altaki linkte soyle bir şey buldum.
https://www.picproje.org/index.php/topic,37864.0.html
#define SysClock 168.0L //Sistem 168 Mhz de çalışıyor
#define DELAY_uS(A)  _usDelay(((long double) A * ((long double) SysClock)-5.50L) / 21.50L);

void _usDelay(long double Count)
{
  u32 i=0;
 for(i=0;i< (unsigned long)Count;i++);
}





Kullanımı:
DELAY_uS(50.5);// 50.5 mikro saniye geçikme
DELAY_uS(55500); //55.5 mili saniye
DELAY_uS(2000000);// 2 saniye
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet