Práctica básica de E/S y tiempo
Precisión del Cristal
El reloj interno RC del chip Propeller sirve para aplicaciones no sensitivas al tiempo tales como control de
salidas basadas en entradas y luces parpadeando. Para aplicaciones que son sensitivas al tiempo como
comunicación serial, generación de tonos, servo control y temporizadores el chip Propeller puede conectarse
a cristales osciladores y otras señales de alta precisión a través de sus pins XI y XO.
El oscilador interno del chip Propeller en su modo por defecto RCFAST es el que usa el chip Propeller si el
programa no especifica otra fuente o modo. La frecuencia nominal del oscilador es 12MHz, pero es una
frecuencia actual que puede caer en el rango de 8 a 20 MHz. Esto es un error de +66 a -33%. Nuevamente,
para aplicaciones que no requiere tiempo preciso es suficiente. Por otro lado una aplicación como
comunicación serial asíncrona puede tolerar únicamente 5% de error y eso es sumando los errores del
transmisor y el receptor. En diseños prácticos será mejor apostar por un error menor del 1%. Usando un
cristal oscilador externo para la fuente de reloj en el chip Propeller la frecuencia puede estar dentro de esta
tolerancia e incluso en tolerancias de diseños de temporizadores.
La Plataforma PE tiene un cristal de cuarzo de ESC Inc. HC-49US conectado a los pins XI y XO del chip
Propeller que puede usarse en la mayoría de aplicaciones sensitivas al tiempo. La hoja de datos para esta
parte menciona una tolerancia de +/- 30 PPM que significa +/- 30 ciclo de reloj en un millón. Eso es un
porcentaje de error de +/- 0.003%. Obviamente es más que preciso para una comunicación serial asíncrona y
también para servo control y generación de tonos. No es necesariamente ideal para relojes; el error de este
cristal puede hacer que una alarma de reloj gane o pierda 2.808s por día. Esto puede ser suficiente para
relojes que se verifican continuamente con un reloj atómico para actualizarse. Tenga en mente que para
hacer que el chip Propeller funcione con precisión de reloj de pulso solo necesita un oscilador más preciso
La hoja de datos del HC-49US también tiene límites para temperatura (+/- 50PPM) y desgaste (+/- 5 PPM por
año). Incluso después de 5 años en su rango de -10 + 70ºC el máximo error podría ser 105PPM lo cual está
todavía en control, pero nuevamente, una alarma de reloj podría ganar o perder 9 s por día.
Como
almacena la frecuencia del reloj del sistema el código objeto puede confiar en él para
clkfreq
el tiempo sin importar la configuración del reloj del sistema. El comando
de ciclos por segundo basado en la configuración del sistema. Por ejemplo, este bloque
_xinfreq = 5_000_000
5,000,000 × 16, que equivale a 80,000,000.
ConstantBlinkRate.spin puede configurarse a una variedad de rangos de reloj del sistema para
demostrar como
clkfreq
Cargue ConstantBlinkRate.spin en la RMA del chip Propeller (F10). El reloj del sistema
correrá a 80 MHz.
Verifique que rango del parpadeo es de 1 Hz
Modifique la declaración de la constante
hacer que el sistema corra a 40MHz y cargue el programa en la RAM (F10)
'' File: ConstantBlinkRate.spin
CON
_xinfreq = 5_000_000
_clkmode = xtal1 + pll16x
PUB LedOnOff
dira[4] := 1
repeat
outa[4] := 1
waitcnt(clkfreq/2 + cnt)
outa[4] := 0
waitcnt(clkfreq/2 + cnt)
El reloj de sistema del Propeller trabaja ahora a 40MHz. El LED está parpadeando a 1Hz todavía?
Repita para
pll4x
estas frecuencias del reloj del sistema.
Pagina 54 · Kit Educativo de Prácticas Propeller: Fundamentos
y
_clkmode = xtal1 + pll16x
mantiene constantes de tiempo sin importar la frecuencia del reloj.
,
, y
. No deberá cambiar el rango de parpadeo a ninguna de
pll2x
pll1x
, por lo que
clkfreq
para leer
_clkmode
_clkmode = xtal1 + pll8x
regresa el numero
clkfreq
usa
CON
regresa el valor de
y