28 de septiembre de 2011

La importancia de llamarse Ernesto (sobre la lectura de un ADC en el I ² C)

Nota de aplicación 5033

Resumen: Esta nota de aplicación explica la necesidad de atención al leer los datos de varios bytes en el I ² C-interfaz compatible.Trampas de la lectura de un byte a la vez se discuten, con algunos ejemplos concretos. El artículo también describe la forma correcta de manejar este tipo de transferencia de datos.

Introducción

El I ² C-compatible, de dos cables de interfaz es un mecanismo poderoso para la interfaz de microcontroladores o microprocesadores para periféricos de baja velocidad, como un periférico con un sistema integrado de analógico a digital ( ADC ). La forma más básica de comunicación a través de este bus (es decir, escribir / leer un solo byte a la vez a / desde el registro de un esclavo) es bastante sencillo.Sin embargo, limitándose a este enfoque en aras de la simplicidad tiene algunos escollos.

2 bytes de datos a través de un canal de 1 byte

Al igual que con cualquier otra interfaz digital para los periféricos (especialmente los sensores), tenemos que leer los datos correctos de los registros internos del dispositivo. Esto es especialmente importante cuando los datos en los cambios de registro durante el transcurso de la lectura. Los datos se pueden cambiar si el ADC sigue su conversiones o actualizaciones de los registros, mientras que los datos están siendo transferidos. Muchos dispositivos tienen un buffer interno (no suele ser accesible desde el exterior) que contiene los resultados más recientes de una conversión. El dispositivo actualiza el llamado "accesible al cliente" se registra con los nuevos datos, cuando no hay actividad de I ² C. El I ² C protocolo de transferencia de 1 byte de datos a la vez. Por lo tanto, si los datos de cantidad total de interés es superior a 8 bits y las transferencias no son manejados adecuadamente, pueden ocurrir problemas. Por ejemplo, el MAX44000 sensor 's de luz ambiental (ALS) el registro de datos puede tener hasta 14 bits de datos (además de un desbordamiento de bits que indica, lo que significa que la cuenta / lux ajuste debe ser mayor). Tabla 1. MAX44000 ALS de registro de datos

image

No puede leer directamente todos ALSDATA [13:00] más de I ² C, así que primero debe leer el contenido del registro 0x04, a continuación, lea el contenido del registro 0x05, y concatenar los datos en al menos un registro de 16 bits. Sin embargo, hay que tener cuidado en cuanto a cómo leer estos datos. Es posible hacer simplemente dos lecturas simples termina en un STOP (P) condición, como se muestra en la Figura 1 . Figura 1. Solo byte leído. Este enfoque tiene una falla fatal. En concreto, el envío de señales de la condición de STOP que el dispositivo vuelva a actualizar el "visible al cliente" registros. Así, después de obtener los datos de registro de 0x04, los 14 bits de datos, de hecho, se actualizará antes de registrarse 0x05 se puede leer. Hay varios casos en que esta falla puede tener el potencial de consecuencias desastrosas. Un ejemplo sería si los niveles de luz son en un cierto nivel, con el sensor de luz ambiente MAX44000 en 10 -, 12 -, o el modo de 14 bits. Supongamos que los niveles se cierne en un área para que los 14 bits en los registros 0x04 y 0x05 sería, ya sea en 255 o 256 el recuento total, quizás debido a la luz poco a poco aumentando o una pequeña cantidad de ruido. Considere las tres situaciones en la Tabla 2 . Tabla 2. Ilustración de la falla
Figura 1.  Solo byte leído.
image

En los últimos dos situaciones, en vez de leer 255 o 256, se lee 0 o 511. Este es un gran problema. Esto se produce porque los datos en los registros 0x04 y 0x05 se actualizó entre la primera y segunda lectura, después de una condición de parada se ha enviado. En la primera situación problemática, el primer byte se lee correctamente. Pero por el momento en que se lee el segundo byte, los datos leídos 256 el recuento total, donde el menor fue de cero bytes. Por lo tanto, obtuvimos una lectura de cero desde el dispositivo. En la situación problemática en segundo lugar, los datos también se cuenta con 256 totales. Este parecía ser 511 cargos, debido a la disminución de los datos por un cargo después de la condición de STOP fue enviado, pero antes de leer el segundo byte se. Ver Figura 2 para una muestra de las veces que esto ocurre en varias lecturas. Figura 2. Lecturas reales con un solo byte leído sobre muchas muestras. Este problema se puede evitar fácilmente mediante la lectura de dos bytes a la vez, como se ilustra en la Figura 3 . Esto se hace mediante el envío de un inicio repetido en lugar de una condición de parada después de que el primer byte de datos se lee, y es bastante sencillo de implementar. Mediante la lectura de 2 bytes, que evitar que la parte de la realización de más I ² C actualizaciones registrarse, a pesar de que enviar el mismo número de bits entre los dos dispositivos en general. Figura 3. Ilustración de un byte 2-Leer.El ejemplo anterior se aplica a la MAX44000 y MAX44009 , que no autoincrement el puntero del registro al hacer varias lecturas. Su dispositivo puede comportarse de manera diferente, pero el principio es siempre el mismo. Esto se puede extender fácilmente a la lectura de N bytes. Para algunas ideas sobre cómo implementar esto en C, consulte la nota de aplicación de 3588, " Software I ² Driver C para el microcontrolador MAXQ2000 . " Actualizaciones automáticas ¿Quieres ser notificado automáticamente cuando nuevas notas de aplicación se han publicado en sus áreas de interés? Regístrate para EE-Mail ™ .
Figura 2.  Lecturas reales con un solo byte leído sobre muchas muestras.

Por:
Ilya Veygman, ingeniero de aplicaciones estratégicas



Figura 3.  Ilustración de una lectura de 2 bytes.

image

No hay comentarios:

Publicar un comentario