Delay ile PWM'den 750 Hz Sinüs Dalgası Yaratmak

Başlatan zxro, 04 Aralık 2012, 21:40:52

zxro

Merhaba arkadaşlar,

Aşağıdaki kodu çalıştırdığımda bir PWM train oluşturuyor. Digital to Analog converter ile sinüs sinyaline çeviriyorum. 1.2 kHz frekans veriyor. Sinüs dalgası görüntüsü de güzel buraya kadar bir problem yok.

Soruma gelince, kodda yani delaylerde değişiklik yaparak sinüs dalgasında 750 Hz frekansı yakalamam gerekiyor. Nasıl yapabilirim, delayler nasıl ve neye göre hesaplanır? Hepsinin iki katını alıyorum sinüs dalgası şekli bozuluyor. Bu delayler arasında nasıl bir bağlantı var?

#include <P18F452.h>
#include <delays.h>
#pragma config WDT = OFF, LVP = OFF, OSC = HS, OSCS = OFF, BOR = OFF
#define C1 PORTCbits.RC1 
#define C2 PORTCbits.RC2 
void main(void) {
	TRISCbits.TRISC2 = 0;
	TRISCbits.TRISC1 = 0;
	while(1){
		// First half period
		C2 = 1;
		C1 = 1;
		Delay10TCYx(15); // T1
		C1 = 0;
		Delay10TCYx(10); // T2
		C1 = 1;
		Delay10TCYx(15); // T3
		C1 = 0;
		Delay10TCYx(17); // T4
		C1 = 1;
		Delay10TCYx(15); // T5
		C1 = 0;
		Delay10TCYx(10); // T6
		C1 = 1;
		Delay10TCYx(15); // T7

		// Second half period
		C1 = 1;
		C2 = 1;
		Delay10TCYx(15); // T1
		C2 = 0;
		Delay10TCYx(10); // T2
		C2 = 1;
		Delay10TCYx(15); // T3
		C2 = 0;
		Delay10TCYx(17); // T4
		C2 = 1;
		Delay10TCYx(15); // T5
		C2 = 0;
		Delay10TCYx(10); // T6
		C2 = 1;
		Delay10TCYx(15); // T7
	}
}