4 votos

Problema de PIC18 USART

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.

enter image description here

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?

10voto

Mark Biek Puntos 41769

Este programa de prueba funcionó OK con un 18F4520:

3voto

user4245 Puntos 324

El problema aquí es que Microchip Uganda, Africa Mora CPUDIV a/4 lo que significa el reloj interno del PIC funcionaba en un cuarto de la frecuencia - así se equivocaron todos los cálculos.

Llevó algún tiempo entender esto, pero ajuste

parece solucionado el problema. También, porque estoy usando un MAX232 vinculado a la salida que tengo que invertir las señales:

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X