0% found this document useful (0 votes)
98 views

Analog To Digital Convertor: PIC18f452

Here are the steps to implement the temperature control scenario using the PIC's ADC: 1. Configure AN2 as analog input to read the voltage from the thermistor. 2. In a loop, take an ADC reading from AN2 and convert it to temperature using the thermistor's voltage-temperature characteristics. 3. Check if the temperature is greater than 30°C. If so, turn off the AC relay by writing a 0 to RC0 and leave the heater relay off by not changing RD0. 4. Check if the temperature is less than 25°C. If so, turn off the AC relay by writing a 0 to RC0 and turn on the heater relay by writing

Uploaded by

rana
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
98 views

Analog To Digital Convertor: PIC18f452

Here are the steps to implement the temperature control scenario using the PIC's ADC: 1. Configure AN2 as analog input to read the voltage from the thermistor. 2. In a loop, take an ADC reading from AN2 and convert it to temperature using the thermistor's voltage-temperature characteristics. 3. Check if the temperature is greater than 30°C. If so, turn off the AC relay by writing a 0 to RC0 and leave the heater relay off by not changing RD0. 4. Check if the temperature is less than 25°C. If so, turn off the AC relay by writing a 0 to RC0 and turn on the heater relay by writing

Uploaded by

rana
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 13

ANALOG TO

DIGITAL
CONVERTOR
PIC18f452
INTRO
 8 ADC’s (ANO-AN7) in PIC16f877a 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 of
• 8- bit A/D Result Low Register (ADRESL) converted analog
signal

 What an is an analog signal??


 Is D.C voltage analog?
SOME TERMINOLIGIES
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??? /32 is correct


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
ADC CODING STEPS
Load ADCON0 reg Load ADCON1 reg
Set Analog Channel Give Some delay of
as i/p • Result format? about 1ms to
• Channel?
• Pin settings? capture i/p
• Clk Source?
completely
• ADON bit?

Wait till conversion


Goto next step Take binary result is complete by Start conversion by
according your from ADRESL and checking DONE bit setting GO bit to hi
requirement ADRESH 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 PORTS,
then wait for 1 sec and then
TRISD=0;
display result of AN1 and then
TRISA.TRISA0=1; repeat this process
ADCON0= 0x81; // Fosc/64, Channel 0, A/D is on continuously???
ADCON1= 0xCE; // Right justified, Fosc/64, AN0 =Analog
while(1)
{
delay_ms(1); //Give A/D Channel time to sample
ADCON0.GO_DONE=1; //Start Converting
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
}
}
MIKROC LIBRARY FUNCTIONS FOR ADC

 unsigned Adc_Read(char channel);
It returns 10-bit unsigned digitized number
of the specified analog channel. NOTE:
1. Don’t forget to do TRIS settings of analog
channel being used!!!
2. Also call function Adc_init() function to initialize
ADC module with RC internal clock.

// CODE: Fetch 10-bit digitized value against analog signal at AN2

unsigned int result; //variable to store data


TRISA.TRISA2=1; //AN2 as ip
Adc_init(); //initialize ADC module with internal RC clock
result = Adc_Read(2); //10-bit digitized result stored in result

PRACTICE: Do the code done in previous slides using library functions.


A/D CONVERTER ELECTRICAL
CHARACTERISTICS

 Go through TABLE 22-21 of DATASHEET.


SCENA
RIO

 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

You might also like