Name:
calibadc
Syntax:

CALIBADC variable

CALIBADC10 wordvariable

Variable - receives the adc reading

Description:

Calibrate the microcontrollers internal ADC by measuring a fixed internal fixed voltage reference.

0.6V 20M, 28X1, 40X1
1.2V 28X2-3V, 28X2-3V
1.024V All other parts that support this command

Note that this command is not available on 28X2-5V/40X2-5V.

The reference voltage used by the PICAXE microcontrollers ADC reading (readadc/ readadc10) commands is the supply voltage. In the case of a battery powered system, this supply voltage can change over time (as the battery runs down), resulting in a varying ADC reading for the same voltage input.

The calibadc/calibadc10 commands can help overcome this issue by providing the ADC reading of a nominal internal reference. Therefore by periodically using the calibadc command you can mathematically calibrate/compensate the readadc command for changes in supply voltage.

calibadc can be considered as 'carry out a readadc on a fixed reference'.

Note that the reference voltage specified is a nominal voltage only and will vary with each part. Microchip datasheet AN1072 provides further details on how to software calibrate and use this advanced feature.

At clock speeds >= 32MHz it is necessary to use two consecutive 'calibadc' commands together to ensure the Vref has time to settle.   

Theory of operation

Calibadc10 will give a result (Nref) which will depend on the reference voltage (Vref) and the PICAXE power supply vltage (Vpsu) as follows -

     Nref = Vref * 255 / Vpsu

This can be rearranged to determine the power supply voltage (Vpsu) from the calibadc result (Nref) -

     Vpsu = Vref * 255 / Nref

If the Vref were 1.024 volts then this will be -

     Vpsu = 1.024 * 255 / Nref

     Vpsu = 261.12 / Nref

Rounded to the nearest whole number -

     Vpsu = 261 / Nref

Applies To:
All (except 08, 08M, 14M, 18, 18A, 18M, 18X, 28, 28A, 28X, 40X)
See Also:
Related Create:
Share:
Print:

Using 'calibadc'

This program reads the 8-bit 'calibadc' value into the byte variable 'b1' and then reports what that reading is.

Code Example:
main:	calibadc b1	; read the adc reading
	debug		; display current value
	pause 500	; wait a while
	goto main	; loop back to start
Copy Code Submit an Example

Submit Your Own Code!

You must be logged in to submit code examples. Login now.