c4_esp_VR, no es que el ADC pueda tomar valores máximo de 4.2V.
lo que sucede es que siempre tendrás 10 bits.
Hagamos un paréntesis y sacamos conclusiones de lo que se tiene hasta ahora seguro y al final se saca conclusiones.
1.) El ADC del PIC máximo trabajara a 10 bits.
2.) Se esta usando una variable de 16 bits para guardar el resultado del ADC.
Miremos un poco lo que pasa internamente del PIC.
El resultado del ADC de 10 bits después de leer 0V, seria=0b0000000000
El resultado del ADC de 10 bits después de leer 5V seria=0b1111111111
De lo anterior, lo que debemos tener claro es que el resultado es de 10bits.
Ahora, miremos lo que pasa por software con el CCS.
Tú defines una variable de 16 bits. Eso es correcto.
Ahora Acá es donde esta tu problema y no quiero que lo tomes a mal, pero es error de comprensión, míralo bien.
el resultado del ADC es de 10 bits, pero la variable a guardarlo es de 16 bits, entonces la pregunta es. Que pasa con los 6 bits que hacen falta para completar los 16??
Y la respuesta es:
CCS los llena de ceros ya que no se utilizan.
entonces si tú defines
ADC = 16bits.
entonces CCS te coloca los 10 bits del ADC justificados a la izquierda.
Ejemplo: la lectura del ADC es 0V tendremos
0000000000000000
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Ejemplo2.
La lectura del ADC es 5V entonces la respuesta seria la máxima, es decir todos los 10 bits en 1.
1111111111000000
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Ahora que sucede si tu le dices al CCS que ADC = 10 bits. La única diferencia es que ahora los mismos 10 bits que antes, te los organiza pero justificados a la derecha de esta forma:
Ejemplo: la lectura del ADC es 0V tendremos
0000000000000000
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Ejemplo2.
La lectura del ADC es 5V entonces la respuesta seria la máxima, es decir todos los 10 bits en 1.
0000001111111111
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Conclusión, no es que el ADC pueda leer hasta 4.2V, es que máximo tienes 10 bits para trabajar, lo que tienes que tener claro es como quieres que CCS te los organice.
Saludos!
Grandiosa explicación!!! muchas gracias!
A lo mejor esto te sirve de algo:
"A/D Acquisition Requirements
For the A/D converter to meet its specified accuracy,
the charge holding capacitor (CHOLD) must be allowed
to fully charge to the input channel voltage level. The
analog input model is shown in Figure 17-2. The
source impedance (RS) and the internal sampling
switch (RSS) impedance directly affect the time
required to charge the capacitor CHOLD. The sampling
switch (RSS) impedance varies over the device voltage
(VDD). The source impedance affects the offset voltage
at the analog input (due to pin leakage current). The
maximum recommended impedance for analog
sources is 2.5 kΩ. After the analog input channel is
selected (changed), this acquisition must be done
before the conversion can be started.
TACQ = TAMP + TC + TCOFF
Temperature coefficient is only required for temperatures > 25°C.
TACQ = 2 μs + TC + [(Temp – 25°C)(0.05 μs/°C)]
TC = -CHOLD (RIC + RSS + RS) ln(1/2048)
-120 pF (1 kΩ + 7 kΩ + 2.5 kΩ) ln(0.0004883)
-120 pF (10.5 kΩ) ln(0.0004883)
-1.26 μs (-7.6246)
9.61 μs
TACQ = 2 μs + 9.61 μs + [(50°C – 25°C)(0.05 μs/°C)]
11.61 μs + 1.25 μs
12.86 μs"
Sacado del datasheet del 18F4x2
Mayormente se me ocurren varias cosas para evitar la solución que tienes ahora del divisor (pierdes resolución):
a) Poner condensadores de desacoplo de 100nF al ladito de cada patilla de VCC.
b) Subir el tiempo de muestreo.
c) Comprobar simultáneamente a la conversión, polímetro en mano, la tensión que le llega al ADC.
d) ¿Qué resistencia tiene el encoder de extremo a extremo?