PBP de pauseus

Başlatan kılıckaya, 19 Haziran 2013, 16:34:29

kılıckaya

İyi günler,yapmaya çalıştığım projede  16f883 te c5 pini 0.8 ms süreyle lojik1 ardından 2.4 ms boyunca lojik o olacak.Bu işlem 4 kez tekrarlandıktan sonra başa dönecek.Bu durumu ekteki PBP dosyasına göre yazdım,derledim.Sonuca osiloskop ta baktığımda 0.8 ms= 800 mikrosaniye olaması gereken lojik1 süresinin 1 milisaniyenin üzerinde , 2.4 ms= 2400 mikrosaniye olması gereken lojik 0 süresinin de 3 milisaniye olduğunu gördüm.Şimdi kafam karıştı. PBP de verdiğim süre ile gerçek devredeki süreler neden birbirini tutmuyor.Acaba yazılımda mı hata yapıyorum yoksa gözden kaçırdığım başka bir şey mi var? Yardımlarınız için teşekkür ederim.

ete

Programda yer alan komutlarında bir gecikmesi vardır ve dalga şekline göre zaman zaman etkili olurlar ve beklenen süreleri şaşırtırlar.
Örnek verecek olursak,
portc.5=1
pauseus 800 
portc.5=0
pauseus 2400 
komut diziminde PORTC.5 pinini set etmek için işlemci komut kullanır. Bu komutun asm karşılığında muhtemelen birden fazla komut zinciri bulunur. Bunların toplamı gerçek süreyi değiştirebilir.
Şurası kesindir. Bekleme net 800us dir ancak öncesi ve sonrasındaki komutlar bu süreleri artırırlar.
Bu nedenle ya kesme kullanarak zaman gecikmesi yaratmak yada komut sürelerini göz önüne alarak sürelerle oynamanız gerekir.

Ete

pwm.c

Ek olarak, INTRC_OSC_NOCLKOUT yaptığın için dahili osilatörü kullanmışın. bu RC yapılı olduğundan dolayı  sana tam 4 MHZ vermez. hassas zamanlama istiyorsan kristal kullanmalısın.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

kılıckaya


Powered by EzPortal