Hello friends,
To do sinusoidal modulation you need sine wave which can be compared with high frequency carrier(triangular waves). And i was also about to generate Sine modulation so i needed to do this.
You can generate by calculating sine values at run time also but that is time consuming and keeps your microcontroller busy with calculations only, so I suggest you to make a look up table and recall the value at run time from there.
So here is what I have done its a simple task just have a look at the code,....
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
But,here instead of using normal DAC to generate sine wave I have here used R-2R ladder(no specific reason).
Here is the schematic.
Here VSM Timer counter is used to measure the frequency generated by R-2R DAC.
The output of the circuit is as shown below..
if you want to make frequency variable just keep a variable in delay and update it by any key.....
For more Proteus projects click here.
To do sinusoidal modulation you need sine wave which can be compared with high frequency carrier(triangular waves). And i was also about to generate Sine modulation so i needed to do this.
You can generate by calculating sine values at run time also but that is time consuming and keeps your microcontroller busy with calculations only, so I suggest you to make a look up table and recall the value at run time from there.
So here is what I have done its a simple task just have a look at the code,....
///////////////////////////////////////////////////////////
#include "pic .h
#include "htc .h"
#define _XTAL_FREQ 4000000
const unsigned char wave[181]
={128,132,137,141,146,150,155,159,163,168,172,176,180,184,188,192,196,200,203,207,210
,214,217,220,223,226,229,232,234,237,239,241,243,245,247,248,250,251,252,253,254,254,
255,255,255,255,255,255,255,255,254,253,252,251,250,248,247,245,243,241,239,237,234,
232,229,226,223,220,217,214,210,207,203,200,196,192,188,184,180,176,172,168,163,
159,155,150,146,141,137,132,128,124,119,115,110,106,101,97,93,88,84,80,76,72,68,64,
60,56,53,49,46,42,39,36,33,30,27,24,22,19,17,15,13,11,9,8,6,5,4,3,2,1,1,0,0,0,0,0,1
,1,2,3,4,5,6,8,9,11,13,15,17,19,22,24,27,30,33,36,39,42,46,49,53,56,60,64,68,72,76,
80,84,88,93,97,101,106,110,115,119,124,128};
int main(void)
{
TRISD = 0x00;
unsigned char i;
for(i=0;i<181 ;i++)
{
PORTD = wave[i];
__delay_us(79);
}
return 0;
}
///////////////////////////////////////////////////////////
But,here instead of using normal DAC to generate sine wave I have here used R-2R ladder(no specific reason).
Here is the schematic.
Here VSM Timer counter is used to measure the frequency generated by R-2R DAC.
The output of the circuit is as shown below..
if you want to make frequency variable just keep a variable in delay and update it by any key.....
For more Proteus projects click here.
Hi, in the line #include "htc .h" ,this line work fr pic c? If it is, how can I add that library, I looked in the drivers file of pic C and I didnt find anything, and in the space between htc .h waht goes there?
ReplyDeletecan I use a similar metod, using an array to simulate a triangular wave? could I use a smaller array for a square wave?