16f88 ile analog to pwm

McdM

Üye
Katılım
8 May 2010
Mesajlar
9
Puanları
1
Yaş
34
Merhabalar
öncelikle 16f88 ile analog sinyal okuyip bu sinyale göre pwm sinyalı üretmek istiyorum. Analog sinyalım 0-5V arasıdır. Örn: 1v ta %20 pwm sinyalı gibi.

yazdıgım program ile tam olarak istedigim gibi çalıştıramıyorum.

PORTA=0 : PORTB=0
TRISA=%00000001
TRISB=%00001000

@ DEVICE PIC16F88
@ DEVICE PIC16F88, WDT_ON
@ DEVICE PIC16F88, PWRT_ON
@ DEVICE PIC16F88, PROTECT_OFF
@ DEVICE PIC16F88, MCLR_ON
@ DEVICE PIC16F88, INTRC_OSC_NOCLKOUT

DEFINE OSC 4
CMCON=7
OSCCON=%01100000

ANSEL=%00000001
ADCON1=%10000000

DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 100

SYMBOL PWM_O=PORTA.1
SYMBOL RUN=PORTA.2

HAM VAR WORD
VOLT VAR WORD

BASLA:

HIGH RUN
PAUSE 1000
LOW RUN
PAUSE 1000


ADCIN 0, HAM

Ham=ham+1
Volt=(ham */ 1250)/100
PAUSE 100

IF VOLT=50 THEN
HIGH PWM_O
PAUSE 900
LOW PWM_O
PAUSE 100
ENDIF

IF VOLT=20 THEN
HIGH PWM_O
PAUSE 800
LOW PWM_O
PAUSE 200
ENDIF

IF VOLT=30 THEN
HIGH PWM_O
PAUSE 700
LOW PWM_O
PAUSE 300
ENDIF


GOTO BASLA

END

(yardımcı olursanız sevinirim)
 
1. Mesajlarınıza kod eklerken code tag'ları kullanın
2. Programlarınızda gerekmedikçe büyük harf kullanmayın, çok acemice duruyor
3. 10 bitlik adc sonucunu pwm için 8 bite çevirme kodunuzu pek anlayamadım
zaten donanımsal pwm de kullanmamışsınız.
4. 16f88'de hpwm1 iki farklı pinden kullanılabiliyor, vaktim olmadığından konfigürasyonunuzu inceleyemedim, bunu kontrol edin.
5. Kullandığınız tris ayarlarının pwm çıkışı için doğru olup olmadığını kontrol edin
6. Mikrodenetleyicilerle çalışmaya devam edecekseniz basic'e hiç bulaşmayın, c ile devam edin.



aşağıdaki kod, 0. adc kanalı ölçümünü 8 bit değişkene yazıp hpwm1'den basıyor:
_________________________



Kod:
@ DEVICE PIC16F88
@ DEVICE PIC16F88, WDT_ON
@ DEVICE PIC16F88, PWRT_ON
@ DEVICE PIC16F88, PROTECT_OFF
@ DEVICE PIC16F88, MCLR_ON
@ DEVICE PIC16F88, INTRC_OSC_NOCLKOUT 
DEFINE osc 4

porta = 0 : portb = 0
trisa = %00000001
trisb = %00001000

cmcon = 7
osccon = %01100000

ansel = %00000001
adcon1 = %10000000

DEFINE adc_bits 8
DEFINE adc_clock 3 
DEFINE adc_sampleus 100

SYMBOL run = porta.2
ham var byte


high run : pause 1000: low run : pause 1000

while 1

adcin 0, ham : pause 100 : hpwm 1,ham,1000  

wend

end
 
Son düzenleme:
öncelikle alakanızdan dolayı teşekkür ederim .
Sizin gönderdiginiz programı anlıyamadıgım için çünkü daha yeniyim başka bi yolla yaptım ama girişiteki analog degere göre çıkıştakı pwm ayarlayamıyorum tek sorun o kaldı.

porta=0 : portb=0
trisa=%00000001
trisb=%00001000

cmcon=7
osccon=%01100000

ansel=%00000001
adcon1=%10000000

DEFINE adc_bits 8
DEFINE adc-clock 3
DEFINE adc_sampleus 100

SYMBOL run=porta.2
adsonuc var byte

lets:

high run
pause 1000
low run
pause 1000


adcin 0, adsonuc

pwm porta.1, adsonuc,20
goto lets

end
 
adc-clock'u adc_clock olarak düzeltin.
DEFINE adc_bits 8
DEFINE adc-clock 3
DEFINE adc_sampleus 100

sanırım yazılımsal pwm kullanıyorsunuz ve pwm komutunuz doğru görünüyor.
Belki adc sonrasına biraz gecikme koymak daha iyi olabilir:



lets:

high run
pause 1000
low run
pause 1000


adcin 0, adsonuc : pause 1

pwm porta.1, adsonuc,20
goto lets

end
 

Forum istatistikleri

Konular
129,272
Mesajlar
924,878
Kullanıcılar
451,687
Son üye
emrekakrakurt

Yeni konular

Geri
Üst