Está en la página 1de 5

SPI es una interfaz síncrona, full duplex maestro-esclavo.

Los datos del maestro o el esclavo se


sincronizan en el borde del reloj ascendente o descendente. Tanto el maestro como el esclavo
pueden

ionar el esclavo habilitando la señal CS. Por lo general, la selección de chip es una señal baja activa;
por lo tanto, el maestro debe enviar un 0 lógico en esta señal para seleccionar el esclavo. SPI es
una interfaz full-duplex; tanto el maestro como el esclavo pueden enviar datos al mismo tiempo a
través de las líneas MOSI y MISO respectivamente. Durante la comunicación SPI, los datos se
transmiten simultáneamente (desplazados en serie al bus MOSI / SDO) y se reciben (los datos en el
bus (MISO / SDI) se muestrean o leen). El borde del reloj serie sincroniza el desplazamiento y el
muestreo de los datos. La interfaz SPI proporciona al usuario flexibilidad para seleccionar el borde
ascendente o descendente del reloj para muestrear y / o cambiar los datos. Consulte la hoja de
datos del dispositivo para determinar la cantidad de bits de datos transmitidos utilizando la
interfaz SPI.

En SPI, el maestro puede seleccionar la polaridad del reloj y la fase del reloj. El bit CPOL establece
la polaridad de la señal de reloj durante el estado inactivo. El estado inactivo se define como el
período en que CS es alta y pasa a baja al comienzo de la transmisión y cuando CS es baja y pasa a
alta al final de la transmisión. El bit CPHA selecciona la fase del reloj. Dependiendo del bit de
CPHA, el borde del reloj ascendente o descendente se usa para muestrear y / o cambiar los datos.
El maestro debe seleccionar la polaridad del reloj y la fase del reloj, según los requisitos del
esclavo. Dependiendo de la selección de bits CPOL y CPHA, hay cuatro modos SPI disponibles. La
Tabla 1 muestra los cuatro modos SPI.
Sincronización de MCU

En la sincronización de sistemas de una única MCU no se requiere ninguna consideración especial


en el diseño del software, ya que existe un reloj único que proporciona en forma regular el
tiempo en cada momento. Los sistemas distribuidos en cambio, tienen un reloj por cada CPU del
sistema, por lo que es fundamental una coordinación entre todos los relojes para tener una hora
única. Por esto, se debe definir alguna representación de tiempo y además los dispositivos deben
aceptar sincronización horaria por un dispositivo externo. Un factor de mérito deseable
entonces, es la dispersión de hora que presentan cada una de las unidades respecto a un reloj
patrón. Este factor se denomina exactitud, debe ser acotado y es normal obtener un valor de este
que esté por debajo de 1 milisegundo (1ms). La sincronización así definida haría posible presentar
una secuencia de eventos ocurridos en un ambiente (industrial u otro similar), vinculado a
microcontroladores, con consistencia independientemente de la unidad que hubiere registrado
cada evento. La exactitud de esta secuencia, será determinada por la convergencia que
guardaren los RTC de cada una de las unidades a través del tiempo. Es por ello que la
sincronización es el elemento vital en la presentación de los resultados o en la evaluación del
estado del sistema que es presentado al usuario. Y si los osciladores de cada microcontrolador son
ligeramente te diferentes, típicamente alrededor de 20 partes por millón(ppm)y como
consecuencia todos los relojes sufren un desfase y deben ser sincronizados periódicamente. La
sincronización no es trivial, porque se realiza a través de mensajes por la red, cuyo tiempo de
transmisión puede ser variable principalmente, a variable en el dispositivo que sincroniza por un
lado y las propias derivas de cristales de cada unidad por el otro, los cuales conjugadamente llevan
sesgos apreciables en un momento dado. Dado que todos los dispositivos de la red tienen la deriva
de hora aludida, debe elegirse uno de ellos como patrón de hora y el resto de los individuos de la
red debe ser sincronizados mediante algún procedimiento con la que indica ese patrón. De esta
forma , se llega a los que da en llamar sincronización interna.

Sincronización interna

Se decide implementar una estrategia de sincronización en el cual el dispositivo que arbitra el flujo
en cada subred multipunto cada concentrador, sea el encargado de enviar en forma periódica y
entrelazada con los mensajes de datos, un mensaje de sincronismo en boardcast para todas las
unidades de la subred. Con esta metodología , cada unidad de la subred recibe el mensaje de
sincronismo efectúa el ajuste de su reloj interno.

TEMPORIZADORES/CONTADORES

El oscilador del microcontrolador utiliza cristal de cuarzo para su funcionamiento. Aunque no se


trata de la solución más simple, hay muchas razones para utilizarlo. La frecuencia del oscilador es
definida con precisión y muy estable, así que siempre genera los pulsos del mismo ancho, lo que
los hace perfectos para medición de tiempo. Tales osciladores se utilizan en los relojes de cuarzo.
Si es necesario medir el tiempo transcurrido entre dos eventos, basta con contar los pulsos
generados por este oscilador. Esto es exactamente lo que hace el temporizador.

al-mundo-de-los-microcontroladores-basic-chapter-01-fig0-28
La mayoría de los programas utiliza estos cronómetros electrónicos en miniatura. Generalmente
son registros SFR de 8 o 16 bits cuyo contenido se aumenta automáticamente con cada pulso.
¡Una vez que se llena el registro, se genera una interrupción! Si el temporizador utiliza el oscilador
de cuarzo interno para su funcionamiento, es posible medir el tiempo entre dos eventos (el valor
de registro en el momento de iniciar la medición es T1, en el momento de finalizar la medición es
T2, el tiempo transcurrido es igual al resultado de la resta T2 - T1). Si los registros se aumentan con
los pulsos que vienen de la fuente externa, tal temporizador se convierte en un contador. Esto es
una explicación simple de su funcionamiento.

Temporizadores

En práctica, los pulsos generados por el oscilador de cuarzo son llevados al circuito una vez por
cada ciclo de máquina directamente o por el pre-escalador, lo que aumenta el número en el
registro del temporizador. Al incorporar al cuarzo que oscila con una frecuencia de 4 MHz se aplica
lo siguiente: si una instrucción (un ciclo de máquina) dura cuatro períodos del oscilador de cuarzo,
este número será cambiado un millón de veces por segundo (cada microsegundo).

Es fácil de medir los intervalos de tiempo cortos de la manera descrita anteriormente (hasta 256
microsegundos porque es el mayor número que un registro puede contener). Esta obvia
desventaja se puede superar de varias maneras: al utilizar el oscilador más lento, por medio de
registros con más bits, del pre-escalador o de la interrupción. Las primeras dos soluciones tienen
algunas debilidades así que se recomienda utilizar el pre-escalador y/o la interrupción.

CONTADORES

Si un temporizador se suministra por los pulsos ingresados por el pin de entrada en el


microcontrolador, se produce un contador. Evidentemente, es el mismo circuito electrónico capaz
de funcionar en dos modos diferentes. La única diferencia es que los pulsos para contar se
ingresan por el pin de entrada y que su duración (anchura) no es definida. Por eso, no se pueden
utilizar para medición de tiempo, sino que se utilizan para otros propósitos, por ejemplo: contar
los productos en la cadena de montaje, número de rotaciones del eje de un motor, pasajeros etc.
(dependiendo del sensor utilizado).

TEMPORIZADOR PERRO GUARDIÁN (WATCHDOG)

El perro guardián es un temporizador conectado a un oscilador RC completamente independiente


dentro del microcontrolador. Si el perro guardián está habilitado, cada vez que cuenta hasta el
máximo valor en el que ocurre el desbordamiento del registro se genera una señal de reinicio del
microcontrolador y la ejecución de programa inicia en la primera instrucción. El punto es evitar
que eso ocurra al utilizar el comando adecuado. La idea se basa en el hecho de que cada programa
se ejecuta en varios bucles, más largos o cortos. Si las instrucciones que reinician el temporizador
perro guardián se colocan en lugares estratégicos del programa, aparte los comandos que se
ejecutan regularmente, el funcionamiento del perro guardián no afectará a la ejecución del
programa. Si por cualquier razón (con frecuencia por los ruidos eléctricos) el contador de
programa “se queda atrapado” dentro de un bucle infinito, el valor del registro continuará
aumentado por el temporizador perro guardián alcanzará el máximo valor, el registro se
desbordará y, ¡aleluya! ¡Ocurre el reinicio y el programa será ejecutado desde el principio!
Time step size estimation
La mayoría de las simulaciones transitorias consisten en una cantidad
considerable de pasos de tiempo. Por lo tanto, la elección del tamaño del paso
de tiempo es crítica para la eficiencia de las simulaciones transitorias. De
manera similar a la cuadrícula de discretización espacial, el uso de un tamaño de
paso de tiempo constante provoca una precisión deficiente o una gran cantidad
de pasos.

Se utiliza un tamaño de paso de tiempo constante cuando las ventajas del


tamaño de paso variable son pequeñas como, por ejemplo, para señales de
entrada periódicas simples, por ejemplo, sinusoides, y cuando se quiere evitar la
sobrecarga computacional de un control de paso de tiempo sofisticado. El caso
más importante en el que se utilizan tamaños de paso de tiempo constante es
cuando los resultados de la simulación son la entrada de algún procesamiento
posterior en el que un tamaño de paso de tiempo constante conduce a una
mayor precisión o a algoritmos más eficientes, por ejemplo, la transformación
discreta de Fourier .

En el caso general, se utiliza un tamaño de paso de tiempo variable. Para


problemas simples, el tamaño de paso de tiempo óptimo puede determinarse
analíticamente. Al simular dispositivos semiconductores generales, esto no es
posible y, por lo tanto, deben usarse métodos numéricos para estimar el
tamaño del paso.

Figura 4.5: Estimación del error de discretización con el método de duplicación por pasos
de dos niveles.

Un método para determinar el tamaño de paso de tiempo óptimo es estimar el


error de discretización y luego elegir el tamaño de paso de tal manera que no se
supere un umbral dado. Sin embargo, en la mayoría de los casos, la estimación
del error de discretización es computacionalmente bastante costosa y podría
exceder la ventaja obtenida en comparación con un método más simple que
elige tamaños de paso de tiempo que son más pequeños que el tamaño de paso
óptimo. Por ejemplo, en el método de duplicación de pasos de dos niveles [ 35 ]
para un tamaño de paso elegido, se calcula un paso transitorio con este tamaño
de paso y se compara con el resultado de dos pasos transitorios con la mitad del
tamaño de paso para estimar el error de discretización de tiempo mi t (ver
Fig. 4.5 ).

.
(4.2)
mi t = || C t/2 -C t ||

aquí mi t es el error de discretización para un intervalo de tiempo de


tamaño t . El orden de la discretización de tiempo que es uno para el método
de Euler hacia atrás viene dado por q . C t es el valor de la cantidad
discretizada C después de un intervalo de tiempo de tamaño t . C t / 2 es el
valor de la misma cantidad después de dos pasos de tiempo t/2
comenzando en la misma instancia.

El único método para garantizar que los tamaños de los pasos no se elijan
demasiado grande es verificar el error de discretización. Para muchas
aplicaciones esto no es factible y, por lo tanto, se utilizan otras cantidades para
estimar el tamaño del paso y decidir si el último paso fue demasiado
grande. Muchos de estos métodos son computacionalmente muy eficientes,
pero deben usarse con precaución porque no hay un control directo del error de
discretización. Por lo tanto, se requiere algo de experiencia para elegir los
parámetros apropiados.

Un método muy simple para determinar si se puede aumentar o reducir el


tamaño del paso de tiempo es utilizar el número de iteraciones del sistema de
ecuaciones no lineales que son necesarias para calcular un paso de tiempo. Otro
método utilizado con frecuencia es verificar la norma de actualización del último
paso de tiempo calculado n .

También podría gustarte