TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: skull7 en 22 de Diciembre de 2011, 15:58:09
-
Hoola buenas comunidad de todopic!!!
Nuevamente yo con nuevos problemas al trabajar con el dsPIC, he programado el dsPIC33FJ256GP para el envio del caracter 'a' cada 50 msec, lo estoy trabajando en MPlab y mientras hago la simulacion con el MPlab SIM, me muestra los datos correctamente, akii abajo muestro el codigo realizado en C:
/*se llaman las cabeceras necesarias para comenzar la configuracion del dsPIC*/
#include <p33fj256gp710.h>
/*se ajusta la configuracion de los bits del dsPIC a las caracteristicas requeridas para su funcionamiento con el UART*/
_FOSCSEL(FNOSC_PRIPLL);//la seleccion de origen del oscilador es: oscilador primario con PLL
_FOSC(FCKSM_CSDCMD & OSCIOFNC_ON & POSCMD_XT); //cambio de reloj y monitor del reloj: ambos deshabilitados
//funcion del pin OSC2: E/S digital
//seleccion del oscilador: oscilador XT (cristal o resonador ceramico de 3 MHz a 10 MHz)
_FWDT(FWDTEN_OFF);//Temporizador Watchdog deshabilitado
_FPOR(FPWRT_PWR128);//Valor de reinicio de la inicializacion 128 ms
void DelayNmSec(unsigned int N);
/*Configuracion de la velocidad de transmision de datos*/
#define BAUDRATE 9600
#define FCY 7327800
#define MILLISEC FCY/10000 // retraso 1 mSec constante
#define BRGVAL ((FCY/16)/BAUDRATE) - 1
unsigned int i;
unsigned char ab;
int main(void)
{
// Configure Oscillator to operate the device at 40 MHz
// Fosc = Fin * M/(N1 * N2), Fcy = Fosc/2
// Fosc = 8M * 40(2 * 2) = 80 MHz for 8M input clock
PLLFBD = 0x0002;// M = 40
CLKDIV = 0x0000; // division del reloj = 1
OSCTUN = 0; // Tune FRC oscillator, if FRC is used
RCONbits.SWDTEN = 0; // Disable Watch Dog Timer
while(OSCCONbits.LOCK!=1){};// Wait for PLL to lock
U1MODEbits.STSEL = 0; // 1 Stop bit
U1MODEbits.PDSEL = 0; // No Parity, 8 data bits
U1MODEbits.ABAUD = 0; // Auto-Baud Disabled
U1MODEbits.BRGH = 0; // Low Speed mode
U1BRG = BRGVAL; // BAUD Rate Setting for 9600
U1STAbits.UTXISEL0 = 0; // Interrupt after one TX Character is transmitted
U1STAbits.UTXISEL1 = 0;
IEC0bits.U1TXIE = 1; // Enable UART TX Interrupt
U1MODEbits.UARTEN = 1; // Enable UART
U1STAbits.UTXEN = 1; // Enable UART TX
/* wait at least 104 usec (1/9600) before sending first char */
//DelayNmSec(50);
ab='a';
U1TXREG = ab; // Transmit one character
while(1){}
}
void __attribute__((__interrupt__)) _U1TXInterrupt(void)
{
IFS0bits.U1TXIF = 0; // clear TX interrupt flag
DelayNmSec(50);
U1TXREG = ab; // Transmit one character
}
void DelayNmSec(unsigned int N)
{
unsigned int j;
while(N--)
for(j=0;j < MILLISEC;j++);
}
Sin embargo, cuando cargo el programa en el dsPIC y lo trabajo en labview por medio del puerto serial de mi portatil, me entrega lo siguiente:
(http://www.todopic.com.ar/foros/imgtiny/e9g8zl.jpg)
No entiendo a k se deba, ya k tanto en el codigo como en la aplicacion de labview el baud rate es a 9600, la velocidad del oscilador es a 7.33 MHz a 8 bits con 1 bit de parada, tal como he visto en muchos ejemplo y codigos, y sin embargo no me da en pantalla lo k rekiero, :? alguien sabe a k se debe???
Aprecio mucho sus respuestas