Ok, mi siguiente PIC18 problema...
USART - yo no puedo llegar a transmitir nada sensato. Todo lo que veo es aleatoria x de y invertida signos de interrogación.
Estoy utilizando el mismo BAUDIOS configuración como la que he utilizado muchas veces en PIC16s felizmente. He intentado volver a calcular la velocidad de ajuste de la fórmula, he intentado diferentes velocidades de transmisión y cristalinas diferentes frecuencias para dar diferentes baudios precisiones, pero todo lo que veo es la misma de dos caracteres incorrectos.
Si puedo cambiar la velocidad en baudios a algo completamente equivocado pone más al azar galimatías que sólo estos dos personajes.
He probado esto en 2 diferentes PIC18s - mi '4455 y mi '14K50 - ambos hacen exactamente lo mismo.
Aquí está mi programa:
void main()
{
OpenUSART ( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_BRGH_HIGH &
USART_CONT_RX, 103);
baudUSART( BAUD_IDLE_CLK_HIGH &
BAUD_8_BIT_RATE &
BAUD_WAKEUP_OFF &
BAUD_AUTO_OFF);
while(1)
{
WriteUSART('F');
WriteUSART('o');
WriteUSART('o');
WriteUSART(13);
WriteUSART(10);
}
}
103 I caclulated de un cristal de 16MHz a 9600 baudios, de acuerdo a la fórmula en la hoja de datos para el PIC.
Entonces, ¿qué me estoy perdiendo?
ACTUALIZACIÓN
La sincronización de la secuencia de datos con un alcance de he determinado que es de hecho corriendo a 2400 baudios (configuración de la computadora a 2400 baudios lo confirma).
He comprobado y el cristal es oscilante a 16MHz.
La fórmula para el cálculo de la velocidad de transmisión es:
\$\frac{F_{osc}}{(16*(n+1))}\$
donde Fosc es la frecuencia del oscilador, y n es el número pasa a la velocidad del generador.
\$\frac{16,000,000}{(16*(103+1))} = \frac{16,000,000}{(16 * 104)} = \frac{16,000,000}{1664} = 9615.384615385\$
Entonces, ¿por qué en realidad se ejecuta en 2400 baudios???
Sé que no es mi cálculos de la tabla de baudios en la hoja de datos de citas 119 para una 9600 baudios en un 18.432 MHz cristal, por lo que 103 para un 16MHz es perfectamente razonable.
Cosas que he probado:
- Cambiar a BRGH=0 - se desacelera la velocidad aún más abajo
- Interruptor de 16-bit de temporizador de 8 bits - se desacelera la velocidad en baudios a arrastrarse.
Entonces, ¿qué es extraño acerca de este UART entonces?