avatar_Hattuşa

1hz-10hz değişen duty ile frekans oluşturmak

Başlatan Hattuşa, 22 Nisan 2018, 14:26:54

F®T

Evet bende şimdi dikkat ettiğimde bazı frekanslarda sorun var.Acaba kesme süresi kısa olduğu içinde farklı frekanslarda farklı durumlar oluşuyor.Ama genelde program güzel çalışıyor.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Hattuşa

ETE hocam ya sizden de bişey kaçmıyor  ;D   ;D   ;D

hatanın kaynağı görsellerde kandırmaya çalışmaktan kaynaklı, şöyleki


'------------------------  peryod hesaplama -----------------------------------
                             '1 hz =1000 ms    1 hz i oluşturmak için sayac =5000 kez saymalı 1.000.000/200=5000
Adc0 =ADIn 0                 '20 hz =50ms     20 hz i oluşturmak için sayac =250 kez saymalı   50.000/200=250
While ADCON0.1 =1 :Wend       'adc değeri 5000-250 =4750 değeri arasında değişimi vermeli
                              '4750 /1024 =4,638
pEryOd =((1023 -Adc0) *4.644) +250 
hZ =(Adc0 /5.36) +10     'ekrana frekans değerini göstermek için hesapladık


komutlarında


hZ =(Adc0 /5.36) +10     'ekrana frekans değerini göstermek için hesapladık

kodu ile ekrana hesapladığımız frekans değerini bastık, bu sebeble hesaplanan peryodla ekrana bastığımız hz değeri 1-1 örtüşmediğinden ekranda görünen ile oluşan frekans 1-1 oturmadı


F®T

#32
hZ =(Adc0 /5.36) +10     

Selami hocam

hz=1,000,000/peryod*200 desek daha iyi olmazmıydı. :(

Düzeltme:    hZ =100000/pEryOd*2  bu şekilde denedim.Max 80 hz oluyor ve tüm noktalarda peryodlar tutuyor.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Hattuşa

Alıntı yapılan: F®T - 24 Nisan 2018, 21:29:45
hZ =(Adc0 /5.36) +10     

Selami hocam

hz=1,000,000/peryod*200 desek daha iyi olmazmıydı. :(

Düzeltme:    hZ =100000/pEryOd*2  bu şekilde denedim.Max 80 hz oluyor ve tüm noktalarda peryodlar tutuyor.

eski bir sözelciden matematik beklemek ne kadar doğru olur usta, henüz kelliğime ilaç bulamadım

F®T

Selami hocam o kadarda değil.Keller karizmatik olurmuş. ;D
Bizdede saç var karizma yok ne edek şimdik.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

F®T

Formüllerin son hali.

Adc0 =ADIn 0               
While ADCON0.1 =1 :Wend       
                             
pEryOd =((1023 -Adc0) *18.573)+1000 
hZ =100000/pEryOd*2 

1 hz-20 hz arası ekran frekansı ve bu frekansa ait osilaskop peryodlarının tamamı tutuyor.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

F®T

Alıntı yapılan: Maxim - 24 Nisan 2018, 10:09:00
çok güzel bir çalışma olmuş elinize sağlık.
aynı alt yapıyla 1khz-10khz yapılabilirmi sizce?

@Maxım hocam gayet güzel yapılır.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Maxim

Alıntı yapılan: F®T - 24 Nisan 2018, 23:24:43
@Maxım hocam gayet güzel yapılır.
nasıl yapıcaz? :)

bir soru
bu kesme degeri 200uS icin hesap programında tam 62336 olarak çıkıyor
programda Symbol fR =62343
bunun nedeni kod işlenirken bazı gecikmeler oluşuyor ya onun içinmidir?

Hattuşa

Alıntı yapılan: Maxim - 25 Nisan 2018, 10:00:56
nasıl yapıcaz? :)

bir soru
bu kesme degeri 200uS icin hesap programında tam 62336 olarak çıkıyor
programda Symbol fR =62343
bunun nedeni kod işlenirken bazı gecikmeler oluşuyor ya onun içinmidir?

fr=62336 değeri sehven verilmiş, yani dikkatimden kaçıp hataen verdiğim bir değer. doğrusu 62343 olmalı

F®T

#39
64mhz kristalde 200 us ile 7 cycle program gecikmesi ile hesapta 62343 olarak çıkıyor.7 cycle çıkarsa 62336 olarak çıkıyor.Ön yükleme için hesaplanan değer net bir değer değildir.Bu değer program durumuna göre artabilir yada azalabilir.Bunu çok sorun yapmamak lazım.Kanaatindeyim.

@Maxim hocam;

1khz 10 khz için ;

64mhz kristalde 100 us ile 1 cycle program geccikmesi ile hesapta ön yüklemeyi 63967 olarak ayarlayın.

Dim dUtY As Float
Dim pEryOd As Float
Dim hZ As Float

pEryOd =((1023 -Adc0) *0.03519)+4 
hZ =100000/pEryOd*4

yukarıdaki değişkenleri float olarak ayarlarsanız 1khz 10 khz arası net olarak frekans ve duty ayarlaması yapabilirsiniz.Ben denedim gayet net olarak çalışmaktadır.

"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Maxim

ben işin içinde incelik varsa onu merak etmiştim. o timer değeri ile alakalı

@F®T teşekkürler
çalışıyor genel olarak ama ben 250hz ile 2.5khz arası çıkış görüyorum
birde duty garip biraz
benmi hata yapıyorum acaba (proteus)

F®T

programda xtall 64 olarak ayarlanmamış olabilir.pic xtalide 64mhz olacak.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Maxim


F®T

#43
Bende sigortalar bu şekilde ayarlı

Device = 18F46K22

Declare Reminders Off
@ CONFIG_REQ = 0 ; Override Compiler's configuration settings
Asm-
__Config Config1H, 0xF4 ;FOSC_ECHP & PLLCFG_ON & PRICLKEN_ON & FCMEN_ON & IESO_ON
__Config Config2L, 0x18 ;PWRTEN_ON & BOREN_OFF & BORV_190
__Config Config2H, 0x3C ;WDTEN_OFF & WDTPS_32768
__Config Config3H, 0x35 ;CCP2MX_PORTC1 & PBADEN_OFF & CCP3MX_PORTB5 & HFOFST_OFF & T3CMX_PORTC0 & P2BMX_PORTD2 & MCLRE_INTMCLR
__Config Config4L, 0x81 ;STVREN_ON & LVP_OFF & XINST_OFF & DEBUG_OFF
__Config Config5L, 0x0F ;CP0_OFF & CP1_OFF & CP2_OFF & CP3_OFF
__Config Config5H, 0xC0 ;CPB_OFF & CPD_OFF
__Config Config6L, 0x0F ;WRT0_OFF & WRT1_OFF & WRT2_OFF & WRT3_OFF
__Config Config6H, 0xE0 ;WRTC_OFF & WRTB_OFF & WRTD_OFF
__Config Config7L, 0x0F ;EBTR0_OFF & EBTR1_OFF & EBTR2_OFF & EBTR3_OFF
__Config Config7H, 0x40 ;EBTRB_OFF
Endasm-
Declare Reminders On

Declare Xtal= 16
Declare PLL_Req TRUE


Ayrıca proteuse işlemci frekansıda 64 Mhz ayarlı.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Maxim

çok güzel, frekans düzeldi :)
duty de kaçıklık var ve bu 10khz de çok daha belirgin oluyor
acaba duty hesabında atlanan bir nokta olabilirmi

Powered by EzPortal