www.diyaudiovillage.net

INTRODUCTIONS เสวนาภาษาพี่น้อง => เสวนาภาษาพี่น้อง => ข้อความที่เริ่มโดย: วัยรุ่นเลบานอน? ที่ 06 มกราคม 2012, 03:49:23 AM

หัวข้อ: นอกเรื่องDiy นิดครับ สงสัยเรื่อง Arduino
เริ่มหัวข้อโดย: วัยรุ่นเลบานอน? ที่ 06 มกราคม 2012, 03:49:23 AM
ขอนอกเรื่องDiy นิดนึงครับ น้า ท่านใดเก่ง  MCU รบกวนถามนิดครับ ใน Arduino ปรับ PWM ที่ความถี่ 10Khz ยังไงครับ ผม
หัวข้อ: Re: นอกเรื่องDiy นิดครับ สงสัยเรื่อง Arduino
เริ่มหัวข้อโดย: audiomania ที่ 06 มกราคม 2012, 08:50:16 AM
เรื่องความถี่ ของเดิมเค้ากำหนดค่า reload  กับโหมดเบื้องต้นจาก library แล้ว
ถ้าจะเปลี่ยนความถี่ ให้ใช้วิธีเขียนเข้าถึงรีจิสเตอร์กลุ่มไทเมอร์ตัวที่คุมขา OCxx ในโปรแกรมครับ หรือลองขุด-แกะ library ใน hardware->arduino->cores->arduino->wiring_analog.c กับ wiring.c มาดูก็ได้ [gr_in]
หัวข้อ: Re: นอกเรื่องDiy นิดครับ สงสัยเรื่อง Arduino
เริ่มหัวข้อโดย: วัยรุ่นเลบานอน? ที่ 06 มกราคม 2012, 09:38:05 AM
อ่าส์ ขอบคุณมากครับ
อ้างถึง
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]
หัวข้อ: Re: นอกเรื่องDiy นิดครับ สงสัยเรื่อง Arduino
เริ่มหัวข้อโดย: วัยรุ่นเลบานอน? ที่ 07 มกราคม 2012, 03:22:53 AM
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]