Name:
calibadc10
Syntax:

CALIBADC10 wordvariable CALIBADC variable

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 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.

Theory of operation

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

     Nref = Vref * 1023 / Vpsu

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

     Vpsu = Vref * 1023 / Nref

If the Vref were 1.024 volts then this will be -

     Vpsu = 1.024 * 1023 / Nref

     Vpsu = 1047.552 / Nref

Rounded to the nearest whole number -

     Vpsu = 1048 / Nref

This will give the voltage in 1V units.

To obtain a voltage in millivolts (mV) -

     Vpsu = 1.024 * 1023 * 1000

     Vpsu = 1047552 / Nref

Which, accounting for PICAXE numerical constraints -

     Vpsu = 52378 / Nref * 20

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

Using 'calibadc10'

This program reads the 10-bit 'calibadc10' value into the word variable 'w1' and then reports what that reading is.

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

Determine the PICAXE supply voltage

This code demonstrates how to determine the PICAXE supply voltage. For example it may be that a vital peripheral chip must run at >=3.15 volts or else it will be unpredictable in function.

Code Example:
Symbol Nref = w2			; Word variable for the calibadc10 reading
Symbol Vpsu = w3			; Word variable for the supply voltage

Main:	calibadc10 Nref			; Take the reference reading
	Vpsu = 52378 / Nref * 2		; Work out supply voltage
	if Vpsu > 315 then		; Is greater than 3.15 volts
	  ; Battery is above 3.15 	; Yes
	  ; volts so it is OK.
	  gosub SafeToWork
	else				; No	
 	  ; Shut down this project 
	  ; safely now, because the
	  ; battery is going flat!
	  gosub Shutdown
	end if
	goto Main			; Continue

; Notes
;
; Calibadc10 will give a result (Nref) which will depend on the reference 
; voltage (Vref) and the PICAXE power supply voltage (Vpsu) as follows -
;
;     Nref = Vref * 1023 / Vpsu
;
; This can be rearranged to determine the power supply voltage (Vpsu) from
; the calibadc10 result (Nref) -
;
;     Vpsu = Vref * 1023 / Nref
;
; This will give Vpsu in units of volts (1000mV). To give Vpsu in units
; of 10mV we can multiply by 100 -
;
;     Vpsu = Vref * 1023 * 100 / Nref
;
; For a Vref of 1.024 volts this will be -
;
;     Vpsu = 1.024 * 1023 * 100 / Nref
;
;     Vpsu = 104755.2 / Nref
;
; Unfortunately 104755.2 is larger than the maximum value which can be 
; held within a 16-bit word value (65535), however we can divide 
; 104755.2 by 2 and later multiply the result by 2 and still have the
; same answer albeit with a little less accuracy -
;
;     Vpsu = 104755.2 / Nref
;
;     Vpsu = ( (104755.2/2) / Nref ) * 2
;
;     Vpsu = ( 52377.6 / Nref ) * 2
;
; Rounding to the nearest whole number as the PICAXE does not do decimals
; and taking into account the left to right nature of PICAXE calculations
; gives -
;
;   Vpsu = 52378 / Nref * 2
Copy Code Submit an Example

Submit Your Own Code!

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

Comments

  • Login to leave a comment.