Conexión de varios dispositivos serie de velocidad mixta a dos microcontroladores

0

Estoy tratando de descubrir la mejor manera de integrar todos los dispositivos a la perfección en los microcontroladores basados en 8051. Si cada dispositivo tuviera la misma velocidad baja, entonces podría multiplexar todos y cada uno de ellos dentro de la rutina del temporizador por sí mismo y olvidarme de la interrupción en serie, pero un dispositivo debe ejecutarse aproximadamente 10 veces más rápido. Pero encontré un cuello de botella ...

INTERRUPTS

Sin duda, la forma óptima es tener una interrupción para la rutina en serie y otra para el temporizador para que todo se ejecute limpiamente. He redactado el código en bruto a continuación:

Org (Timer)
(insert software uart routines here)
reti

Org (Serial Interrupt vector)
push PSW
mov PSW,#SERIALBANK
jbc RI,gotabyte
jbc TI,sentabyte
exitserial:
pop PSW
reti

gotabyte:
  mov CHAR,SBUF
ajmp exitserial

sentabyte:
  inc R1
  cjne R1,#ENDOFBUF,notend
    ajmp exitserial
  notend:
  mov SBUF,@R1
ajmp exitserial

Pero hay un gran problema. Parece que puedo recibir y enviar datos correctamente en el dispositivo de mayor velocidad mientras todos los dispositivos de menor velocidad están desincronizados (solo porque la interrupción en serie tiene prioridad y retrasa la ejecución del temporizador que maneja los UART restantes por el tiempo que lleva para terminar su interrupción), o puedo hacer que todos los dispositivos de baja velocidad funcionen correctamente mientras el dispositivo de alta velocidad no está sincronizado (solo por la situación opuesta ... el temporizador se ejecuta justo en un mal momento mientras que la rutina en serie intenta enviar o recibir datos). Confíe en mí, incluso ejecuté un temporizador y verifiqué los indicadores de TI y RI a una velocidad mucho mayor que la del UART y que incluso devolvió datos inexactos.

Así que pensé en una idea

Según mis tarjetas de circuitos anteriores y el hardware disponible para mí, estoy pensando en descargar la mayoría de las rutinas en serie a otro microcontrolador basado en 8051 (AT89C2051), ya que gran parte de los datos en serie que ingresan al sistema principal se descartan casi de inmediato. después del procesamiento (como la suma de comprobación).

La pregunta es, ¿cuál es la mejor forma de transferir datos entre los dos microcontroladores?

En su estado actual, puedo crear uarts adicionales y todos corro a una velocidad lenta en el microcontrolador principal, pero estoy tratando de pensar en una forma de enviar los datos de manera confiable a través de tres cables sin introducir retrasos graves a ambos lados hasta el punto en que los datos de cualquier dispositivo no estén sincronizados.

Uno puede sugerir SPI, pero eso implica tener un microcontrolador parado hasta que se ajuste la línea del reloj. Convertirla en una línea UART no funcionará porque el microcontrolador más pequeño que está conectado a la radio de alta velocidad podría perder caracteres porque la rutina en serie interrumpirá constantemente el flujo de datos.

Si mi idea de usar dos micros es la mejor para mi situación, ¿puede alguien dirigirme a un buen protocolo de datos asíncrono al que pueda recurrir para usar solo tres cables?

Para mayor claridad en mi diagrama, S1 a S4 son sensores individuales, y RIN y ROUT son conexiones al módulo de radio. DIN, DOUT y DCLK son Entrada de datos, Salida de datos y Reloj, pero esos nombres podrían cambiarse más adelante.

Ambos micros son operados por cristales independientes de 22.1184Mhz con condensadores cerámicos de 33pF conectados entre cada pin de cristal y tierra.

    
pregunta Mike

2 respuestas

0

Yo diría, cualquiera de los dos:

  1. Haga esto con el sondeo, y solo verifique el dispositivo rápido 10 veces más seguido que los otros dispositivos. O ..

  2. Haz todo con interrupciones, pero asegúrate de que sean extremadamente rápidas. Al igual que simplemente copie el nuevo byte en un búfer y salga, procese los datos más tarde. De esta manera, es posible que pueda recibir de muchas transmisiones en serie al mismo tiempo. Esto hace que los recursos sean más eficientes, pero podría crear una situación en la que las comunicaciones en serie experimenten fallas ocasionales si todos los dispositivos reciben un mensaje exactamente al mismo tiempo.

respondido por el Drew
0
  

porque la interrupción en serie tiene prioridad y retrasa la ejecución del temporizador que maneja los UART restantes en el tiempo que lleva terminar su interrupción

Ha omitido el registro de IP en el 8051, que permite configurar el temporizador en alta y el puerto serie en baja . Ahora su temporizador puede anticipar la interrupción del puerto serie.

    
respondido por el Turbo J

Lea otras preguntas en las etiquetas