Cuando necesita alcance, necesita alcance

A veces, simplemente no existe un sustituto para la herramienta de diagnóstico adecuada. [Ankit] Intenté importar algún código I2C de la plataforma Arduino al chip ARM. Cuando este último código no funcionó, se volvió inteligente y escribió un pequeño boceto para el Arduino, que enviaría cada byte que se encontrara con I2C en la línea serial. Los bytes parecían correctos, sin embargo, el OLED todavía no funcionaba.

Es hora de mostrar la herramienta adecuada para el trabajo: analizador lógico u osciloscopio. Después de hacer eso, el problema era obvio (vea la imagen estándar - Arduino arriba, ARM abajo): no entendió lo que estaba haciendo el código ARM y accidentalmente envió una señal de inicio / parada I2C entre dos bytes. Con eso asumido, estaba en el camino correcto en poco tiempo.

Acabamos de lanzar un póster épico sobre la resolución de I2C, y daremos fe de la utilidad de tener a mano un analizador completo o lógico para depurar las comunicaciones. Si sospecha que las piezas no van a donde se supone que deben ir, hay una forma de averiguarlo. Eso es concebible [Ankit] Podría mirar a través de la documentación periférica del hardware del AVR I2C y lograr encontrar los códigos de estado que también le darían la misma comprensión, pero a menudo sucede que ponerle un visor es la salida rápida y fácil.

  • Tucson Tom dice:

    Esto es divertido. Me estoy sentando a resolver un problema en i2c. Encendí mi osciloscopio y luego revisé mi correo electrónico para encontrar esto. Yo llamo a un osciloscopio un microscopio de tiempo, que es ciertamente lo que es. Casi el equivalente de “poner printf en el código y dejar que te diga lo que hace” es “conectar el alcance y ver qué pasa realmente”.

    • inakizi dice:

      Ahora que mencionas el printf, es un truco que aprendí hace mucho tiempo. Supongamos que desea depurar una máquina de estado. Puede usar un DAC sin usar (o incluso conectar uno) en su uP y generar un voltaje diferente para cada estado. Luego, sobre el alcance, es obvio lo que hace su programa. Esto me ahorró mucho tiempo depurando circuitos integrados.

      • ajford dice:

        ¡Guau! Esa es una idea bastante ingeniosa. Nunca pensé en eso. Hice algo similar usando algunos GPIO adicionales como indicadores de estado con algunos estados de registro de código y algunos en qué paso estaba, pero estaba limitado por una cantidad de pines. Combinar los dos me da mucha más flexibilidad.

        • Paul dice:

          Ligeramente variado:
          Envíe los datos de depuración a cualquier periférico (en serie) que no esté usando uart, i2c, spi, etc. y captúrelos con un analizador lógico. Mucho más preciso y puede buscar a través de sus datos.

          Hace años usé algunas macros para AVR para hacer esto por casualidad y me sorprendió lo útil que fue.

          / * ============================================ == ============================
          Definiciones de usuario para: depuración.
          Copyright 2014 Paul vd Hoeven. Publicado excepto GPL V2.
          ============================================== == ======================== * /
          / * Lib de depuración simple y poco efectiva.
          Su uso principal es enviar ciertos valores a un análisis lógico para rastrear qué
          partes de su código se expulsan y el tiempo entre los puntos marcados.

          1). Configure las macros "DEBUG_PORT", "DEBUG_DDR" y "DEBUG_BIT" para el
          depure la salida e incluya este archivo de encabezado en cada archivo .c (pp) que desee
          utilícelo para depurar. Copia / pega el ejemplo:

          // # define DEBUG_PORT PORTD // Esta definición agrega / elimina el código de depuración.
          #define DEBUG_DDR DDRD
          # define DEBUG_BIT (1 #include "debug.h"

          2). Esto hace posible utilizar un pin de depuración diferente para cada archivo fuente.
          3). Llame a la macro DEBUG_OUTPUT_ENABLE una vez para habilitar la salida.
          4). DEBUG (X) ahora se puede usar para rastrear la ruta de ejecución a través de su software
          con analizador lógico.
          5). El formato de salida es serial, 7N1 con una tasa de baudios del 50% de F_CPU.
          6). Comentar "DEBUG_PORT" y volver a compilar evitará por completo la depuración.
          7). Si el nivel de optimización es superior a -O1, la sincronización falla.
          8). Para obtener una descripción general del significado de sus números de búsqueda, puede comentar
          las líneas de depuración y luego hacer un grep en ese archivo. Vea el ejemplo a continuación.

          Error: aumento, uso de hardware SPI, U (S) ART o lo que esté disponible.
          - Se pueden enviar variables.
          - Menor tiempo de inactividad en el tiempo del programa.
          - Menor flexibilidad en los pines de salida.
          - necesita más pines de E / S.
          - Esta depuración puede usar pines diferentes para cada archivo de código fuente.
          * /

          #ifdef DEBUG_PORT
          // Solo para asegurarse de que el usuario sepa que se ingresó el código de depuración.
          // Los niveles óptimos más altos interrumpen el tiempo de depuración.
          #warning Se ingresó el código de depuración. Utilice el nivel de optimización: -O1.

          // Utilice esta macro para habilitar el pin de salida de depuración.
          #define DEBUG_OUTPUT_ENABLE _SET, (DEBUG_DDR | = DEBUG_BIT)

          // 3 macros pequeñas solo para uso interno.
          # definir _SET (DEBUG_PORT | = DEBUG_BIT)
          #define _CLEAR (DEBUG_PORT & = ~ DEBUG_BIT)
          # definir _BIT (X, Y) ((X) & (0x01

          // Startbit, un montón de bits de datos y un bit de parada.
          # definir DEBUG (X) (_CLEAR,
          _BIT (X, 0), _BIT (X, 1), _BIT (X, 2), _ BIT (X, 3),
          _BIT (X, 4), _BIT (X, 5), _BIT (X, 6),
          _COLOCAR)

          #demás
          // El preprocesador elimina las declaraciones de depuración.
          #define DEBUG_OUTPUT_ENABLE
          # definir DEBUG (x)

          #terminara si

          Desafortunadamente, las cosas en mi sitio están envejeciendo ...

  • AMA dice:

    Debugé un código de punto de interrupción JTAG con un osciloscopio y puse bordes ascendentes en los pines no utilizados en los puntos del código para disparar. Realmente puede ser la forma más sencilla de averiguar qué está mal con el software.

  • Cuando escritor = ingeniero? dice:

    Espero que los lectores sean lo suficientemente inteligentes como para saber la diferencia entre los dos dispositivos mencionados y los límites de voltaje con uno de ellos ...

    Dicho esto, al tener un analizador lógico, lo sacaría y lo usaría para I2C, ya que tendrá algunos análisis de protocolo disponibles para poder ver lo que está sucediendo sin tener que descifrar los bits para estar seguro.

    Además de tener el analizador lógico, el tamaño funcionará, pero más trabajo para obtener un valor real de su pantalla, a menos que tenga un tamaño más caro que también pueda comunicar protocolos.

    Pero usar un analizador lógico "LOGIC" limitado a TTL y tratar de leer un verdadero RS232 de nivel completo morderá a alguien si no lo conoce mejor.

    Scope lo cubriría, pero tener tales títulos y luego hablar de un equipo completamente diferente es un poco extraño.

    • Tucson Tom dice:

      Pero eres el único que habla de un analizador lógico.

      • Tucson Tom dice:

        Oh, tengo razón, sí, el título está mal. Encuentro que los analizadores lógicos son difíciles de configurar, pero invaluables cuando tienes muchos canales y solo te preocupas por los estados lógicos. Por otro lado, un osciloscopio suele ser rápido y fácil de acoplar a una sola señal y, por supuesto, le muestra el rango completo de niveles de voltaje. Acabo de invertir en Rigol DS1054Z y no podría estar más feliz. Mi viejo Tektronix 7603 no servirá de mucho.

  • kdev dice:

    Esa es una salida de un analizador lógico Saleae en la imagen, ¿verdad? Cosas buenas, esas y una interfaz de usuario mejor que cualquier otro analizador lógico que haya usado. Los dispositivos más nuevos con canales analógicos pueden incluso ser un reemplazo aceptable para un osciloscopio, siempre que trabaje con frecuencias bastante bajas como I2C.

    • Ene. dice:

      En cuanto al analizador lógico de Saleae, hace unos años compré la primera versión (solo 8bit y digital). Es un dispositivo maravilloso que me ha ayudado muchas veces. Combinado con los analizadores de protocolos resulta realmente práctico. Es mucho más fácil que calcular los bordes en las señales de la pantalla de un osciloscopio.
      Pero lo mejor de todo es la profundidad infinita que puede probar durante mucho tiempo, minutos en 24 MHz si es necesario. Lo cual es genial si no sabe cuándo ocurrirá su problema o con qué evento está relacionado.

      Es una pena que existan clones / copias baratos que pretenden ser el dispositivo real y, por lo tanto, usan la misma aplicación. Entonces, si desea un analizador versátil pero económico, elija el Saleae, apoye a los diseñadores, no a los piratas que hacen los clones.

      • Jii dice:

        O puede usar sigrok con los "clones". Tienen firmware y controlador de código totalmente libre y sigrok / pulseview también son de código abierto. Apoye el código abierto, no sobrecargue a las empresas.

        • inakizi dice:

          Si insinúa que Saleae es una “empresa que cobra de más”, está completamente equivocado. Los propietarios son productores como todos nosotros que nos ganamos la vida creando un producto maravillosamente bien diseñado a un precio muy razonable. Les compré varios analizadores lógicos y se encuentran entre los mejores medidores que he tenido. Mis felicitaciones para ellos y Jii, no todo eso de vender algo es una estafa, de alguna manera la gente tiene que ganarse la vida y contratar a otras personas. Estoy seguro de que Saleae crea mucho empleo directo e indirecto.

          • Jii dice:

            Bueno, lo siento, pero carga más de cien para un analizador lógico de 24 Mhz de 8 bits para lógica de 3.3V (porque, si no recuerdo mal, el original no tiene búfer o está mal, puede sobrecargar los pines de 5V, al igual que en algunos clones ) de un MCU de $ 2 y todo el asunto no es su proyecto, como lo entendí, casi los lleva a una empresa sobrecargada en mi libro.

            Si realmente tuviera un precio razonable, no tendría ningún problema. No hay forma de que puedas vencer a los chinos si continúas valorando tu marca. Paga $ 15 o $ 150. Bueno, tal vez me equivoque, mira dónde está Apple.

          • tekkieneet dice:

            Si tiene $ 100 para gastar en un analizador lógico, eche un vistazo a DSLogic. HaD incluso tiene una reseña y la vende en su tienda. Tiene 16 canales con búfer de 16 MB y puede probar hasta 100MS / so 200MS / s para 4 bits. El software es un poco tosco y se bloquea de vez en cuando, pero funciona.

          • tekkieneet dice:

            UPS. Puede llegar hasta 400MS / s para 4 entradas. Las sondas son pasivas con divisor de voltaje y reducen la carga para señales de alta velocidad y es un cable micro-coaxial. La mayoría de sus juguetes de bricolaje habituales o esos juguetes de 24MHz simplemente alimentan la señal con una pequeña caída alambre en un chip o búfer. Hay algo de ingeniería por ese precio.

      • PodeCoet dice:

        Le encantan los productos y el apoyo de Saleae. Recientemente actualicé mi Logic16 a Logic16 Pro (que tiene algunas funciones analógicas útiles). El software vende su producto IMO

    • Alphatek dice:

      Desafortunadamente, ningún USB LA reemplaza a uno físico, por la sencilla razón de que comenzó a funcionar. Los físicos pueden dejarte rodar, lo que significa que ves los problemas que ocurren cuando no los esperas, así como los raros.

      Una vez que sepa que están allí, todos deberían usar USB, pero hay muchos errores que he detectado en el pasado, solo tener el "rollo ancho" y ver algo "extraño" que no captaría. una mentira.

  • algún chico dice:

    Un artículo bastante extraño en mi opinión ... El código arduino es realmente trivial y ciertamente hay algo como esto en Internet, o para citar algunos otros comentarios: ¿Dónde está el truco? Usar un AVR con hardware I2C interno para obtener I2C no lo es.
    Bien, digamos algo más útil ... Para aquellos como yo que necesitan depurar un bus I2C (u otro) con un tamaño que no tiene decodificadores de protocolo (como el famoso DS1052E): es bastante fácil exportar los datos de tamaño . , conviértalo y entréguelo al analizador I2C del software Open Logic Sniffer o algún otro software (decodificadores de protocolo u otras cosas). Hice esto una vez usando una unidad flash USB, funciona, pero ahorrar 1 millón de puntos en csv es muy lento (e incluso si se invierte el formato nativo de Rigol, es complicado para una cosa rápida). Planeo conectar el osciloscopio a la computadora y automatizar todo con Perl. Es bastante fácil hablar hasta el punto y los comandos están completamente documentados por Rigol - ¡diviértete!

    • algún chico dice:

      (Para aquellos como yo que no tienen un analizador lógico sino solo un alcance ...)

    • tekkieneet dice:

      Si tiene un dispositivo o patrón que desvía el reloj o la línea de datos, entonces todo lo que ve en el analizador lógico son datos corruptos.
      Si tiene una amplitud, al menos puede colocar una pequeña resistencia en serie en el rango de 100 ohmios en el dispositivo e intentar observar la caída de voltaje a través de él para determinar si eso actúa de manera divertida bajando la señal. El flujo aparece como una pequeña gota I * R y es visible en amplitud.
      Idealmente, desea tener ambos: uno para la sincronización y otro para observar el nivel y la calidad de la señal.

  • Anton Fosselius (@MaidenOne) dice:

    Tuve un problema similar al empujar un I2C-OLED desde el brazo cuando el mismo código funcionaba bien en un arduino.
    después de una inmersión de datos, terminé cambiando la velocidad rápida y la fuerza motriz en el i2c gpio (PORT_PCR_DSE_MASK y PORT_PCR_SRE_MASK) y luego simplemente funcionó;)

  • tienda dice:

    En el pasado, los osciloscopios solían llamarse cariñosamente "medidores verdaderos". ¡Un visor bien aplicado es realmente difícil de superar! A menudo uso el mío como un reemplazo rápido incluso para un voltímetro.

Pedro Molina
Pedro Molina

Deja una respuesta

Tu dirección de correo electrónico no será publicada.