okuduğum ADC değerine göre frekans artırmak (YARDIM)

Başlatan Hattusa, 09 Ağustos 2010, 00:44:42

Hattusa

s.a.
sevgili forum ustalarım kullanmakta olduğum bir devrem için şöylesi bir işleme ihtiyacım var,
okudğum ADC değerine göre HMPW frekansımı artırmak veya eksiltmek istiyorum. nasıl yapabilirim bulamadım. devreyi 16F877 ye göre kurdum. yardımlarınızı bekliyorum. (frekansımın değeri önemli değil, frekansımın duty değeri ile oynamak istemiyorum. sadece hpwm de ürettiğim frekansım okuduğum ADC değerine göre artmalı veya eksilmeli)
NOT: ete hocamın 11. dersinde yazılı olan bu işlemi ben bir türlü beceremedim. yazılım dili bende proton. PBP yazılımını uygulamayı denedim protonda ama isisde çalışan yazılım gerçekte çalışmadı. acaba eksik veya hata nerede?




Device 16F877
Xtal = 4
                       
'OPTION_REG =%00111111
PORTA=0:TRISA=%00000001
PORTB=0:TRISB=%00000000
PORTC=0:TRISC=%00000000
PORTD=0:TRISD=%00000000

ADCON1=%10000100'
T2CON = %00000101
PR2=24
'-----------------------------------------------------------------
                                                   
             
'-----------------------------------------------------------------

'**************** ADC chanel setting  ************************
Declare ADC_BITS 10    ' ADCIN   çözünürlük  (Bits)
Declare ADC_CLOCK 1    ' ADC clock kaynağı  (Fosc/8)
Declare ADC_SAMPLEUS 3 ' ADC örnekleme zamanı (uSec)
'****************HPWM PRESETİNG*********************
Declare CCP1_REG   PORTC    'Hpwm 1 pin port
Declare CCP1_BIT     2         'Hpwm 1 pin bit
'Declare CCP2_REG   PORTC    'Hpwm 2 pin port
'Declare CCP2_BIT     1      'Hpwm 2 pin bit
'******************* DEĞİŞKENLER  ********************
Dim HAM As Word
Dim X   As Word
Dim DUTY As Byte   
'---------------------------------------------------------------------------

CCP1CON.2=1
CCP1CON.3=1

BASLA:
      DUTY=50
      GoSub POTOKU
     
      GoTo BASLA
     
POTOKU:
       ADCIN 0,HAM
       PR2=((1024-HAM)*/5625)/100+24
       
       X=(PR2+1)* DUTY /25
       CCP1CON.4=X.0
       CCP1CON.5=X.1
       CCPR1L=X>>2
       Return
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

Maxim

hpwm komutuda iş görecektir heralde ?

HPWM Channel , Dutycycle , Frequency

yani ,
adc değerini AAA ya atabiliriz , böylece adc değerine göre frekansımızda değişecek.
ama frekans aralığını bilmiyorum ona göre scale etmek lazım ,


CCP1_PIN = PORTC.1

ADCIN 0, AAA
hpwm 1, 127, AAA  '%50 duty


Hattusa

Alıntı yapılan: Maxim - 09 Ağustos 2010, 01:57:43
hpwm komutuda iş görecektir heralde ?

HPWM Channel , Dutycycle , Frequency

yani ,
adc değerini AAA ya atabiliriz , böylece adc değerine göre frekansımızda değişecek.
ama frekans aralığını bilmiyorum ona göre scale etmek lazım ,


CCP1_PIN = PORTC.1

ADCIN 0, AAA
hpwm 1, 127, AAA  '%50 duty



s.a.
ustam ya okttuğum adc değeri 170 ile 350-400 değerinde bu değerlerde nasıl çalıştırabişlirim ki HPWM1 i ?
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

Maxim

hangi frekans aralığı isteniyor ?
1khz - 2khz ?
5khz - 10khz ?

Hattusa

Alıntı yapılan: Maxim - 09 Ağustos 2010, 11:28:26
hangi frekans aralığı isteniyor ?
1khz - 2khz ?
5khz - 10khz ?

ustam ort. 1 Khz çok kritik değil frekansımız aralık olarak 1 kzh ile 5 khz olsa yeterli
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

Maxim

kabaca bu kod ile giriş adc değeri 170 - 400 aralığında olduğu sürece
pwm çıkışından %50 duty , 1khz ile 5khz arasında bir frekans alırsın .


Device 16F876A
XTAL 4
'
TRISA=%11111111
CMCON =7
ADCON1=%11001110
'
Declare ADIN_RES 10
Declare ADIN_TAD 8_FOSC
Declare ADIN_STIME 50
'
CCP1_PIN = PORTC.2
Dim AAA As Word
'
HPWM 1, 127, AAA  
'
LOOP:
'
ADCIN 0, AAA
AAA = (17 * AAA) - 1956
'
DelayMS 50
'
GoTo LOOP

Hattusa

tşk ederim usta akşam bir deneyeyim uygulamayı, yazımınız tamam gibi mantıklı
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

Maxim

hata yapmışım ,
analog portu olmayan 16F628A kullanmıştım onu 16F876A ile değiştirdim bilgnize .