Merhaba arkadaşlar,
Arduino ile frekans: 20 khz duty cycle: %50 olan PWM sinyali üretmek istiyorum. Duty cycle ve frekansı nasıl ayarlıyorum.Yardımcı olursanız sevinirim.
http://forum.arduino.cc/index.php?topic=118494.0
http://eleccelerator.com/avr-timer-calculator/
http://playground.arduino.cc/Main/TimerPWMCheatsheet
Teşekkür ederim fakat aşagıdaki kodları kullandığımda osiloskoptan pin 3 ten çıkış sinyalini göremiyorum
void setIrModOutput(){ // sets pin 3 going at the IR modulation rate
pinMode(3, OUTPUT);
TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); // Just enable output on Pin 3 and disable it on Pin 11
TCCR2B = _BV(WGM22) | _BV(CS22);
OCR2A = 51; // defines the frequency 51 = 38.4 KHz, 54 = 36.2 KHz, 58 = 34 KHz, 62 = 32 KHz
OCR2B = 26; // deines the duty cycle - Half the OCR2A value for 50%
TCCR2B = TCCR2B & 0b00111000 | 0x2; // select a prescale value of 8:1 of the system clock
}
void setIrModOutput(void)
{
pinMode(3, OUTPUT);
TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS22);
OCR2A = 99;
OCR2B = 50;
TCCR2B = TCCR2B & 0b00111000 | 0x2;
}
void setup(void)
{
setIrModOutput();
}
void loop(void)
{
}
@mehmet Hocam 3 ayrı pwm kullanmak istediğimizde 3 farklı timer dan mı almamız gerekiyor ? Anladığım kadarı ile duty oranlarında OCR2A yükselirse OCR2B düşüyor dimi. Bende bu şekilde pwm üretmek istiyorum fakat değişken duty oranı ve 3 pwm olacak. Öğrenemedim gitti :)
https://playground.arduino.cc/Main/TimerPWMCheatsheet
https://playground.arduino.cc/Code/PwmFrequency
https://forum.arduino.cc/index.php?topic=355825.0
https://github.com/fizcris/PWM_frequency_Arduino_change
https://arduino-info.wikispaces.com/Arduino-PWM-Frequency
Alıntı yapılan: mehmet - 18 Mayıs 2017, 23:07:27
void setIrModOutput(void)
{
pinMode(3, OUTPUT);
TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS22);
OCR2A = 99;
OCR2B = 50;
TCCR2B = TCCR2B & 0b00111000 | 0x2;
}
void setup(void)
{
setIrModOutput();
}
void loop(void)
{
}
@mehmet yukarı kodları kullandığımda pin 3 çıkışından sinyal alamıyorum sinyalı yazdırmak için kod mu eklemek gerekir yukarıdaki koda
Yazdırmak derken???
(http://www.zimagez.com/miniature/ekrangrnts2017-05-3115-10-02.php)
(http://www.zimagez.com/zimage/ekrangrnts2017-05-3115-10-02.php)
Arduino Mega 2560 kullanıyorum sizin vermiş olduğunuz kodlar ile pin 3 çıkışından osiloskop ile PWM sinyalini göremiyorum. Multimetre ile pin 3 çıkışının gerilimi ölçtüğümde de değer göremiyorum.Çıkış sinyalini alamıyorum.İlginiz için teşekkür ederim.
void setup() {
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM20);
TCCR2B = _BV(CS20);
OCR2A = 90;
OCR2B = 180;
TCCR2B = (TCCR2B & 0xF8) | 0x01 ;
}
void loop() {
// put your main code here, to run repeatedly:
}
yukarıdaki kod ile 30 khz PWM sinyali ürettim fakat osiloskop ile incelediğimde voltaj aralığı 0-5 volt arasında olmuyor eksi değere düşüyor. Osiloskop göruntusu aşağıdaki gibidir.0-5 volt aralığında nasıl üretebilirim.Yardımcı olursanız sevinirim arkadaşlar.
(https://image.ibb.co/nkEina/unnamed_1.jpg)
CH1 gerilim ayarını AC den DC ye
çeviriniz.
Alıntı yapılan: mehmet - 05 Haziran 2017, 11:41:37
CH1 gerilim ayarını AC den DC ye
çeviriniz.
@mehmet Teşekkür ederim düzeldi. Duty cycle oranı %37 olarak görünüyor. Duty cycle oranını OCR2A = 90; OCR2B = 180; den mi ayarlıyoruz. Duty cycle oranını nasıl belirliyoruz.
bu konu çok gizli bir konu değil.
gerekli olduğunda da tekrar baştan araştırmak gerekiyor.
kodları tam yazsanız, forumda ihtiyacı olan kullanır, tekrar gündeme geldiğinde bu konu linki verilir.
30 Khz fazla değilmi 16-20 KHz için kodda nasıl değişiklik yapmak gerek?
Teşekkürler
OCR2B değeri ile.
OCR2B = 130; yaklaşık %50...
Ek:
Hepsi zaten burada...
Sayfanın en alt kısmında aradığın kod açıklamaları detaylı olarak var.
http://sinanbir.com/arduino-timer-kullanimi-kesmeler-avr-8-bit/
OCR2A = 90; //(90+1)/256
OCR2B = 180;//(180+1)/256 duty değerini veriyor.
bunu öğrendim ama register ayarlarının nasıl 30 khz olduğunu çözemedim. 16kHz i 256 ve en az 8 e bölünmek zorunda ve bu kHz değeri vermiyor
nerede yanlış düşünüyorum