FTD232RL muestra galimatías

1

Hola, estoy usando dsPIC30F4013 y he estado intentando interconectar uart con pic. Quiero enviar algunos datos a la PC a través de uart y mostrarlos en el terminal, pero lo que obtengo está lejos de lo que espero, para ser exacto, no tengo sentido. Uso el módulo convertidor serial USB FTD232RL para conectar el MCU con la PC. Al principio pensé que podría ser una diferencia de velocidad en baudios, pero hice una doble verificación e incluso probé diferentes velocidades en baudios, pero el resultado es el mismo. He publicado mi código a continuación. ¿Qué podría ser un problema y cómo solucionarlo? Gracias de antemano.

#include <xc.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <p30fxxxx.h>
#include "uart.h"

_FOSC(CSW_FSCM_OFF & XT_PLL4);
_FWDT(WDT_OFF);
_FBORPOR(MCLR_DIS);

#define period 7372

unsigned int counter;

void initTMR1(void)
{
 TMR1 = 0;
 PR1 = period;    
 IFS0bits.T1IF = 0;
 IEC0bits.T1IE = 1; 
 T1CONbits.TON = 1; 
}

void delay_ms(unsigned int time)
{
 counter = 0;
 while (counter < time);
}

void initUART()
{
 U1BRG = 0x0040; //baud rate 9600
 U1MODEbits.ALTIO = 1;
 IEC0bits.U1RXIE = 1;
 U1STA &= 0xfffc;
 U1MODEbits.UARTEN = 1;
 U1STAbits.UTXEN = 1;
}

void writeUART(unsigned int data)
{
 while(U1STAbits.TRMT == 0);
 if(U1MODEbits.PDSEL == 3)
     U1TXREG = data;
 else
     U1TXREG = data & 0xFF;
}

void RS232_putst(register const char *str)
{
  while((*str)!=0)
  {
    WriteUART(*str);
    str++;
  }
 }

void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void)
{
 TMR1 = 0;
 counter++;
 IFS0bits.T1IF = 0;
}


int main(void)
{
 ADPCFGbits.PCFG9 = 1;
 TRISBbits.TRISB9 = 0;
 LATBbits.LATB9 = 0;


 initUART();
 initTMR1();

 RS232_putst("START");
 delay_ms(2000);

 while(1)
 {
     RS232_putst(00000); 
     RS232_putst("This is test!!");
     LATBbits.LATB9 = ~LATBbits.LATB9;

     delay_ms(1000);
 }
 return 0;
}
    
pregunta A.F.

2 respuestas

1

Lo resuelvo, así que aquí hay una solución si alguien se encuentra con este problema. La razón por la que no tengo sentido en el terminal es debido a la fuente de alimentación, no a la velocidad en baudios. Todos esos módulos consumen cierta cantidad de energía, y no reciben suficiente energía para realizar su función y puede causar este tipo de problema. Por lo tanto, para solucionar este problema, tendrá que utilizar o hacerse una fuente de alimentación con regulador de voltaje para asegurar suficiente energía para su circuito.

    
respondido por el A.F.
0

¿Tienes un alcance? Hago esta configuración repetidamente con PIC y siempre sigo los mismos pasos:

  1. empieza en 9600
  2. configura el PIC para enviar 0x55 en un bucle
  3. use el alcance para verificar que el período de bit esté cerca de 104us
  4. obtenga la configuración correcta de la terminal y verifique que los caracteres lleguen sin problemas.

Si hay un problema, será que los bits se invierten, lo que se soluciona fácilmente en el software. Una vez que todo funciona, por lo general elevo la velocidad en baudios a 38400. Siempre me sale perfecto.

    
respondido por el dmb

Lea otras preguntas en las etiquetas