TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: Ricardux en 16 de Agosto de 2013, 13:52:54
-
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.
-
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.
-
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,
-
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.
-
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