Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
03/13/08 13:43
Read: times


 
#152225 - Use a rount trip buffer
Responding to: ???'s previous message
Hi there. Quite many seem to agree that Your method of doing this is "horrible" or "never seen that done in this way before" ...

Your solution is reading the ADC 16 times every time You want a result out of it. It might slow things down....

I have used a circular buffer to do this:

#define ADC_BUFFER_SIZE 7

static volatile unsigned char __adc_buffer[ADC_BUFFER_SIZE];
static volatile unsigned char __adc_buffer_ptr;

extern void InitAdcReader() {
    for ( __adc_buffer_ptr = 0;
          __adc_buffer_ptr < ADC_BUFFER_SIZE;
          __adc_buffer_ptr++ ) {
        __adc_buffer[__adc_buffer_ptr] = 0;
    }
    __adc_buffer_ptr = 0;
}

extern unsigned char  ReadAdc() {
    unsigned char  ix;
    unsigned short result;

    // Collect one ADC sample
    __adc_buffer[__adc_buffer_ptr] = ADC_DATA_PORT;

    // Advance the pointer
    __adc_buffer_ptr++;
    if (__adc_buffer_ptr >= ADC_BUFFER_SIZE ) {
        __adc_buffer_ptr = 0;
    }

    // Calculate average sum
    result = 0;
    for ( ix = 0; ix < ADC_BUFFER_SIZE; ix++ ) {
        result  += __adc_buffer[ix];
    }

    // Calculate the average
    result = result / (unsigned char)ADC_BUFFER_SIZE;

    return (unsigned char)(result & 0xFF);
}



List of 26 messages in thread
TopicAuthorDate
Math not functioning with proper headers?            01/01/70 00:00      
   horrible method            01/01/70 00:00      
   Lots of issues            01/01/70 00:00      
      Code Op at level 8            01/01/70 00:00      
         Try multiple steps            01/01/70 00:00      
            ah hah moment arrived......omg            01/01/70 00:00      
                           01/01/70 00:00      
                  Here is the block which now works 100%            01/01/70 00:00      
                     Operation question in C            01/01/70 00:00      
                        Because            01/01/70 00:00      
                     Simplify            01/01/70 00:00      
                        what's the point ?            01/01/70 00:00      
                           What's the point            01/01/70 00:00      
                              simpler, but            01/01/70 00:00      
               Not right            01/01/70 00:00      
   use shift right instead of divide            01/01/70 00:00      
      If you're lucky...            01/01/70 00:00      
   Use a rount trip buffer            01/01/70 00:00      
      Bad names            01/01/70 00:00      
         System use names ????            01/01/70 00:00      
         Common naming convention ?            01/01/70 00:00      
            ISO/IEC 9899:1990...            01/01/70 00:00      
      Comments            01/01/70 00:00      
         same effect as a "circular array"            01/01/70 00:00      
         think I like this the best            01/01/70 00:00      
   Use a loop with deglitching and averaging            01/01/70 00:00      

Back to Subject List