16F877 50 hz üretme sorunu

Başlatan certy, 26 Temmuz 2013, 14:47:52

certy

16F877'de şöyle bir şey yazarak 50 hz üretmeye çalışıyorum;

OSC:

HIGH PORTB.0
PAUSEUS 2500
LOW PORTB.0
PAUSEUS 2500

GOTO  OSC


Bu programı tek başına yazdığımda sorun yok ancak şöyle yaptığım zaman programda ilk başta olan kısım çalışıyor, gerisi çalışmıyor;

TRISB=%00000010

HZ VAR WORD

OSC:

HIGH PORTB.0
PAUSEUS 2500
LOW PORTB.0
PAUSEUS 2500

GOTO OSC
GOTO SAY

SAY:

COUNT PORTB.1, 1000, HZ

LCDOUT $FE,1
LCDOUT $FE,$80,"HZ: ", DEC HZ

GOTO SAY


Sorun ne olabilir sizce?
TA1USS

Tagli

#1
Programda mantık hatası var. Zaten aşağı tarafın çalışmaması gerekir. GOTO PWM satırı ile işleyiş yukarı gider, yani GOTO SAY satırına hiçbir zaman ulaşmaz.

Bu işlemci için donanımsal PWM'in bu kadar düşük frekansa inemediğini düşünürsek (kristal değişirse o başka tabi), ya 16F887 kullanarak donanımsal PWM ile bu iş çözülmeli, ya da timer kesmeleri kullanılarak yapay bir PWM üretilmeli.

Bu arada, PWM demek darbe genişliğinin değiştirilmesi anlamına gelir. Sabit iş zamanlı kare dalgaya PWM demek pek doğru değil.
Gökçe Tağlıoğlu

certy

Alıntı yapılan: Tagli - 26 Temmuz 2013, 14:59:47
Programda mantık hatası var. Zaten aşağı tarafın çalışmaması gerekir. GOTO PWM satırı ile işleyiş yukarı gider, yani GOTO SAY satırına hiçbir zaman ulaşmaz.

Bu işlemci için donanımsal PWM'in bu kadar düşük frekansa inemediğini düşünürsek (kristal değişirse o başka tabi), ya 16F887 kullanarak donanımsal PWM ile bu iş çözülmeli, ya da timer kesmeleri kullanılarak yapay bir PWM üretilmeli.

Bu arada, PWm demek darbe genişliğinin değiştirilmesi anlamına gelir. Sabit iş zamanlı kare dalgaya PWM demek pek doğru değil.

Timerden anlamam pek. :)

16F887'nin pwm'ini aktif etmem için ne yazmalıyım programa?
TA1USS