Timer kesmesi ve pulse uretme

Başlatan Franisto, 18 Aralık 2017, 23:02:09

Franisto

Merhaba arkadaslar,

Arduino ide ile arduino mega programliyorum. Hazirladigim programda step motor surmek icin pulse kullaniyorum ve bunu  ana program akisini etkilememesi icin timer kesmesi icerisinde olusturuyorum. Ayrica motorun hizini degistirmek icin timer registerleri ile oynayarakn
istedigim degerleri elde ediyorum.

Fakat takildigim nokta soyle her timer dongusu icerisinde bir pulse uretmek istiyorum. Cikisi 1 yaptiktan sonra hemen 0 yaparsam uretilen pulse nin 1 ve 0 sureleri esit olmuyor.

Eger her timer dongusunde cikisin tersini alirsam;

Out =!Out;
digitalWrite(out_pin,Out);

Gibi 180 derece yada baska bir deyisle %50 duty cucle pulse uretebiliyorum. Fakat bu seferde bir pulse uretmek timer dongusunun iki defa donmesi gerekiyor.

Her timer dongusunde %50 duty ile pulse uretmenin yolu varmidir.

Her timer tik i icin ;

digitalWrite(out_pin,HIGH);
delay(xsure);
digitalWrite(out_pin,LOW);
delay(xsure);

gibi bir kod yazsam sureleri oyanayarak istedigimi yakalasamda timer frekansini degistirince sureler sabit oldugu icin yine duzgun dagilimli pulse uretmemis oluyorum.

Bir kaynakta Bu sorunu asmak icin 2 adet timer kullanilmasi gerektigini yazmislar fakat daha fazla aciklama yapilmamis. Konu hakkinda yardiminizi rica ediyorum.


Kabil ATICI

#1
Bir timer kesme süresinde tam dalga üretmeye çalışmak yerine,
frekansı tam iki katına çıkart. bir timer kesmesinde 1 veya 0 yap.  Bir tane global değişken kullanıyorsun.
uint8_t darbe=0;

...
...
kesme();
{
if  (darbe==0)
{
darbe=0;
digitalWrite(out_pin,LOW);
}
else{
darbe=1;
digitalWrite(out_pin,HIGH);
}
}


--------
diğer yöntemin veri kağıtlarında incelersen CTC seçeneğidir. Özellikle timer bacaklarına bağlı çıkış bacakları üzerinden istediğin %50 darbe genişlikli sinyaller elde edebilirsin.
ambar7

fide

Merhaba.
Donanımsal pwm kullan. frekansı ayarla. frekansı tutturursan %50 duty ver. işlemciyi yormazsın.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

Franisto

Yanitiniz icin tesekkur ederim. Frekansi yukseltmek istoyrum ama yukselmiyor. :) 40 khz uzerine bu yontemle cikamadim. Timer i daha hizli calistirsamda osilaskop ile 40khz civarinda kaldigini goruyorum ana program dongusude yavaslamaya basliyor.

Fakat her timer kesmesinde bir pulse uretirsem sorum olmuyor ama bu sefer tam kare dalgayi yakalayamiyorum.

Bu ctc konusunu biraz arastirmam gerek sanirim

Franisto

Donanimsal pwm denemedim. Ama deneyecegim fikir icin tesekkurler.