TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: electroximo en 15 de Marzo de 2007, 07:41:04
-
Hola , no estoy muy puesto en esto de los foros , pero es que tengo un problemilla con la uart y no se que hacer , haber si podeis ayudarme.
El problema es que configuro la uart le pongo a transmitir y en el hiperterminal no aparece nada, pero he medido con el osciloscopio y en la patilla 14 del max232 (2 del conector) tengo señal y creo que el programa lo tengo bien ,lo adjunto por si alguien le puede dar un vistazo.
#include <p30f4013.h>
#include <uart.h>
//FUSES
_FOSC(CSW_FSCM_OFF & XT_PLL16);
_FGS(CODE_PROT_OFF);
_FWDT( WDT_OFF);
_FBORPOR(PBOR_OFF & MCLR_DIS & PWRT_OFF) ;
//funcion que inicializa los puertos
void Puertos(void)
{
TRISCbits.TRISC14=0;
LATCbits.LATC14=0;
PORTCbits.RC14=0;
}
//INCIALIZACION Y CONFIGURACION UART
void CONFI_uart (void)
{
unsigned int baudvalue;
unsigned int U1MODEvalue;
unsigned int U1STAvalue;
CloseUART1();
ConfigIntUART1(UART_RX_INT_DIS & UART_RX_INT_PR6 & UART_TX_INT_DIS & UART_TX_INT_PR2);
baudvalue = 191; //para tener 9600 baudios con un cristal de 7.378Mhz
U1MODEvalue = UART_EN & UART_IDLE_CON & UART_RX_TX &
UART_DIS_WAKE & UART_DIS_LOOPBACK &
UART_DIS_ABAUD & UART_NO_PAR_8BIT &
UART_1STOPBIT;
U1STAvalue = UART_INT_TX_BUF_EMPTY &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE &
UART_INT_RX_BUF_FUL &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;
OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);
}
int main (void)
{
Puertos();
CONFI_uart();
unsigned int i=0 ;
//activacion uart y envio de mensaje
while(1)
{
i=0;
PORTCbits.RC14=1; //ENCIENDO UN LED PARA VER EL ESTADO DEL PROGRAMA
char Txdata[]= {'X','i','m','o','\n'};
for(i=0;i<5;i++)
{
U1TXREG=(Txdata);
while(U1STAbits.TRMT==0);
}
}
}
-
Hola electroximo, bienvenido al foro :mrgreen:. ¿Estás seguro al 100x100 de que tu problema no es de hardware?. Es mejor si dejas también tu esquema para que la gente pueda echarle un vistazo.
Saludos y a ver cuando te pagas un café 8).
-
Al parecer es el mismo problema que tenia en un principio con mi UART, el asunto es que al programar lo siguente al dsPIC en U1MODEvalue
UART_RX_TX
estas transmitiendo por el mismo lugar por donde estas programando (PGC, PGD), debes cambiar esto por lo siguiente y se soluciona tu problema si es ese al transmitir por el canal alternativo UA1RX, UA1TX
UART_ALTRX_ALTTX
saludos
-
Hola , gracias por responder,lo he hecho como me has dicho y sigue sin funcionar , el problema no es del hardware por que la he provado con un pic 18 y funciona . Lo que he hecho ha sido ponerle un retraso y me llegan caracteres pero no los que son.No se por que puede ser.
-
Hola electroximo, puedes probar con esto;
putsUART1((unsigned int *)Txdata);
Aquí no es necesario que chequees cuando el buffer de transmisión está vacio, lo hace la misma función.
-
Gracias por echarle un vistazo al programa renatox_ ;he estado probando lo que me has comentado pero no funciona no me envia nada , de la manera que me envia algo es asi:
Pero lo que envia no es ximo ni mucho menos
unsigned int Txdata[]= {'X','i','m','o','\n'};
for(i=0;i<5;i++)
{
U1TXREG=(Txdata);
for(j=0;j<500;j++)
for(k=0;k<1000;k++)
Nop();
-
Hola he podido solucionar el problema que tenia , pongo las soluciones del problema , por si a alguien les sirviera :
1º la uart envia y no se escribe nada en el hyperterminal --> hay que poner un pequeño tiempo detras de cada envio para que el buffer no se sature .
2º Si la uart envia y en el hiperterminal no aparece lo que debe , lo mas posible sea un error del oscilador o de la tasa de baudios , en mi caso un error en la configuracion de la palabra de configuracion .
Saludos.