Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
12 years, 11 months ago.
How could I use a Ticker (Interrupt) only for one time, but in every round?
I want to write the current time to a file on an SD card, every time a telegram was received from my RS485. But since the program is too slow and then many bytes are lost (so I want to set an interrupt)
If I reduce the time he wrote hundreds of times the same time in the file , contribute to slower time, so 1 second and he just stops and freezes.
That's a part of my code:
while(1) {
 if(trans_4 == 1) {
                          Save_on_sd.attach(&save_data, 1); 
                    }
}
2 Answers
12 years, 11 months ago.
I had a similar requirement to turn a Ticker on and off for timed A/D conversion over a variable duration and here are extracts of my code that may help.
"Running" is flag used to indicate that I'm in my acquisition period.
before Main
// ____________________ DURATION ___________
Timeout SamplingDuration;   // set up a timeout for adc reading duration
Ticker Convert;             // set up a ticker to do timed adc covertions.
void Duration_end()
    {
    Convert.detach();
    Running =0;
    }
    
void ADC_read()
    {
    for (int i=0; i<25; i++)        // I do 25 readings of the A/D
        {
        // my code here
         wait_us(10);
        }
        
}
Within Main I have...
// Acquisition stage
    
    Running=1;                  // set flag to indicate acquisition running
    
    //--------------------------------------------------------------------
  
    Convert.attach(&ADC_read, 0.1);             //do adc convert every 0.1 second and attaches function ADC_read()
    //wait_us(100);                              // Allow first conversion 100uS 'head start'
                                            
    SamplingDuration.attach(&Duration_end, Ta);  // adc reads for acquisition time Ta                                          
    //---------------------------------------------------------------------------------
So I have a timed duration and an interupt time acquisition in the above. I did this a long time ago and it works, so I hope it gives you some pointers.
12 years, 11 months ago.
I think you are looking for the TimeOut class. http://mbed.org/handbook/Timeout
