User manual

Table Of Contents
Analog-to-Digital Converter Peripheral Labs
© 2009 Microchip Technology Inc. DS41369A-page 87
Next, the Get_Inputs() performs an ADC on the voltage present on pin 13 using the
same code as Lab 1 with one minor change. This application is very dependant on the
timing of the software control loop. The 1mS delay used in Lab 1 to allow the hold
capacitor on the input of ADC to fully charge to the pin voltage is excessive. Using the
example given in Equation 9-1, Section 9 in the PIC16F690 Data Sheet as a reference,
the acquisition delay time is shortened to 8μS which should be sufficient.
The Decide() assigns the ADC result value, shifted three bit positions to the left, to
the TMR0_preload variable.
The Do_Outputs() assigns the current toggle bit value to RC0 that will transition
the output accordingly.
Finally, the Timing() clears the TMR0 overflow flag (T0IF), preloads the TMR0
register with the TMR0_preload value subtracted from 255. The function then waits
until the T0IF is set high before returning to the main(). In this way, as the temperature
at the thermistor increases, as will the frequency of the PWM.
5.2.4.2 PROCEDURE
Using the firmware developed in the previous lab, make the following changes:
1. Copy/paste the code in Example 5-8 into the top of the main firmware source file
under the heading labeled:
//----------------DATA MEMORY---------------
EXAMPLE 5-8: GLOBAL VARIABLES USE IN ADC LAB 2
2. Copy/paste the code in Example 5-9 over the Initialize() code from the
previous lab:
Note: Be sure to paste over the code from the previous lab.
unsigned char LED_Output = 0; //assigned to PORTC to light
//connected LEDs
bit toggle = 0;//Used to generate waveform on RC0
unsigned char TMR0_preload = 0; //Varied by ADRESH to change
//frequency of
//waveform on RC0