Problema de configuración oscilador DSPIC

gente les pido ayuda estoy muuuuuuuuuuuy complicado con el tema del oscilador para DSPIC30F4011, estoy intentando usar el oscilador interno. Cuando pruebo de levantar los datos en el hyperterminal o el hercules con un 232-usb comun, me da caulquier valores. estoy probando este código. Lo único que hace es programar la uart y escribe SEBASTIAN. Pero levanto cualquier cosa, solo con el pikyt2 levanto SEBASTIAN

supongo que el BRG está bien para 30 MIPS, pero no estoy seguro de estar en esta velocidad

Código:
#include <p30f4011.h>
  _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 ("SEBASTIAN \n\r");
    LATBbits.LATB1 = 1;
    DelayMs(100);
    LATBbits.LATB1 = 0;
    DelayMs(100);
    WriteUART1(0x45);
    WriteUART2(0x45);
    }
}
 
Última edición por un moderador:
Atrás
Arriba