PWM sinyalinin periyodunu ayarlamak

Başlatan Kevinlomax, 25 Nisan 2019, 23:36:58

Kevinlomax

Merhaba yaklaşık olarak 38 kHz frekansa sahip bir PWM sinyali üretmek istiyorum. Periyodumu 26 mikrosaniye olacak şekilde ayarlıyorum.


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?

RaMu

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.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html