www.diyaudiovillage.net
INTRODUCTIONS เสวนาภาษาพี่น้อง => เสวนาภาษาพี่น้อง => ข้อความที่เริ่มโดย: วัยรุ่นเลบานอน? ที่ 06 มกราคม 2012, 03:49:23 AM
-
ขอนอกเรื่องDiy นิดนึงครับ น้า ท่านใดเก่ง MCU รบกวนถามนิดครับ ใน Arduino ปรับ PWM ที่ความถี่ 10Khz ยังไงครับ ผม
-
เรื่องความถี่ ของเดิมเค้ากำหนดค่า reload กับโหมดเบื้องต้นจาก library แล้ว
ถ้าจะเปลี่ยนความถี่ ให้ใช้วิธีเขียนเข้าถึงรีจิสเตอร์กลุ่มไทเมอร์ตัวที่คุมขา OCxx ในโปรแกรมครับ หรือลองขุด-แกะ library ใน hardware->arduino->cores->arduino->wiring_analog.c กับ wiring.c มาดูก็ได้ [gr_in]
-
อ่าส์ ขอบคุณมากครับ
How to adjust Arduino PWM frequencies
Pins 5 and 6:
Setting Divisor Frequency
0x01 1 62500
0x02 8 7812.5
0x03 64 976.5625
0x04 256 244.140625
0x05 1024 61.03515625
TCCR0B = TCCR0B & 0b11111000 | <setting>;
Pins 9 and 10:
Setting Divisor Frequency
0x01 1 31250
0x02 8 3906.25
0x03 64 488.28125
0x04 256 122.0703125
0x05 1024 30.517578125
TCCR1B = TCCR1B & 0b11111000 | <setting>;
Pins 11 and 3:
Setting Divisor Frequency
0x01 1 31250
0x02 8 3906.25
0x03 32 976.5625
0x04 64 488.28125
0x05 128 244.140625
0x06 256 122.0703125
0x07 1024 30.517578125
TCCR2B = TCCR2B & 0b11111000 | <setting>;
ดูพี่หรั่ง เขามีเเนวทางมาอย่างนี้ เทสเเล้วโอเคเลย เเต่ที่มาของวิธีการคิดนี่ [phok]
-
555 ปวดหัวกับมัน มาสองวัน เต็ม ๆ เเละคาดว่าจะต้องอยู่กันมันอีกนาน AVR+arduino ลอง ดูได้ครับ อัพไฟล์ มาให้เเล้ว>>> Powered By พี่น๊อตEE (http://www.4shared.com/rar/9TOlB-lx/Timer.html)
เป็นไฟล์ datasheet , timer0-2 A,B
#include <avr/io.h>
//int outputValue = 0;
//-----------------------------------------------------------------------------
// Initialize Timer/Counter0 for PWM
//-----------------------------------------------------------------------------
int val;
void setup()
{
pinMode(0,INPUT);
Serial.begin(9600);
// DDRB |= _BV(PB2);
TCCR1A = 0b10100011;
TCCR1B = 0b00010001;
OCR1A=800; // อ้างอิงสมการ f=(systemclock)/2N*OCR1A
// TCCR2A = 0b00010001;
//TCCR2B = 0b00001001;
//OCR2A=200;
//OCR1B=128;
}
//-----------------------------------------------------------------------------
// Main
//-----------------------------------------------------------------------------
void loop()
{
//TCCR1A = 0b10100011;
// TCCR1B = 0b00010001;
// OCR1A=128;
int val=analogRead(0);
val=map(val,0,1023,0,800);
analogWrite(10,val);
//analogWrite(3,100);
delay(50);
Serial.println(val);
}
เป้นเเนวทางคร่าวๆ
ปล.ผมไม่ได้เก่งอะไรนะครับ เห็นว่ามันน่าจะมีประโยชน์ต่อคนที่ต้องการใช้งาน(เห็นพี่หรั่งถามกันยันเลย ไม่ค่อยมีคนตอบเเบบตรงๆกันเท่าไหร่) ไฟล์ ต้นฉบับได้มาจากรุ่นพี่คนหนึ่งชื่อพี่น็อตครับ ขอขอบคุณมา ณ ที่นี้ด้วย ขอบคุณครับ [res]