Difference between revisions of "Example Writeup: Analog Input"
(→Code) |
|||
Line 11: | Line 11: | ||
== Code == |
== Code == |
||
<nowiki> |
|||
/* |
/* |
||
Line 48: | Line 50: | ||
} |
} |
||
} |
} |
||
</nowiki> |
Revision as of 12:18, 26 January 2008
Original Assignment
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); } }