timer2 16f877a

cosef_07

Üye
Katılım
27 Eyl 2011
Mesajlar
89
Puanları
1
Yaş
31
Merhaba arkadaşlar ben 16f877a timer2 ile motor hız kontrolu yapacagım ancak tımer2 kesmesını de aynı zamanda kullanmak ıstıyorum bunun bır yolu varmıdır yoksa içinde yenı bır kesme mı tanımlamalıyım
 
Maalesef PWM kullanacaksan timer2 yi ayrıca zamanlayıcı kesme olarak kullanamazsın diğer timerları kullanman gerekiyor..
 
0.05 an icin nasil yapabilirim

KontrolKalemi Mobile ile gönderildi.
 
0.05 an de kesme için kullanacağın işlemci, timer birimi, kulanacağın kristal degeri gerekli.

timerler belirtilen rakamdan itibaren yukarı doğru sayarlar. bazı timerler belirtilen rakamdan yukarı doğru sayarken bazıları da 0 dan baslar belirtilen rakama kadar sayarlar. (komutlar her 4
kristal sinyalinde 1 gerçekleşir. yani 4 mhz lik bir kristalin hızı saniyede 1milyon işlemdir. sayma işlemine birde bölme oranı ekleyebilirsin. yani her 1 saniyede 1 milyon yerine 500 bin saymada yaptırabilirsin yada başka bir bölme oranıyla başka değer.) en yüksek değere ulaşınca içeriğini sıfırlar ve kesme bayrağını kaldırır. yani kesme oluşur. kesme de tekrar aynı sürede kesme oluşması için timer i tekrar aynı sayıda kurman gerekir ve kesme bayrağını sıfırlaman gerekir..

genel bir formul olarak :


kesme oluşma süresi= (1/(kristal_degeri/4)) * (timerx_bolme_orani) * (timerx_max_degeri - timere_e_yazilacak_deger)

4000000 hz kristal, 16 bit timer 1 için.

0,05=(1/1000000) * (1) * (65536-x)

0,05=(0,000001) *
(65536-x)

50000=
(65536-x)

x=15536

timer 1 , 15536 dan başlayacak şekilde kurarsan 0,05 sn de kesme oluşturur.

kullandığın proğramlama dilini bilmediğim için ...

kolay gelsin
 
Kardeş Allah razi olsun çok yararlı oldu 8 veya 10 bit içinde son değer yerini koyucaz sanirim
Işlemci 16f877a 10 bit icin 1022 peki bu bit sayısını nereden bakicaz adc 10 bit olarak kullanıyorum oda var aynı anda

KontrolKalemi Mobile ile gönderildi.
 
(lütfen kullandığınız proğramlama dilini ve yapmak istediğiniz işlemi açık bir şekilde belirtirseniz daha fazla yardımcı olabiliriz.)

ccsc için.
yazdığın işlemci yerine imleci getir sağ tık ve dosyayı aç de. "open file at cursor" işlemci için kullanabileceğin bilgileri elde edersin.
işlemcinin hemen altına kaç bitlik kullanacağını belirtebilirsin. assemply için direk işlemcinin bilgi sayfasına "data sheet" bakman gerekiyor.


#include <16f877a.h>
#device adc=10



yapmak istediğin. pot ile motor hız kontrolümü?


evetse; encoder gibi bi geri besleme olması gerekiyormu?(hızı/gücü kararlı ve sabit tutmak için)

pot ile pwm ayarı ise.(yani adc den gelen degere göre pwm belirlemek se.)

1 adc nin kaç duty e denk geldiği hesaplanır.

maximum adc = 1000;
maximum pwm_duty= 500;

varsayarsak; 1000 adc 500 duty ise.
1 adc 0,5 duty denkleminden.

pwm_degeri=(okunan_adc_deger) *0,5;
set_pwm1_duty((int 16) pwm_degeri);




kolay gelsin.
 

Forum istatistikleri

Konular
128,380
Mesajlar
917,134
Kullanıcılar
450,261
Son üye
frappuccinot

Yeni konular

Geri
Üst