Lecturas SPI siempre altas (1) cuando se conectan a través de un cambiador de nivel bidireccional

0

Estoy intentando leer dos sensores de gas (MQ4 para metano y MQ7 para monóxido de carbono) con mi NodeMCU ESP8266. Ambos sensores requieren 5v (para los calentadores) y tienen 4 pines (GND, VCC, DO, AO). Las salidas digitales son ALTAS cuando se excede un umbral (ajustable en la tabla de ruptura). Para leer las salidas analógicas, estoy usando el ADC de 10 bits MCP3008, que funciona con una mayor precisión a 5V. Sin embargo, ESP8266 es 3.3V.

Estoy usando un cambio de nivel bidireccional de 8 canales para comunicarme con MCP3008. MCP3008 y los sensores están conectados a Vin y GND en la placa NodeMCU ESP8266, que proporciona 5V.

La palanca de cambios de nivel también está conectada a 5V en el lado de alta tensión y a 3.3V en el lado de baja tensión. La palanca de cambios de nivel funciona bien para salidas digitales de sensores. Pero cuando se trata de SPI entre MCP3008 y NodeMCU ESP8266, siempre leo valores altos (1023). Cuando me deshago de la palanca de cambio de nivel y enciendo el MCP3008 con 3.3 V con un potenciómetro, puedo leer los valores entre 0 y 1023. También los sensores emiten valores analógicos entre 0-5 V (probados con gas más ligero y multímetro). Por lo tanto, debe haber un problema entre el cambio de nivel y la comunicación SPI.

En el lado del software, intenté hacer la comunicación manualmente, con SPI.h y Adafruit_MCP3008.h librerías. Funcionan bien, cuando quito el cambio de nivel y opero MCP3008 con 3.3V.

Me preguntaba, ¿cuál sería el problema? No tengo un oscilador y es mi primer proyecto electrónico "real". Disculpe mi falta de jerga ... Gracias!

EDITAR: uso este modulador de nivel: enlace

    
pregunta Genom

1 respuesta

0

Mi conjetura es que el problema se debe a los bordes del reloj saliente que el traductor de niveles ensucia. Ese traductor está realmente diseñado para señales I2C, que tienen bordes muy lentos. Las señales SPI están diseñadas para ser conducidas a nivel alto y bajo, mientras que las señales I2C son conducidas a nivel bajo y son elevadas por las resistencias. Es posible que pueda hacerlo funcionar cambiando los pullups del lado HV a un valor más bajo.

TI hace el SN74GTL2003 que es similar al traductor de nivel NMOS que está utilizando, pero Está diseñado para trabajar a alta velocidad. La principal diferencia es que la parte de TI tiene varios MOSFET coincidentes y utiliza uno de ellos que no se usa como E / S para establecer el voltaje de la compuerta para todos los MOSFET. Esto establece el voltaje máximo que se pasa a través. Levante las resistencias en el lado alto y luego configure la tensión máxima en el lado alto. Todo esto se explica en la documentación de TI.

    
respondido por el crj11

Lea otras preguntas en las etiquetas

¿Por qué un BMS de 5s bajaría hasta el voltaje de salida de mi batería? ___ archivo qstnhdr ___ .BIN para ROM IC usando proteus ______ qstntxt ___

Intentando cargar un archivo .bin en un chip ROM 2732 en Proteus.

Tengo problemas para encontrar el diseño exacto del código que necesito para el archivo .BIN.

Hasta ahora he intentado escribir lo siguiente en el bloc de notas y guardarlo como .bin

00000001 00000000 00000001 00000001

y generar los datos en los primeros 4 espacios de direcciones, pero no parece que haya 'cargado' en los datos que ingresé.

Quizás a iam le falta algo como un encabezado u otras palabras clave en mi archivo .BIN.

Gracias de antemano

    
______ answer356938 ___

Un archivo ".bin" sería claramente uno binario , mientras que parece que estás creando un archivo text que contiene otra cosa, tal vez un volcado hexadecimal imprimible.

Dependiendo de cuál sea su material de origen, puede hacer que una herramienta específica de ese flujo se traduzca en una salida binaria, por ejemplo, con una cadena de herramientas de estilo gcc puede usar %code% para esto.

O puede encontrar varias herramientas de "editor hexadecimal" que le permitirán editar en un formato no muy diferente al que usted describe, pero luego guardar en un formato binario en bruto.

Si hay alguna organización en el archivo más allá del binario plano, eso sería algo impuesto por lo que sea que lea tu EPROM, no por el chip en sí. Entonces, no es algo que pueda determinarse a partir de la información en su pregunta. Sin embargo, más comúnmente, para los sistemas que utilizan un solo dispositivos de almacenamiento de un byte no existe.

    
___