Example Writeup: Analog Input

From Mech
Jump to navigationJump to search

Original Assignment

The goal of this assignment is to provide sample code and circuits that clearly demonstrate how to use the analog input capabilities of the PIC 18F4520 by giving a few examples.

Overview

Circuit

Code

 /*
 AnalogInput.c m.peshkin 2007-12-24
 Range of input voltages on pins AN0 to AN11 is 0 to 5 volts only.
 This maps to 0-255 ADC values if ADC is in 8 bit mode,
 or to 0-1023 ADC values if ADC is in 10 bit mode.
 There is only one ADC, with a switch to connect it to up to 12 input pins named AN0 to AN11.
 After you switch inputs, wait 10uS for the ADC to settle onto the new input
 */
 #include <18f4520.h>
 #DEVICE ADC=10                   // set ADC to 10 bit accuracy, or it could be just 8
 #fuses HS,NOLVP,NOWDT,NOPROTECT
 #use delay(clock=20000000)
 int16 value;      // if you selected 10 bit accuracy, don't use an 8 bit int
 void main() {
   setup_adc_ports(AN0_TO_AN3);             // Enable analog inputs; choices run from just AN0, up to AN0_TO_AN11
   setup_adc(ADC_CLOCK_INTERNAL);      // the range selected has to start with AN0  
   while (TRUE) {  
     set_adc_channel(0);         // there's only one ADC so select which input to connect to it; here pin AN0
     delay_us(10);                    // wait 10uS for ADC to settle to a newly selected input
     value = read_adc();         // now you can read ADC as frequently as you like      
     output_d(value>>2);      // on port D show only the most significant 8 of the 10 bits; tricky >> means shift right 2 bits
     output_bit(PIN_C0, (value & 2)>>1);    // display the two least significant bits; tricky & is bitwise AND
     output_bit(PIN_C1, (value & 1));
     delay_ms(10);
   }
 }