Distorsión de señal UART con AVR

Al evaluar la placa Libelium Waspmote para redes de sensores inalámbricos, descubrimos un extraño problema de comunicación.

Intentamos configurar un enlace entre waspmote y otra placa a través de UART a 115200 baudios usando 8N1.

Esta es la forma de onda resultante en Tx para enviar 9 veces 0x55 (01010101b):

Gráfico de osciloscopio

Los niveles de alto y bajo degeneran hasta el umbral de detección: comenzando con un nivel alto de 3,3 V, los picos caen a aproximadamente 2,7 V y los mínimos comienzan a aproximadamente 1,1 V y caen a 0,7 V.

De acuerdo con la especificación de las tarjetas de destino, los picos deben ser > 2,3 V y los mínimos < 1 V para un funcionamiento correcto.

Me parece que surge algún comportamiento capacitivo, pero no tengo idea de por qué sucede esto.

Necesito una pista sobre lo que está sucediendo, lo que estoy haciendo mal o lo que puedo hacer para solucionar este problema.

Alguna información adicional:

  • El microcontrolador del waspmote es un Atmega1281, y sus pines uart están conectados directamente al enlace de comunicación (sin controladores intermedios).
  • No puedo reducir la velocidad en baudios ya que la placa de destino solo acepta 115200 baudios.

ACTUALIZAR 1

Hice una toma de detalle de la señal. Estamos viendo una transmisión de aproximadamente 125 kHz, lo que parece estar un poco lejos de los 115200 baudios deseados a los que apunto.

No exactamente 115200 baudios

ACTUALIZAR 2

Mido formas de onda idénticas cuando desconecto la placa objetivo y coloco la sonda del osciloscopio directamente en el UART-Pin del microcontrolador. Esto parece descartar problemas con el tablero de destino. Sin embargo, la tasa de baudios medida es exactamente 125000, que es un error de alrededor del 8% de la tasa de baudios objetivo deseada de 115200. Dado que la especificación de UART limita el sesgo de la tasa de baudios al 2%, supongo que ese es mi problema. Sin embargo, dado que la placa waspmote está bloqueada a una velocidad de reloj de 8Mhz, el Atmega1281 de la placa no puede producir un reloj de 115200 baudios más preciso a través de los registros del preescalador (revisé el manual). Supongo que necesitaré otra placa para comunicarme con mi placa de destino.

Gracias a todos.

Eso se parece casi al zumbido siempre presente de 50/60 Hz que impregna el universo en estos días. Verifique su conexión a tierra.
@Majenko: la apariencia es similar, pero el tiempo parece tener sentido solo si tiene una red de 500 Hz a 50 Hz :-). 100 uS/división = 1 mS en la pantalla y parece aproximadamente 1/2 ciclo, por lo que 2 mS/ciclo = 500 Hz. PERO el alcance puede estar mostrando una imagen basada en múltiples ciclos
Zumbido de 60 hz con unos 50 mezclados en sonidos un poco sexys. ;)
¿Son estos consistentes?. Puede ser: "los pines uart están conectados directamente al enlace de comunicación" y el otro microcontrolador UART está conectado a un multiplexor de cuatro canales, y es posible seleccionar... cuál de los cuatro nuevos UART se requiere para conectarse al UART en el microcontrolador cuatro nuevos UART están conectados de la siguiente manera. Uno está conectado a la placa GPRS, el otro al GPS y los otros dos son accesibles al usuario en el conector auxiliar I2C – UART. La configuración del multiplexor se realiza mediante: { setMuxAux1(); setMuxAux2(); setMuxGPS(); setMuxGPRS() }
A primera vista, parece un acoplamiento capacitivo, pero mire de cerca y verá que el voltaje en realidad se está desviando en la dirección incorrecta. La polarización de CC debería haberse movido hacia arriba durante los pulsos, no hacia abajo si la señal estuviera acoplada capacitivamente. Sospecho que esto tiene más que ver con la caída de la fuente de alimentación. Puedo ver que estos no son los niveles RS-232, pero ¿es posible que haya un suministro de bomba de carga en alguna parte?
@ sum1stolemyname Al cambiar el sobremuestreo de 16x a 8x, puede obtener 111111 baudios, que está mucho más cerca que 125000 baudios y, a menudo, funciona. Actualicé mi respuesta a continuación para ser más explícito al respecto.

Respuestas (2)

Es probable que su problema sea el uso de la velocidad en baudios incorrecta: 112500 es probablemente un error, la velocidad estándar en ese rango es 115200 (una búsqueda en el sitio web del fabricante para este número encuentra muchos resultados, pero ninguno para 112500). También es posible que no esté produciendo la velocidad de transmisión programada en un extremo o en el otro debido a la granularidad del divisor; a veces, cambiar el sobremuestreo del UART puede ayudar. EDITAR: Específicamente, un valor de 8 (divisor de 9) le dará 111111 baudios de 8 MHz si configura el bit de modo de "velocidad doble".

En segundo lugar, tiene un problema, como la falta de una conexión a tierra común entre las placas, o no ha conectado a tierra el osciloscopio, lo que da como resultado una forma de onda distorsionada. Aún no está claro si eso es lo que ve el receptor, o si es simplemente un error de medición al aplicar el alcance.

Además, ¿ha verificado que la placa externa sin nombre también se ejecuta sin un traductor de nivel de serie? La mayoría de las comunicaciones en serie entre placas modulares se encuentran en niveles RS232 y lógicamente invertidas de las señales de nivel lógico, aunque hay excepciones.

En realidad, este era el principal problema. La señal distorsionada es un artefacto de una sonda de osciloscopio mal configurada. Aceptado.

Como usted dice, la señal parece estar acoplada capacitivamente; si es así, tiene un sentido relativamente bueno de lo que ve. A menos que el alcance esté acoplado capacitivamente y le muestre los efectos de eso.


Una posibilidad razonable:

La guía técnica de WaspMote informa que tiene 4 UART,
cualquiera de los cuales puede ser seleccionado por un multiplexor suministrado.

De hecho, si desea ver el UART que está utilizando, ¡DEBE ser seleccionado por el multiplexor :-)!

La sección 2.5, página 16, analiza los pinouts de mux y UART, y la sección 2.5.4, en la página 18, trata sobre el control mux de software.

Si no estaba seleccionando correctamente el UART, es posible que se esté acoplando capacitivamente de manera informal. ¿Ha seleccionado correctamente el multiplexor?


Alguna posibilidad:

Una vez que esté seguro de cuál debe ser la ruta de conexión de CC, puede verificarla.

  • Desconecte la alimentación de todos los sistemas. Mida la continuidad de CC de extremo a extremo en la línea de señal a lo largo de la ruta más larga que debería ser resistiva de CC.

    ¿Lo es?

  • Mida la continuidad de tierra desde el pin de tierra del procesador hasta la tierra del procesador Waspmote.

    Obviamente, estos deberían ser CC continuos.


Vale la pena ir:

Decida si hay un punto en el cct de TX tan cerca del punto de origen de la señal que pueda conectarse a tierra o desconectarse con una resistencia de valor pequeño. También tal vez tirado para suministrar. Si es así, hágalo y vea si el nivel de CC permanece y no solo causa una excursión acoplada capacitivamente.


desesperarse

¿Está un controlador sin alimentación, por lo que la excursión de la señal lo alimenta pero el suministro comienza a decaer bajo carga?

Mire la polaridad de la deriva y verá que no se debe al acoplamiento capacitivo. Si es así, la deriva habría sido hacia arriba durante los pulsos, no hacia abajo como se muestra.