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.
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
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.
Hocam 72 Mhz de çarpanların değerini iki katına çıkarmıştım. Ama 168Mhz de ne olur bilemiyorum açıkçası
bu iş biraz sıkıntılı bir durum.
Aşmanın yöntemi systemtick gibi bir zamanlayıcı kullanmak. Ama Nasıl ?
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.
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