555: Rozdiel medzi revíziami
Z SensorWiki
d (→Measuring the frequency with Arduino) |
|||
Riadok 23: | Riadok 23: | ||
− | === Measuring the frequency | + | === Measuring the frequency === |
<source lang="c"> | <source lang="c"> | ||
− | // since this value is changed in an interrupt handler, | + | |
− | // mark it as volatile. | + | volatile long lasttime = 0; //// since this value is changed in an interrupt handler, // mark it as volatile. |
− | |||
void setup() | void setup() | ||
{ | { | ||
− | + | Serial.begin(9600); | |
− | Serial.begin( | ||
− | |||
− | |||
pinMode(2, INPUT); | pinMode(2, INPUT); | ||
− | attachInterrupt( 0, onTick, RISING ); | + | attachInterrupt( 0, onTick, RISING ); // Set Interrupt 0 (which is on digital pin 2) to call 'onTick' |
+ | // when the signal rises. | ||
} | } | ||
Riadok 44: | Riadok 41: | ||
void loop() | void loop() | ||
{ | { | ||
− | / | + | /* Nothing to do here, everything happens in interrupt service routine onTick */ |
− | |||
} | } | ||
− | void onTick() | + | void onTick() // print out how many milliseconds occurred between the last |
+ | // clock tick and this one. | ||
{ | { | ||
− | |||
− | |||
long thistime=millis(); | long thistime=millis(); | ||
Serial.println(thistime-lasttime); | Serial.println(thistime-lasttime); |
Verzia zo dňa a času 07:17, 14. október 2010
Astable (oscilating) circuit
The oscilating circuit diagram is pretty simple, featuring the 555, and then a couple of resistors & capacitors that define the actual frequency of the oscillation. Pay attention to the pin numbers.
In reality, when you build it out, the circuit should look like this one:
TODO: image
You can calculate frequency using this formula:
T = 0,693 × (R1 + 2×R2) × C1
C1 is measured in Farads, R1 & R2 are in Ohms, so for values in schematic:
T = 0,693 × ( 100 000 + 2 × 100 000) × 0.000001 = 0,2 seconds (or 4,8 Hz)
If you want a different frequency, you would change the values of C1, R1 & R2. Changing the capicitor is the easiest to imagine -- if you go from a 10 µF capacitor to 1 µF, it will take 1/10 the time to charge, so your frequency will go up by a factor of 10.
Measuring the frequency
volatile long lasttime = 0; //// since this value is changed in an interrupt handler, // mark it as volatile.
void setup()
{
Serial.begin(9600);
pinMode(2, INPUT);
attachInterrupt( 0, onTick, RISING ); // Set Interrupt 0 (which is on digital pin 2) to call 'onTick'
// when the signal rises.
}
void loop()
{
/* Nothing to do here, everything happens in interrupt service routine onTick */
}
void onTick() // print out how many milliseconds occurred between the last
// clock tick and this one.
{
long thistime=millis();
Serial.println(thistime-lasttime);
lasttime = thistime;
}