PIC UART para trabajar con USART

3

Me enfrento a un bloqueo de carretera con mi PIC UART / USART. Anteriormente estaba trabajando con UART en PIC18F452. Pero cuando traigo mi código para usar con PIC16F1824, no funciona. Supongo que esto se debe a que PIC16F1824 está utilizando USART mejorado. Técnicamente debería soportar UART. Pero no sé cómo hacerlo funcionar.

Estoy usando MikroC Pro. Detecta los datos entrantes utilizando UART1_Data_Ready() , cuando leí los datos usando UART1_Read() , Parece que los datos son basura.

Pregunta:

  1. ¿Cómo me aseguro de que la MCU lea los datos tal como están (UART)? En este momento solo quiero leer los datos entrantes.

  2. ¿Esto tiene algo que ver con el oscilador? Estoy usando XTAL 4Mhz.

  3. Estoy usando PICKIT 3. ¿Hay alguna forma de ver los datos entrantes?

Enlaces útiles:

Código

void main()

{

ANSELA = 0; //Digital I/O for PORTA
TRISA = 0b00100001;
PORTA = 0;
APFCON0.RXDTSEL = 1;  //0:RX is on RC5 1:RX is on RA1
TRISC = 0;
PORTC = 0;

RCSTA.RX9D = 0;
RCSTA.ADDEN = 0;
RCSTA.CREN = 1; // eneble reception.
RCSTA.SPEN = 1; //Serial port enable
RCSTA.RX9 = 0;

T1CON = 1;          // Turn on timer TMR1
PIR1.TMR1IF = 0;    // Reset the TMR1IF bit
TMR1H = 0xFC;       // TMR1H and TMR1L timer registers are returned
TMR1L = 0x18;       // their initial values
PIE1.TMR1IE = 1;    // Enable an interrupt on overflow
INTCON = 0xC0;      // Enable interrupt (bits GIE and PEIE)


PWM1_Init(4000);    //initialize PWM at 5Khz

UART1_Init(9600);

while(1)
{
  if (UART1_Data_Ready())
  {
    //Blink the LED, indication data is coming in.
     PORTA = 4;
     delay_ms(50);
     PORTA = 0;

     sVal = UART1_Read();

    //My debug code to see what character coming in
     EEPROM_Write(0x00+ii, sVal);
     ii++;

      if (sVal == '3')
         motor_run_fast();
      else
          motor_stop();

  } //UART ready
}

}

    
pregunta mlam

2 respuestas

1

Cosas para verificar / probar:

  1. Asegúrese de tener la velocidad de transmisión correcta configurada para la velocidad de su reloj. El cálculo se hace un poco más complicado con la nueva opción del generador de velocidad en baudios de 16 bits.

  2. Asegúrate de que realmente estás corriendo a la velocidad de reloj en la que esperas estar corriendo.

  3. Verifique que haya ajustado correctamente la polaridad del reloj. Pruebe diferentes configuraciones:

  

bit 4 SCKP: bit de selección de polaridad de reloj síncrono

     
  • Modo asíncrono:
  •   
    • 1 = Transmitir datos invertidos al pin TX / CK
    •   
  •   
    • 0 = Transmitir datos no invertidos al pin TX / CK
    •   
  •   

Hay una configuración similar para el reloj de recepción en algún lugar, pero no puedo encontrarlo en este momento.

    
respondido por el Majenko
0

Gracias a @Leon Heller. El problema es con mi oscilador. Tengo que configurar OSCCON. Me las arreglé para obtener mi XTAL 4 Mhz funciona. yo añadí OSCCON = 1101; ¡Y mi USART funciona! Gracias chicos.

Pero no he encontrado una manera de usar el Oscilador interno.

    
respondido por el mlam

Lea otras preguntas en las etiquetas