Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: apsis - 26 Kasım 2016, 16:44:59

Başlık: PIC18 de "delay" aşımı
Gönderen: apsis - 26 Kasım 2016, 16:44:59
Merhaba,
Pic18f25k22 de "__delay_ms();" fonksiyonunu kullanırken "error: (1355) inline delay argument too large" şeklinde hata alıyorum.
16MHz için max. 49 ms 4 MHZ için max. 197ms gecikme elde edebiliyorum ve bu değerleri aşınca üstteki gibi bir hata aıyorum.
programda _XTAL_FREQ tanımlı.
Bu hatayı sadece 18 serileri için alıyorum ve 16 serileri için böyle bir limit yok.
Microchip formunda pic18  4MHz için 197.170 cycles olabiliyor şeklinde ibare gördüm.
İşin mantığını açıkçası anlayamadım. Yardımlarınızı bekliyorum.
Teşekkürler.
Başlık: Ynt: PIC18 de "delay" aşımı
Gönderen: baran123 - 26 Kasım 2016, 16:47:59
Şu şekilde bir çözdüm üretebilirsin. Fakat o sınırlamanın sebebini bilmiyorum.

void Delay_ms(uint16_t delay)
{
   for (uint8_t i = 0; i < delay; i++)
      __delay_ms(1);
}
Başlık: Ynt: PIC18 de "delay" aşımı
Gönderen: apsis - 26 Kasım 2016, 17:07:29
Benzer bir çözümle hallettim ama bunun nedenini merak ediyorum. Birazda saçma geliyor.
Başlık: Ynt: PIC18 de "delay" aşımı
Gönderen: RaMu - 26 Kasım 2016, 23:14:11
Kütüphaneyi yazanlar delay fonksiyonunu öyle tanımlamışlar,
upuzun delay istiyorsan ya ard arda yaz yada
timer vs. kullan demişler,
hobi projesi yapıyorsan beni ilgilendirmiyor,
işlemcimi boş boş bekletme,
boş beklesin istemiyorum, çalışsın başka işlerle uğraşsın,
kodunu ona göre yaz, profesyonel olsun diye düşünmüşler.

Yada delay fonksiyonunu o sınırda yazmak işlerine gelmiştir kolay oluyordur,
ondan öyle yapmışlar,
255x255 x ~3 =197 000 (hesap için asm ile delay rutini yazmaya bakabilirsin)
yani 2 tane 8 bitlik register la işi bitirmişlerdir.
Başlık: Ynt: PIC18 de "delay" aşımı
Gönderen: apsis - 27 Kasım 2016, 01:07:20
Anladım @RaMu  hocam teşekkürler :)