PWM ve TİTREŞİM

Başlatan bymrz, 01 Mart 2008, 22:43:04

bymrz

çıkışa etkisi birazcık yavaşlasa da son denediğim oldu şimdilik.. sağolasınız...

picusta

Alıntı yapılan: "alone_lover"çıkışa etkisi birazcık yavaşlasa da son denediğim oldu şimdilik.. sağolasınız...
Ne demek simdi bu?
//Kanal1
movf sayac1,w
subwf kanal1,w
btfsc STATUS,0
goto $+3
bcf PORTB,3;eğer sayac1 redpwmden küçükse red:1 
goto $+2
bsf PORTB,3;eğer sayac1 redpwmden büyükeşitse red=0
// Kanal2

Bütün kanallar için toplam 84 komut.
Peki sen kanal1 .. 12  degiskenlerini nasil degistiriyorsun? Ana programda bu islemleri yaparken baska islem yapamazsin, yaparsan LEDler göz kirpar.
önemli olan bunu interrupta yapabilmen, W ve STATUS'u kaydetmelisin.
Böylece ana programda istedigini yap, degiskenleri seri ile al, LCD'ye gönder vs... islemci yükün %60'larda olacak ama baska isler yapabileceksin. Buiba arkadasin söyledigini de yabana atma.

bymrz

hocam pic basicle de hallettim işi... pwm bilgilerinin değişikliğini usart kesmesi ile alıyorum..
Ve pwm kontrollerini dediğiniz gibi ilk başta bütün çıkışları "0" yaptım...
daha sonra for next dongusunde de hangileri "1" olacaksa onları 1 yaptım sadece,


main:

d1=0:d2=0:d3=0:d4=0:d5=0:d6=0:d7=0:d8=0:d9=0:d10=0:d11=0:d12=0


for softpwm=255 to 0 step -1

''///////////////Birinci kanalpwm//////////////////////////////////////////////    
   if kanal1>softpwm then high D1

   if kanal2>softpwm then high D2

   if kanal3>softpwm then high D3


.
.
.
.
.

next
goto main


bu şekilde yani...