Try this:
1/18000 = 55.56uS, 1/2 of that is 27.78uS Can use blink without delay, with reading from the pot used to adjust the times.
Not sure how close to 18KHz you can get.
Use a button to determine if a pot reading should be taken; D2 Use writes to PIN register to toggle the output; D3
So something like this:
// variable declarations
unsigned long currentMicros;
unsigned long previousMicros;
unsigned long elapsedTime;
unsigned long 5uS = 55UL;
int analogVal;
// etc.
void setup(){
pinMode (2, INPUT_PULLUP);
pinMode (3, OUTPUT);
digitalWrite (3, LOW); // just in case
}
void loop(){
if ((PIND & 0b00000100) == 0){ // is button on D2 pressed (to GND)
analogVal = analogRead(A0)>>5; // result is 0 to 31
}
currentTime = micros(); // all time elements are unsigned long
elapsedTime = currentTime - previousTime;
if (elapsedTime >=55uS){ // 55uS defined as 55UL
previousMicros = previousMicros + 55uS; // set next rising edge
PIND = 0b00001000; // toggle D3
while (micros() <= ((previousMicros + 28) + analogVal)){
// hang out until half period of 18 KHz plus pot delay
}
// end waiting for half period
PIND = 0b00001000; // toggle D3, falling edge
} // end time period check
} // end loop
Generates a square wave of the specified frequency (and 50% duty cycle) on a pin. A duration can be specified, otherwise the wave continues until a call to noTone(). The pin can be connected to a piezo buzzer or other speaker to play tones.
Only one tone can be generated at a time. If a tone is already playing on a different pin, the call to tone() will have no effect. If the tone is playing on the same pin, the call will set its frequency.
Use of the tone() function will interfere with PWM output on pins 3 and 11 (on boards other than the Mega).
It is not possible to generate tones lower than 31Hz.
toneAC()
Replacement to the standard Arduino tone library with twice the volume, higher quality and higher frequency.
Purpose
The library is named toneAC because it produces an alternating current (AC) between two pins. The ATmega's PWM takes care of this so the accuracy is exact. When you send a tone to a speaker with the standard tone library, the loudest is at 50% duty cycle (only on half the time). Which at 5 volts, is like sending only 2.5v to the speaker. With toneAC, we're sending out of phase signals on two pins. So in effect, the speaker is getting 5 volts instead of 2.5, making it nearly twice as loud. The sound quality difference has to do with allowing the Arduino's PWM to take care of everything and careful programming. Longer piezo life happens because instead of driving the transducer disc only ever in one direction (deforming the disc and reducing sound and quality), it drives it in both directions keeping the disc uniform.
Features
Nearly twice the volume (because it uses two out of phase pins in push/pull fashion)
Higher quality (less clicking)
Capability of producing higher frequencies (even if running at a lower clock speed)
Nearly 1.5k smaller compiled code
Bug fixes (standard tone library can generate some odd and unpredictable results)
Can set not only the frequency but also the sound volume
Less stress on the speaker so it will last longer and sound better
Disadvantages are that it must use certain pins and it uses two pins instead of one. But, if you're flexible with your pin choices, this is a great upgrade. It also uses timer 1 instead of timer 2, which may free up a conflict you have with the tone library. It exclusively uses port registers for the fastest and smallest code possible.
No, our settings at work keep things from working. If I try and open 2 forum pages for example, the first stops working, I have to close IE and start all over. Can't even open a 2nd page, do a search for a topic, and paste it into the 1st.
As to why IE, we're the equivalent of an international conglomerate, and corporate security is way high on the list, so things are slow to change. Certainly won't change to satisfy a little forum run from outside the US.
Sorry for late
The .PDF file is only attached due to Size limitation.
The purpose of this wave form is to Drive Feed forword Half Bridge which is fed the power to a Normal EI core inductor which is used to generate the Smooth Mechanical Vibration.
We have tried it by feeding 18 to 20 KHZ square wave but vibration result is not so smooth as compare to the imported controller.Whose waveform i have attached on previous description.
I am attaching again in .jpg
Sorry for late
The .PDF file is only attached due to Size limitation.
The purpose of this wave form is to Drive Feed forword Half Bridge which is fed the power to a Normal EI core inductor which is used to generate the Smooth Mechanical Vibration.
We have tried it by feeding 18 to 20 KHZ square wave but vibration result is not so smooth as compare to the imported controller.Whose waveform i have attached on previous description.
I am attaching again in .jpg
[D:\Office\COMM\PSA_1314\Sales\Catlogs_Manuals\Vibrator\Traced Pulses[/img]
We can't files that are a path on your hard drive. Try Additional Options and Attach the file again.
What happens when you try my sketch?
I made a few small changes so it compiles:
// variable declarations
unsigned long currentTime;
unsigned long previousTime;
unsigned long elapsedTime;
unsigned long duration = 55UL;
int analogVal;
// etc.
void setup(){
pinMode (2, INPUT_PULLUP);
pinMode (3, OUTPUT);
digitalWrite (3, LOW); // just in case
}
void loop(){
if ((PIND & 0b00000100) == 0){ // is button on D2 pressed (to GND)
analogVal = analogRead(A0)>>5; // result is 0 to 31
}
currentTime= micros(); // all time elements are unsigned long
elapsedTime = currentTime - previousTime;
if (elapsedTime >=duration){ // 55uS defined as 55UL
previousTime = previousTime + duration; // set next rising edge
PIND = 0b00001000; // toggle D3
while (micros() <= ((previousTime + 28) + analogVal)){
// hang out until half period of 18 KHz plus pot delay
}
// end waiting for half period
PIND = 0b00001000; // toggle D3, falling edge
} // end time period check
} // end loop
Thanks For your quick Reply
I have also modified your sketch as you modified and take trial.But I found that There is Only Change in Duty cycle of the waveform while POT rotation. Please take a Look of Orignal wave form that seems somethink diffrent.
Please suggest the sketch for the same.
nehe_bhimaji:
Thanks For your quick Reply
I have also modified your sketch as you modified and take trial.But I found that There is Only Change in Duty cycle of the waveform while POT rotation. Please take a Look of Orignal wave form that seems somethink diffrent.
Please suggest the sketch for the same.
Thanks
[Another image of Wave forms at Pot Position around 75%]
Dear Sir
I Have tried your modified sketch result is like that
When Switch D2 Pressed I get Square wave roughly 18 KHZ but nothing change while POT varies from 0 to 100%
its image is attached
2.When Switch D2 Open I get some Notches in wave its image is attached
I have also check the Pot input at A0 input it seems from 0 to 5V varying while POT turns from 0 to 100%
Please suggest necessary changes in sketch.If possible explain sketch in details so that I will think on it
Thanks
nehe_bhimaji:
Dear Sir
I Have tried your modified sketch result is like that
When Switch D2 Pressed I get Square wave roughly 18 KHZ but nothing change while POT varies from 0 to 100%
its image is attached
2.When Switch D2 Open I get some Notches in wave its image is attached
I have also check the Pot input at A0 input it seems from 0 to 5V varying while POT turns from 0 to 100%
Please suggest necessary changes in sketch.If possible explain sketch in details so that I will think on it
Thanks
Please go through following you tube link .There is Video of waveforms that I expect from Arduino UNO 20140721 073639 - YouTube
Thanks
nehe_bhimaji:
Dear sir
Have you check my you tube video link
Please check and suggest some sketch how I can generate the same
Thanks
[Please go through following you tube link .There is Video of waveforms that I expect from Arduino UNO