PWM ile 400 Hz'lik clock çıkışı

Başlatan fatihvelid, 07 Eylül 2007, 15:00:51

fatihvelid

Merhaba, 18f ile 40 MHz'de PWM kullanarak 400 Hz'lik clock çıkışı almak istiyorum. 4000 Hz' üzerinde clock üretebiliyorum. Ama daha alt seviyelerde 4 Mhz'de ancak üretebildim.

40 MHz'de 400 Hz'lik clock çıkışı PWM ile üretilebilir mi ?
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

buiba

piclerin pwm modulunu kullanmadan,timer kullanarak pwm kullanıyorum,40 mhz'de de timer kesmesini kullanıp uzerınede bır kac register daha saydırırsan ıstedigin hızda pwm elde edersin.

fatihvelid

İşlemciye yük olmasını istemiyorum. PWM donanımını PIC'in ilk çalışması sırasında kurup bir daha işlemcinin bu işlerle uğraşmasını istemiyorum. İŞlemcinin üzerinde çok yük var. Donanımsal olarak halletmem gerekiyor. Yada 555 ile 400hz üretmem gerekecek. Daha az kompanent ile üretmek istiyorum.
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

picusta

Alıntı Yap4000 Hz' üzerinde clock üretebiliyorum. Ama daha alt seviyelerde 4 Mhz'de ancak üretebildim.
Burada bir çeliski veya yazim hatasi var.
Neyse 40MHz'ten 400Hz elde etmek istiyorsun?
O zaman (40*10^6)/(4*10^2) =  100 000 katsayisi ile bölmen gerekiyor.
Bunu nasil yapman gerektigini (veya yapilabilir mi) ancak islemcinin datasheet'ine bakarak anlayabilirsin. Prescaler, Postscaler vs..
400Hz düsük bir frekans aslinda, High level interruptta birkaç komut ile halledebilirsin.

Ziya

Amacın sadece kare dalga mı üretmek? Amacın bu ise ccp modüllerinin compare modunu kullanarak istediğini elde edebilirsin.

Gerçekten pwm modülünü kullanıp görev süresi ile (duty cycle) kontrol yapmak istiyorsan işin zor. 10 bit pwm kullanıp her 16 saat darbesinde bir timer2 yi arttırsan en fazla 16 bin küsür saat darbesi kadar periyot elde edesin. Bu sana yaklaşık 600 Hz lik bir pwm sinyali üretir. Tam olarak 400 Hz nasıl üretebilirsin şu an aklıma bir şey gelmedi.

Belki 800 Hz için gerekli pwm ayarlarını yapıp bir çevrimde periyot full, duty full (gerçi pek tavsiye edilmiyor ama), ikinci çevrime geçmeden duty ayarını değiştirip, ikinci çevrime geçince de periyodu ayarlayarak en fazla 20 bitlik pwm elde edebilirsin. Bu işlemde üçüncü çevrime geçmeden duty full yapılıp, geçince de periyot full ölçeğe ayarlanarak yinelenebilir. Bunu hiç denemedim ve şu an aklıma gelen bir şey. Senin işini görmeyebilir (işlemci yükü açısından) ama başkaları için uygun olabilir.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

fatihvelid

Amacım sadece PIC'ten 400 Hz'lik kare dalga almak. Bunun için PWM!in uygun olduğunu düşünmüştüm. Compare ile nasıl yapabilirim. Extra bir donanım kullanmadan.

Yada 555 ile de üretebilirim. Ama PIC ile yapabileceksem extra kompanent kullanmak istemem. 18F8722'de ECCP var. Yani Enhanced Compare Capture PWM. Henüz bunu kullanmasını bilmiyorum.

Teşekkürler,
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

Ziya

Alıntı yapılan: "fatihvelid"Amacım sadece PIC'ten 400 Hz'lik kare dalga almak. Bunun için PWM!in uygun olduğunu düşünmüştüm. Compare ile nasıl yapabilirim. Extra bir donanım kullanmadan.

Yada 555 ile de üretebilirim. Ama PIC ile yapabileceksem extra kompanent kullanmak istemem. 18F8722'de ECCP var. Yani Enhanced Compare Capture PWM. Henüz bunu kullanmasını bilmiyorum.

Teşekkürler,
40 MHz için

 #device ADC=10, ccs3, high_ints=true
  ...
  #use fixed_io (pin_??)
  #INT_ccp2 HIGH
  void tetikleme()
  { 
    output_toggle(pin_??);
  }
  ...
  setup_ccp2(CCP_COMPARE_RESET_TIMER|CCP_USE_TIMER3);
  CCP_2=12500; // Her 1.25 ms de bir kesme üretir. 
  setup_timer_3(T3_INTERNAL);
  set_timer3(0);
  output_drive(pin_c??);
  enable_interrupts(INT_ccp2);


ECCP ccp2 de. Yalnız analog dönüşüm yapacaksanız her bir interrupta ADC de seçili kanaldan dönüşümü başlatır. Olmazsa CCP1 modülüne aynısını uygularsınız. Her ikisi için de varsayılan timer timer1 dir. timer3 ü kullanmak için yukarıda belirtildiği gibi kullanılması yeterlidir.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

fatihvelid

Teşekkür ederim. Ama C18 için kod lazım.

ECCP için bu bitler(CCP_COMPARE_RESET_TIMER|CCP_USE_TIMER3,) değerlerini 1 yapmam mı gerekiyor.

12500 değerini hangi register'a yüklemem gerekiyor.
CCP_2=12500;
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...

fatihvelid

PWM'i in frekansını kontrol edecek timer'i PIC18F87'de internal clock ile kullanamazmıyız ?
Kainatta her canlı "DNA" diliyle yazılmış bir programdır...