การเข้าผลสมาบัติ#อารมณ์พระนิพพาน#จึงมุ่งสู่พุทธภูมิ#เธออย่าได้กล่าวคำหยา...

<pre>
<span style="color: #7E7E7E;">//&nbsp;&nbsp;motor&nbsp;x5&nbsp;mit&nbsp;ATMEGA&nbsp;2560&nbsp;PWM&nbsp;4KHZ</span>

#include&nbsp;<span style="color: #006699;">"arduino.h"</span> <span style="color: #7E7E7E;">//Store data in flash (program) memory instead of SRAM</span>

#include&nbsp;<span style="color: #006699;">"avr/pgmspace.h"</span>

#include&nbsp;<span style="color: #006699;">"avr/io.h"</span>

&nbsp;&nbsp;&nbsp;<span style="color: #CC6600;">const</span> <span style="color: #CC6600;">byte</span> sine256[] PROGMEM  = {

&nbsp;&nbsp;127,130,133,136,139,143,146,149,152,155,158,161,164,167,170,173,176,178,181,184,187,190,192,195,198,200,203,205,208,210,212,215,217,219,221,223,225,227,229,231,233,234,236,238,239,240,

&nbsp;&nbsp;242,243,244,245,247,248,249,249,250,251,252,252,253,253,253,254,254,254,254,254,254,254,253,253,253,252,252,251,250,249,249,248,247,245,244,243,242,240,239,238,236,234,233,231,229,227,225,223,

&nbsp;&nbsp;221,219,217,215,212,210,208,205,203,200,198,195,192,190,187,184,181,178,176,173,170,167,164,161,158,155,152,149,146,143,139,136,133,130,127,124,121,118,115,111,108,105,102,99,96,93,90,87,84,81,78,

&nbsp;&nbsp;76,73,70,67,64,62,59,56,54,51,49,46,44,42,39,37,35,33,31,29,27,25,23,21,20,18,16,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,16,18,20,21,23,25,27,29,31,

&nbsp;&nbsp;33,35,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,78,81,84,87,90,93,96,99,102,105,108,111,115,118,121,124



};

#define&nbsp;cbi(sfr,&nbsp;<span style="color: #CC6600;">bit</span>) (_SFR_BYTE(sfr) &amp;= ~_BV(<span style="color: #CC6600;">bit</span>)) <span style="color: #7E7E7E;">//define a bit to have the properties of a clear bit operator</span>

#define&nbsp;sbi(sfr,&nbsp;<span style="color: #CC6600;">bit</span>) (_SFR_BYTE(sfr) |= _BV(<span style="color: #CC6600;">bit</span>))<span style="color: #7E7E7E;">//define a bit to have the properties of a set bit operator</span>



<span style="color: #CC6600;">int</span> PWM1=  2;<span style="color: #7E7E7E;">// PWM1 output, phase 1</span>

<span style="color: #CC6600;">int</span> PWM2 = 3; <span style="color: #7E7E7E;">//[WM2 ouput, phase 2</span>

<span style="color: #CC6600;">int</span> PWM3 = 4; <span style="color: #7E7E7E;">//PWM3 output, phase 3</span>



<span style="color: #CC6600;">int</span> PWM4=  5;<span style="color: #7E7E7E;">// PWM1 output, phase 1</span>

<span style="color: #CC6600;">int</span> PWM5 = 6; <span style="color: #7E7E7E;">//[WM2 ouput, phase 2</span>

<span style="color: #CC6600;">int</span> PWM6 = 7; <span style="color: #7E7E7E;">//PWM3 output, phase 3</span>



<span style="color: #CC6600;">int</span> PWM7 = 8;<span style="color: #7E7E7E;">// PWM1 output, phase 1</span>

<span style="color: #CC6600;">int</span> PWM8 = 9; <span style="color: #7E7E7E;">//[WM2 ouput, phase 2</span>

<span style="color: #CC6600;">int</span> PWM9 = 10; <span style="color: #7E7E7E;">//PWM3 output, phase 3</span>



<span style="color: #CC6600;">int</span> PWM10 = 11;<span style="color: #7E7E7E;">// PWM1 output, phase 1</span>

<span style="color: #CC6600;">int</span> PWM11 = 12; <span style="color: #7E7E7E;">//[WM2 ouput, phase 2</span>

<span style="color: #CC6600;">int</span> PWM12 = 13; <span style="color: #7E7E7E;">//PWM3 output, phase 3</span>



<span style="color: #CC6600;">int</span> PWM13 = 44;<span style="color: #7E7E7E;">// PWM1 output, phase 1</span>

<span style="color: #CC6600;">int</span> PWM14 = 45; <span style="color: #7E7E7E;">//[WM2 ouput, phase 2</span>

<span style="color: #CC6600;">int</span> PWM15 = 46; <span style="color: #7E7E7E;">//PWM3 output, phase 3</span>



<span style="color: #CC6600;">int</span> offset_1 = 85; <span style="color: #7E7E7E;">//offset 1 is 120 degrees out of phase with previous phase, Refer to PWM to sine.xls</span>

<span style="color: #CC6600;">int</span> offset_2 = 170; <span style="color: #7E7E7E;">//offset 2 is 120 degrees out of phase with offset 1. Refer to PWM to sine.xls</span>

<span style="color: #CC6600;">int</span> program_exec_time = 52; <span style="color: #7E7E7E;">//monitor how quickly the interrupt trigger</span>

<span style="color: #CC6600;">int</span> ISR_exec_time = 53; <span style="color: #7E7E7E;">//monitor how long the interrupt takes</span>



<span style="color: #CC6600;">double</span> dfreq;

<span style="color: #CC6600;">const</span> <span style="color: #CC6600;">double</span> refclk=31376.6;      <span style="color: #7E7E7E;">// measured output frequency</span>



<span style="color: #7E7E7E;">//&nbsp;variables&nbsp;used&nbsp;inside&nbsp;interrupt&nbsp;service&nbsp;declared&nbsp;as&nbsp;voilatile</span>

volatile&nbsp;<span style="color: #CC6600;">byte</span> current_count;              <span style="color: #7E7E7E;">// Keep track of where the current count is in sine 256 array</span>

volatile&nbsp;<span style="color: #CC6600;">byte</span> ms4_delay;             <span style="color: #7E7E7E;">//variable used to generate a 4ms delay</span>

volatile&nbsp;<span style="color: #CC6600;">byte</span> c4ms;              <span style="color: #7E7E7E;">// after every 4ms this variable is incremented, its used to create a delay of 1 second</span>

volatile&nbsp;<span style="color: #CC6600;">unsigned</span> <span style="color: #CC6600;">long</span> phase_accumulator;   <span style="color: #7E7E7E;">// pahse accumulator</span>

volatile&nbsp;<span style="color: #CC6600;">unsigned</span> <span style="color: #CC6600;">long</span> tword_m;  <span style="color: #7E7E7E;">// dds tuning word m, refer to DDS_calculator (from Martin Nawrath) for explination.</span>



<span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>setup</b></span>()

{

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM1, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM2, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM3, <span style="color: #006699;">OUTPUT</span>);



&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM4, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM5, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM6, <span style="color: #006699;">OUTPUT</span>);  <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM7, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM8, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM9, <span style="color: #006699;">OUTPUT</span>);

&nbsp;&nbsp;

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM10, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM11, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM12, <span style="color: #006699;">OUTPUT</span>);

&nbsp;&nbsp;

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM13, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM14, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(PWM15, <span style="color: #006699;">OUTPUT</span>);

&nbsp;&nbsp;

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(50, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(52, <span style="color: #006699;">OUTPUT</span>);      <span style="color: #7E7E7E;">//sets the digital pin as output</span>

&nbsp;&nbsp;<span style="color: #CC6600;">pinMode</span>(53, <span style="color: #006699;">OUTPUT</span>);

&nbsp;&nbsp;

&nbsp;&nbsp;

&nbsp;&nbsp;sbi(PORTB,program_exec_time);&nbsp;<span style="color: #7E7E7E;">//Sets the pin</span>

&nbsp;&nbsp;

&nbsp;&nbsp;Setup_timer0();

&nbsp;&nbsp;Setup_timer1();

&nbsp;&nbsp;Setup_timer2();

&nbsp;&nbsp;Setup_timer3();

&nbsp;&nbsp;Setup_timer4();

&nbsp;&nbsp;Setup_timer5();

&nbsp;&nbsp;<span style="color: #7E7E7E;">//Disable Timer 1 interrupt to avoid any timing delays</span>

&nbsp;&nbsp;cbi&nbsp;(TIMSK0,TOIE0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//disable Timer0 !!! delay() is now not available</span>

&nbsp;&nbsp;sbi&nbsp;(TIMSK2,TOIE2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//enable Timer2 Interrupt</span>

&nbsp;&nbsp;

&nbsp;&nbsp;

&nbsp;&nbsp;tword_m=pow(2,32)*dfreq/refclk;&nbsp;&nbsp;<span style="color: #7E7E7E;">//calulate DDS new tuning word </span>



}







&nbsp;&nbsp;

&nbsp;



<span style="color: #CC6600;">void</span> <span style="color: #CC6600;"><b>loop</b></span>()

{

&nbsp;&nbsp;<span style="color: #CC6600;">while</span>(1) 

&nbsp;&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbi(PORTB,program_exec_time);&nbsp;<span style="color: #7E7E7E;">//Sets the pin </span>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #CC6600;">if</span> (c4ms &gt; 0) <span style="color: #7E7E7E;">// c4ms = 4ms, thus 4ms *250 = 1 second delay</span>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c4ms=0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//Reset c4ms</span>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//dfreq=map(analogRead(0),0,1230,0,1000);</span>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dfreq=<span style="color: #CC6600;">map</span>(<span style="color: #CC6600;">analogRead</span>(0),0,1023,0,1000);             <span style="color: #7E7E7E;">//Read voltage on analog 1 to see desired output frequency, 0V = 0Hz, 5V = 1.023kHz</span>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cbi&nbsp;(TIMSK2,TOIE2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//Disable Timer2 Interrupt</span>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tword_m=pow(2,32)*dfreq/refclk;&nbsp;&nbsp;<span style="color: #7E7E7E;">//Calulate DDS new tuning word</span>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sbi&nbsp;(TIMSK2,TOIE2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//Enable Timer2 Interrupt </span>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;}

}



<span style="color: #CC6600;">void</span> Setup_timer0(<span style="color: #CC6600;">void</span>)

{

&nbsp;&nbsp;

&nbsp;&nbsp;

&nbsp;&nbsp;TCCR0B&nbsp;=&nbsp;(TCCR0B&nbsp;&amp;&nbsp;0b11111000)&nbsp;|&nbsp;0x02;

&nbsp;&nbsp;<span style="color: #7E7E7E;">// Timer1 PWM Mode set to Phase Correct PWM</span>

&nbsp;&nbsp;cbi&nbsp;(TCCR0A,&nbsp;COM0A0);

&nbsp;&nbsp;sbi&nbsp;(TCCR0A,&nbsp;COM0A1);

&nbsp;&nbsp;cbi&nbsp;(TCCR0A,&nbsp;COM0B0);&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR0A,&nbsp;COM0B1);



&nbsp;&nbsp;<span style="color: #7E7E7E;">// Mode 1 / Phase Correct PWM</span>

&nbsp;&nbsp;sbi&nbsp;(TCCR0A,&nbsp;WGM00);&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR0A,&nbsp;WGM01);

&nbsp;&nbsp;

}



<span style="color: #CC6600;">void</span> Setup_timer1(<span style="color: #CC6600;">void</span>)

{

&nbsp;&nbsp;

&nbsp;TCCR1B&nbsp;=&nbsp;(TCCR1B&nbsp;&amp;&nbsp;0b11111000)&nbsp;|0x02;

&nbsp;&nbsp;<span style="color: #7E7E7E;">// Timer1 Clock Prescaler to : 8</span>

&nbsp;&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR1A,&nbsp;COM1A0);

&nbsp;&nbsp;sbi&nbsp;(TCCR1A,&nbsp;COM1A1);

&nbsp;&nbsp;cbi&nbsp;(TCCR1A,&nbsp;COM1B0);&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR1A,&nbsp;COM1B1);



&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR1A,&nbsp;WGM10);&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR1A,&nbsp;WGM11);

&nbsp;&nbsp;cbi&nbsp;(TCCR1B,&nbsp;WGM12);

&nbsp;&nbsp;cbi&nbsp;(TCCR1B,&nbsp;WGM13);

}





<span style="color: #CC6600;">void</span> Setup_timer2() 

{

&nbsp;&nbsp;

&nbsp;&nbsp;TCCR2B&nbsp;=&nbsp;(TCCR2B&nbsp;&amp;&nbsp;0b11111000)&nbsp;|&nbsp;0x02;<span style="color: #7E7E7E;">// Timer2 Clock Prescaler to : 8</span>

&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR2A,&nbsp;COM2A0);&nbsp;&nbsp;<span style="color: #7E7E7E;">// clear Compare Match</span>

&nbsp;&nbsp;sbi&nbsp;(TCCR2A,&nbsp;COM2A1);

&nbsp;&nbsp;cbi&nbsp;(TCCR2A,&nbsp;COM2B0);&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR2A,&nbsp;COM2B1);

&nbsp;&nbsp;

&nbsp;&nbsp;<span style="color: #7E7E7E;">// Mode 1  / Phase Correct PWM</span>

&nbsp;&nbsp;sbi&nbsp;(TCCR2A,&nbsp;WGM20);&nbsp;&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR2A,&nbsp;WGM21);

&nbsp;&nbsp;cbi&nbsp;(TCCR2B,&nbsp;WGM22);

}

<span style="color: #CC6600;">void</span> Setup_timer3(<span style="color: #CC6600;">void</span>)

{

&nbsp;&nbsp;

&nbsp;&nbsp;

&nbsp;TCCR3B&nbsp;=&nbsp;(TCCR3B&nbsp;&amp;&nbsp;0b11111000)&nbsp;|0x02;<span style="color: #7E7E7E;">// Timer1 Clock Prescaler to : 8</span>

&nbsp;&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR3A,&nbsp;COM3A0);

&nbsp;&nbsp;sbi&nbsp;(TCCR3A,&nbsp;COM3A1);

&nbsp;&nbsp;cbi&nbsp;(TCCR3A,&nbsp;COM3B0);&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR3A,&nbsp;COM3B1);

&nbsp;&nbsp;cbi&nbsp;(TCCR3A,&nbsp;COM3C0);&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR3A,&nbsp;COM3C1);



&nbsp;&nbsp;<span style="color: #7E7E7E;">// Mode 1 / Phase Correct PWM</span>

&nbsp;&nbsp;sbi&nbsp;(TCCR3A,&nbsp;WGM30);&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR3A,&nbsp;WGM31);

&nbsp;&nbsp;cbi&nbsp;(TCCR3B,&nbsp;WGM32);

&nbsp;&nbsp;cbi&nbsp;(TCCR3B,&nbsp;WGM33);

&nbsp;&nbsp;cbi&nbsp;(TCCR3C,&nbsp;WGM33);

&nbsp;&nbsp;cbi&nbsp;(TCCR3C,&nbsp;WGM33);

}





<span style="color: #CC6600;">void</span> Setup_timer4() 

{

&nbsp;&nbsp;

TCCR4B&nbsp;=&nbsp;(TCCR4B&nbsp;&amp;&nbsp;0b11111000)&nbsp;|&nbsp;0x02;<span style="color: #7E7E7E;">// Timer2 Clock Prescaler to : 8</span>

&nbsp;&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR4A,&nbsp;COM4A0);&nbsp;&nbsp;<span style="color: #7E7E7E;">// clear Compare Match</span>

&nbsp;&nbsp;sbi&nbsp;(TCCR4A,&nbsp;COM4A1);

&nbsp;&nbsp;cbi&nbsp;(TCCR4A,&nbsp;COM4B0);&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR4A,&nbsp;COM4B1);

&nbsp;&nbsp;cbi&nbsp;(TCCR4A,&nbsp;COM4C0);&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR4A,&nbsp;COM4C1);

&nbsp;&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR4A,&nbsp;WGM40);&nbsp;&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR4A,&nbsp;WGM41);

&nbsp;&nbsp;cbi&nbsp;(TCCR4B,&nbsp;WGM42);

&nbsp;&nbsp;cbi&nbsp;(TCCR4C,&nbsp;WGM43);

&nbsp;&nbsp;cbi&nbsp;(TCCR4C,&nbsp;WGM43);



}



<span style="color: #CC6600;">void</span> Setup_timer5(<span style="color: #CC6600;">void</span>)

{

&nbsp;&nbsp;

TCCR5B&nbsp;=&nbsp;(TCCR5B&nbsp;&amp;&nbsp;0b11111000)&nbsp;|0x02;<span style="color: #7E7E7E;">// Timer1 Clock Prescaler to : 8</span>

&nbsp;&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR5A,&nbsp;COM5A0);

&nbsp;&nbsp;sbi&nbsp;(TCCR5A,&nbsp;COM5A1);

&nbsp;&nbsp;cbi&nbsp;(TCCR5A,&nbsp;COM5B0);&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR5A,&nbsp;COM5B1);

&nbsp;&nbsp;cbi&nbsp;(TCCR5A,&nbsp;COM5C0);&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR5A,&nbsp;COM5C1);



&nbsp;&nbsp;

&nbsp;&nbsp;sbi&nbsp;(TCCR5A,&nbsp;WGM50);&nbsp;

&nbsp;&nbsp;cbi&nbsp;(TCCR5A,&nbsp;WGM51);

&nbsp;&nbsp;cbi&nbsp;(TCCR5B,&nbsp;WGM52);

&nbsp;&nbsp;cbi&nbsp;(TCCR5B,&nbsp;WGM53);

&nbsp;&nbsp;cbi&nbsp;(TCCR5C,&nbsp;WGM50);

}





ISR(TIMER2_OVF_vect)

{

&nbsp;&nbsp;cbi(PORTD,program_exec_time);&nbsp;<span style="color: #7E7E7E;">//Clear the pin</span>

&nbsp;&nbsp;sbi(PORTD,ISR_exec_time);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">// Sets the pin</span>



&nbsp;&nbsp;phase_accumulator=phase_accumulator+tword_m;&nbsp;<span style="color: #7E7E7E;">//Adds tuning M word to previoud phase accumulator. refer to DDS_calculator (from Martin Nawrath) for explination.</span>

&nbsp;&nbsp;current_count=phase_accumulator&nbsp;&gt;&gt;&nbsp;24;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">// use upper 8 bits of phase_accumulator as frequency information                      </span>

&nbsp;&nbsp;<span style="color: #7E7E7E;">//motor 1</span>

&nbsp;&nbsp;OCR3B&nbsp;=&nbsp;pgm_read_byte_near(sine256&nbsp;+&nbsp;current_count);&nbsp;<span style="color: #7E7E7E;">// read value fron ROM sine table and send to PWM</span>

&nbsp;&nbsp;OCR3C&nbsp;=&nbsp;pgm_read_byte_near(sine256&nbsp;+&nbsp;(uint8_t)(current_count&nbsp;+&nbsp;offset_1));&nbsp;<span style="color: #7E7E7E;">// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM1</span>

&nbsp;&nbsp;OCR0B&nbsp;=&nbsp;pgm_read_byte_near(sine256&nbsp;+&nbsp;(uint8_t)(current_count&nbsp;+&nbsp;offset_2));<span style="color: #7E7E7E;">// read value fron ROM sine table and send to PWM, 120 Degree out of phase of PWM2</span>

&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//motor 2</span>

&nbsp;&nbsp;OCR3A&nbsp;=&nbsp;OCR3B;

&nbsp;&nbsp;OCR4A&nbsp;=&nbsp;OCR3C;

&nbsp;&nbsp;OCR4B&nbsp;=&nbsp;OCR0B;

&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//motor 3</span>

&nbsp;&nbsp;OCR4C&nbsp;=&nbsp;OCR3B;&nbsp;

&nbsp;&nbsp;OCR2B&nbsp;=&nbsp;OCR3C;

&nbsp;&nbsp;OCR2A&nbsp;=&nbsp;OCR0B;

&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//motor 4</span>

&nbsp;&nbsp;OCR1A&nbsp;=&nbsp;OCR3B;&nbsp;

&nbsp;&nbsp;OCR1B&nbsp;=&nbsp;OCR3C;

&nbsp;&nbsp;OCR0A&nbsp;=&nbsp;OCR0B;

&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//motor 5</span>

&nbsp;&nbsp;OCR5A&nbsp;=&nbsp;OCR3B;&nbsp;

&nbsp;&nbsp;OCR5B&nbsp;=&nbsp;OCR3C;

&nbsp;&nbsp;OCR5C&nbsp;=&nbsp;OCR0B;

&nbsp;&nbsp;

&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//increment variable ms4_delay every 4mS/125 =  milliseconds 32uS</span>

&nbsp;&nbsp;<span style="color: #CC6600;">if</span>(ms4_delay++ == 125)

&nbsp;&nbsp;

&nbsp;&nbsp;{&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;c4ms++;

&nbsp;&nbsp;&nbsp;&nbsp;ms4_delay=0;&nbsp;<span style="color: #7E7E7E;">//reset count</span>

&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;



cbi(PORTD,ISR_exec_time);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #7E7E7E;">//Clear the pin</span>

}

</pre>

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

พุทธัง สะระณัง คัจฉามิ