Difference between revisions of "Example Writeup: Analog Input"
From Mech
Jump to navigationJump to search (→Code) |
|||
Line 1: | Line 1: | ||
== Original Assignment == |
== 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 == |
== Overview == |
Revision as of 12:30, 26 January 2008
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); } }