Embedded systems that are dealing with DAC require good voltage references. Despite all voltage references having their nominal values, specific tolerances indicate how much values can vary from the nominal value. References, as a rule, are semiconductors that characteristics are affected by temperature.
For instance, if we decide to use a 2.5V voltage reference then (Zener) diode LM336A-2.5 may be a good choice for this.
These diodes have a low-temperature coefficient. It can guarantee that voltage will be in the range between 2.44 and 2.54 at 25ºC. This precise Zener diode has a third lead that can be used to adjust break down voltage. In the following figure, you may see a diode with a potentiometer where breakdown voltage can be adjusted in the range of ±120mV:
Adjusting breaks down voltage can be an important feature where precision ADC is required. As we mentioned, the real reference voltage value can diverge from nominal so the ADC readings. And the bigger voltage needs to be read – the bigger error occurs.
We know that compensation can also be done in software by adding some known offset value. But in many cases compensation leads to floating-point operations where regular microcontrollers would waste their resources – especially in time-critical measurements. As an alternative, there can be a reference table stored in memory, where calculations need to be made only once. But again, for 10bit ADC readings, we would need 1024 table entries – so this is a 1kB of non-volatile memory. Such implementations would also need calibration to fill the table with calibration values.
So probably it is better to avoid errors at the hardware level than correct them in software. In precise embedded systems, I would really recommend using precise voltage references. If you need more precision than Zener diode can provide, you can choose the Maxim MAX6225 2.5V reference where the V ranges between 2,499V and 2.501V at 25ºC. MAX6225 also has the ability to connect a potentiometer that can adjust the voltage range by about 40mV.
I probably don’t need to mention that some microcontrollers have internal voltage reference sources that can be used for ADC capture. But if you need accuracy, you should avoid using them.