Autor Tema: Leer datos puerto serie dspic30f4013 y mostrarlos en puerto B, cada 500ms  (Leído 5153 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Ricardux

  • PIC10
  • *
  • Mensajes: 19
Buenos dias, estoy intentando leer los datos del puerto serie de un ordenador y mostrarlos en el puerto B, x medio de 8 leds.
Uso un dspic30f4013 y CCS compliler.

He pensado leer los datos por medio de la UART  y usar una interrupcion interna x ejemplo el timer1 para que lea los datos del puerto serie del pc cada 500ms y los muestre en el puertoB del dspic.

Con la ayuda del wizard y algunos ejemplos que he encontrado el codigo me va quedando asi. Ya configuro la interrupcion interna a 500ms, y dentro de la interrupcion pongo que lea los datos, aqui comienzan mis dudas porque lo copie de un ejemplo

ch = get_c(); send_c(ch+1); send_byte(0x0D); send_byte(0x0A);
     PORTB++;
   
     Delay10KTCYx(5);
quiero que lea el puerto serial y envie ese dato al Puero B del micro, mi duda es como el puerto b tiene 12 pines, como muestro 8 bits en el puerto, ya que voy a conectar 8 leds al puerto para visualizar lo que reciba. deberia crear una variable que tenga 8 pines del puerto B o algo asi si es asi como deberia hacerlo?

#include <30F4013.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES CKSFSM                   //Clock Switching is enabled, fail Safe clock monitor is enabled
#FUSES NOBROWNOUT               //No brownout reset

#device ICSP=1
#use delay(clock=32MHz,crystal=8MHz)
#use rs232(UART1, baud=9600, RTS=PIN_A11, stream=UART_PORT1)

#INT_TIMER1

void  timer1_isr(void)
{


     ch = get_c(); send_c(ch+1); send_byte(0x0D); send_byte(0x0A);
     PORTB++;
   
     Delay10KTCYx(5);
   
}



void main()
{
   set_tris_b(0);
//!   set_port_b(0);
   setup_timer1(TMR_INTERNAL | TMR_DIV_BY_256, 15624);

   enable_interrupts(INT_TIMER1);
   enable_interrupts(INTR_GLOBAL);

   while(TRUE);

}

Estoy muy perdido soy muy novato en esto agradezco cualquier ayuda.

Desconectado Ricardux

  • PIC10
  • *
  • Mensajes: 19
Re: Leer datos puerto serie dspic30f4013 y mostrarlos en puerto B, cada 500ms
« Respuesta #1 en: 21 de Agosto de 2013, 13:45:27 »
Bueno en teoria he encontrado como lograrlo , pero a la hora de hacer las pruebas no me entra en la inetrrupcion del timer 1 y nose xke.

adjunto el codigo

#include <30F4013.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES CKSFSM                   //Clock Switching is enabled, fail Safe clock monitor is enabled
#FUSES NOBROWNOUT               //No brownout reset

#device ICSP=1
#use delay(clock=32MHz,crystal=8MHz)
#use rs232(UART1, baud=9600, stream=UART_PORT1)
#define LED PIN_D8

#INT_TIMER1
char dato_serial;
void  timer1_isr(void)
{
  output_b(dato_serial);
//!  putc(dato_serial);
 
     
}

#INT_RDA
void  rda_isr(void)
{
  if (kbhit())
      dato_serial = getc();
      putc(dato_serial);
      output_toggle(LED);
     
     
}



void main()
{
   set_tris_b(0); //configura puerto B como salida
   set_tris_d(0);
   setup_timer1(TMR_INTERNAL | TMR_DIV_BY_256, 15624);

   enable_interrupts(INT_TIMER1);
   enable_interrupts(INT_RDA);
   enable_interrupts(INTR_GLOBAL);

   while(TRUE);
 
}

Coloque un toggle en la interrupcion del uart1 para ver si estaba entrando en la interrupcion y si lo hace, probe poniendo otro en la interrucion del timer1 y no hace nada x lo cual concluyo que no esta entrando en la interrupcion del timer.

Alguna ayuda o coemntario gracias.

Desconectado gab163

  • PIC16
  • ***
  • Mensajes: 111
Re: Leer datos puerto serie dspic30f4013 y mostrarlos en puerto B, cada 500ms
« Respuesta #2 en: 22 de Agosto de 2013, 22:19:43 »
Hola Ricardux a que frecuencia es a la que corre el micro estas usando algún PLL si es as´te hace falta poner el fuse creo que es de configuración deberias primero prender y apagar un led y despues de eso seguir con algo mas , lo del puerto con 12 pines es porque lod DSPIC y PIC24 son de 16 bits osea que sus registros ya no son de 8 bits como en los 16f o 18f la verdad yo estuve trabajando con ccs y dspic pero tuve demasiados problemas así que me tuve que cambiar a xc16 va de maravilla pero no desanimes sigue intentando,

Desconectado Ricardux

  • PIC10
  • *
  • Mensajes: 19
Re: Leer datos puerto serie dspic30f4013 y mostrarlos en puerto B, cada 500ms
« Respuesta #3 en: 23 de Agosto de 2013, 12:49:48 »
grcaias gab163, ahora estoy simulando en proteus con el dspic33f16gp304, me canse de intentar la comunicacion serial, parece que el max232 no esta funcionado bien , recibe pero no envia a la placa entrenadora. en proteus tengo del pin RB0 al RB7 , unos leds, para que muestre lo que lee, y al simularlo prende uno que otro, aunque nose si los muestre bien.

Lo de prender y apagar un led ya lo probe para mirar si entra a las interrupciones y en la simulacion entra a las dos. Seguire puliendo el codigo xke no me muestra el dato que recibo en la terminall virtual, gracias.

Desconectado gab163

  • PIC16
  • ***
  • Mensajes: 111
Re: Leer datos puerto serie dspic30f4013 y mostrarlos en puerto B, cada 500ms
« Respuesta #4 en: 23 de Agosto de 2013, 13:30:08 »
Ok yo estoy utilizando el 30f4012 y usando la uart y va de maravilla con las interrupiones a un baud rate de 19200 deme chance y subo el codigo


 

anything