Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Microchip PIC => Konuyu başlatan: Melih1802 - 07 Ocak 2017, 22:24:46

Başlık: "HI_-TECH ile PIC programlama" Hakkındaki sorularım.
Gönderen: Melih1802 - 07 Ocak 2017, 22:24:46
Fırat DEVECİ nin "HI_-TECH ile PIC programlama" Adlı kitabından bazı sorularım olacak;

#include <htc.h>
#include "delay.h" // Gecikme yaratacak kütüphane
void main(void) // Ana fonksiyon alanı
{
TRISB=0x00; // PORTB çıkış olarak yönlendiriliyor
PORTB=0x00; // PORTB'nin tüm çıkışları sıfırlanıyor
while (1) // Sonsuz döngüye giriliyor
{
RB0=1; // Led yanacak
DelayMs(250);DelayMs(250); // Yarım saniye beklenecek
RB0=0; // Led sönecek
DelayMs(250);DelayMs(250); // Yarım saniye beklenecek
}
}


Buradaki 2 tane ardışık geçikme komutun un özel bir anlamı var mı!
DelayMs(250);DelayMs(250);
Bunun yerine DelayMs(500); yazsak aynı işi görür mü!
Başlık: Ynt: "HI_-TECH ile PIC programlama" Hakkındaki sorularım.
Gönderen: dursuncemal - 07 Ocak 2017, 22:38:26
burada herhangi bir ozellik yok olsa olsa  DelayMs(); fonksiyonuna taminlanan degisken 8 bitlik olbilir.baska mantikli bir anlami yok.
Başlık: Ynt: "HI_-TECH ile PIC programlama" Hakkındaki sorularım.
Gönderen: mehmet - 08 Ocak 2017, 18:23:11
Bu durum derleyiciye göre değişmektedir. Gecikme saykıl
olarak yapılmakta. 179.200, 197120 veya 50.659.000
olabilmekte. En emin durum;
XC8 için...

void myDelay_ms(uint16_t gecikmeZamani)
{
     while(gecikmeZamani--)
     {
          __delay_ms(1);
     }
}

şeklinde yapmak...
Başlık: Ynt: "HI_-TECH ile PIC programlama" Hakkındaki sorularım.
Gönderen: gogge - 08 Ocak 2017, 22:21:19
DelayMs(500); şeklinde yazarsanız olmaz. Çünkü DelayMs() fonksiyonu 8 bitlik değişkenleri işleyecek şekilde yazılmış. Bir DelayMs() fonksiyonu ile maksimum 255 milisaniyelik gecikme sağlarsınız. 255 den daha büyük bir değer yazdığınızda da sonuç değişmez. Eğer DelayS() fonksiyonunu kullanırsanız, istediğiniz saniye kadar gecikme sağlayabilirsiniz. Örneğin DelayS(5); kodu 5 saniyelik gecikme sağlar.

Bu zamanlamaların hiçbirisi gerçek zamana eşit değildir. Hassas zamanlamanın gerektiği yerlerde saykıl hesabı yapılabilir.
Başlık: Ynt: "HI_-TECH ile PIC programlama" Hakkındaki sorularım.
Gönderen: mehmet - 08 Ocak 2017, 22:29:14
Olay 8bit değil, saykıl olayı. Genelde rastladığım 197120
çevrim en fazla. Buna göre OSC / 4 bir çevrim. Kaç ms/us
istiyorsanız ona göre hesaplarsınız.
Başlık: Ynt: "HI_-TECH ile PIC programlama" Hakkındaki sorularım.
Gönderen: Melih1802 - 08 Ocak 2017, 22:33:14
Alıntı yapılan: gogge - 08 Ocak 2017, 22:21:19
DelayMs(500); şeklinde yazarsanız olmaz. Çünkü DelayMs() fonksiyonu 8 bitlik değişkenleri işleyecek şekilde yazılmış. Bir DelayMs() fonksiyonu ile maksimum 255 milisaniyelik gecikme sağlarsınız. 255 den daha büyük bir değer yazdığınızda da sonuç değişmez. Eğer DelayS() fonksiyonunu kullanırsanız, istediğiniz saniye kadar gecikme sağlayabilirsiniz. Örneğin DelayS(5); kodu 5 saniyelik gecikme sağlar.

Bu zamanlamaların hiçbirisi gerçek zamana eşit değildir. Hassas zamanlamanın gerektiği yerlerde saykıl hesabı yapılabilir.

Şimdi anladım Hocam. 8 BIT ile ulaşabileceğimiz en büyük sayı 255 olacağından 500' e erişmek için 2 tane  aynı ardışık olarak kullanarak elde ediyoruz.