MCU de 8 bits con ADC de 12 bits, ¿es posible?

0

Estoy tratando de medir el voltaje y la corriente de la batería pero con una precisión muy alta. Así que seleccioné un ADC de 12 bits para ser conectado (a través de I2C) con mi microcontrolador. Mi microcontrolador recibirá estos valores del ADC y los enviará a la PC a través del USB.

Ahora mi pregunta es, podemos interconectar un 12bit ADC con un 8bit MCU como this ?

Al ser nuevo para los microcontroladores, realicé una investigación en Internet y obtuve el concepto de microcontroladores de 8 bits. Pero no pude encontrar ningún lugar si puedo conectarlo con un ADC de 12 bits.

También SI puedo conectarlo, sería más fácil de usar, por ejemplo, para una MCU de 32 bits como this en lugar de usar el microcontrolador de 8 bits, e interactuar con el ADC de 12 bits? PS por 'más fácil Me refiero a la simplicidad de la codificación.

Esperamos tus sugerencias.

Gracias.

    
pregunta yiipmann

3 respuestas

4

Por lo general, cuando conecte dispositivos a través de I2C u otros buses de nivel IC, transferirá una palabra de información fuera de su dispositivo, como 8 bits a la vez, pero la carga útil puede variar entre protocolos (generalmente una palabra de protocolo definida o un rango de palabras ). Entonces, para ver cómo funcionará su MCU de 8 bits con su DAC de 12 bits, primero observe la estructura de datos interna de la salida de ADC.

Puedeverquesetratadeunnúmerode16bitsrellenadoysepuedealmacenardeformaordenadaendosbytes/palabrasutilizandosuMCU.Enc,estenúmeroseleerádeformatransparentecomou_int16odefiniciónequivalenteparasuplataforma.Además,siprogramaenC,lasestructurasdedatosdemúltiplespalabrassemanejandemaneratransparente,elprocesamientoylasoperacionesmatemáticasseríanmáslentas,peropodríaalmacenardemaneraseguraunADCde24bitsenunu_int32yelcompiladormanejarálosdetallesdeniveldepalabraparati.

Ahora,cuandosetratadeunprotocolodetransferencia,I2CesunprotocolodetransferenciaenserieypuedemasticarlosdatosenelladodelaMCUcomodesee(inclusoconunmcude7bitssituvieraunabestia),peroelbusdivideperfectamenteeldatosparaustedinsistiendoenunACKdespuésdecada8bits.

VeamoslaseñalizaciónI2CparasuADC.

Puede ver que todas las comunicaciones están bien divididas en secciones de 8 bits, escribiendo palabras de comando, escribiendo registros, leyendo datos, etc. Si estuviera intercambiando bits de este protocolo en su MCU en ensamblaje, podría trabajar fácilmente con su operaciones de nivel de palabra sin demasiado dolor de cabeza. En C, el compilador haría esto de manera transparente.

Su MCU es inteligente y manejará una gran cantidad de detalles a nivel de bus para usted. Puede realizar transacciones I2C utilizando unos pocos registros de control en su MCU sin tratar con los detalles de tiempo como se muestra arriba. Para la hoja de datos que vinculó (Atmega 48/88/168) el capítulo relevante es el Capítulo 21 (Interfaz de dos cables). En la siguiente figura se muestra un diagrama de alto nivel de las comunicaciones I2C utilizando su MCU.

El beneficio de usar el I2C integrado es que ahorras mucho espacio de programa y ciclos de reloj que se gastarían en I2C en tu código.

    
respondido por el crasic
4

No hay absolutamente ningún problema en la interfaz de un ADC de 12 bits con un micro de 8 bits. El que muestra tiene una interfaz I2C, por lo que es un poco más fácil si elige un micro con soporte de bus I2C. Atmel los llama "Interfaz serial de 2 hilos orientada a bytes" debido a los derechos de IP de Philips, y los procesadores Atmega tienen una interfaz de este tipo en el hardware.

Es común usar más de un byte para representar datos. Si estuviera programando en C, podría usar un int, long int o incluso un float. Puede escribir código en el ensamblador para tratar con números de 8, 16, 32 o 256 bits si realmente lo desea (limitado por la memoria).

La simplicidad de la codificación depende en gran medida de lo que está intentando lograr exactamente, y de cuáles son sus herramientas y experiencia. Si está utilizando un compilador, la mayoría de los detalles del hardware están ocultos para usted, por lo que no importa mucho (la velocidad podría ser un factor más importante).

    
respondido por el Spehro Pefhany
3

Es muy común tener ADCs integrados con microcontroladores de 8 bits que sean de 10 bits o de 12 bits.

El resultado del ADC generalmente se devuelve en dos registros de 8 bits etiquetados alto y bajo (ADRESH y ADRESL en el diagrama a continuación).

El resultado se puede devolver con una justificación a la izquierda, lo que significa que el bit alto del resultado corresponde al bit alto (bit 7) del byte alto de dos registros de 8 bits.

La otra opción es que el resultado se justifique a la derecha, lo que significa que el bit bajo del resultado corresponde al bit bajo (bit 0) del byte bajo de dos registros de 8 bits.

La justificación a la izquierda le da efectivamente una conversión de 8 bits simplemente leyendo ADRESH. Los dos bits menos significativos están en ADRESL y se desechan. A menudo, esto es útil cuando quiere un resultado rápido y no quiere lidiar con el código adicional y el tiempo con un valor de 16 bits.

Por supuesto, el formato justificado a la izquierda todavía se puede usar para acceder al resultado completo de 10 o 12 bits, pero el formato justificado a la derecha que se describe a continuación es realmente más útil.

Justificado a la derecha da un resultado completo de 10 o 12 bits (según el tamaño del ADC), en un formato conveniente. Cuando se lee en una variable de 16 bits, hay suficiente espacio para agregar lecturas juntas para promediar sin un desbordamiento. Sin embargo, entonces tienes que lidiar con la aritmética de 16 bits.

    
respondido por el tcrosley

Lea otras preguntas en las etiquetas