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_int16
odefiniciónequivalenteparasuplataforma.Además,siprogramaenC,lasestructurasdedatosdemúltiplespalabrassemanejandemaneratransparente,elprocesamientoylasoperacionesmatemáticasseríanmáslentas,peropodríaalmacenardemaneraseguraunADCde24bitsenunu_int32
yelcompiladormanejará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.