Autor Tema: CONFIGURAR ADC 16F877A A 8 BITS?  (Leído 5326 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jovan21

  • PIC10
  • *
  • Mensajes: 2
CONFIGURAR ADC 16F877A A 8 BITS?
« en: 15 de Noviembre de 2005, 13:11:00 »
Hola mi nombre es Jovan y me gustaria saber si se puede configurar el adc del pic16f877a  (10 bits ), a 8 bits, es decir, que cuando realice la conversion del adc
8bits sean igual 5 volts. Agradeceria mucho su respuesta.

Desconectado Artifox

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 455
    • Quadbot
RE: CONFIGURAR ADC 16F877A A 8 BITS?
« Respuesta #1 en: 15 de Noviembre de 2005, 23:39:00 »
Hola lo que necesitas es bastante sencillo... te explico un poco... el PIC que usas tiene una resolucion de 10 bits, es decir que los valores a los que puede convertir oscilan entre 0 y (2^10 ) - 1 este valor lo guarda en 2 registros el ADRESH y ADRESL, como sabes la serie 16 esta basada en registros de 8 bits, entonces cada uno de estos registros es de 8 bits. Cuando guarda el valor de la conversion lo puede hacer de 2 maneras (10bits y 8 bits) :

10 bits: ADRESH (contiene los 2 bits mas significativos, poniendo los demas a 0 ) y el ADRESL (contiene los 8 bits menos significativos) por ejemplo: ADRESH = 00000010  y ADRESL= 10001100 lo que nos da un valor de 1010001100 (652 en decimal) con 10bits...

8bits: ADRESH (contiene los 8 bits mas significativos) y el ADRESL (contiene los 2 bits menos significativos, poniendo los demas a 0 ) por ejemplo: ADRESH = 10100011 y ADRESL = 00000000 es decir 1010001100 (652 en decimal), pero si ignoramos los 2 bits menos significativos nos quedan solamente 8 bits que es lo que necesitas, con lo que tendriamos un valor de 10100011 (163 en decimal)

En resumen, si lees solo los 8 bits mas significativos obtienes tu conversion AD. Para configurar en que modo trabajar revisa el PDF del PIC en especial los registros ADCON0 y ADCON1.

Espero haber sido claro... y no confundirte mucho

Nos vemos, un abrazo Rebotado
Video Quadbot
Saludos desde mi querido Perú.
Si realmente queremos que el mundo cambie debemos empezar por nosotros mismos... ;)

Desconectado PAOLA09

  • Moderador Local
  • PIC18
  • *****
  • Mensajes: 332
RE: CONFIGURAR ADC 16F877A A 8 BITS?
« Respuesta #2 en: 16 de Noviembre de 2005, 08:47:00 »
HOLA
OTRO METODO QUE PUEDES USAR EN CASO DE NECESITAR MAYOR PRECISION ES IMPLEMENTAR UN CAS (ACONDICIONADOR DE SEÑAL), DE TAL FORMA QUE ESCALARIAS LOS RESULTADOS DEL RANGO DE 0 A 5 AL RANGO DE 0 AL VALOR CORRESPONDIENTE A 2^8. EL CAS CONSTA DE UN AMPLIFICADOR INVERSOR Y UN SUMADOR.

Desconectado jovan21

  • PIC10
  • *
  • Mensajes: 2
RE: CONFIGURAR ADC 16F877A A 8 BITS?
« Respuesta #3 en: 17 de Noviembre de 2005, 12:54:00 »
HOla bueno he leido sus respuestas y las dos son buenas me han solucionado mi duda muchas gracias. RollEyes

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: CONFIGURAR ADC 16F877A A 8 BITS?
« Respuesta #4 en: 02 de Diciembre de 2005, 05:58:00 »
Escrito originalmente por Artifox


10 bits: ADRESH (contiene los 2 bits mas significativos, poniendo los demas a 0 ) y el ADRESL (contiene los 8 bits menos significativos) por ejemplo: ADRESH = 00000010  y ADRESL= 10001100 lo que nos da un valor de 1010001100 (652 en decimal) con 10bits...

8bits: ADRESH (contiene los 8 bits mas significativos) y el ADRESL (contiene los 2 bits menos significativos, poniendo los demas a 0 ) por ejemplo: ADRESH = 10100011 y ADRESL = 00000000 es decir 1010001100 (652 en decimal), pero si ignoramos los 2 bits menos significativos nos quedan solamente 8 bits que es lo que necesitas, con lo que tendriamos un valor de 10100011 (163 en decimal)




La explicación está simple pero no has mencionado el tema de Left Justify o Right Justify y aquí está bastante mezclado.

Para aclarar un poco mejor el asunto.

El conversor siempre funciona a 10 ó 12 (en los pics con conversor de 10 y 12 bits), el truco para trabajar a 8 bits, consiste en usar el LEFT JUSTIFY.  
Hablando de los de 10 bits (los más comunes) pongamos el siguiente ejemplo:

Rtdo (binario) = 00000010 00110011


Si se utiliza el right justify , es decir ADCON1,ADFM = 1 el resultado quedará

ADRESH = 00000010b
ADRESL = 00110011b



Si se utiliza el left justify , es decir ADCON1,ADFM = 0 el resultado quedará

ADRESH = 10001100b
ADRESL = 11000000b


Si quieres trabajar en 8 bits, pues pones el ADCON1,ADFM en 0, y solo lees y trabajas con el ADRESH.  

Si quieres trabajar en 10 bits, pues ambas formas sirven, aunque lo recomendable s usar RIGHT JUSTIFY.   Si utilizas LEFT JUSTIFY, deberás tener mayor cuidado y probablemente hacer alguna rotación para guardar los datos si piensas procesarlos normalmente.  En muchos casos el A/D se usa para comparar valores y en función de ello tomar decisiones y en estos casos, ambas cosas sirven ya que al final se termina comparando con "constantes" que en assembler sería lo mismo de una forma u otra.

Saludos





- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)