I'm working in a project with arduino mega and labview, I need to use it like a acquisition card, but I need a minimun sample rate of 10Khz, when I tried to overcome 5Khz, the signal in scope was distorted (example continuous sample -LIFA). Is possible have a sample rate of 10Khz with arduino? How I could do that?.
Hi, i need yo sample an analog signal. And, I getting data at 115000 baud rate. Where is the code or parameters that I could improve to reach a sample rate over 10Khz?
It takes roughly 100 ms to read an analog pin. That allows you to read about 10k times per second. Assuming, of course, that you don't want to do anything silly like send that data somewhere. If you do, you'll need to live with a reduced sampling rate.
Hello, I am doing a very similar task as mentioned in topic although I am only sampling at 8kHz and in digital.
I have been able to successfully sample single bytes of data but when I use too many Serial.print functions in my timer interrupt the serial monitor seems to lock up. Are there any faster ways to print serial data to the computer? Any help would be greatly appreciated.
Some tricks I have read about is using C code directly to make faster digital read times although that does not seem to be my problem. Also I am using a third party program to read the serial data at the higher rates this why I have used the 2000000 bps rate. Thanks in advance for any help! I feel like if I can get this code down it will help a lot of people here on the forums.
Here is my code:
//storage variables
volatile boolean state = 0;
volatile unsigned char counter = 0;
void setup(){
//set pins as outputs
pinMode(0, INPUT);
Serial.begin(2000000);
//Serial.begin(115200);
bitSet(UCSR0A, U2X0);
cli();//stop interrupts
//set timer2 interrupt at 8kHz
TCCR2A = 0;// set entire TCCR2A register to 0
TCCR2B = 0;// same for TCCR2B
TCNT2 = 0;//initialize counter value to 0
// set compare match register for 8khz increments
OCR2A = 249;// = (16*10^6) / (8000*8) - 1 (must be <256)
// turn on CTC mode
TCCR2A |= (1 << WGM21);
// Set CS21 bit for 8 prescaler
TCCR2B |= (1 << CS21);
// enable timer compare interrupt
TIMSK2 |= (1 << OCIE2A);
sei();//allow interrupts
}//end setup
ISR(TIMER2_COMPA_vect){//timer1 interrupt 8kHz toggles pin 9
//generates pulse wave of frequency 8kHz/2 = 4kHz (takes two cycles for full wave- toggle high then toggle low)
//state = digitalRead(0);
Serial.print(counter);
//Serial.print(" ");
//Serial.println(state);
if(counter >= 9)
{
counter = 0;
}
else
counter++;
}
void loop(){
//do other things here
}
Edit: Also, could running at more than 8 data bits on the serial monitor help with the printing bottleneck?