Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => ARM => Konuyu başlatan: M_B - 14 Ocak 2013, 07:58:16

Başlık: Delay fonksiyon Süresi
Gönderen: M_B - 14 Ocak 2013, 07:58:16
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.
Başlık: Ynt: Delay fonksiyon Süresi
Gönderen: 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
Başlık: Ynt: Delay fonksiyon Süresi
Gönderen: M_B - 14 Ocak 2013, 10:25:53
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.

Başlık: Ynt: Delay fonksiyon Süresi
Gönderen: Mucit23 - 14 Ocak 2013, 10:31:54
Hocam 72 Mhz de çarpanların değerini iki katına çıkarmıştım. Ama 168Mhz de ne olur bilemiyorum açıkçası
Başlık: Ynt: Delay fonksiyon Süresi
Gönderen: 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 ?
Başlık: Ynt: Delay fonksiyon Süresi
Gönderen: M_B - 14 Ocak 2013, 12:09:09
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.
Başlık: Ynt: Delay fonksiyon Süresi
Gönderen: M_B - 14 Ocak 2013, 21:45:42
altaki linkte soyle bir şey buldum.
https://www.picproje.org/index.php/topic,37864.0.html (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