pwm sinyaline pulse saydırma

isoment01

Üye
Katılım
26 Haz 2016
Mesajlar
197
Puanları
1
Yaş
31
arkadaşlar merhaba, pwm sinyaline nasıl pulse saydırabilirim ? aklıma şöyle bir şey geliyor olabilitesi denedim fakat olmadı . 400hz lik bir pwm sinyali üretiyorum ve bunun 8 sn sürmesini istersem bunu bir timer kullanarak halledebebilir miyim ? denedim fakat timerım hiç calısmıyor.
 
evet saydırabilirsinde yapıp çalıştıramadıgın devre şeması ve kodlarını eklersen daha iyi yardımcı olabiliriz
timer yerine birtane 32 bitlik integer tanımla ve pwmdeki açık kalma süresi ve kapalı kalma süresinin toplamını 8 dakikaya böl çıkan sayıyı 32 bitlik integera kaydek sonrada bu sayı kadar for döngüsünde pwm palsi üret
 
evet saydırabilirsinde yapıp çalıştıramadıgın devre şeması ve kodlarını eklersen daha iyi yardımcı olabiliriz
timer yerine birtane 32 bitlik integer tanımla ve pwmdeki açık kalma süresi ve kapalı kalma süresinin toplamını 8 dakikaya böl çıkan sayıyı 32 bitlik integera kaydek sonrada bu sayı kadar for döngüsünde pwm palsi üret
Kod:
#device PIC18F4680
#include <18f4680.h>
#fuses xt,nowdt,noprotect, nobrownout, nolvp, noput, nowrt, nocpd
#use delay (clock=4000000)
#use fast_io(c)
unsigned int16 sayac = 0, hedef = 0;
int i;

void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_timer_2(T2_DIV_BY_16,155,1);      //16,0 us overflow, 16,0 us interrupt
setup_ccp1(CCP_PWM);
set_pwm1_duty(i);
set_tris_c(0x00);
output_c(0x00);
while(1)
{
hedef=80; //400*8
sayac=0;
do
{

i=155;
output_high(pin_c3);// motor aktif
delay_ms(100);
output_low(pin_c1);// motor yönü belirlendi
delay_us(50);
sayac++;
 set_pwm1_duty(i);
}while(sayac<=hedef);
i=0;
set_pwm1_duty(i);
hedef=80; //400*8
sayac=0;
do
{

i=155;
output_high(pin_c3);// motor aktif
delay_ms(100);
output_high(pin_c1);// motor yönü belirlendi
delay_us(50);
sayac++;
 set_pwm1_duty(i);
}while(sayac<=hedef);
i=0;
set_pwm1_duty(i);

}
}
hocam normalde bu işlemi timer ayarlayıp timerı 8 sn calıstırıp bu sırada pulse verdirip hatta ıkı sn bekleme yapıp tekrar calısıtırarak yaptım fakat canım cıktı cunku timer kullanmak bana zor gelıyor. pwm daha kullanıslı gıbı . Şimdi bakın ben kodda 0 ile 80 arasında saydırmısım nerden cıktı bılıyor musunuz ? deneme yanılma :D baktım 0-80 arasın 8 sn oluyo oyle yaptım. mantıgı nedır bılmıyorum. programram buyudukce bu bana sıkıntı olur mu bılmıyorum. birde ben bunu tımer ınterruptı ıle yapmadım bu yuzden picım sadece bu ıslemı mı yapar ? baska seyler yaptırabılır mıyım ?

Ve özür dileyerek söyluyorum hesabınızı hıc anlamadım hocam.
 
Kod:
#device PIC18F4680
#include <18f4680.h>
#fuses xt,nowdt,noprotect, nobrownout, nolvp, noput, nowrt, nocpd
#use delay (clock=4000000)
#use fast_io(c)
unsigned int16 sayac = 0, hedef = 0;
int i;

void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_timer_2(T2_DIV_BY_16,155,1);      //16,0 us overflow, 16,0 us interrupt
setup_ccp1(CCP_PWM);
set_pwm1_duty(i);
set_tris_c(0x00);
output_c(0x00);
while(1)
{
hedef=80; //400*8
sayac=0;
do
{

i=155;
output_high(pin_c3);// motor aktif
delay_ms(100);
output_low(pin_c1);// motor yönü belirlendi
delay_us(50);
sayac++;
 set_pwm1_duty(i);
}while(sayac<=hedef);
i=0;
set_pwm1_duty(i);
hedef=80; //400*8
sayac=0;
do
{

i=155;
output_high(pin_c3);// motor aktif
delay_ms(100);
output_high(pin_c1);// motor yönü belirlendi
delay_us(50);
sayac++;
 set_pwm1_duty(i);
}while(sayac<=hedef);
i=0;
set_pwm1_duty(i);

}
}
hocam normalde bu işlemi timer ayarlayıp timerı 8 sn calıstırıp bu sırada pulse verdirip hatta ıkı sn bekleme yapıp tekrar calısıtırarak yaptım fakat canım cıktı cunku timer kullanmak bana zor gelıyor. pwm daha kullanıslı gıbı . Şimdi bakın ben kodda 0 ile 80 arasında saydırmısım nerden cıktı bılıyor musunuz ? deneme yanılma :D baktım 0-80 arasın 8 sn oluyo oyle yaptım. mantıgı nedır bılmıyorum. programram buyudukce bu bana sıkıntı olur mu bılmıyorum. birde ben bunu tımer ınterruptı ıle yapmadım bu yuzden picım sadece bu ıslemı mı yapar ? baska seyler yaptırabılır mıyım ?

Ve özür dileyerek söyluyorum hesabınızı hıc anlamadım hocam.
yaptığım hesabı basit bir şekilde şöyle söyleyim 8 snde kaç pals atıyor onu hesapla ve for döngüsüyle pinleri on-off yaparak programı yaz bunun için 18f kullanmışsın 12flik bir picle bile yapılabilir benden demesi
 
yaptığım hesabı basit bir şekilde şöyle söyleyim 8 snde kaç pals atıyor onu hesapla ve for döngüsüyle pinleri on-off yaparak programı yaz bunun için 18f kullanmışsın 12flik bir picle bile yapılabilir benden demesi
hmm 8 sn de 3200 adım atıyor fakat buna gore pinleri on off yaptırırsam bu sefer picke baska seyler yaptıramam kı haksız mıyım ?
 
hmm 8 sn de 3200 adım atıyor fakat buna gore pinleri on off yaptırırsam bu sefer picke baska seyler yaptıramam kı haksız mıyım ?
ne mesela ben bir projemde bu şekilde pals üretirken adc okuyup button kontrolü yapmıştım sen napmak istiorsun
 
ne mesela ben bir projemde bu şekilde pals üretirken adc okuyup button kontrolü yapmıştım sen napmak istiorsun
gsm/gprs ile tcp/ıp kullanarak uzaktan kontrol ? amacım o , motoru bu sekılde kontrol etmek ıstıyorm.
 
eger o 8 saniyelik periyotun içinde müdahale edilmiycekse olabilir ama tam bilmiyroum diger türlü olurmu
 

Forum istatistikleri

Konular
128,158
Mesajlar
915,531
Kullanıcılar
449,906
Son üye
maniacrelax

Yeni konular

Geri
Üst