Pages: [1]   Go Down
Author Topic: PWM Sample Rate = 490Hz not 30769 Hz ???  (Read 926 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey,

I was trying to get some basic oscillators going on the PWM outputs.

If i do a analogWrite(speakerOut, 128); i get a squarewave @ 490 Hz...

So it seems that the PWM Sample Rate is at 490Hz instead of the 30769 Hz the reference mentioned.

Is there a way to change the PWM Sample rate?

Is there a way to access the PWM clock so i sync my OSC the samplerate of the PWM generator?

I was thinking kinda like:

loop{
    CalcNextSample;l
    WaitForPWMClockWrap;
    WriteSample;
}

GreetZ,

-Martijn-

Logged

Forum Administrator
Cambridge, MA
Offline Offline
Faraday Member
*****
Karma: 12
Posts: 3538
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Whoops.  I forgot to update the reference when I changed the frequency.  Thanks for pointing that out; it's fixed now.  

You can change the frequency by playing with the timer registers.  Try searching for TCCR1B on the forum or the Arduino homepage.  I'm going to try add a function to do this sometime soon.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ThanX ;-)

That did help !!!

Meanwhile this is my piece of code so far now. It generates a parabolic sinoid wave. Still no clue how to sync to sample rate clock. But maybe i'm to slow to make it in time anyway...

So i tried to do a pot read(see //...) but it seems the analogRead blocks for 2.5 ms or so lowering the loop rate to +/-400hz... witch is totaly to slow for a Oscillator...

Do ya think it could work, or am i just trying something that i shouldnt?

CheerZ,

-M-

*****

int potPin = 2;
int speakerOut = 9;

long c=0;
long i=519;
int  x=0;

void setup() {
  TCCR1A = 9;
  TCCR1B = 1;
}

void loop() {
//  i=analogRead(potPin)*32;
  c+=i;
  if(c>=65536)c-=65536;
  x=(c>>smiley-cool-128;
  x = (x*(128-(abs(x)))>>6)+128;
  analogWrite(speakerOut,x);
}
Logged

Forum Administrator
Cambridge, MA
Offline Offline
Faraday Member
*****
Karma: 12
Posts: 3538
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

If you look at analogRead() in wiring.c in the lib/targets/arduino/ subdirectory of the Arduino directory, you'll see a delay(1).  You can try commenting it out, as it will probably be removed in the next version of Arduino.  That should speed things up.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ThanX,

now its much faster  smiley-wink

Any hints on getting the oscillator asyngroniut on a PWM timer based interrupt?

GreetZ,

-Martijn-
Logged

Pages: [1]   Go Up
Jump to: