logger
Colapsar columna

Menu Usuario -

Hola, Visitante
avatar


Mas Activos -

nocturno
Mensajes: 1645
djfreeman
Mensajes: 269
Meta
Mensajes: 254
spiderman
Mensajes: 198
residente
Mensajes: 164

Autor Tema: problemas UART-dsPIC  (Leído 2822 veces)

Desconectado knightfelix12

  • Nuevo fichaje
  • *
  • Mensajes: 6
problemas UART-dsPIC
« en: Febrero 17, 2008, 02:29 »
Estimados amigos,
he iniciado un ckto con un dsPIC 30F4013.
pro no puedo iniciar la interrupcion RDA.
el codigo escrito es el sgte.

#include <30F4013.h>
#FUSES XT, NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C13,rcv=PIN_C14)

#INT_RDA
void RDA_isr()
{   
   printf("hi");   
}

void main()
{     
   enable_interrupts(INT_RDA);
   enable_interrupts(INTR_GLOBAL);
   while (true);
}

mientras q este codigo si m funcionaba en un PIC16F876,
no se si estoy obviando algo, pero he buscado en algunos
ejemplos del mismo CCS y asi se activa esta interrupcion.

lo malo es q si coloco este codigo en el main()
while (true)
{
   if (kbhit())
   {
     printf("hi5");
   }
}

recibo datos en la PC, ntonces descarte q estee mal
la conexion serial.

si alguno de uds ha pasado por esto les agradeceria la ayuda.

este programa esta escrito en CCS PCD
y programo el dspic via ICSP con un PICKIT2.

Desconectado nocturno

  • Administrator
  • MicroPIC Gurú
  • *****
  • Mensajes: 1645
    • MicroPIC
Re: problemas UART-dsPIC
« Respuesta #1 en: Febrero 17, 2008, 08:03 »
Yo también la utilizo en un programa en CCS para dsPIC y me funciona perfectamente.
Te pego algunas partes del programa por si te sirve:

Esto en la configuración del programa:
Código: [Seleccionar]
#use rs232(UART2,baud=57600,parity=N,bits=8)
Mi dsPIC tiene dos USART, y con esto le indico que voy a usar la segunda. Veo que tu sintaxis es la de los 16F, y quizás deberías cambiarlo y ponerlo como yo.

Esto en el main:
Código: [Seleccionar]
enable_interrupts(int_rda2);                   // Habilita Interrupción RDA
No hago enable_interrupts(INTR_GLOBAL); porque en dsPIC no es necesario.

Y esta es mi interrupción:
Código: [Seleccionar]
#int_rda2 level=5
void serial_isr() {                    // Interrupción recepción serie USART

   rcvchar=0x00;                       // Inicializo caracter recibido                   
   if(kbhit()){                        // Si hay algo pendiente de recibir ...
      rcvchar=getc();                  // lo descargo y ...
      addcbuff(rcvchar);               // lo añado al buffer y ...
      echos(rcvchar);                  // hago eco (si procede).
   }
}

Por cierto, veo que estás utilizando un clock de 4MHz. ¿Qué cristal tienes puesto?
Un saludo desde Sevilla, España

Desconectado knightfelix12

  • Nuevo fichaje
  • *
  • Mensajes: 6
Re: problemas UART-dsPIC
« Respuesta #2 en: Febrero 17, 2008, 19:02 »
hola nocturno
hice el cambio y funciona normal.
estoy usando un cristal de 4MHz pero
la linea #use rs232(UART1A, baud=9600, parity=N, bits=8)

no me funciona, he cambiado a un cristal de 20MHz y funciona.

ntonces cambie a 115200 bauds
y no funciona me sale en el compilador BAUD RATE OUT OF RANGE.

m podrias dar una ayuda con sto, por favor.
ademas de como podria utilizar el PLL?

muchas gracias

Desconectado nocturno

  • Administrator
  • MicroPIC Gurú
  • *****
  • Mensajes: 1645
    • MicroPIC
Re: problemas UART-dsPIC
« Respuesta #3 en: Febrero 18, 2008, 09:27 »
Si le pones un cristal de 20MHz, puedes hacer que tu dsPIC vuele a 32MIPS poniéndole este fuse:
#FUSES XT_PLL16                  //Cristal XT con PLL16

Y por supuesto, tendrás que ajustar el delay:
#use delay(clock=64000000) // 32MIPS

Un saludo desde Sevilla, España