Hi Stanley Lee wrote: > The project folder that I have so far is in > http://www.mediafire.com/?c1444jbnizc b/c the message would get > otherwise too large to be posted. What I'm trying to do right now is get > the a/d conversion module working, and see the output on a combination > of LEDs, through USART to the computer on terminal or something, through > looking at the PWM variation or outputting to a LCD display. I'm > following the guidelines as described in section 19 of the PIC18F2620 > manual. I have some questions about the code below:
I would suggest using the sdcc adc libs to do this. Just include adc.h and do a adc_open(channel_num_to_read, ADC_FOSC_64, ADC_CFG_05A_0R, ADC_FRM_RJUST | ADC_INT_OFF); There is a bug in the sdcc adc lib which forces you to manually set ADCON2bits.ACQT0 = 1; ADCON2bits.ACQT1 = 1; ADCON2bits.ACQT2 = 1; TRISA = 0xff; // input (see also my patch https://sourceforge.net/tracker/?func=detail&atid=300599&aid=1776197&group_id=599 for a pic18f2550) adc_conv(); // start initial sampling later in your programm do: while(1) { if (!ADCON0bits.GO) { // read result adc = adc_read(); // read value adc_setchannel(next_channel_to_read); // set to next channel adc_conv(); // restart sampling } } > > 1. For ADCON2, I have picked the minimum acquisition time and the > fastest clock, which is Fosc/4. Would anyone know about the > implications, pros and cons of picking different acquisition time and > a/d clock source? If i understood this correct the ACQ and ADC_CLOCK (TAD) are different things. The Tad defines how fast each bit of the 10-bit adc is sampled, thus it defines the maximum time for a complete conversion, which is 11 times tad. The acq defines (in tad units) how long the internal capacitor is charged before the conversion is actually started. The length of the acq depends on the frequency of the signal you want to convert. The higher the acq the more the actual read value is averaged. The acq is a fine thing if you read out different channels successively. Without this you would always need to wait a specific time after changing the channel and starting a conversion to give the internal capacitor the chance to charge with the analog value. > > 2. For the a/d input acquisition time, I have a delay loop that involves > using a while loop that has a delay of 27 us rather than the minimum > time suggested in section 19.1 of 2.4 us. Could there be any > implications of doing what I did in my code? This is no prob if you don't read out the value before the ADCONbits.GO bit is cleared. See also my code above. > > 3. For using the a/d interrupt functionality, I infer that I would write > an ISR that is dependent on ADIF interrupt flag bit. I'm not sure where > I can find the interrupt number for a/d interrupt as I would need it to > complete my ISR properly. Can anyone help me on this? I was having > trouble finding it in the SDCC manual. you need to enable the adc interrupt by using ADC_INT_ON when doing the adc_open. Then use an isr like (it reads all 13 cahnnels) : int adc_value[13]; unsigned chardc_channel; void low_isr(void) interrupt 2 { PORTCbits.RC1 = 1; // adc isr if (PIR1bits.ADIF) { adc_value[adc_channel] = adc_read(); // set next channel if (adc_channel == 12) adc_channel = 0; else adc_channel++; adc_setchannel(adc_channel); // reset interrupt PIR1bits.ADIF = 0; adc_conv(); // restart sampling, don't omit this } PORTCbits.RC1 = 0; } > > 4. Maybe be a bit of a silly question. I'm planning to add up the high > and low result bits into a single result integer and return it to the > function calling the a/d sampling function. What would be the limit for > how large an integer type can be? the maximum value for an unsinged integer is 2^16-1 for a singed integer its half of that. Since the adc only has 10-bits. The maxmimum value is 2^10-1. So you can use an unsigned integer. jan ------------------------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/ _______________________________________________ Sdcc-user mailing list Sdcc-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sdcc-user