Autor Tema: problemas en la comunicacion UART con DSPIC30F4011  (Leído 3634 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado PIPE09

  • PIC10
  • *
  • Mensajes: 6
problemas en la comunicacion UART con DSPIC30F4011
« en: 10 de Marzo de 2009, 17:51:28 »
bueno pues leyendo el post anterior de comunicacion UART logramos despejar muchas dudas q teniamos, y sin embargo.. al probar el codigo casi tal cual como estaba en el post anterior, al compilar el programa, este presenta errores y parecen tener que ver con la libreria UART.H  asi que en el proyecto tambien agregamos los library files para este pic

El programa completo es el siguiente.. y la idea es simplemente hacer una prueba de comunicacion UART.





/* Archivos cabecera para las funciones y definiciones */

#include <p30f4011.h>
#include <uart.h>


#define FCY 30000000


/* Prototipos de funciones*/

void tiempo(void);

/************* START OF MAIN FUNCTION ***************/




int main ( void ){
         
   unsigned int baudvalue;
   unsigned int U1MODEvalue;
   unsigned int U1STAvalue;
   char    TEXTO[] = {'H','e','l','l','o',' ','U','A','R','T','\n','\r','\0'},
         
  CloseUART1();

   ConfigIntUART1(   UART_RX_INT_DIS &
                UART_RX_INT_PR6 &
               UART_TX_INT_DIS &
               UART_TX_INT_PR2);

   U1MODEvalue =    UART_EN &
               UART_IDLE_CON &
               UART_DIS_WAKE &
               UART_DIS_LOOPBACK &
               UART_DIS_ABAUD &
               UART_NO_PAR_8BIT &
               UART_1STOPBIT &
               UART_RX_TX;
   
   U1STAvalue =    UART_INT_TX_BUF_EMPTY &
               UART_TX_PIN_NORMAL &
               UART_TX_ENABLE &
               UART_INT_RX_CHAR &
               UART_ADR_DETECT_DIS &
               UART_RX_OVERRUN_CLEAR;

   
   baudvalue =390; //=30000000/(16*BaudRate)-1
   OpenUART1(U1MODEvalue, U1STAvalue, baudvalue);
   TRISDbits.TRISD0=0;

   while(1){
      LATDbits.LATD0=1;
      putsUART1 ((unsigned int *)TEXTO);
      while(BusyUART1());
      tiempo();
      LATDbits.LATD0=0;
      tiempo();
   }
}

/*Funcion delay paraq tiempo*/

void tiempo(void){
   int unsigned contador;
   int unsigned cont;
   for(cont=1;cont<20;cont++)
      for(contador=1;contador<0xFFFF;contador++);
   return;
}



y al compilar, presenta los siguientes errores.. todos de las funciones de UART.H


Clean: Deleting intermediary and output files.
Clean: Done.
Executing: "C:\Archivos de programa\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=30F4011 -c -x c "bla.c" -o"bla.o" -g
bla.c: In function 'main':
bla.c:26: error: conflicting types for 'CloseUART1'
c:/archivos de programa/microchip/mplab c30/bin/bin/../../support/peripheral_30F_24H_33F/uart.h:299: error: previous declaration of 'CloseUART1' was here
bla.c:40: error: 'UART_RX_TX' undeclared (first use in this function)
bla.c:40: error: (Each undeclared identifier is reported only once
bla.c:40: error: for each function it appears in.)
Halting build on first failure as requested.
BUILD FAILED: Tue Mar 10 14:49:38 2009


por favor cualquier ayuda serviria de MUCHOO!




Desconectado PIPE09

  • PIC10
  • *
  • Mensajes: 6
Re: problemas en la comunicacion UART con DSPIC30F4011
« Respuesta #1 en: 10 de Marzo de 2009, 19:21:56 »
ya logramos compilar el programa pero al conectar a la RS232 no sale nada el la hyperterminal... pensamos q el problema puede ser el baudrate q esta calculado con un FCY de 30M.. y entonces ahora la pregunta es: es necesario conectar un cristal de ese valor???? como me aseguro de que el oscilador interno del 30F4011 se encuentre en ese valor.. y q lo este usando???

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: problemas en la comunicacion UART con DSPIC30F4011
« Respuesta #2 en: 11 de Marzo de 2009, 01:05:31 »


   que tal PIPE09, pues por ahora lo que puedo hacer es ponerte un codigo para el mismo micro que estas utilizando, lo probe en su tiempo y funciona, prueba a compilarlo y ver lo que sucede, esta hecho para oscilador interno.

         
Código: [Seleccionar]
#define __dsPIC30F4011__
#include <p30f4011.h>
// _FOSC(CSW_FSCM_OFF & HS);
  _FOSC( CSW_FSCM_OFF  & FRC_PLL16);
  _FWDT(WDT_OFF);
  _FBORPOR(PBOR_ON  & PWRT_OFF & MCLR_DIS);

#include <uart.h>
#include <stdio.h>
 
//////////////////////////////////////////////////////////
  void DelayUs(unsigned int v)  {    //  pierde 8+2
   while(v != 0){
  asm("nop");asm("nop");
  asm("nop");asm("nop");
  asm("nop");asm("nop");
  asm("nop");asm("nop");
  asm("nop");asm("nop");
  asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
asm("nop");asm("nop");
  asm("nop");asm("nop");
    v--;
  }
 }
  //////////////////////////////////////////////////////////
   void DelayMs(unsigned int v) {
  //////////////////////////////////////////////////////////
   while (v != 0 ){ DelayUs(1000); v--;}
 }
 //////////////////////////////////////////////////////////
void __attribute__((__interrupt__)) _U1TXInterrupt(void)
{
IFS0bits.U1TXIF = 0;
}
 //////////////////////////////////////////////////////////
void InicializaUART1()
   {
unsigned int baud;
unsigned int U1MODEvalue;
unsigned int U1STAvalue;
CloseUART1();
ConfigIntUART1(UART_RX_INT_DIS & UART_RX_INT_PR0 & UART_TX_INT_DIS & UART_TX_INT_PR0);

U1MODEvalue = UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_LOOPBACK &
    UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT & UART_RX_TX;
U1STAvalue  = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE &
    UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
baud=194;//9600 194      38400  48

OpenUART1(U1MODEvalue, U1STAvalue, baud);
   }
 //////////////////////////////////////////////////////////
void InicializaUART2()
   {
unsigned int baud;
unsigned int U1MODEvalue;
unsigned int U1STAvalue;
CloseUART2();
ConfigIntUART2(UART_RX_INT_DIS & UART_RX_INT_PR0 & UART_TX_INT_DIS & UART_TX_INT_PR0);

U1MODEvalue = UART_EN & UART_IDLE_CON & UART_DIS_WAKE & UART_DIS_LOOPBACK &
    UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT & UART_RX_TX;
U1STAvalue  = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE &
    UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR;
baud=194;//9600

OpenUART2(U1MODEvalue, U1STAvalue, baud);
   }
 //////////////////////////////////////////////////////////

int main ()
{
TRISB=0xFFFF;
TRISBbits.TRISB1=0;
ADPCFG=0xFFFF;
InicializaUART2();
InicializaUART1();
while(1)
{
WriteUART2(0x42);
WriteUART1(0x42);
printf ("A Chinga \n\r");
LATBbits.LATB1 = 1;
DelayMs(100);
LATBbits.LATB1 = 0;
DelayMs(100);
WriteUART1(0x45);
WriteUART2(0x45);
}
}

              pues si no te funciona ya veremos paso a paso que es lo que sucede, un saludo.

Desconectado PIPE09

  • PIC10
  • *
  • Mensajes: 6
Re: problemas en la comunicacion UART con DSPIC30F4011
« Respuesta #3 en: 12 de Marzo de 2009, 16:36:29 »
Gracias por la respuesta.. ya logramos compilar el programa.. y agregamos la instruccion (U1STAbits.UTXEN=1) para habilitar el pin de transmision.. y con este codigo podemos hacer DEBUG desde el ICD2.. pero al probar el programa, no vemos cambios de voltaje en el pin al utilizar el osciloscopio.. y obviamente no aparece nada en la hyperterminal...

ALGUNA IDEA?


 

anything