Sunteți pe pagina 1din 13

PIC18f452

INTRO
8 ADCs (ANO-AN7) in PIC18f452 with 10-bit resolution
The A/D module has four registers. These registers are:
Used to configure
8- bit A/D Control Register 0 (ADCON0) settings of ADC
8- bit A/D Control Register 1 (ADCON1)
8- bit A/D Result High Register (ADRESH)
Hold binary result
8- bit A/D Result Low Register (ADRESL) of converted
analog signal

What an is an analog signal??


Is D.C voltage analog?
SOME TERMILNOLIGIES
1. Resolution (n-bit): width of output data given by ADC
2. Conversion time: Time taken by ADC to convert analog signal to digital
3. Step Size: smallest step after which ADC provide us a new binary number
Step Size = (Vref+ - Vref-)/(2^n)
e.g for Vref=5v, n=10 step= 5/1024 = 4.88mv

4. Digital Data Output:


Dout = (Vin/StepSize)
e.g. if n=8-bit , vref = 2.56v , calculate binary output generated by ADC if a.)Vin= 1.7v, b.) Vin=2.1v
a.) step= 2.56/256 =10mv Dout=1.7v/10mv = 170 in decimal
ADC output= binary of 170=10101011

5. Tad conversion time per bit


For 10-bits, A/D conversion time = 12 Tad
Important parameter in clk selection of ADC ----- clk must be selected such that Tad>=1.6us
INSIDE ADCON0 REGISTER

bit 7-6 ADCS1:ADCS0: A/D Conversion Clock Select bits (ADCON0 bits in bold , ADCS2 bit is in ADCON1 reg)
<ADCS2:ADCS1:ADCS0> Clock Conversion
0 00 FOSC/2
0 01 FOSC/8
0 10 FOSC/32
0 11 FRC (clock derived from the internal A/D RC oscillator)
1 00 FOSC/4
1 01 FOSC/16
1 10 FOSC/64
1 11 FRC (clock derived from the internal A/D RC oscillator)

Rule to select this clock?


clk must be selected such that Tad>=1.6us
E.g if XTAL=10Mhz, then for FOSC/2 we have 10M/2=5Mhz
Tad=1/5M = 200ns <1.6us .. So its not valid clk

For FOSC/6??? And FOSC/32???


INSIDE ADCON0 REGISTER

bit 5-3 CHS2:CHS0: Analog Channel Select bits


000 = channel 0, (AN0)
001 = channel 1, (AN1)
010 = channel 2, (AN2)
011 = channel 3, (AN3)
100 = channel 4, (AN4)
101 = channel 5, (AN5)
110 = channel 6, (AN6)
111 = channel 7, (AN7)
bit 2 GO/DONE: A/D Conversion Status bit indicates whether conversion completed or not?
When ADON = 1:
1 = A/D conversion in progress (setting this bit starts the A/D conversion which is automatically
cleared by hardware when the A/D conversion is complete)
0 = A/D conversion not in progress
bit 1 Unimplemented: Read as '0'
bit 0 ADON: A/D On bit
1 = A/D converter module is powered up
0 = A/D converter module is shut-off and consumes no operating current
INSIDE ADCON1 REGISTER

bit 7 ADFM: A/D Result Format Select bit


1 = Right justified. Six (6) Most Significant bits of ADRESH are read as 0.
0 = Left justified. Six (6) Least Significant bits of ADRESL are read as 0.

bit 6 ADCS2: A/D Conversion Clock Select bit


Used to select clock source as explained in ADCON0

bit 5-4 Unimplemented: Read as '0'


INSIDE ADCON1 REGISTER

bit 3-0 PCFG3:PCFG0: A/D Port Configuration Control bits

A = Analog input
D = Digital I/O

C/R =
# of analog input
channels / # of ADC
voltage references
PIC ADC INTERNAL BLOCK DIAGRAM
Load ADCON0 reg Load ADCON1 reg
Set Analog Give Some delay
Channel as i/p Reulst format? of about 1ms to
Channel?
Pin settings? capture i/p
Clk Source?
completely
ADON bit?

Wait till
Goto next step Take binary conversion is Start conversion
according your result from complete by by setting GO bit
requirement ADRESL and checking DONE to hi
ADRESH bit
registers
PROGRAM : WRITE A MIKRO-C PROGRAM TO GET DATA FROM CHANNEL0 (AN0/RA0) OF
ADC AND DISPLAYS THE SAMPLED RESULT ON PORTC AND PORTD. THIS IS DONE EVERY
QUARTER OF SECOND.

void main(void)
What would be amendment
{ in this program if we want to
TRISC=0; display result of AN0 to
TRISD=0; PORTS, then wait for 1 sec
and then display result of
TRISA.TRISA0=1;
AN1 and then repeat this
ADCON0= 0x81; // Fosc/64, Channel 0, A/D is on process continuously???
ADCON1= 0xCE; // Right justified, Fosc/64, AN0 =Analog
while(1)
{
delay_ms(1); //Give A/D Channel time to sample
Do same code using
ADCON0.GO_DONE=1; //Start Converting
LIBRART functions of ADC?
while(ADCON0.GO_DONE == 1); //wait for completion of conversion
PORTC=ADRESL; // Display low byte on PORT C
PORTD=ADRESH; //Display high byte on PORT D
delay_ms(250); //wait for one quarter of second
}
}
Steps + Code + Library function

Were explained on board !!!


A/D CONVERTER ELECTRICAL CHARACTERISTICS

Go through TABLE 22-21 of DATASHEET.


SCENARIO

Thermistor attached with AN2 of PIC.


Switch on AC relay attached with pin RC0 of PIC
And switch off HEATER relay attached with RD0 of
PIC whenever temp>30 degree celcius

Switch off AC relay attached with pin RC0 of PIC


And switch on HEATER relay attached with RD0 of
PIC whenever temp<25 degree celcius

Switch on both AC and HEATER relay otherwise

S-ar putea să vă placă și