ayarlı osilatör yardım_

Başlatan bahdiyarusta, 11 Nisan 2014, 09:08:38

bahdiyarusta

merhaba
pıc ile artır azalt tuşları ile 10khz ye kadar ayarlı kare dalga osilatörü programını yazıyorum fakat bazı sıkıntılar çıkıyor karşıma çalıştıgım kodlar basit.
sayac=0
basla:
IF ARTIR=1 THEN SAYAC=SAYAC+10
WHILE ARTIR=1 :WEND
IF SAYAC>0 AND AZALT=1 THEN SAYAC=SAYAC-10
WHILE AZALT=1 :WEND
PORTB.0=1
PAUSE SAYAC
PORTB.0=0
PAUSE SAYAC
GOTO BASLA
END

Kodlarda sıkıntı var mı.

<<<***bahdiyarusta****>>>
                  - 66 -

ete

Frekans ve peryot hakkında yeterli bilgin varmıdır?
10KHz lik frekansın T peryodu , T=1000000/10000=100us olarak bulunur.
Bu T süresi olduğuna %50 Duty değerine bağlı olarak HIGH süresi 50us ve LOW süreside 50us olarak hesaplanır.
Senin kodlarına bakalım şimdi
Tuşa bir kere bastığım zaman SAYAC=SAYAC+10 komutu SAYAC=10 yapacaktır. Programında HIGH ve LOW süreleri SAYAC değeri kadar olduğu için Peryodun T=20ms olacaktır.  Bu ise F=1000/20=50 Hz lik bir frekans oluşturacaktır. Bu senin maksimum frekansın olur. Çünki süre ne kadar kısa ise frekansın o kadar yüksek olmalıdır. Kural böyle. Ama senin süren 10ms den küçük olamıyor maalesef.
Tuşa bir kere daha basınca Sayac=20 olacak ve T=1000/(20*2)=25 ms olacak ve buna karşılık 1000/25=40 Hz lik bir frekans elde etmiş olacaksın.

Sonuç olarak seçtiğin yöntemde süre hesabın yanlış gözüküyor. Bir sınır vermek gerekir ise ;
1Hz lik frekans için T=1000000/1=1000000us=1000ms yani 500ms LOW ve 500ms HIGH süresi kullanman gerekiyor
10Khz lik frekans için ise T=1000000/10000=100us , yani 50us LOW ve 50us HIGH süresi kullanman gerekiyor.
O halde senin sayac değerin us cinsinden min. 50us olmalı maksimum 1000000us olmalıdır. 1000000 sayısını word değişkenlerinde tutamayacağına göre bir kısıtlama getirmen gerekiyor.
Buna göre 65000us ye ye kadar süreyi us olarak kullanmak ve bunu geçen miktarlarda süreyi ms cinsinden kullanmak gerekir.

Ete

bahdiyarusta

SAYAC VAR WORD
sayac=0
basla:
IF ARTIR=1 THEN SAYAC=SAYAC+1
WHILE ARTIR=1 :WEND
IF SAYAC>0 AND AZALT=1 THEN SAYAC=SAYAC-1
WHILE AZALT=1 :WEND
PORTB.0=1
PAUSEUS SAYAC
PORTB.0=0
PAUSEUS SAYAC
GOTO BASLA
END

bu şekilde düzelttim uygun mudur.
<<<***bahdiyarusta****>>>
                  - 66 -

ete

Ne olması gerektiğini anlattım kendin karar ver olmuş mu olmamışmı? Yada test sonuç seni tatmin ediyorsa olmuştur.

Ete

bahdiyarusta

<<<***bahdiyarusta****>>>
                  - 66 -

Powered by EzPortal