Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => C/C++ => Konuyu başlatan: Kevinlomax - 25 Nisan 2019, 23:36:58

Başlık: PWM sinyalinin periyodunu ayarlamak
Gönderen: Kevinlomax - 25 Nisan 2019, 23:36:58
Merhaba yaklaşık olarak 38 kHz frekansa sahip bir PWM sinyali üretmek istiyorum. Periyodumu 26 mikrosaniye olacak şekilde ayarlıyorum.
(https://i.ibb.co/ZgBpT8y/f0fd36b0-bebd-4a31-b564-98962cf4749e.jpg) (https://ibb.co/ZgBpT8y)

Ancak benim kodu hesaplama şeklime göre böyle bir sinyal elde etmemem gerekiyor. Clock frekansı 1MHz yani bir clock darbesi 1 mikrosaniye.

if((P1IN & BIT3)!=BIT3)  { //butona basılırsa

for(i=0;i<692;i++){   // 38kHz, 9ms %50 dutycycle PWM sinyal period=26us
P2OUT^=0x01;     
__delay_cycles(4);   
}
P2OUT=0x00;
}

hesabıma göre i++,i<692 ve Xor işlemi yaparken toplam 3 cycle harcanıyor. 4 saniye de ekleyince toplam 7 cycle yapıyor aynısı xor işlemi yapıldıktan sonra da olduğu için hesabıma göre periyodun 14 mikrosaniye olması lazım. Ancak ben 26 mikrosaniye gözlemliyorum. Sizce bunun sebebi nedir?
Başlık: Ynt: PWM sinyalinin periyodunu ayarlamak
Gönderen: RaMu - 26 Nisan 2019, 00:55:06
Varsayımların yanlış,
C de böyle bir hesap yapamazsın,
ASM çıktısına bakman lazım,
o zaman neden olduğu açıkça görülür.

Misal, 8 bitlik bir işlemci kullanıyorsan
i<692 sorusu 1 komut çevriminde yapılamaz.
For döngüsüne girip çıkmak bedava yapılmaz.
Xor işlemi tek saykılda yapılamaz.

Sonra 'ucundan azıcık asm öğrenin' deyince kızıyorlar.